most of the 2.X->3.0 commit (up to rev 4299) except for gtk2_ardour/editor_canvas...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 12 Dec 2008 14:43:24 +0000 (14:43 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 12 Dec 2008 14:43:24 +0000 (14:43 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@4313 d708f5d6-7413-0410-9779-e7cbd77b26cf

280 files changed:
DOCUMENTATION/.cvsignore [deleted file]
DOCUMENTATION/AUTHORS [deleted file]
DOCUMENTATION/AUTHORS.es [deleted file]
DOCUMENTATION/BUILD [deleted file]
DOCUMENTATION/BUILD.ru [deleted file]
DOCUMENTATION/CONTRIBUTORS [deleted file]
DOCUMENTATION/CONTRIBUTORS.es [deleted file]
DOCUMENTATION/FAQ [deleted file]
DOCUMENTATION/README.es [deleted file]
DOCUMENTATION/README.fr [deleted file]
DOCUMENTATION/README.it [deleted file]
DOCUMENTATION/README.ru [deleted file]
DOCUMENTATION/TODO [deleted file]
DOCUMENTATION/TRANSLATORS [deleted file]
DOCUMENTATION/ardour.1 [deleted file]
DOCUMENTATION/ardour.1.es [deleted file]
DOCUMENTATION/ardour.1.fr [deleted file]
DOCUMENTATION/ardour.1.ru [deleted file]
README
SConstruct
ardour.1 [new file with mode: 0644]
ardour.1.es [new file with mode: 0644]
ardour.1.fr [new file with mode: 0644]
ardour.1.ru [new file with mode: 0644]
ardour_system_sae.rc
gtk2_ardour/SAE-de-keypad.bindings.in [new file with mode: 0644]
gtk2_ardour/SAE-de-nokeypad.bindings.in [new file with mode: 0644]
gtk2_ardour/SAE-de.bindings.in [deleted file]
gtk2_ardour/SAE-us-keypad.bindings.in [new file with mode: 0644]
gtk2_ardour/SAE-us-nokeypad.bindings.in [new file with mode: 0644]
gtk2_ardour/SAE-us.bindings.in [deleted file]
gtk2_ardour/SConscript
gtk2_ardour/about.cc
gtk2_ardour/ardev_common.sh.in
gtk2_ardour/ardour-sae.menus
gtk2_ardour/ardour.menus [deleted file]
gtk2_ardour/ardour.menus.in [new file with mode: 0644]
gtk2_ardour/ardour.sh.in
gtk2_ardour/ardour2_ui_dark_sae.rc.in [new file with mode: 0644]
gtk2_ardour/ardour2_ui_light_sae.rc.in [new file with mode: 0644]
gtk2_ardour/ardour2_ui_sae.conf
gtk2_ardour/ardour3_ui_dark_sae.rc.in [new file with mode: 0644]
gtk2_ardour/ardour3_ui_light_sae.rc.in [new file with mode: 0644]
gtk2_ardour/ardour_dialog.cc
gtk2_ardour/ardour_dialog.h
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui2.cc
gtk2_ardour/ardour_ui_dependents.cc
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/ardour_ui_options.cc
gtk2_ardour/au_pluginui.mm
gtk2_ardour/audio_clock.cc
gtk2_ardour/audio_region_editor.cc
gtk2_ardour/audio_region_editor.h
gtk2_ardour/audio_streamview.cc
gtk2_ardour/audio_time_axis.cc
gtk2_ardour/automation_time_axis.cc
gtk2_ardour/automation_time_axis.h
gtk2_ardour/canvas-waveview.c
gtk2_ardour/canvas_vars.h
gtk2_ardour/cocoacarbon.mm
gtk2_ardour/crossfade_edit.cc
gtk2_ardour/crossfade_edit.h
gtk2_ardour/crossfade_view.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_audio_import.cc
gtk2_ardour/editor_canvas.cc
gtk2_ardour/editor_cursors.cc
gtk2_ardour/editor_edit_groups.cc
gtk2_ardour/editor_mixer.cc
gtk2_ardour/editor_mouse.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_region_list.cc
gtk2_ardour/editor_route_list.cc
gtk2_ardour/editor_rulers.cc
gtk2_ardour/editor_tempodisplay.cc
gtk2_ardour/editor_timefx.cc
gtk2_ardour/export_range_markers_dialog.cc
gtk2_ardour/gain_meter.cc
gtk2_ardour/generic_pluginui.cc
gtk2_ardour/icons/computer_keyboard.png [new file with mode: 0644]
gtk2_ardour/icons/computer_keyboard_active.png [new file with mode: 0644]
gtk2_ardour/keyboard.cc
gtk2_ardour/keyboard.h
gtk2_ardour/main.cc
gtk2_ardour/matrix.cc
gtk2_ardour/mixer_strip.cc
gtk2_ardour/mixer_strip.h
gtk2_ardour/mixer_ui.cc
gtk2_ardour/mixer_ui.h
gtk2_ardour/mnemonic-us.bindings.in
gtk2_ardour/nag.cc [new file with mode: 0644]
gtk2_ardour/nag.h [new file with mode: 0644]
gtk2_ardour/new_session_dialog.cc
gtk2_ardour/new_session_dialog.h
gtk2_ardour/option_editor.cc
gtk2_ardour/panner_ui.cc
gtk2_ardour/plugin_eq_gui.cc
gtk2_ardour/plugin_selector.h
gtk2_ardour/plugin_ui.cc
gtk2_ardour/plugin_ui.h
gtk2_ardour/po/de_DE.po
gtk2_ardour/processor_box.cc
gtk2_ardour/processor_box.h
gtk2_ardour/public_editor.h
gtk2_ardour/route_time_axis.cc
gtk2_ardour/route_ui.cc
gtk2_ardour/route_ui.h
gtk2_ardour/send_ui.cc
gtk2_ardour/send_ui.h
gtk2_ardour/sfdb_ui.cc
gtk2_ardour/streamview.cc
gtk2_ardour/streamview.h
gtk2_ardour/theme_manager.cc
gtk2_ardour/time_axis_view.cc
gtk2_ardour/time_axis_view.h
gtk2_ardour/time_axis_view_item.cc
gtk2_ardour/ui_config.cc
gtk2_ardour/utils.cc
instant.xml [new file with mode: 0644]
instant.xml.sae [new file with mode: 0644]
libs/appleutility/CAAudioFile.h
libs/appleutility/SConscript
libs/ardour/analyser.cc
libs/ardour/ardour/audio_buffer.h
libs/ardour/ardour/audioregion.h
libs/ardour/ardour/automation_control.h
libs/ardour/ardour/automation_list.h
libs/ardour/ardour/configuration_vars.h
libs/ardour/ardour/osc.h
libs/ardour/ardour/region.h
libs/ardour/ardour/region_factory.h
libs/ardour/ardour/route.h
libs/ardour/ardour/session.h
libs/ardour/ardour/slave.h
libs/ardour/ardour/svn_revision.h
libs/ardour/ardour/track.h
libs/ardour/audio_track.cc
libs/ardour/audio_unit.cc
libs/ardour/audioengine.cc
libs/ardour/audioregion.cc
libs/ardour/coreaudiosource.cc
libs/ardour/crossfade.cc
libs/ardour/export_channel_configuration.cc
libs/ardour/globals.cc
libs/ardour/import.cc
libs/ardour/io.cc
libs/ardour/mtc_slave.cc
libs/ardour/osc.cc
libs/ardour/panner.cc
libs/ardour/plugin_manager.cc
libs/ardour/rb_effect.cc
libs/ardour/region.cc
libs/ardour/region_factory.cc
libs/ardour/reverse.cc
libs/ardour/route.cc
libs/ardour/send.cc
libs/ardour/session.cc
libs/ardour/session_butler.cc
libs/ardour/session_export.cc
libs/ardour/session_midi.cc
libs/ardour/session_process.cc
libs/ardour/session_state.cc
libs/ardour/session_transport.cc
libs/ardour/sndfileimportable.cc
libs/ardour/sndfilesource.cc
libs/ardour/source_factory.cc
libs/ardour/utils.cc
libs/clearlooks-newer/SConscript [new file with mode: 0644]
libs/clearlooks-newer/animation.c [new file with mode: 0644]
libs/clearlooks-newer/animation.h [new file with mode: 0644]
libs/clearlooks-newer/bits.c [new file with mode: 0644]
libs/clearlooks-newer/cairo-support.c [new file with mode: 0644]
libs/clearlooks-newer/cairo-support.h [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_draw.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_draw.h [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_draw_glossy.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_draw_gummy.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_draw_inverted.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_rc_style.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_rc_style.h [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_style.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_style.h [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_theme_main.c [new file with mode: 0644]
libs/clearlooks-newer/clearlooks_types.h [new file with mode: 0644]
libs/clearlooks-newer/config.h [new file with mode: 0644]
libs/clearlooks-newer/cpdll.sh [new file with mode: 0755]
libs/clearlooks-newer/ge-support.h [new file with mode: 0644]
libs/clearlooks-newer/general-support.h [new file with mode: 0644]
libs/clearlooks-newer/support.c [new file with mode: 0644]
libs/clearlooks-newer/support.h [new file with mode: 0644]
libs/clearlooks-newer/support.h.orig [new file with mode: 0644]
libs/clearlooks-newer/widget-information.c [new file with mode: 0644]
libs/clearlooks-newer/widget-information.h [new file with mode: 0644]
libs/clearlooks-older/SConscript [new file with mode: 0644]
libs/clearlooks-older/bits.c [new file with mode: 0644]
libs/clearlooks-older/clearlooks_draw.c [new file with mode: 0644]
libs/clearlooks-older/clearlooks_draw.h [new file with mode: 0644]
libs/clearlooks-older/clearlooks_rc_style.c [new file with mode: 0644]
libs/clearlooks-older/clearlooks_rc_style.h [new file with mode: 0644]
libs/clearlooks-older/clearlooks_style.c [new file with mode: 0644]
libs/clearlooks-older/clearlooks_style.h [new file with mode: 0644]
libs/clearlooks-older/clearlooks_theme_main.c [new file with mode: 0644]
libs/clearlooks-older/cpdll.sh [new file with mode: 0755]
libs/clearlooks-older/support.c [new file with mode: 0644]
libs/clearlooks-older/support.h [new file with mode: 0644]
libs/clearlooks/SConscript [deleted file]
libs/clearlooks/animation.c [deleted file]
libs/clearlooks/animation.h [deleted file]
libs/clearlooks/cairo-support.c [deleted file]
libs/clearlooks/cairo-support.h [deleted file]
libs/clearlooks/clearlooks_draw.c [deleted file]
libs/clearlooks/clearlooks_draw.h [deleted file]
libs/clearlooks/clearlooks_draw_glossy.c [deleted file]
libs/clearlooks/clearlooks_draw_gummy.c [deleted file]
libs/clearlooks/clearlooks_draw_inverted.c [deleted file]
libs/clearlooks/clearlooks_rc_style.c [deleted file]
libs/clearlooks/clearlooks_rc_style.h [deleted file]
libs/clearlooks/clearlooks_style.c [deleted file]
libs/clearlooks/clearlooks_style.h [deleted file]
libs/clearlooks/clearlooks_theme_main.c [deleted file]
libs/clearlooks/clearlooks_types.h [deleted file]
libs/clearlooks/config.h [deleted file]
libs/clearlooks/cpdll.sh [deleted file]
libs/clearlooks/ge-support.h [deleted file]
libs/clearlooks/general-support.h [deleted file]
libs/clearlooks/support.c [deleted file]
libs/clearlooks/support.h [deleted file]
libs/clearlooks/widget-information.c [deleted file]
libs/clearlooks/widget-information.h [deleted file]
libs/gtkmm2ext/dndtreeview.cc
libs/gtkmm2ext/gtk_ui.cc
libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
libs/gtkmm2ext/gtkmm2ext/tearoff.h
libs/gtkmm2ext/popup.cc
libs/gtkmm2ext/tearoff.cc
libs/midi++2/alsa_sequencer_midiport.cc
libs/midi++2/coremidi_midiport.cc
libs/midi++2/midi.cc
libs/midi++2/midimanager.cc
libs/midi++2/midiparser.cc
libs/midi++2/mtc.cc
libs/pbd/command.cc
libs/pbd/pbd/abstract_ui.cc
libs/pbd/pbd/command.h
libs/pbd/pbd/memento_command.h
libs/pbd/pbd/pthread_utils.h
libs/pbd/pbd/shiva.h
libs/pbd/pbd/undo.h
libs/pbd/pthread_utils.cc
libs/pbd/undo.cc
libs/surfaces/control_protocol/basic_ui.cc
libs/surfaces/control_protocol/control_protocol.cc
libs/surfaces/frontier/tranzport/tranzport_control_protocol.cc
libs/surfaces/mackie/mackie_control_protocol.cc
libs/surfaces/mackie/mackie_control_protocol.h
libs/surfaces/mackie/mackie_control_protocol_poll.cc
libs/surfaces/tranzport/init.cc
libs/surfaces/wiimote/SConscript [new file with mode: 0644]
libs/surfaces/wiimote/interface.cc [new file with mode: 0644]
libs/surfaces/wiimote/wiimote.cc [new file with mode: 0644]
libs/surfaces/wiimote/wiimote.h [new file with mode: 0644]
libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp
libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp
patches/gtk-osx.patch [new file with mode: 0644]
tools/osx_packaging/Ardour2-SAE.icns [new file with mode: 0644]
tools/osx_packaging/InfoPlist.strings.in [new file with mode: 0644]
tools/osx_packaging/sae_ladspa/caps.so [new file with mode: 0755]
tools/osx_packaging/sae_ladspa/cmt.so [new file with mode: 0755]
tools/osx_packaging/sae_ladspa/fast_lookahead_limiter_1913.so [new file with mode: 0755]
tools/osx_packaging/sae_ladspa/gverb_1216.so [new file with mode: 0755]
tools/osx_packaging/sae_ladspa/single_para_1203.so [new file with mode: 0755]
tools/osx_packaging/sae_ladspa/tap_pitch.so [new file with mode: 0755]
tools/osx_packaging/startup_script [new file with mode: 0644]
tools/resample_session.pl
tools/synthesize_sources.pl

diff --git a/DOCUMENTATION/.cvsignore b/DOCUMENTATION/.cvsignore
deleted file mode 100644 (file)
index 3dda729..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
diff --git a/DOCUMENTATION/AUTHORS b/DOCUMENTATION/AUTHORS
deleted file mode 100644 (file)
index 0275216..0000000
+++ /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 (file)
index 93f1677..0000000
+++ /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 (file)
index b47d3f6..0000000
+++ /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 (file)
index a620209..0000000
+++ /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 (file)
index d4b3f44..0000000
+++ /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 (file)
index 73c49c8..0000000
+++ /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 (file)
index 6ac38e8..0000000
+++ /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 (file)
index bc29f64..0000000
+++ /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 (file)
index eba5aaf..0000000
+++ /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 (file)
index 8a2111f..0000000
+++ /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 (file)
index fe56975..0000000
+++ /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 (file)
index 6fbbdb9..0000000
+++ /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 (file)
index 55b3723..0000000
+++ /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/DOCUMENTATION/ardour.1 b/DOCUMENTATION/ardour.1
deleted file mode 100644 (file)
index cca4078..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-.TH ARDOUR 1 2002-12-29
-.SH NAME
-ardour \- a digital audio workstation
-.SH SYNOPSIS
-ardour
-.B \-b
-.RB [ \-U
-.IR file ]
-.RI [ session ]
-.br
-ardour
-.B \-\-help
-.SH DESCRIPTION
-Ardour is a multichannel hard disk recorder (HDR) and digital audio 
-workstation (DAW).
-It is capable of simultaneous recording 24 or more channels of 32 bit audio at
-48kHz.
-Ardour is intended to function as a "professional" HDR system, replacing
-dedicated hardware solutions such as the Mackie HDR, the Tascam 2424 and more
-traditional tape systems like the Alesis ADAT series.
-It is also intended to provide the same or better functionality as software 
-systems such as ProTools, Samplitude, Logic Audio, Nuendo and Cubase VST (we 
-acknowledge these and all other names as trademarks of their respective 
-owners).
-It supports MIDI Machine Control, and so can be controlled from any MMC
-controller, such as the Mackie Digital 8 Bus mixer and many other modern
-digital mixers. 
-.SH OPTIONS
-.TP
-.B \-b
-Print all possible keyboard binding names.
-.TP
-.B \-U
-Specify the path to the GTK RC file to use.
-The provided one is called
-.B ardour_ui.rc
-and lives in the top level Ardour source directory.
-This file controls all color and font use within Ardour.
-Ardour will run without it, but its appearance is, uhm, ugly.
-.TP
-.B \-\-help
-Displays the help message.
-.SH FILES
-.TP
-.B ardour.rc
-Defaults and startup settings for Ardour.
-.TP
-.B ardour_ui.rc
-Definitions for the Ardour interface.
-.SH ENVIRONMENT
-.TP
-.B ARDOUR_RC
-Path to ardour.rc.
-.TP
-.B ARDOUR_SYSTEM_RC
-Path to the ardour_system.rc
-.TP
-.B LADSPA_PATH
-Path to LADSPA plugins.
-.SH BUGS
-Yes.
-http://ardour.org/mantis is the preferred bugtracker.
-.SH AUTHOR
-Paul Davis.
-Do
-.I not
-contact him directly.
-Instead,
-contact him at <ardour-dev@lists.ardour.org>.
-You can subscribe here:
-.br
-http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/DOCUMENTATION/ardour.1.es b/DOCUMENTATION/ardour.1.es
deleted file mode 100644 (file)
index d58a037..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-.TH ARDOUR 1 2002-12-29
-.SH NOMBRE
-ardour \- una estación de trabajo de audio digital
-.SH SINOPSIS
-ardour
-.B \-b
-.RB [ \-U
-.IR archivo ]
-.RI [ sesión ]
-.br
-ardour
-.B \-\-help
-.SH DESCRIPCIÓN
-Ardour graba multiples canales simultáneos a disco rigido (HDR) y es una
-estación de trabajo de audio digital (DAW).
-Es capaz de grabar 24 o mas canales simultáneamente con calidad de audio
-de 32 bit y a 48khz.
-La inteción de Ardour es funcionar como un sistema HDR "profesional",
-reemplazando soluciones de hardware dedicado como la Mackie HDR, el 
-Tascam 2424 y otros sistemas tradicionales que emplean cinta como la 
-linea de ADATs de Alesis.
-Tambien se busca igualar o mejorar la       funcionalidad de sistemas
-basados en software como ProTools,         Samplitude, Logic Audio, 
-Nuendo y Cubase VST (reconocemos a estos y a todos los nombres ya 
-mencionados, como marcas registradas de sus respectivos dueños). 
-Ardour soporta Control de Maquina MIDI, por lo que puede ser controlado
-desde cualquier controladora MMC, como la "Mackie Digital 8 Bus Mixer"
-y otros mixers digitales modernos.
-.SH OPCIONES
-.TP
-.B \-b
-Muestra todos los comandos asignables a teclas del teclado.
-.TP
-.B \-U
-Especifica el archivo de interface visual.
-El que viene provisto por Ardour se llama
-.B ardour_ui.rc
-y se lo puede encontrar en el primer nivel de la carpeta del código de Ardour.
-Este archivo controla todos los colores y fuentes usados por Ardour.
-Ardour funcionará sin este, pero se verá, uhm, feo.
-.TP
-.B \-\-help
-Muestra el mensaje de ayuda.
-.SH ARCHIVOS
-.TP
-.B ardour.rc
-Configuraciones preestablecidas y de inicio de Ardour.
-.TP
-.B ardour_ui.rc
-Configuraciones de la interface visual de Ardour.
-.SH VARIABLES
-.TP
-.B ARDOUR_RC
-Ubicación del archivo ardour.rc.
-.TP
-.B ARDOUR_SYSTEM_RC
-Ubicación del archivo ardour_system.rc.
-.TP
-.B LADSPA_PATH
-Ubicación de plugins LADSPA.
-.SH BUGS (Errores en el codigo)
-Si.
-.SH AUTOR
-Paul Davis.
-.I No
-intente
-contactarlo directamente.
-En cambio,
-mande un email a <ardour-dev@lists.ardour.org>.
-Usted puede suscribirse a:
-.br
-http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/DOCUMENTATION/ardour.1.fr b/DOCUMENTATION/ardour.1.fr
deleted file mode 100644 (file)
index 368cb81..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-.TH ARDOUR 1 2002-12-29
-.SH NOM
-ardour \- une station de travail audio-num�rique
-.SH SYNOPSIS
-ardour
-.B \-b
-.RB [ \-U
-.IR fichier ]
-.RI [ session ]
-.br
-ardour
-.B \-\-help
-.SH DESCRIPTION
-Ardour est un enregistreur sur disque dur multi-canaux (HDR) et une station de
-travail audio-num�rique (DAW).
-Il est capable d'enregistrer simultan�ment 24 ou plus canaux audio 32 bits ï¿½
-48 kHz.
-Ardour a pour vocation de fonctionner comme un enregistreur sur disque dur
-"professionnel", en remplacement de solutions mat�rielles d�di�es comme le
-Mackie HDR, le Tascam 2424 et les plus traditionnels syst�me ï¿½ bande tels que
-la s�rie Alesis ADAT.
-Il est aussi con�u pour procurer les m�mes ou de meilleures fonctionnalit�s
-que des syst�mes logiciels comme ProTools, Samplitude, Logic Audio, Nuendo et
-Cubase VST (nous reconnaissons ces marques comme marques d�pos�es appartenant
-� leurs propri�taires respectifs).
-Il supporte MIDI Machine Control, et peut ainsi ï¿½tre contr�l� depuis
-n'importe quel contr�leur MMC, comme le Mackie Digital 8 Bus mixer et de nombreux autres m�langeurs audio-num�riques modernes.
-.SH OPTIONS
-.TP
-.B \-b
-Affiche tous les noms des codes clavier possibles.
-.TP
-.B \-U
-Indiquer le chemin vers le fichier GTK RC ï¿½ utiliser.
-Le fichier fourni s'appelle
-.B ardour_ui.rc
-et se trouve dans la racine du r�pertoire du code source d'Ardour.
-Ce fichier g�re l'utilisation de toutes les couleurs et polices de caract�re
-dans Ardour.
-Ardour fonctionnera sans, mais son aspect sera, disons, affreux.
-.TP
-.B \-\-help
-Affiche le message d'aide.
-.SH FICHIERS
-.TP
-.B ardour.rc
-Param�tre par d�faut et de d�marrage d'Ardour.
-.TP
-.B ardour_ui.rc
-D�finitions pour l'interface d'Ardour.
-.SH ENVIRONNEMENT
-.TP
-.B ARDOUR_RC
-Chemin vers ardour.rc.
-.TP
-.B ARDOUR_SYSTEM_RC
-Chemin vers ardour_system.rc
-.TP
-.B LADSPA_PATH
-Chemin vers les greffons LADSPA.
-.SH BOGUES
-Oui.
-.SH AUTEUR
-Paul Davis.
-Ne
-.I pas
-le contacter directement.
-Contactez-le plut�t ï¿½ <ardour-dev@lists.ardour.org>.
-Vous pouvez vous inscrire ici :
-.br
-http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/DOCUMENTATION/ardour.1.ru b/DOCUMENTATION/ardour.1.ru
deleted file mode 100644 (file)
index 06ab114..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-.TH "ARDOUR" "1" "2004-05-10" "" ""
-.SH "���"
-ardour \- ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½
-.SH "�����"
-ardour
-.B \-b
-.RB [ \-U
-.I R ï¿½ï¿½ï¿½ï¿½ ]
-.RI [ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ]
-.br 
-ardour
-.B \-\-help
-.SH "��������"
-Ardour \- ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ Ö£ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
-(hard disk recorder \- HDR) ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½
-(digital audio workstation \- DAW).
-.br 
-�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ 24 ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 32\-������
-����������� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 48 ï¿½ï¿½ï¿½.
-Ardour ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ "����������������" HDR\-�������, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
-�������� ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Mackie HDR, Tascam 2424 ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
-������������ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ Alesis ADAT.
-����� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
-�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ProTools, Samplitude, Logic Audio,
-Nuendo and Cubase VST (�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
-��������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½).
-.br 
-������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ MIDI Machine Control (MMC), ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½
-���������� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ MMC\-�����������, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Mackie Digital
-8 Bus ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.SH "����� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½"
-.TP 
-.B \-b, \-\-bindings
-������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ "�������" ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.TP 
-.B \-n, \-\-no\-splash
-�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.TP 
-.B \-U, \-\-ui\-rcfile ï¿½ï¿½ï¿½ï¿½
-������� ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ (GTK RC).
-� Î£ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Ardour.
-���� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
-.B ardour_ui.rc
-, ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Ardour.
-Ardour ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.TP 
-.B \-c, \-\-jack\-client\-name ï¿½ï¿½ï¿½
-������������ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ jack\-�������, ardour ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.TP 
-.B \-v, \-\-version
-���������� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.TP 
-.B \-h, \-\-help
-�������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.SH "�����"
-.TP 
-.B ardour.rc
-��������� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ "�������" ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Ardour.
-.TP 
-.B ardour_ui.rc
-�������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Ardour.
-.SH "���������"
-.TP 
-.B ARDOUR_RC
-���� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ardour.rc.
-.TP 
-.B ARDOUR_SYSTEM_RC
-���� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ardour_system.rc
-.TP 
-.B LADSPA_PATH
-���� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ (��������) LADSPA.
-.SH "������ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½"
-��, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-.SH "�����"
-Paul Davis (��� ï¿½ï¿½ï¿½ï¿½ï¿½).
-����������,
-.I ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
-� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
-��������� ï¿½ ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½,
-<ardour-dev@lists.ardour.org>.
-.br 
-�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½:
-.br 
-http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/README b/README
index 62de1c1ae3597412676734b8ad69e80df133042e..caef8bda5a690799249799069bb4b1984682f7b9 100644 (file)
--- 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.
 
 
index a56c690fdeaf474244d13d5d7694ed11d2471221..7cdd1449e7a79929ebf42e0ab1d7aed4bd424f46 100644 (file)
@@ -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/ardour.1 b/ardour.1
new file mode 100644 (file)
index 0000000..cca4078
--- /dev/null
+++ b/ardour.1
@@ -0,0 +1,72 @@
+.TH ARDOUR 1 2002-12-29
+.SH NAME
+ardour \- a digital audio workstation
+.SH SYNOPSIS
+ardour
+.B \-b
+.RB [ \-U
+.IR file ]
+.RI [ session ]
+.br
+ardour
+.B \-\-help
+.SH DESCRIPTION
+Ardour is a multichannel hard disk recorder (HDR) and digital audio 
+workstation (DAW).
+It is capable of simultaneous recording 24 or more channels of 32 bit audio at
+48kHz.
+Ardour is intended to function as a "professional" HDR system, replacing
+dedicated hardware solutions such as the Mackie HDR, the Tascam 2424 and more
+traditional tape systems like the Alesis ADAT series.
+It is also intended to provide the same or better functionality as software 
+systems such as ProTools, Samplitude, Logic Audio, Nuendo and Cubase VST (we 
+acknowledge these and all other names as trademarks of their respective 
+owners).
+It supports MIDI Machine Control, and so can be controlled from any MMC
+controller, such as the Mackie Digital 8 Bus mixer and many other modern
+digital mixers. 
+.SH OPTIONS
+.TP
+.B \-b
+Print all possible keyboard binding names.
+.TP
+.B \-U
+Specify the path to the GTK RC file to use.
+The provided one is called
+.B ardour_ui.rc
+and lives in the top level Ardour source directory.
+This file controls all color and font use within Ardour.
+Ardour will run without it, but its appearance is, uhm, ugly.
+.TP
+.B \-\-help
+Displays the help message.
+.SH FILES
+.TP
+.B ardour.rc
+Defaults and startup settings for Ardour.
+.TP
+.B ardour_ui.rc
+Definitions for the Ardour interface.
+.SH ENVIRONMENT
+.TP
+.B ARDOUR_RC
+Path to ardour.rc.
+.TP
+.B ARDOUR_SYSTEM_RC
+Path to the ardour_system.rc
+.TP
+.B LADSPA_PATH
+Path to LADSPA plugins.
+.SH BUGS
+Yes.
+http://ardour.org/mantis is the preferred bugtracker.
+.SH AUTHOR
+Paul Davis.
+Do
+.I not
+contact him directly.
+Instead,
+contact him at <ardour-dev@lists.ardour.org>.
+You can subscribe here:
+.br
+http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/ardour.1.es b/ardour.1.es
new file mode 100644 (file)
index 0000000..d58a037
--- /dev/null
@@ -0,0 +1,72 @@
+.TH ARDOUR 1 2002-12-29
+.SH NOMBRE
+ardour \- una estación de trabajo de audio digital
+.SH SINOPSIS
+ardour
+.B \-b
+.RB [ \-U
+.IR archivo ]
+.RI [ sesión ]
+.br
+ardour
+.B \-\-help
+.SH DESCRIPCIÓN
+Ardour graba multiples canales simultáneos a disco rigido (HDR) y es una
+estación de trabajo de audio digital (DAW).
+Es capaz de grabar 24 o mas canales simultáneamente con calidad de audio
+de 32 bit y a 48khz.
+La inteción de Ardour es funcionar como un sistema HDR "profesional",
+reemplazando soluciones de hardware dedicado como la Mackie HDR, el 
+Tascam 2424 y otros sistemas tradicionales que emplean cinta como la 
+linea de ADATs de Alesis.
+Tambien se busca igualar o mejorar la       funcionalidad de sistemas
+basados en software como ProTools,         Samplitude, Logic Audio, 
+Nuendo y Cubase VST (reconocemos a estos y a todos los nombres ya 
+mencionados, como marcas registradas de sus respectivos dueños). 
+Ardour soporta Control de Maquina MIDI, por lo que puede ser controlado
+desde cualquier controladora MMC, como la "Mackie Digital 8 Bus Mixer"
+y otros mixers digitales modernos.
+.SH OPCIONES
+.TP
+.B \-b
+Muestra todos los comandos asignables a teclas del teclado.
+.TP
+.B \-U
+Especifica el archivo de interface visual.
+El que viene provisto por Ardour se llama
+.B ardour_ui.rc
+y se lo puede encontrar en el primer nivel de la carpeta del código de Ardour.
+Este archivo controla todos los colores y fuentes usados por Ardour.
+Ardour funcionará sin este, pero se verá, uhm, feo.
+.TP
+.B \-\-help
+Muestra el mensaje de ayuda.
+.SH ARCHIVOS
+.TP
+.B ardour.rc
+Configuraciones preestablecidas y de inicio de Ardour.
+.TP
+.B ardour_ui.rc
+Configuraciones de la interface visual de Ardour.
+.SH VARIABLES
+.TP
+.B ARDOUR_RC
+Ubicación del archivo ardour.rc.
+.TP
+.B ARDOUR_SYSTEM_RC
+Ubicación del archivo ardour_system.rc.
+.TP
+.B LADSPA_PATH
+Ubicación de plugins LADSPA.
+.SH BUGS (Errores en el codigo)
+Si.
+.SH AUTOR
+Paul Davis.
+.I No
+intente
+contactarlo directamente.
+En cambio,
+mande un email a <ardour-dev@lists.ardour.org>.
+Usted puede suscribirse a:
+.br
+http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/ardour.1.fr b/ardour.1.fr
new file mode 100644 (file)
index 0000000..368cb81
--- /dev/null
@@ -0,0 +1,71 @@
+.TH ARDOUR 1 2002-12-29
+.SH NOM
+ardour \- une station de travail audio-num�rique
+.SH SYNOPSIS
+ardour
+.B \-b
+.RB [ \-U
+.IR fichier ]
+.RI [ session ]
+.br
+ardour
+.B \-\-help
+.SH DESCRIPTION
+Ardour est un enregistreur sur disque dur multi-canaux (HDR) et une station de
+travail audio-num�rique (DAW).
+Il est capable d'enregistrer simultan�ment 24 ou plus canaux audio 32 bits ï¿½
+48 kHz.
+Ardour a pour vocation de fonctionner comme un enregistreur sur disque dur
+"professionnel", en remplacement de solutions mat�rielles d�di�es comme le
+Mackie HDR, le Tascam 2424 et les plus traditionnels syst�me ï¿½ bande tels que
+la s�rie Alesis ADAT.
+Il est aussi con�u pour procurer les m�mes ou de meilleures fonctionnalit�s
+que des syst�mes logiciels comme ProTools, Samplitude, Logic Audio, Nuendo et
+Cubase VST (nous reconnaissons ces marques comme marques d�pos�es appartenant
+� leurs propri�taires respectifs).
+Il supporte MIDI Machine Control, et peut ainsi ï¿½tre contr�l� depuis
+n'importe quel contr�leur MMC, comme le Mackie Digital 8 Bus mixer et de nombreux autres m�langeurs audio-num�riques modernes.
+.SH OPTIONS
+.TP
+.B \-b
+Affiche tous les noms des codes clavier possibles.
+.TP
+.B \-U
+Indiquer le chemin vers le fichier GTK RC ï¿½ utiliser.
+Le fichier fourni s'appelle
+.B ardour_ui.rc
+et se trouve dans la racine du r�pertoire du code source d'Ardour.
+Ce fichier g�re l'utilisation de toutes les couleurs et polices de caract�re
+dans Ardour.
+Ardour fonctionnera sans, mais son aspect sera, disons, affreux.
+.TP
+.B \-\-help
+Affiche le message d'aide.
+.SH FICHIERS
+.TP
+.B ardour.rc
+Param�tre par d�faut et de d�marrage d'Ardour.
+.TP
+.B ardour_ui.rc
+D�finitions pour l'interface d'Ardour.
+.SH ENVIRONNEMENT
+.TP
+.B ARDOUR_RC
+Chemin vers ardour.rc.
+.TP
+.B ARDOUR_SYSTEM_RC
+Chemin vers ardour_system.rc
+.TP
+.B LADSPA_PATH
+Chemin vers les greffons LADSPA.
+.SH BOGUES
+Oui.
+.SH AUTEUR
+Paul Davis.
+Ne
+.I pas
+le contacter directement.
+Contactez-le plut�t ï¿½ <ardour-dev@lists.ardour.org>.
+Vous pouvez vous inscrire ici :
+.br
+http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
diff --git a/ardour.1.ru b/ardour.1.ru
new file mode 100644 (file)
index 0000000..06ab114
--- /dev/null
@@ -0,0 +1,84 @@
+.TH "ARDOUR" "1" "2004-05-10" "" ""
+.SH "���"
+ardour \- ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½
+.SH "�����"
+ardour
+.B \-b
+.RB [ \-U
+.I R ï¿½ï¿½ï¿½ï¿½ ]
+.RI [ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ]
+.br 
+ardour
+.B \-\-help
+.SH "��������"
+Ardour \- ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ Ö£ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
+(hard disk recorder \- HDR) ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½
+(digital audio workstation \- DAW).
+.br 
+�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ 24 ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 32\-������
+����������� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 48 ï¿½ï¿½ï¿½.
+Ardour ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ "����������������" HDR\-�������, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
+�������� ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Mackie HDR, Tascam 2424 ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
+������������ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ Alesis ADAT.
+����� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
+�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ProTools, Samplitude, Logic Audio,
+Nuendo and Cubase VST (�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
+��������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½).
+.br 
+������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ MIDI Machine Control (MMC), ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½
+���������� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ MMC\-�����������, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Mackie Digital
+8 Bus ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.SH "����� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½"
+.TP 
+.B \-b, \-\-bindings
+������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ "�������" ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.TP 
+.B \-n, \-\-no\-splash
+�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.TP 
+.B \-U, \-\-ui\-rcfile ï¿½ï¿½ï¿½ï¿½
+������� ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ (GTK RC).
+� Î£ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Ardour.
+���� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
+.B ardour_ui.rc
+, ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Ardour.
+Ardour ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.TP 
+.B \-c, \-\-jack\-client\-name ï¿½ï¿½ï¿½
+������������ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ jack\-�������, ardour ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.TP 
+.B \-v, \-\-version
+���������� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.TP 
+.B \-h, \-\-help
+�������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.SH "�����"
+.TP 
+.B ardour.rc
+��������� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ "�������" ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Ardour.
+.TP 
+.B ardour_ui.rc
+�������� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Ardour.
+.SH "���������"
+.TP 
+.B ARDOUR_RC
+���� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ardour.rc.
+.TP 
+.B ARDOUR_SYSTEM_RC
+���� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ardour_system.rc
+.TP 
+.B LADSPA_PATH
+���� ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ (��������) LADSPA.
+.SH "������ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½"
+��, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+.SH "�����"
+Paul Davis (��� ï¿½ï¿½ï¿½ï¿½ï¿½).
+����������,
+.I ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
+� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
+��������� ï¿½ ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½,
+<ardour-dev@lists.ardour.org>.
+.br 
+�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½:
+.br 
+http://lists.ardour.org/listinfo.cgi/ardour-dev-ardour.org
index 551ee61fca5d3dae7bfac4d14950e53d73ecefa1..c11a01c9a3ebb6d07219924f56dc61d23f3058f5 100644 (file)
     <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 (file)
index 0000000..e8e3e1b
--- /dev/null
@@ -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 (file)
index 0000000..27c824e
--- /dev/null
@@ -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-de.bindings.in
deleted file mode 100644 (file)
index fa4f3bc..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-; 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>/Transport/ToggleRoll" "space")
-(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
-(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/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")
-
-;; 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")
-
-;; 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/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>/Editor/temporal-zoom-in" "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>/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/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>/Common/Save" "<%PRIMARY%>s")
-(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
-(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>/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/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>/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>/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>/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/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
-
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
-(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/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>/Transport/GotoStart" "Home")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%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/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/nudge-next-forward" "<%PRIMARY%>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")
-
-;; 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>/Editor/set-tempo-from-edit-range" "0")
-
-;;
-;; unbound actions
-;;
-
-
-
-
-; (gtk_accel_path "<Actions>/Common/About" "")
-; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
-; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
-; (gtk_accel_path "<Actions>/Editor/Edit" "")
-; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
-; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
-; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
-; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
-; (gtk_accel_path "<Actions>/Editor/Layering" "")
-; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
-; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
-; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Pullup" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
-; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
-; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
-; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
-; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
-; (gtk_accel_path "<Actions>/Editor/Solo" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
-; (gtk_accel_path "<Actions>/Editor/Timecode" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
-; (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" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
-; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
-; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
-; (gtk_accel_path "<Actions>/JACK/JACK" "")
-; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
-; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
-; (gtk_accel_path "<Actions>/JACK/Latency" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
-; (gtk_accel_path "<Actions>/Main/Cleanup" "")
-; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
-; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
-; (gtk_accel_path "<Actions>/Main/Export" "<%PRIMARY%>e")
-; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
-; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
-; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
-; (gtk_accel_path "<Actions>/Main/Help" "")
-; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
-; (gtk_accel_path "<Actions>/Main/Metering" "")
-; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
-; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
-; (gtk_accel_path "<Actions>/Main/Options" "")
-; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
-; (gtk_accel_path "<Actions>/Main/Session" "")
-; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
-; (gtk_accel_path "<Actions>/Main/Windows" "")
-; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
-; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
-; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
-; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
-; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
-; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
-; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
-; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
-; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
-; (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/ToggleAutoReturn" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
-; (gtk_accel_path "<Actions>/Transport/Transport" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
-; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
-; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
-; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
-; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
-; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
-; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
-; (gtk_accel_path "<Actions>/options/SendMMC" "")
-; (gtk_accel_path "<Actions>/options/SendMTC" "")
-; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
-; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
-; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
-; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
-; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
-; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
-; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
-; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
-; (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>/MouseMode/set-mouse-mode-object" "o")
diff --git a/gtk2_ardour/SAE-us-keypad.bindings.in b/gtk2_ardour/SAE-us-keypad.bindings.in
new file mode 100644 (file)
index 0000000..e4d9814
--- /dev/null
@@ -0,0 +1,428 @@
+; 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" "<%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")
+(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" "<%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" "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/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")
+
+;;
+;; unbound actions
+;;
+
+
+
+
+; (gtk_accel_path "<Actions>/Common/About" "")
+; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
+; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
+; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
+; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
+; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
+; (gtk_accel_path "<Actions>/Editor/Edit" "")
+; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
+; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
+; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
+; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
+; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
+; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
+; (gtk_accel_path "<Actions>/Editor/Layering" "")
+; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
+; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
+; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
+; (gtk_accel_path "<Actions>/Editor/Pullup" "")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
+; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
+; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
+; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
+; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
+; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
+; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
+; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
+; (gtk_accel_path "<Actions>/Editor/Solo" "")
+; (gtk_accel_path "<Actions>/Editor/Subframes" "")
+; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
+; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
+; (gtk_accel_path "<Actions>/Editor/Timecode" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
+; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
+; (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/playhead-to-next-region-sync" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
+; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
+; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
+; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
+; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
+; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
+; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
+; (gtk_accel_path "<Actions>/JACK/JACK" "")
+; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
+; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
+; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
+; (gtk_accel_path "<Actions>/JACK/Latency" "")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
+; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
+; (gtk_accel_path "<Actions>/Main/Cleanup" "")
+; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
+; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
+; (gtk_accel_path "<Actions>/Main/Export" "<%PRIMARY%>e")
+; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
+; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
+; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
+; (gtk_accel_path "<Actions>/Main/Help" "")
+; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
+; (gtk_accel_path "<Actions>/Main/Metering" "")
+; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
+; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
+; (gtk_accel_path "<Actions>/Main/Options" "")
+; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
+; (gtk_accel_path "<Actions>/Main/Session" "")
+; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
+; (gtk_accel_path "<Actions>/Main/Windows" "")
+; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
+; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
+; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
+; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
+; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
+; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
+; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
+; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
+; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
+; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
+; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
+; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
+; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
+; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
+; (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/Playwion" "")
+
+
+; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
+; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
+; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
+; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
+; (gtk_accel_path "<Actions>/Transport/Transport" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
+; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
+; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
+; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
+; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
+; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
+; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
+; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
+; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
+; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
+; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
+; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
+; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
+; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
+; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
+; (gtk_accel_path "<Actions>/options/SendMMC" "")
+; (gtk_accel_path "<Actions>/options/SendMTC" "")
+; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
+; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
+; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
+; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
+; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
+; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
+; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
+; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
+; (gtk_accel_path "<Actions>/options/UseMMC" "")
+; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
+; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
+; (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 (file)
index 0000000..a84ee2b
--- /dev/null
@@ -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 (file)
index a8c3f1f..0000000
+++ /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")
-
index f8089d099e138cd21b65c61196f9eba107517627..ea649dea6ae18df5cd1816e6b800ac4b7eb8b5b2 100644 (file)
@@ -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 +
index 7d41847e14d0ca96d7aecd9002c34a84ce2c1842..4f08036bd7f4284df3e1cfdf0bb594e05ada00a4 100644 (file)
@@ -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>\
index 3e223fe8cc7d16c29c47b55900a28d1d9f83c99f..28eaad39c7419be4f679ace66e67f45b17e2cf3a 100644 (file)
@@ -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%
index 021d8c3b0eebf4c62ab6de66cf117b5a07ace811..2a73c4c16a32f747519da71ff32570e3d947fc4a 100644 (file)
                   <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'/>
                   <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"/>
                      <menuitem action='logarithmic-waveforms'/>
                </menu>
                <menuitem action='toggle-track-active'/>        
-               <menuitem action='remove-track'/>       
        </menu>
 
        <menu action='RegionMenu'>
         </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'/>
                   <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'/>
 
      </menubar>
 
-<<<<<<< .working
      <popup action="RulerMenuPopup">
          <menuitem action="toggle-minsec-ruler"/>
          <menuitem action="toggle-samples-ruler"/>
      </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'/>
         <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
deleted file mode 100644 (file)
index e120929..0000000
+++ /dev/null
@@ -1,638 +0,0 @@
-<ui>
-
-    <menubar name='Main' action='MainMenu'>
-        <menu name='Session' action='Session'>
-           <menuitem action='New'/>
-           <menuitem action='Open'/>
-           <menuitem action='Recent'/>
-           <menuitem action='Close'/>
-           <separator/>
-           <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'/>
-           </menu>
-           <separator/>
-           <menu name='Cleanup' action='Cleanup'>
-               <menuitem action='CleanupUnused'/>
-               <menuitem action='FlushWastebasket'/>
-           </menu>
-           <separator/>
-           <menuitem action='Quit'/>
-        </menu>
-
-        <menu name='Transport' action='Transport'>
-               <menuitem action='ToggleRoll'/>
-              <menu action="PlayMenu">
-                    <menuitem action='play-selected-regions'/>
-                    <menuitem action='play-edit-range'/>
-                     <menuitem action='play-from-edit-point-and-return'/>
-                    <menuitem action='Loop'/>
-              </menu>
-               <menuitem action='record-roll'/>
-               <menuitem action='Record'/>
-               <menuitem action='ToggleRollForgetCapture'/>
-              <menu action="SetLoopMenu">
-                      <menuitem action='set-loop-from-edit-range'/>
-                      <menuitem action='set-loop-from-region'/>
-               </menu>
-              <menu action="SetPunchMenu">
-                       <menuitem action='set-punch-from-edit-range'/>
-                       <menuitem action='set-punch-from-region'/>
-               </menu>
-
-              <separator/>
-               <menuitem action='Forward'/>
-               <menuitem action='Rewind'/>
-               <menuitem action='TransitionToRoll'/>
-               <menuitem action='TransitionToReverse'/>
-              <separator/>
-
-              <menu action="MovePlayHeadMenu">
-                  <menuitem action='set-playhead'/>
-                   <menuitem action='playhead-to-edit'/>
-                  <menuitem action='center-playhead'/>
-                  <separator/>
-                  <menuitem action='nudge-playhead-forward'/>
-                   <menuitem action='nudge-playhead-backward'/>
-                  <separator/>
-                   <menuitem action='tab-to-transient-forwards'/>
-                   <menuitem action='tab-to-transient-backwards'/>
-                  <separator/>
-                  <menuitem action='playhead-forward-to-grid'/>
-                  <menuitem action='playhead-backward-to-grid'/>
-                  <separator/>
-                  <menuitem action='playhead-to-next-region-boundary'/>
-                  <menuitem action='playhead-to-previous-region-boundary'/>
-                  <menuitem action='playhead-to-next-region-sync'/>
-                  <menuitem action='playhead-to-previous-region-sync'/>
-                  <separator/>
-                  <menuitem action='jump-forward-to-mark'/>
-                  <menuitem action='jump-backward-to-mark'/>
-                  <separator/>
-                  <menuitem action='GotoZero'/>
-                  <menuitem action='GotoStart'/>
-                  <menuitem action='GotoEnd'/>
-                  <menuitem action='GotoWallClock'/>
-
-              </menu>
-
-              <menu action="MoveActiveMarkMenu">
-                   <menuitem action='selected-marker-to-next-region-boundary'/>
-                  <menuitem action='selected-marker-to-previous-region-boundary'/>
-                  <menuitem action='edit-cursor-to-next-region-sync'/>
-                  <menuitem action='edit-cursor-to-previous-region-sync'/>
-                  <separator/>
-                  <menuitem action='edit-to-playhead'/>
-                  <menuitem action='set-edit-point'/>
-              </menu>
-
-              <menu action="MarkerMenu">
-                  <menuitem action='add-location-from-playhead'/>
-                  <separator/>
-                  <menuitem action='goto-mark-1'/>
-                  <menuitem action='goto-mark-2'/>
-                  <menuitem action='goto-mark-3'/>
-                  <menuitem action='goto-mark-4'/>
-                  <menuitem action='goto-mark-5'/>
-                  <menuitem action='goto-mark-6'/>
-                  <menuitem action='goto-mark-7'/>
-                  <menuitem action='goto-mark-8'/>
-                  <menuitem action='goto-mark-9'/>
-              </menu>
-
-              <separator/>
-              <menuitem action='ToggleTimeMaster'/>
-               <menuitem action='TogglePunch'/>
-               <menuitem action='TogglePunchIn'/>
-               <menuitem action='TogglePunchOut'/>
-               <menuitem action='ToggleAutoInput'/>
-               <menuitem action='ToggleAutoPlay'/>
-               <menuitem action='ToggleAutoReturn'/>
-               <menuitem action='ToggleClick'/>
-               <menuitem action='toggle-follow-playhead'/>
-              <separator/>
-       </menu>
-
-       <menu name='Edit' action='Edit'>
-               <menuitem action='undo'/>
-               <menuitem action='redo'/>
-               <menuitem action='editor-cut'/>
-               <menuitem action='editor-copy'/>
-               <menuitem action='editor-paste'/>
-               <separator/>       
-              <menu action="SelectMenu">          
-                  <menuitem action='select-all'/>
-                  <menuitem action='deselect-all'/>
-                  <menuitem action='invert-selection'/>
-                  <menuitem action='select-all-after-edit-cursor'/>
-                  <menuitem action='select-all-before-edit-cursor'/>
-                  <menuitem action='select-all-between-cursors'/>
-                  <menuitem action='select-all-within-cursors'/>
-                  <menuitem action='select-all-in-punch-range'/>
-                  <menuitem action='select-all-in-loop-range'/>
-                  <separator/>
-                   <menuitem action='select-range-between-cursors'/>
-                   <menuitem action='extend-range-to-start-of-region'/>
-                   <menuitem action='extend-range-to-end-of-region'/>
-                   <menuitem action='start-range'/>
-                   <menuitem action='finish-range'/>
-                   <menuitem action='finish-add-range'/>
-              </menu>     
-              <separator/>
-               <menuitem action='editor-delete'/>
-               <menuitem action='editor-crop'/>
-               <menuitem action='split-region'/>
-              <menu action="SeparateMenu">
-                   <menuitem action='editor-separate'/>
-                   <menuitem action='separate-from-loop'/>
-                   <menuitem action='separate-from-punch'/>
-                   <separator/>
-                   <menuitem action='split-region-at-transients'/>
-               </menu>
-              <menu action="AlignMenu">
-                  <menuitem action='align-regions-start'/>
-                  <menuitem action='align-regions-start-relative'/>
-                  <menuitem action='align-regions-end'/>
-                  <menuitem action='align-regions-end-relative'/>
-                  <menuitem action='align-regions-sync'/>
-                  <menuitem action='align-regions-sync-relative'/>
-               </menu>
-              <menu action="NudgeRegionMenu">
-                  <menuitem action="nudge-forward"/>
-                  <menuitem action="nudge-backward"/>
-               </menu>
-              <menu action="TrimMenu">
-                  <menuitem action='trim-front'/>
-                  <menuitem action='trim-back'/>
-                  <menuitem action='crop'/>
-                  <menuitem action='trim-region-to-loop'/>
-                  <menuitem action='trim-region-to-punch'/>
-              </menu>
-              <menu action="FadeMenu">
-                  <menuitem action='set-fade-in-length'/>
-                  <menuitem action='toggle-fade-in-active'/>
-                  <menuitem action='set-fade-out-length'/>
-                  <menuitem action='toggle-fade-out-active'/>
-               </menu>
-               <separator/>       
-              <menuitem action='remove-last-capture'/>
-              <separator/>
-              <menu action='KeyMouseActions'>
-                   <menuitem action='select-next-route'/>
-                   <menuitem action='select-prev-route'/>
-                  <menuitem action='brush-at-mouse'/>
-                  <separator/>
-                  <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'/>
-                  <separator/>
-                  <menuitem action='boost-region-gain'/>
-                  <menuitem action='cut-region-gain'/>
-                  <separator/>
-                  <menuitem action='break-drag'/>
-             </menu>
-        </menu>         
-
-       <menu action='RegionMenu'>
-             <menuitem action='insert-region'/>
-             <menuitem action='rename-region'/>
-             <menuitem action='raise-region'/>
-             <menuitem action='lower-region'/>
-             <menuitem action='naturalize-region'/>
-             <menuitem action='lock-region'/>
-             <menuitem action='set-region-sync-position'/>
-             <menuitem action='remove-region-sync'/>
-              <menuitem action='mute-unmute-region'/>
-             <separator/>       
-              <menuitem action='reverse-region'/>    
-             <menuitem action='monoize-region'/>
-             <menuitem action='normalize-region'/>
-             <menuitem action='boost-region-gain'/>
-             <menuitem action='cut-region-gain'/>                         
-             <menuitem action='pitch-shift-region'/>
-             <menuitem action='toggle-opaque-region'/>
-             <menuitem action='toggle-selected-region-fade-in'/>
-             <menuitem action='toggle-selected-region-fade-out'/>
-             <menuitem action='toggle-selected-region-fades'/>
-             <separator/>
-             <menuitem action='duplicate-region'/>
-             <menuitem action='multi-duplicate-region'/>
-             <menuitem action='region-fill-track'/>
-       </menu>
-
-        <menu action='TrackMenu'>
-               <menuitem action='AddTrackBus'/>        
-               <menuitem action='insert-time'/>
-               <menuitem action="move-selected-tracks-up"/>
-               <menuitem action="move-selected-tracks-down"/>
-               <menu action='TrackHeightMenu'>
-                    <menuitem action='fit-tracks'/>
-                    <menuitem action='track-height-largest'/>
-                    <menuitem action='track-height-large'/>
-                    <menuitem action='track-height-larger'/>
-                    <menuitem action='track-height-normal'/>
-                    <menuitem action='track-height-smaller'/>
-                    <menuitem action='track-height-small'/>
-               </menu>
-               <menu action='WaveformMenu'>
-                     <menuitem action='toggle-waveform-visible'/>
-                     <menuitem action='linear-waveforms'/>
-                     <menuitem action='logarithmic-waveforms'/>
-               </menu>
-               <menuitem action='toggle-track-active'/>        
-               <menuitem action='remove-track'/>       
-       </menu>
-
-        <menu name='View' action = 'View'>
-              <menu action="ZoomMenu">
-                            <menuitem action='temporal-zoom-in'/>
-                            <menuitem action='temporal-zoom-out'/>
-                            <menuitem action='zoom-to-session'/>
-                            <menuitem action='zoom-to-region'/>
-                            <menuitem action='zoom-to-region-both-axes'/>
-                            <menuitem action='toggle-zoom'/>
-              </menu>
-               <menu name='ZoomFocus' action='ZoomFocus'>
-                   <menuitem action='zoom-focus-left'/>
-                   <menuitem action='zoom-focus-right'/>
-                   <menuitem action='zoom-focus-center'/>
-                   <menuitem action='zoom-focus-playhead'/>
-                   <menuitem action='zoom-focus-edit'/>
-                   <menuitem action='zoom-focus-mouse'/>
-               </menu>
-              <menu name='SnapMode' action='SnapMode'>
-                  <menuitem action='snap-off'/>
-                  <menuitem action='snap-normal'/>
-                  <menuitem action='snap-magnetic'/>
-                  <separator/>
-                  <menuitem action='cycle-snap-mode'/>
-                  <menuitem action='cycle-snap-choice'/>
-              </menu>
-               <menu name='SnapTo' action='SnapTo'>
-                  <menuitem action='snap-to-cd-frame'/>
-                  <menuitem action='snap-to-smpte-frame'/>
-                  <menuitem action='snap-to-smpte-seconds'/>
-                  <menuitem action='snap-to-smpte-minutes'/>
-                  <menuitem action='snap-to-seconds'/>
-                  <menuitem action='snap-to-minutes'/>
-                  <menuitem action='snap-to-thirtyseconds'/>
-                  <menuitem action='snap-to-asixteenthbeat'/>
-                  <menuitem action='snap-to-eighths'/>
-                  <menuitem action='snap-to-quarters'/>
-                  <menuitem action='snap-to-thirds'/>
-                  <menuitem action='snap-to-beat'/>
-                  <menuitem action='snap-to-bar'/>
-                  <menuitem action='snap-to-mark'/>
-                  <menuitem action='snap-to-region-start'/>
-                  <menuitem action='snap-to-region-end'/>
-                  <menuitem action='snap-to-region-sync'/>
-                  <menuitem action='snap-to-region-boundary'/>
-               </menu>
-               <menu name='MeterFalloff' action='MeterFalloff'>
-                    <menuitem action='MeterFalloffOff'/>
-                    <menuitem action='MeterFalloffSlowest'/>
-                    <menuitem action='MeterFalloffSlow'/>
-                    <menuitem action='MeterFalloffMedium'/>
-                    <menuitem action='MeterFalloffFast'/>
-                    <menuitem action='MeterFalloffFaster'/>
-                    <menuitem action='MeterFalloffFastest'/>
-               </menu>
-               <menu name='MeterHold' action='MeterHold'>
-                   <menuitem action='MeterHoldOff'/>
-                   <menuitem action='MeterHoldShort'/>
-                   <menuitem action='MeterHoldMedium'/>
-                   <menuitem action='MeterHoldLong'/>
-               </menu>
-              <menu action="PrimaryClockMenu">
-                    <menuitem action="primary-clock-bbt"/>
-                    <menuitem action="primary-clock-minsec"/>
-                    <menuitem action="primary-clock-samples"/>
-                    <menuitem action="primary-clock-off"/>
-              </menu>
-              <menu action="SecondaryClockMenu">
-                    <menuitem action="secondary-clock-bbt"/>
-                    <menuitem action="secondary-clock-minsec"/>
-                    <menuitem action="secondary-clock-samples"/>
-                    <menuitem action="secondary-clock-off"/>
-              </menu>
-              <menu action="RulerMenu">
-                    <menuitem action="toggle-minsec-ruler"/>
-                    <menuitem action="toggle-samples-ruler"/>
-                    <menuitem action="toggle-bbt-ruler"/>
-                    <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"/>
-              </menu>
-              <menu action="ScrollMenu">
-                            <menuitem action='scroll-tracks-down'/>
-                            <menuitem action='scroll-tracks-up'/>
-                            <menuitem action='scroll-forward'/>
-                            <menuitem action='scroll-backward'/>
-              </menu>
-              <menu action="SavedViewMenu">
-                            <menuitem action='save-visual-state-1'/>
-                            <menuitem action='goto-visual-state-1'/>
-                            <menuitem action='save-visual-state-2'/>
-                            <menuitem action='goto-visual-state-2'/>
-                            <menuitem action='save-visual-state-3'/>
-                            <menuitem action='goto-visual-state-3'/>
-                            <menuitem action='save-visual-state-4'/>
-                            <menuitem action='goto-visual-state-4'/>
-                            <menuitem action='save-visual-state-5'/>
-                            <menuitem action='goto-visual-state-5'/>
-                            <menuitem action='save-visual-state-6'/>
-                            <menuitem action='goto-visual-state-6'/>
-                            <menuitem action='save-visual-state-7'/>
-                            <menuitem action='goto-visual-state-7'/>
-                            <menuitem action='save-visual-state-8'/>
-                            <menuitem action='goto-visual-state-8'/>
-                            <menuitem action='save-visual-state-9'/>
-                            <menuitem action='goto-visual-state-9'/>
-                            <menuitem action='save-visual-state-10'/>
-                            <menuitem action='goto-visual-state-10'/>
-                            <menuitem action='save-visual-state-11'/>
-                            <menuitem action='goto-visual-state-11'/>
-                            <menuitem action='save-visual-state-12'/>
-                            <menuitem action='goto-visual-state-12'/>
-              </menu>
-
-              <menuitem action='ToggleMaximalEditor'/>
-              <menuitem action='show-editor-mixer'/>
-              <menuitem action='show-editor-list'/>
-               <menuitem action='ToggleMeasureVisibility'/>
-               <menuitem action='toggle-waveform-visible'/>
-               <menuitem action='ToggleWaveformsWhileRecording'/>
-              <menuitem action='SyncEditorAndMixerTrackOrder'/>
-              <menuitem action='toggle-region-fades-visible'/>
-        </menu>
-        <menu name='JACK' action='JACK'>
-               <menuitem action='JACKDisconnect'/>
-               <menuitem action='JACKReconnect'/>
-               <menu name='Latency' action='Latency'>
-                   <menuitem action='JACKLatency32'/>
-                   <menuitem action='JACKLatency64'/>
-                   <menuitem action='JACKLatency128'/>
-                   <menuitem action='JACKLatency256'/>
-                   <menuitem action='JACKLatency512'/>
-                   <menuitem action='JACKLatency1024'/>
-                   <menuitem action='JACKLatency2048'/>
-                   <menuitem action='JACKLatency4096'/>
-                   <menuitem action='JACKLatency8192'/>
-               </menu>
-        </menu>
-        <menu action = 'WindowMenu'>
-              <menuitem action='ToggleMaximalEditor'/>
-              <separator/>
-               <menuitem action='goto-editor'/>
-               <menuitem action='goto-mixer'/>
-               <menuitem action='ToggleOptionsEditor'/>
-               <menuitem action='ToggleInspector'/>
-               <menuitem action='ToggleLocations'/>
-               <menuitem action='ToggleKeyEditor'/>
-               <menuitem action='ToggleBundleManager'/>
-               <menuitem action='ToggleThemeManager'/>
-               <menuitem action='ToggleBigClock'/>
-               <menuitem action='toggle-rhythm-ferret'/>
-              <separator/>
-        </menu>
-        <menu name='Options' action='Options'>
-              <menu action='AudioFileFormat'>
-                   <menu action='AudioFileFormatData'>
-                       <menuitem action='FileDataFormatFloat'/>
-                       <menuitem action='FileDataFormat24bit'/>
-                       <menuitem action='FileDataFormat16bit'/>
-                  </menu>
-                   <menu action='AudioFileFormatHeader'>
-                       <menuitem action='FileHeaderFormatBWF'/>
-                       <menuitem action='FileHeaderFormatWAVE'/>
-                       <menuitem action='FileHeaderFormatWAVE64'/>
-                       <menuitem action='FileHeaderFormatCAF'/>
-                  </menu>
-               </menu>
-              <menu action='SyncMenu'>
-                            <menuitem action='SendMTC'/>
-                            <menuitem action='SendMidiClock'/>
-                            <menuitem action='SendMMC'/>
-                            <menuitem action='UseMMC'/>
-              </menu>
-              <menu action="TempoMenu">
-                     <menuitem action='set-tempo-from-region'/>
-                     <menuitem action='set-tempo-from-edit-range'/>
-              </menu>
-              <menu action='Timecode'>
-                  <menuitem action='Smpte23976'/>
-                  <menuitem action='Smpte24'/>
-                  <menuitem action='Smpte24976'/>
-                  <menuitem action='Smpte25'/>
-                  <menuitem action='Smpte2997'/>
-                  <menuitem action='Smpte2997drop'/>
-                  <menuitem action='Smpte30'/>
-                  <menuitem action='Smpte30drop'/>
-                  <menuitem action='Smpte5994'/>
-                  <menuitem action='Smpte60'/>
-               </menu>
-              <menu action='Pullup'>
-                  <menuitem action='PullupPlus4Plus1'/>
-                  <menuitem action='PullupPlus4'/>
-                  <menuitem action='PullupPlus4Minus1'/>
-                  <menuitem action='PullupPlus1'/>
-                  <menuitem action='PullupNone'/>
-                  <menuitem action='PullupMinus1'/>
-                  <menuitem action='PullupMinus4Plus1'/>
-                  <menuitem action='PullupMinus4'/>
-                  <menuitem action='PullupMinus4Minus1'/>
-               </menu>
-              <menu action='Subframes'>
-                  <menuitem action='Subframes80'/>
-                  <menuitem action='Subframes100'/>
-               </menu>
-               <separator/>
-               <menu action='Autoconnect'>
-                   <menuitem action='InputAutoConnectPhysical'/>
-                   <menuitem action='InputAutoConnectManual'/>
-                  <separator/>
-                   <menuitem action='OutputAutoConnectPhysical'/>
-                   <menuitem action='OutputAutoConnectMaster'/>
-                   <menuitem action='OutputAutoConnectManual'/>
-               </menu>
-              <menu action='ControlSurfaces'>
-                   <menuitem action='RemoteUserDefined'/>
-                   <menuitem action='RemoteMixerDefined'/>
-                   <menuitem action='RemoteEditorDefined'/>
-                  <separator/>
-                   <menuitem action='AutoRebinding'/>
-               </menu>
-               <menu action='Monitoring'>
-                   <menuitem action='UseExternalMonitoring'/>
-                   <menuitem action='UseSoftwareMonitoring'/>
-                   <menuitem action='UseHardwareMonitoring'/>
-                  <separator/>
-                          <menuitem action='ToggleTapeMachineMode'/>
-               </menu>
-              <menu action='Metering'>
-                       <menuitem action='ShowTrackMeters'/>
-                   <menu action='MeteringFallOffRate'>
-                       <menuitem action='MeterFalloffOff'/>
-                       <menuitem action='MeterFalloffSlowest'/>
-                       <menuitem action='MeterFalloffSlow'/>
-                       <menuitem action='MeterFalloffMedium'/>
-                       <menuitem action='MeterFalloffFast'/>
-                       <menuitem action='MeterFalloffFaster'/>
-                       <menuitem action='MeterFalloffFastest'/>
-                   </menu>
-                   <menu action='MeteringHoldTime'>
-                       <menuitem action='MeterHoldOff'/>
-                       <menuitem action='MeterHoldShort'/>
-                       <menuitem action='MeterHoldMedium'/>
-                       <menuitem action='MeterHoldLong'/>
-                   </menu>
-               </menu>
-               <menu action='Solo'>
-                   <menuitem action='LatchedSolo'/>
-                   <menuitem action='SoloInPlace'/>
-                   <menuitem action='SoloViaBus'/>
-                   <menuitem action='ShowSoloMutes'/>
-               </menu>
-              <menu action='Crossfades'>
-                  <menuitem action='toggle-xfades-active'/>
-                  <menuitem action='toggle-xfades-visible'/>
-                  <menuitem action='toggle-auto-xfades'/>
-                  <separator/>
-                  <menuitem action='CrossfadesFull'/>
-                  <menuitem action='CrossfadesShort'/>
-              </menu>
-              <menu action='Layering'>
-                    <menuitem action='LayerLaterHigher'/>
-                    <menuitem action='LayerMoveAddHigher'/>
-                    <menuitem action='LayerAddHigher'/>
-              </menu>
-              <menu name='Denormals' action='Denormals'>
-                      <menuitem action='DenormalProtection'/>
-                     <separator/>
-                      <menuitem action='DenormalNone'/>
-                      <menuitem action='DenormalFTZ'/>
-                      <menuitem action='DenormalDAZ'/>
-                     <menuitem action='DenormalFTZDAZ'/>
-               </menu>
-               <separator/>
-              <menu action='MiscOptions'>
-                            <menuitem action='UseOSC'/>
-                            <menuitem action='StopPluginsWithTransport'/>
-                            <menuitem action='DoNotRunPluginsWhileRecording'/>
-                            <menuitem action='LatchedRecordEnable'/>
-                            <menuitem action='RegionEquivalentsOverlap'/>
-                            <menuitem action='PeriodicSafetyBackups'/>
-                            <menuitem action='VerifyRemoveLastCapture'/>
-                            <menuitem action='StopRecordingOnXrun'/>
-                    <menuitem action='CreateXrunMarker'/>
-                    <menuitem action='StopTransportAtEndOfSession'/>
-                    <menuitem action='GainReduceFastTransport'/>
-                    <menuitem action='PrimaryClockDeltaEditCursor'/>
-                    <menuitem action='SecondaryClockDeltaEditCursor'/>
-                    <menuitem action='OnlyCopyImportedFiles'/>
-                    <menuitem action='ShowTrackMeters'/>
-                    <menuitem action='DefaultNarrowMS'/>
-                            <menuitem action='link-region-and-track-selection'/>
-                            <menuitem action='RubberbandingSnapsToGrid'/>
-                            <menuitem action='AutoAnalyseAudio'/>
-                            <menuitem action='toggle-region-fades'/>
-               </menu>
-         </menu>
-        <menu name='Help' action='Help'>
-            <menuitem action='About'/>
-       </menu>
-     </menubar>
-
-     <popup action="RulerMenuPopup">
-          <menuitem action="toggle-minsec-ruler"/>
-          <menuitem action="toggle-timecode-ruler"/>
-          <menuitem action="toggle-samples-ruler"/>
-          <menuitem action="toggle-bbt-ruler"/>
-          <separator/>
-          <menuitem action="toggle-meter-ruler"/>
-          <menuitem action="toggle-timecode-ruler"/>
-          <menuitem action="toggle-tempo-ruler"/>
-          <menuitem action="toggle-range-ruler"/>
-          <menuitem action="toggle-marker-ruler"/>
-          <menuitem action="toggle-cd-marker-ruler"/>
-          <menuitem action="toggle-loop-punch-ruler"/>
-     </popup>
-
-     <popup name='processormenu'>
-        <menuitem action='newplugin'/>
-        <menuitem action='newinsert'/>
-        <menuitem action='newsend'/>
-         <separator/>
-        <menuitem action='clear'/>
-         <separator/>
-        <menuitem action='cut'/>
-        <menuitem action='copy'/>
-        <menuitem action='paste'/>
-        <menuitem action='delete'/>
-         <separator/>
-        <menuitem action='rename'/>
-         <separator/>
-        <menuitem action='selectall'/>
-        <menuitem action='deselectall'/>
-         <separator/>
-        <menuitem action='activate'/>
-        <menuitem action='deactivate'/>
-         <separator/>
-        <menuitem action='activate_all'/>
-        <menuitem action='deactivate_all'/>
-         <separator/>
-        <menuitem action='edit'/>
-      </popup>
-
-     <popup name='ShuttleUnitPopup'>
-        <menuitem action='SetShuttleUnitsPercentage'/>
-        <menuitem action='SetShuttleUnitsSemitones'/>
-     </popup>
-
-     <popup name='RegionListMenu'>
-         <menuitem action='rlAudition'/>
-         <menuitem action='rlHide'/>
-         <menuitem action='rlRemove'/>
-         <separator/>
-         <menuitem action='rlShowAll'/>
-         <menuitem action='rlShowAuto'/>
-         <menu name='Sort' action='RegionListSort'>
-               <menuitem action='SortAscending'/>
-               <menuitem action='SortDescending'/>
-                      <separator/>
-               <menuitem action='SortByRegionName'/>
-               <menuitem action='SortByRegionLength'/>
-               <menuitem action='SortByRegionPosition'/>
-               <menuitem action='SortByRegionTimestamp'/>
-               <menuitem action='SortByRegionStartinFile'/>
-               <menuitem action='SortByRegionEndinFile'/>
-               <menuitem action='SortBySourceFileName'/>
-               <menuitem action='SortBySourceFileLength'/>
-               <menuitem action='SortBySourceFileCreationDate'/>
-               <menuitem action='SortBySourceFilesystem'/>
-         </menu>
-         <separator/>
-         <menuitem action='addExternalAudioToRegionList'/>            
-     </popup>
-</ui>
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
new file mode 100644 (file)
index 0000000..3f00dbc
--- /dev/null
@@ -0,0 +1,648 @@
+<ui>
+
+    <menubar name='Main' action='MainMenu'>
+        <menu name='Session' action='Session'>
+           <menuitem action='New'/>
+           <menuitem action='Open'/>
+           <menuitem action='Recent'/>
+           <menuitem action='Close'/>
+           <separator/>
+           <menuitem action='Save'/>
+           <menuitem action='Snapshot'/>
+           <menuitem action='SaveTemplate'/>
+           <separator/>
+           <menuitem action='AddTrackBus'/>    
+           <separator/>
+           <menuitem action='addExistingAudioFiles'/>
+           <separator/>
+           <menu name='Export' action='Export'>
+               <menuitem action='ExportSession'/>
+               <menuitem action='ExportSelection'/>
+               <menuitem action='ExportRangeMarkers'/>
+           </menu>
+           <separator/>
+           <menu name='Cleanup' action='Cleanup'>
+               <menuitem action='CleanupUnused'/>
+               <menuitem action='FlushWastebasket'/>
+           </menu>
+           <separator/>
+#ifdef GTKOSX
+           <menuitem action='ToggleOptionsEditor'/>
+           <menuitem action='About'/>
+#endif
+           <menuitem action='Quit'/>
+        </menu>
+
+        <menu name='Transport' action='Transport'>
+               <menuitem action='ToggleRoll'/>
+              <menu action="PlayMenu">
+                    <menuitem action='play-selected-regions'/>
+                    <menuitem action='play-edit-range'/>
+                     <menuitem action='play-from-edit-point-and-return'/>
+                    <menuitem action='Loop'/>
+              </menu>
+               <menuitem action='record-roll'/>
+               <menuitem action='Record'/>
+               <menuitem action='ToggleRollForgetCapture'/>
+              <menu action="SetLoopMenu">
+                      <menuitem action='set-loop-from-edit-range'/>
+                      <menuitem action='set-loop-from-region'/>
+               </menu>
+              <menu action="SetPunchMenu">
+                       <menuitem action='set-punch-from-edit-range'/>
+                       <menuitem action='set-punch-from-region'/>
+               </menu>
+
+              <separator/>
+               <menuitem action='Forward'/>
+               <menuitem action='Rewind'/>
+               <menuitem action='TransitionToRoll'/>
+               <menuitem action='TransitionToReverse'/>
+              <separator/>
+
+              
+              <menu action="MovePlayHeadMenu">
+                  <menuitem action='set-playhead'/>
+                   <menuitem action='playhead-to-edit'/>
+                  <menuitem action='center-playhead'/>
+                  <separator/>
+                  <menuitem action='nudge-playhead-forward'/>
+                   <menuitem action='nudge-playhead-backward'/>
+                  <separator/>
+                   <menuitem action='tab-to-transient-forwards'/>
+                   <menuitem action='tab-to-transient-backwards'/>
+                  <separator/>
+                  <menuitem action='playhead-forward-to-grid'/>
+                  <menuitem action='playhead-backward-to-grid'/>
+                  <separator/>
+                  <menuitem action='playhead-to-next-region-boundary'/>
+                  <menuitem action='playhead-to-previous-region-boundary'/>
+                  <menuitem action='playhead-to-next-region-sync'/>
+                  <menuitem action='playhead-to-previous-region-sync'/>
+                  <separator/>
+                  <menuitem action='jump-forward-to-mark'/>
+                  <menuitem action='jump-backward-to-mark'/>
+                  <separator/>
+                  <menuitem action='GotoZero'/>
+                  <menuitem action='GotoStart'/>
+                  <menuitem action='GotoEnd'/>
+                  <menuitem action='GotoWallClock'/>
+              </menu>
+
+              <menu action="MoveActiveMarkMenu">
+                   <menuitem action='selected-marker-to-next-region-boundary'/>
+                  <menuitem action='selected-marker-to-previous-region-boundary'/>
+                  <menuitem action='edit-cursor-to-next-region-sync'/>
+                  <menuitem action='edit-cursor-to-previous-region-sync'/>
+                  <separator/>
+                  <menuitem action='edit-to-playhead'/>
+                  <menuitem action='set-edit-point'/>
+              </menu>
+
+              <menu action="MarkerMenu">
+                  <menuitem action='add-location-from-playhead'/>
+                  <separator/>
+                  <menuitem action='goto-mark-1'/>
+                  <menuitem action='goto-mark-2'/>
+                  <menuitem action='goto-mark-3'/>
+                  <menuitem action='goto-mark-4'/>
+                  <menuitem action='goto-mark-5'/>
+                  <menuitem action='goto-mark-6'/>
+                  <menuitem action='goto-mark-7'/>
+                  <menuitem action='goto-mark-8'/>
+                  <menuitem action='goto-mark-9'/>
+              </menu>
+
+              <separator/>
+              <menuitem action='ToggleTimeMaster'/>
+               <menuitem action='TogglePunch'/>
+               <menuitem action='TogglePunchIn'/>
+               <menuitem action='TogglePunchOut'/>
+               <menuitem action='ToggleAutoInput'/>
+               <menuitem action='ToggleAutoPlay'/>
+               <menuitem action='ToggleAutoReturn'/>
+               <menuitem action='ToggleClick'/>
+               <menuitem action='toggle-follow-playhead'/>
+              <separator/>
+       </menu>
+
+       <menu name='Edit' action='Edit'>
+               <menuitem action='undo'/>
+               <menuitem action='redo'/>
+               <menuitem action='editor-cut'/>
+               <menuitem action='editor-copy'/>
+               <menuitem action='editor-paste'/>
+               <separator/>       
+              <menu action="SelectMenu">          
+                  <menuitem action='select-all'/>
+                  <menuitem action='deselect-all'/>
+                  <menuitem action='invert-selection'/>
+                  <menuitem action='select-all-after-edit-cursor'/>
+                  <menuitem action='select-all-before-edit-cursor'/>
+                  <menuitem action='select-all-between-cursors'/>
+                  <menuitem action='select-all-within-cursors'/>
+                  <menuitem action='select-all-in-punch-range'/>
+                  <menuitem action='select-all-in-loop-range'/>
+                  <separator/>
+                   <menuitem action='select-range-between-cursors'/>
+                   <menuitem action='extend-range-to-start-of-region'/>
+                   <menuitem action='extend-range-to-end-of-region'/>
+                   <menuitem action='start-range'/>
+                   <menuitem action='finish-range'/>
+                   <menuitem action='finish-add-range'/>
+              </menu>     
+              <separator/>
+               <menuitem action='editor-delete'/>
+               <menuitem action='editor-crop'/>
+               <menuitem action='split-region'/>
+              <menu action="SeparateMenu">
+                   <menuitem action='editor-separate'/>
+                   <menuitem action='separate-from-loop'/>
+                   <menuitem action='separate-from-punch'/>
+                   <separator/>
+                   <menuitem action='split-region-at-transients'/>
+               </menu>
+              <menu action="AlignMenu">
+                  <menuitem action='align-regions-start'/>
+                  <menuitem action='align-regions-start-relative'/>
+                  <menuitem action='align-regions-end'/>
+                  <menuitem action='align-regions-end-relative'/>
+                  <menuitem action='align-regions-sync'/>
+                  <menuitem action='align-regions-sync-relative'/>
+               </menu>
+              <menu action="NudgeRegionMenu">
+                  <menuitem action="nudge-forward"/>
+                  <menuitem action="nudge-backward"/>
+               </menu>
+              <menu action="TrimMenu">
+                  <menuitem action='trim-front'/>
+                  <menuitem action='trim-back'/>
+                  <menuitem action='crop'/>
+                  <menuitem action='trim-region-to-loop'/>
+                  <menuitem action='trim-region-to-punch'/>
+              </menu>
+              <menu action="FadeMenu">
+                  <menuitem action='set-fade-in-length'/>
+                  <menuitem action='toggle-fade-in-active'/>
+                  <menuitem action='set-fade-out-length'/>
+                  <menuitem action='toggle-fade-out-active'/>
+               </menu>
+               <separator/>       
+              <menuitem action='remove-last-capture'/>
+              <separator/>
+              <menu action='KeyMouseActions'>
+                   <menuitem action='select-next-route'/>
+                   <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'/>
+                  <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'/>
+                  <separator/>
+                  <menuitem action='boost-region-gain'/>
+                  <menuitem action='cut-region-gain'/>
+                  <separator/>
+                  <menuitem action='break-drag'/>
+             </menu>
+#ifndef GTKOSX
+            <separator/>
+             <menuitem action='ToggleOptionsEditor'/>
+#endif
+        </menu>         
+
+       <menu action='RegionMenu'>
+             <menuitem action='insert-region'/>
+             <menuitem action='rename-region'/>
+             <menuitem action='raise-region'/>
+             <menuitem action='lower-region'/>
+             <menuitem action='naturalize-region'/>
+             <menuitem action='lock-region'/>
+             <menuitem action='set-region-sync-position'/>
+             <menuitem action='remove-region-sync'/>
+              <menuitem action='mute-unmute-region'/>
+             <separator/>       
+              <menuitem action='reverse-region'/>    
+             <menuitem action='monoize-region'/>
+             <menuitem action='normalize-region'/>
+             <menuitem action='boost-region-gain'/>
+             <menuitem action='cut-region-gain'/>                         
+             <menuitem action='pitch-shift-region'/>
+             <menuitem action='toggle-opaque-region'/>
+             <menuitem action='toggle-selected-region-fade-in'/>
+             <menuitem action='toggle-selected-region-fade-out'/>
+             <menuitem action='toggle-selected-region-fades'/>
+             <separator/>
+             <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'>
+               <menuitem action='AddTrackBus'/>        
+               <menuitem action='insert-time'/>
+               <menuitem action="move-selected-tracks-up"/>
+               <menuitem action="move-selected-tracks-down"/>
+               <menu action='TrackHeightMenu'>
+                    <menuitem action='fit-tracks'/>
+                    <menuitem action='track-height-largest'/>
+                    <menuitem action='track-height-large'/>
+                    <menuitem action='track-height-larger'/>
+                    <menuitem action='track-height-normal'/>
+                    <menuitem action='track-height-smaller'/>
+                    <menuitem action='track-height-small'/>
+               </menu>
+               <menu action='WaveformMenu'>
+                     <menuitem action='toggle-waveform-visible'/>
+                     <menuitem action='linear-waveforms'/>
+                     <menuitem action='logarithmic-waveforms'/>
+               </menu>
+               <menuitem action='toggle-track-active'/>        
+               <menuitem action='remove-track'/>       
+       </menu>
+
+        <menu name='View' action = 'View'>
+              <menu action="ZoomMenu">
+                            <menuitem action='temporal-zoom-in'/>
+                            <menuitem action='temporal-zoom-out'/>
+                            <menuitem action='zoom-to-session'/>
+                            <menuitem action='zoom-to-region'/>
+                            <menuitem action='zoom-to-region-both-axes'/>
+                            <menuitem action='toggle-zoom'/>
+              </menu>
+               <menu name='ZoomFocus' action='ZoomFocus'>
+                   <menuitem action='zoom-focus-left'/>
+                   <menuitem action='zoom-focus-right'/>
+                   <menuitem action='zoom-focus-center'/>
+                   <menuitem action='zoom-focus-playhead'/>
+                   <menuitem action='zoom-focus-edit'/>
+                   <menuitem action='zoom-focus-mouse'/>
+               </menu>
+              <menu name='SnapMode' action='SnapMode'>
+                  <menuitem action='snap-off'/>
+                  <menuitem action='snap-normal'/>
+                  <menuitem action='snap-magnetic'/>
+                  <separator/>
+                  <menuitem action='cycle-snap-mode'/>
+                  <menuitem action='cycle-snap-choice'/>
+              </menu>
+               <menu name='SnapTo' action='SnapTo'>
+                  <menuitem action='snap-to-cd-frame'/>
+                  <menuitem action='snap-to-smpte-frame'/>
+                  <menuitem action='snap-to-smpte-seconds'/>
+                  <menuitem action='snap-to-smpte-minutes'/>
+                  <menuitem action='snap-to-seconds'/>
+                  <menuitem action='snap-to-minutes'/>
+                  <menuitem action='snap-to-thirtyseconds'/>
+                  <menuitem action='snap-to-asixteenthbeat'/>
+                  <menuitem action='snap-to-eighths'/>
+                  <menuitem action='snap-to-quarters'/>
+                  <menuitem action='snap-to-thirds'/>
+                  <menuitem action='snap-to-beat'/>
+                  <menuitem action='snap-to-bar'/>
+                  <menuitem action='snap-to-mark'/>
+                  <menuitem action='snap-to-region-start'/>
+                  <menuitem action='snap-to-region-end'/>
+                  <menuitem action='snap-to-region-sync'/>
+                  <menuitem action='snap-to-region-boundary'/>
+               </menu>
+               <menu name='MeterFalloff' action='MeterFalloff'>
+                    <menuitem action='MeterFalloffOff'/>
+                    <menuitem action='MeterFalloffSlowest'/>
+                    <menuitem action='MeterFalloffSlow'/>
+                    <menuitem action='MeterFalloffMedium'/>
+                    <menuitem action='MeterFalloffFast'/>
+                    <menuitem action='MeterFalloffFaster'/>
+                    <menuitem action='MeterFalloffFastest'/>
+               </menu>
+               <menu name='MeterHold' action='MeterHold'>
+                   <menuitem action='MeterHoldOff'/>
+                   <menuitem action='MeterHoldShort'/>
+                   <menuitem action='MeterHoldMedium'/>
+                   <menuitem action='MeterHoldLong'/>
+               </menu>
+              <menu action="PrimaryClockMenu">
+                    <menuitem action="primary-clock-bbt"/>
+                    <menuitem action="primary-clock-minsec"/>
+                    <menuitem action="primary-clock-samples"/>
+                    <menuitem action="primary-clock-off"/>
+              </menu>
+              <menu action="SecondaryClockMenu">
+                    <menuitem action="secondary-clock-bbt"/>
+                    <menuitem action="secondary-clock-minsec"/>
+                    <menuitem action="secondary-clock-samples"/>
+                    <menuitem action="secondary-clock-off"/>
+              </menu>
+              <menu action="RulerMenu">
+                    <menuitem action="toggle-minsec-ruler"/>
+                    <menuitem action="toggle-samples-ruler"/>
+                    <menuitem action="toggle-bbt-ruler"/>
+                    <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"/>
+              </menu>
+              <menu action="ScrollMenu">
+                            <menuitem action='scroll-tracks-down'/>
+                            <menuitem action='scroll-tracks-up'/>
+                            <menuitem action='scroll-forward'/>
+                            <menuitem action='scroll-backward'/>
+              </menu>
+              <menu action="SavedViewMenu">
+                            <menuitem action='save-visual-state-1'/>
+                            <menuitem action='goto-visual-state-1'/>
+                            <menuitem action='save-visual-state-2'/>
+                            <menuitem action='goto-visual-state-2'/>
+                            <menuitem action='save-visual-state-3'/>
+                            <menuitem action='goto-visual-state-3'/>
+                            <menuitem action='save-visual-state-4'/>
+                            <menuitem action='goto-visual-state-4'/>
+                            <menuitem action='save-visual-state-5'/>
+                            <menuitem action='goto-visual-state-5'/>
+                            <menuitem action='save-visual-state-6'/>
+                            <menuitem action='goto-visual-state-6'/>
+                            <menuitem action='save-visual-state-7'/>
+                            <menuitem action='goto-visual-state-7'/>
+                            <menuitem action='save-visual-state-8'/>
+                            <menuitem action='goto-visual-state-8'/>
+                            <menuitem action='save-visual-state-9'/>
+                            <menuitem action='goto-visual-state-9'/>
+                            <menuitem action='save-visual-state-10'/>
+                            <menuitem action='goto-visual-state-10'/>
+                            <menuitem action='save-visual-state-11'/>
+                            <menuitem action='goto-visual-state-11'/>
+                            <menuitem action='save-visual-state-12'/>
+                            <menuitem action='goto-visual-state-12'/>
+              </menu>
+
+              <menuitem action='ToggleMaximalEditor'/>
+              <menuitem action='show-editor-mixer'/>
+               <menuitem action='ToggleMeasureVisibility'/>
+               <menuitem action='toggle-waveform-visible'/>
+               <menuitem action='ToggleWaveformsWhileRecording'/>
+              <menuitem action='SyncEditorAndMixerTrackOrder'/>
+              <menuitem action='toggle-region-fades-visible'/>
+        </menu>
+        <menu name='JACK' action='JACK'>
+               <menuitem action='JACKDisconnect'/>
+               <menuitem action='JACKReconnect'/>
+               <menu name='Latency' action='Latency'>
+                   <menuitem action='JACKLatency32'/>
+                   <menuitem action='JACKLatency64'/>
+                   <menuitem action='JACKLatency128'/>
+                   <menuitem action='JACKLatency256'/>
+                   <menuitem action='JACKLatency512'/>
+                   <menuitem action='JACKLatency1024'/>
+                   <menuitem action='JACKLatency2048'/>
+                   <menuitem action='JACKLatency4096'/>
+                   <menuitem action='JACKLatency8192'/>
+               </menu>
+        </menu>
+        <menu action = 'WindowMenu'>
+              <menuitem action='ToggleMaximalEditor'/>
+              <separator/>
+               <menuitem action='goto-editor'/>
+               <menuitem action='goto-mixer'/>
+               <menuitem action='toggle-editor-mixer-on-top'/>
+               <menuitem action='ToggleInspector'/>
+               <menuitem action='ToggleLocations'/>
+               <menuitem action='ToggleKeyEditor'/>
+               <menuitem action='ToggleThemeManager'/>
+               <menuitem action='ToggleBigClock'/>
+               <menuitem action='toggle-rhythm-ferret'/>
+              <separator/>
+        </menu>
+        <menu name='Options' action='Options'>
+              <menu action='AudioFileFormat'>
+                   <menu action='AudioFileFormatData'>
+                       <menuitem action='FileDataFormatFloat'/>
+                       <menuitem action='FileDataFormat24bit'/>
+                       <menuitem action='FileDataFormat16bit'/>
+                  </menu>
+                   <menu action='AudioFileFormatHeader'>
+                       <menuitem action='FileHeaderFormatBWF'/>
+                       <menuitem action='FileHeaderFormatWAVE'/>
+                       <menuitem action='FileHeaderFormatWAVE64'/>
+                       <menuitem action='FileHeaderFormatCAF'/>
+                  </menu>
+               </menu>
+              <menu action='SyncMenu'>
+                            <menuitem action='SendMTC'/>
+                            <menuitem action='SendMMC'/>
+                            <menuitem action='UseMMC'/>
+              </menu>
+              <menu action="TempoMenu">
+                     <menuitem action='set-tempo-from-region'/>
+                     <menuitem action='set-tempo-from-edit-range'/>
+              </menu>
+              <menu action='Timecode'>
+                  <menuitem action='Smpte23976'/>
+                  <menuitem action='Smpte24'/>
+                  <menuitem action='Smpte24976'/>
+                  <menuitem action='Smpte25'/>
+                  <menuitem action='Smpte2997'/>
+                  <menuitem action='Smpte2997drop'/>
+                  <menuitem action='Smpte30'/>
+                  <menuitem action='Smpte30drop'/>
+                  <menuitem action='Smpte5994'/>
+                  <menuitem action='Smpte60'/>
+               </menu>
+              <menu action='Pullup'>
+                  <menuitem action='PullupPlus4Plus1'/>
+                  <menuitem action='PullupPlus4'/>
+                  <menuitem action='PullupPlus4Minus1'/>
+                  <menuitem action='PullupPlus1'/>
+                  <menuitem action='PullupNone'/>
+                  <menuitem action='PullupMinus1'/>
+                  <menuitem action='PullupMinus4Plus1'/>
+                  <menuitem action='PullupMinus4'/>
+                  <menuitem action='PullupMinus4Minus1'/>
+               </menu>
+              <menu action='Subframes'>
+                  <menuitem action='Subframes80'/>
+                  <menuitem action='Subframes100'/>
+               </menu>
+               <separator/>
+               <menu action='Autoconnect'>
+                   <menuitem action='InputAutoConnectPhysical'/>
+                   <menuitem action='InputAutoConnectManual'/>
+                  <separator/>
+                   <menuitem action='OutputAutoConnectPhysical'/>
+                   <menuitem action='OutputAutoConnectMaster'/>
+                   <menuitem action='OutputAutoConnectManual'/>
+               </menu>
+              <menu action='ControlSurfaces'>
+                   <menuitem action='RemoteUserDefined'/>
+                   <menuitem action='RemoteMixerDefined'/>
+                   <menuitem action='RemoteEditorDefined'/>
+                  <separator/>
+                   <menuitem action='AutoRebinding'/>
+               </menu>
+               <menu action='Monitoring'>
+                   <menuitem action='UseExternalMonitoring'/>
+                   <menuitem action='UseSoftwareMonitoring'/>
+                   <menuitem action='UseHardwareMonitoring'/>
+                  <separator/>
+                          <menuitem action='ToggleTapeMachineMode'/>
+               </menu>
+              <menu action='Metering'>
+                       <menuitem action='ShowTrackMeters'/>
+                   <menu action='MeteringFallOffRate'>
+                       <menuitem action='MeterFalloffOff'/>
+                       <menuitem action='MeterFalloffSlowest'/>
+                       <menuitem action='MeterFalloffSlow'/>
+                       <menuitem action='MeterFalloffMedium'/>
+                       <menuitem action='MeterFalloffFast'/>
+                       <menuitem action='MeterFalloffFaster'/>
+                       <menuitem action='MeterFalloffFastest'/>
+                   </menu>
+                   <menu action='MeteringHoldTime'>
+                       <menuitem action='MeterHoldOff'/>
+                       <menuitem action='MeterHoldShort'/>
+                       <menuitem action='MeterHoldMedium'/>
+                       <menuitem action='MeterHoldLong'/>
+                   </menu>
+               </menu>
+               <menu action='Solo'>
+                   <menuitem action='LatchedSolo'/>
+                   <menuitem action='SoloInPlace'/>
+                   <menuitem action='SoloViaBus'/>
+                   <menuitem action='ShowSoloMutes'/>
+                   <menuitem action='SoloMuteOverride'/>
+               </menu>
+              <menu action='Crossfades'>
+                  <menuitem action='toggle-xfades-active'/>
+                  <menuitem action='toggle-xfades-visible'/>
+                  <menuitem action='toggle-auto-xfades'/>
+                  <separator/>
+                  <menuitem action='CrossfadesFull'/>
+                  <menuitem action='CrossfadesShort'/>
+              </menu>
+              <menu action='Layering'>
+                    <menuitem action='LayerLaterHigher'/>
+                    <menuitem action='LayerMoveAddHigher'/>
+                    <menuitem action='LayerAddHigher'/>
+              </menu>
+              <menu name='Denormals' action='Denormals'>
+                      <menuitem action='DenormalProtection'/>
+                     <separator/>
+                      <menuitem action='DenormalNone'/>
+                      <menuitem action='DenormalFTZ'/>
+                      <menuitem action='DenormalDAZ'/>
+                     <menuitem action='DenormalFTZDAZ'/>
+               </menu>
+               <separator/>
+              <menu action='MiscOptions'>
+                            <menuitem action='UseOSC'/>
+                            <menuitem action='StopPluginsWithTransport'/>
+                            <menuitem action='NewPluginsActive'/>
+                            <menuitem action='DoNotRunPluginsWhileRecording'/>
+                            <menuitem action='LatchedRecordEnable'/>
+                            <menuitem action='RegionEquivalentsOverlap'/>
+                            <menuitem action='PeriodicSafetyBackups'/>
+                            <menuitem action='VerifyRemoveLastCapture'/>
+                            <menuitem action='StopRecordingOnXrun'/>
+                    <menuitem action='CreateXrunMarker'/>
+                    <menuitem action='StopTransportAtEndOfSession'/>
+                    <menuitem action='GainReduceFastTransport'/>
+                    <menuitem action='PrimaryClockDeltaEditCursor'/>
+                    <menuitem action='SecondaryClockDeltaEditCursor'/>
+                    <menuitem action='OnlyCopyImportedFiles'/>
+                    <menuitem action='DefaultNarrowMS'/>
+                            <menuitem action='link-region-and-track-selection'/>
+                    <menuitem action='NameNewMarkers'/>
+                            <menuitem action='RubberbandingSnapsToGrid'/>
+                            <menuitem action='AutoAnalyseAudio'/>
+                            <menuitem action='toggle-region-fades'/>
+               </menu>
+         </menu>
+        <menu name='Help' action='Help'>
+            <menuitem action='About'/>
+       </menu>
+     </menubar>
+
+     <popup action="RulerMenuPopup">
+          <menuitem action="toggle-minsec-ruler"/>
+          <menuitem action="toggle-timecode-ruler"/>
+          <menuitem action="toggle-samples-ruler"/>
+          <menuitem action="toggle-bbt-ruler"/>
+          <separator/>
+          <menuitem action="toggle-meter-ruler"/>
+          <menuitem action="toggle-timecode-ruler"/>
+          <menuitem action="toggle-tempo-ruler"/>
+          <menuitem action="toggle-range-ruler"/>
+          <menuitem action="toggle-marker-ruler"/>
+          <menuitem action="toggle-cd-marker-ruler"/>
+          <menuitem action="toggle-loop-punch-ruler"/>
+     </popup>
+
+     <popup name='redirectmenu'>
+        <menuitem action='newplugin'/>
+        <menuitem action='newinsert'/>
+        <menuitem action='newsend'/>
+         <separator/>
+        <menuitem action='clear'/>
+         <separator/>
+        <menuitem action='cut'/>
+        <menuitem action='copy'/>
+        <menuitem action='paste'/>
+        <menuitem action='delete'/>
+         <separator/>
+        <menuitem action='rename'/>
+         <separator/>
+        <menuitem action='selectall'/>
+        <menuitem action='deselectall'/>
+         <separator/>
+        <menuitem action='activate'/>
+        <menuitem action='deactivate'/>
+         <separator/>
+        <menuitem action='activate_all'/>
+        <menuitem action='deactivate_all'/>
+         <separator/>
+        <menuitem action='edit'/>
+      </popup>
+
+     <popup name='ShuttleUnitPopup'>
+        <menuitem action='SetShuttleUnitsPercentage'/>
+        <menuitem action='SetShuttleUnitsSemitones'/>
+     </popup>
+
+     <popup name='RegionListMenu'>
+         <menuitem action='rlAudition'/>
+         <menuitem action='rlHide'/>
+         <menuitem action='rlRemove'/>
+         <separator/>
+         <menuitem action='rlShowAll'/>
+         <menuitem action='rlShowAuto'/>
+         <menu name='Sort' action='RegionListSort'>
+               <menuitem action='SortAscending'/>
+               <menuitem action='SortDescending'/>
+                      <separator/>
+               <menuitem action='SortByRegionName'/>
+               <menuitem action='SortByRegionLength'/>
+               <menuitem action='SortByRegionPosition'/>
+               <menuitem action='SortByRegionTimestamp'/>
+               <menuitem action='SortByRegionStartinFile'/>
+               <menuitem action='SortByRegionEndinFile'/>
+               <menuitem action='SortBySourceFileName'/>
+               <menuitem action='SortBySourceFileLength'/>
+               <menuitem action='SortBySourceFileCreationDate'/>
+               <menuitem action='SortBySourceFilesystem'/>
+         </menu>
+         <separator/>
+         <menuitem action='addExternalAudioToRegionList'/>            
+     </popup>
+</ui>
index 4a7219823ceca934e99cd8a20cc4645569ed8d7a..077073bdf6b9b5ab057f7d4e725f9106d601cbb5 100644 (file)
@@ -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 (file)
index 0000000..1b0635a
--- /dev/null
@@ -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 (file)
index 0000000..2a6844c
--- /dev/null
@@ -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"
index b9fac389090ab13acc8b2415ef11316534470eab..277ec443001abe21fcb4abec6efbfd8562d74483 100644 (file)
@@ -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"/>
     <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"/>
     <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 (file)
index 0000000..1b0635a
--- /dev/null
@@ -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 (file)
index 0000000..2a6844c
--- /dev/null
@@ -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"
index 43fdf85c9469b0a713ed00ea069b863d76c2c4e1..c3d238a9c0f3f33b8e3916250478c24340c174c1 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include <iostream>
+#include <sigc++/bind.h>
 
 #include <gtkmm2ext/doi.h>
 
 #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);
 }
index b2c531b0d03d5ca873f0896b1c32e7d330ef43d0..44c731b36c3b769751362160c304f36831eafd59 100644 (file)
@@ -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__
index 44280a3109806ad7a480183ca943a996e7bab9c5..3376d1c8da6b004d1b4cc31a2bf95c8f3e9552c8 100644 (file)
@@ -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 ();
        }
 }
index 8243a40fd15401123ba34621e186c8a7c9f41fcf..bd3531d8fdbd0ea0862d74c3ade5431e89b7ecfb 100644 (file)
@@ -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 ();
index d294df8036342be6f18c404d76757828ab6d9783..60f390501e77195f236f3ccff469165612e47e2e 100644 (file)
@@ -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");
index f81dc8d311bf90302ad5d5827edc22682202f499..eacf0b50b74ab230a2ba97e0ed51aa07e20d57df 100644 (file)
@@ -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
 }
index 4b7008e027457799f73203c14a3d2d97796bb351..80e543e4b1691c39c67b8490cbad3aba2679e54a 100644 (file)
@@ -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));
index 4c80b8dd35704c107e18e9e200cf2db02708e322..1d03fd158e71b63c8a4bb4b49466cfa3db4401a0 100644 (file)
@@ -479,6 +479,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()
 {
@@ -557,6 +563,12 @@ ARDOUR_UI::toggle_ShowSoloMutes()
        ActionManager::toggle_config_state ("options", "ShowSoloMutes", &Configuration::set_show_solo_mutes, &Configuration::get_show_solo_mutes);
 }
 
+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()
 {
@@ -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")) {
index 977e5762a7363c75c8ed1ae347b2444350574627..a46021f66fd04cd952133b0f65ea18c61ef16a89 100644 (file)
@@ -1,3 +1,6 @@
+#undef  Marker
+#define Marker FuckYouAppleAndYourLackOfNameSpaces
+
 #include <pbd/error.h>
 #include <ardour/audio_unit.h>
 #include <ardour/insert.h>
 #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;
 }
 
index 58db7f636b4d292804c07acd8b8aa7485e995ef0..c27015801f9bffb2f9aec6d8cf433c3808ccc225 100644 (file)
@@ -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;
index ff84a44488d1e1a11fae065e1c00968e30c6da1a..c36ddbc041ce69fb8fafd04ebe4cf24d355baf27 100644 (file)
@@ -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
index 024f390d409f3702d60030ddb5b9101dea11e833..57a9ba40c608f013395d683bf29a0b3506f31b80 100644 (file)
@@ -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 ();
 
index 7fc7be2db2441fd2a4541ab2e44d19d25101c175..ed585a91e1989f3e08b2eddd74e53c8415bb3514 100644 (file)
@@ -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
index 0e1bf202040fec2b762254447eea327b6c1f8934..aa029775810ae49adcfb90268ff7bc7accf7bc5f 100644 (file)
@@ -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 ()
index 2313515285ac3a11f22342f5f73080e93a5770bc..f0bcaa30ba07b313d186de498813a44f591c7e16 100644 (file)
@@ -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));
@@ -361,12 +360,6 @@ AutomationTimeAxisView::set_interpolation (AutomationList::InterpolationStyle st
                _line->set_interpolation(style);
 }
 
-void
-AutomationTimeAxisView::height_clicked ()
-{
-       popup_size_menu (0);
-}
-
 void
 AutomationTimeAxisView::clear_clicked ()
 {
@@ -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) {
index 8899dc4949b786405ed303a9e0367f58c6568e40..d749a5fbf0944b78224ef98600ccb630c4f00d2e 100644 (file)
@@ -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 ();
 
index dee5706c51b38d387ba1b221d12677b8b182c3fc..f929b3119759618a2213d38928de5ad9192e8e79 100644 (file)
@@ -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);
index 6b14d257ad944c52c0ebe5828421a3d180ea3a8a..6f87539dd5e14ac9618fe5522ae99318cda4c5bc 100644 (file)
@@ -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")
index 75df4811863b6770c519c4a501c353637e08661a..e4f833dd26e98131d544f677ff33d9213dd9aae7 100644 (file)
@@ -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;
+}
index 3c67c62f68575fcfe7cb942f4a7882bd44210716..eb5cb2fba96879ac1838709a1002f1fa9d67106f 100644 (file)
@@ -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;
+}
index 9e4db3be8828a4278fa77abafe5f1b8da01c5431..f7f607393f5a62c56623ee46fc9d1bb5d0b5de47 100644 (file)
@@ -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;
index 8507d5e4d9eca8c5047248c8faa29c7621caa480..a412e310af33db5ef8ea63035b245fee0d8de2c7 100644 (file)
@@ -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);
index 6cc35252d5f33d5e0ecef2a4c7f6de4f531da805..6f7a5eb13294338b0161f37bea82cacbd35defc5 100644 (file)
@@ -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;
 }
index 0fb988bafd5f3ca19135b6c5322574cee222f25b..2b421163e4af81ba1116406dd96c94bc99462aea 100644 (file)
@@ -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;
index a8f3bf30289101bf027d3232bd1c925181ebc890..75d4b76668f737a7543b4d8c3e2cdcb215be2aed 100644 (file)
@@ -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);
index a12eb0857f08ee472fd12391cf20d90f13fabf0d..d6246f15fc4f942e2a221f3fb7eca460263d37c2 100644 (file)
@@ -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,81 +373,48 @@ 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;
@@ -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 ();
index f0a016d0394c2a7a4c0c2dc4cb678b7f0c8500c7..be004644f901f4b9f413c3e1b96c75e2563d2ef9 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include <libgnomecanvasmm/init.h>
+#include <libgnomecanvasmm/pixbuf.h>
 #include <jack/types.h>
 #include <gtkmm2ext/utils.h>
 
 #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"
 #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);
        }
 }
+
index 0f5c414408c31b8b1ee2293d949a10e84b56f786..93743f580eb1de4c9fc136d510c037fa20b643b3 100644 (file)
@@ -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;
index 20179f84c65b923fb0294d4555b5a90286c5b864..371b13ed0cea7f680ecb7d6cac44b650c57a2411 100644 (file)
@@ -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;
index e6b30232cd4cd1c5fa4926880dedaa021931ba0e..bf8aca105ef4da5aa7af236972e0a871cbeddc2b 100644 (file)
@@ -155,6 +155,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 ()
 {
@@ -169,16 +179,6 @@ Editor::create_editor_mixer ()
        current_mixer_strip->set_embedded (true);
 }      
 
-void
-Editor::show_editor_list (bool yn)
-{
-       if (yn) {
-               the_notebook.show();
-       } else {
-               the_notebook.hide();
-       }
-}
-
 void
 Editor::set_selected_mixer_strip (TimeAxisView& view)
 {
@@ -228,7 +228,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
 }
 
 double current = 0.0;
-bool currentInitialized = 0;
 
 void
 Editor::update_current_screen ()
index 1a03f66f2427935d32794bd4281fd5d4f0f7731e..4b4ed861644d4d5fa9936feabc3f8598fdff1bc5 100644 (file)
@@ -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;
@@ -1998,6 +2077,14 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
        return did_drag;
 }
 
+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)
 {
@@ -2257,6 +2344,39 @@ Editor::start_cursor_grab (ArdourCanvas::Item* item, GdkEvent* event)
        show_verbose_time_cursor (cursor->current_frame, 10);
 }
 
+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)
 {
@@ -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 ();
index 283935af77db4e9b38c8a3eef4d9aa9ac20f1fbb..a5dfb6b08e4f6c116c9722f0907d1922d8c279e8 100644 (file)
@@ -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 ();
 }
 
@@ -4733,6 +4776,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)
 {
@@ -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
index 1c8d95ad12758846ccdc621a32c958f12af623ce..f2c98dfa308e2cbbfad27f90f7aca9f7af11aa9d 100644 (file)
@@ -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);
        }
 }
index db3c4918c21c4f47ec2006aa96ede215bac6b401..6e368716f71e41459ff1d509ab8549fee0829544 100644 (file)
@@ -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);
+}
index 048d8c2725b77e1929b3ed27b7fc093f4b8657f4..a4344c3ffa5bcac9caaf2f5e8459f982b2285bc7 100644 (file)
@@ -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);
 
index 923c2fbd1c6a2da4f0e89b102ea51f4102f0d7d4..ec3cf30b4500e25112d76be90b5964f631ba3bf6 100644 (file)
@@ -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
index 6628be711615b5c9d492c7e2b4ec8773a6787516..3dda9e87e9dff431d1aa1a7feacaf31a3dae78cc 100644 (file)
@@ -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);
 
index bf2f0e3989aba2f44ca00dfbb45895a1badfcc67..cea690f74c7c833153038b1c963e1abfd8b9030f 100644 (file)
@@ -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)
 {
index b34c0b8d28b5f76dde5327e3fd1677834c4e9ea9..a74df66bc049351bbfca6a051ae3474ac40d3c8e 100644 (file)
@@ -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))) {
 
index af21227c0fc3f73180bdb17cd196a8bc8cebcd76..c7cecc71307ebe60d53538129b99ca7a96f26c59 100644 (file)
@@ -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 (file)
index 0000000..8d425d0
Binary files /dev/null and b/gtk2_ardour/icons/computer_keyboard.png differ
diff --git a/gtk2_ardour/icons/computer_keyboard_active.png b/gtk2_ardour/icons/computer_keyboard_active.png
new file mode 100644 (file)
index 0000000..70e6b37
Binary files /dev/null and b/gtk2_ardour/icons/computer_keyboard_active.png differ
index ef8cc3438938be21d28d3b991a243b9927c1a813..d0fcbea5cf2b4f3776a57d1bf415cc44dddde92b 100644 (file)
@@ -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,12 +380,23 @@ 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)
 {
index e6d5065e86e758a5744cdb9938720f22c951fa95..5fb696e6a553fe20a42327fb7b337fd230223b8d 100644 (file)
@@ -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;
index aecbc1f634bdf8ca25fe58d35e70f8c7a02ce76e..c7724cff63585f935d5be8729201410845387139 100644 (file)
@@ -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 ();
index db16362ca0a31f88cb0e55cba88533683b2bd6a8..5cb229e4ea52f60e34151112f08e82e21f50f400 100644 (file)
@@ -152,7 +152,6 @@ Matrix::reset_size ()
        */
        
        float w = 0;
-       float w1;
        float h = 0;
        cairo_text_extents_t extents;
        cairo_t* cr;
index 1a357dc0024d20073d48b0dc70d33506ebced82e..c6b60b974e556854594f64698818d22fa40a5b9f 100644 (file)
@@ -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();
index c4c28a06e9eab20d665baeb230529e484ffaa903..2b6aed2717436966ef3ee09cce4c31b57bce5d9b 100644 (file)
@@ -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);
index 0be9b03444c5fcc730281ac9f70334a108faeccc..06b30c700c3e972ce5d89b979d691d64e85001a3 100644 (file)
@@ -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)) {
index 4765256d585298dce13f91cb5a36b5322188329c..2b48ade6e0460784098d413c4edb014c184f2dea 100644 (file)
@@ -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&);
index 8a2a1923bac6a1f93652dea84cd427a5cbf6f5f6..27e6e9f2594f4684e2c36434db3609c50bf9a247 100644 (file)
 (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")
 (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 (file)
index 0000000..ece3ac3
--- /dev/null
@@ -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 (file)
index 0000000..5872e28
--- /dev/null
@@ -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__ */
index 4c128d4bf37366155806f88de9ee6285233dd5e2..e87f201a291b01cb052afe4eb71f62431779528b 100644 (file)
@@ -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;
index aa6911f36075c1da68c9190d2d9d82f8ab8054aa..2d35c2d6bf639d8964e54b7b3bea60a24e172d04 100644 (file)
@@ -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
index c261aba6498b1057ece02726a7d898216847dff4..3bd864422e5d148ab2a8b221381ccefb12c7a9b6 100644 (file)
@@ -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")));
index b1273aa460cb1c64195280e743f9ef9d02805168..3368905ad3f4d1a791152bef7dab15b22d062545 100644 (file)
@@ -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));
        }
 }
 
index bacfbe98b2386653d8b6b0552748120fda433334..307503fc8bff650313fc86e826ffd3874ad17ac2 100644 (file)
@@ -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);
index c4b613647d20781df194aeff47fd9d3901946cf8..e5224b4fa73924e0e2a9061f6151feacacd2fa65 100644 (file)
@@ -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__
index 06d2a04125f1794be2eb783df4e789a5575818f0..dbb5f3969e1c8e4faa98b57c66f8134fdd4d50aa 100644 (file)
@@ -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 ()
 {
index 2dcaaf188c074c1fbdbfb6c5610133f0221ed630..b5202a932769d5b7358a3d5f3e3f501c58aa5c92 100644 (file)
@@ -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 ();
index 5df81e92091f66153c8859bb3838277fabc1da50..aacb4ddc2baa31bfc1f4a8106ad1b9da8218cb75 100644 (file)
 # 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"
+"X-Poedit-Basepath: ../../\n"
+"X-Poedit-SearchPath-0: gtk2_ardour\n"
 
-#: gtk2_ardour/about.cc:122
-msgid "Taybin Rutkin"
-msgstr "Taybin Rutkin"
-
-#: gtk2_ardour/about.cc:123
-msgid "Marcus Andersson"
-msgstr "Marcus Andersson"
+#: gtk2_ardour/canvas-simplerect.c:107
+#: gtk2_ardour/canvas-ruler.c:79
+#: gtk2_ardour/canvas-simpleline.c:111
+msgid "x1"
+msgstr ""
 
-#: gtk2_ardour/about.cc:124
-msgid "Jeremy Hall"
-msgstr "Jeremy Hall"
+#: 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 ""
 
-#: gtk2_ardour/about.cc:125
-msgid "Steve Harris"
-msgstr "Steve Harris"
+#: gtk2_ardour/canvas-simplerect.c:117
+#: gtk2_ardour/canvas-ruler.c:89
+#: gtk2_ardour/canvas-simpleline.c:121
+msgid "y1"
+msgstr ""
 
-#: gtk2_ardour/about.cc:126
-msgid "Tim Mayberry"
-msgstr "Tim Mayberry"
+#: 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 ""
 
-#: gtk2_ardour/about.cc:127
-msgid "Mark Stewart"
-msgstr "Mark Stewart"
+#: gtk2_ardour/canvas-simplerect.c:128
+#: gtk2_ardour/canvas-ruler.c:100
+#: gtk2_ardour/canvas-simpleline.c:132
+msgid "x2"
+msgstr ""
 
-#: gtk2_ardour/about.cc:128
-msgid "Sam Chessman"
-msgstr "Sam Chessman"
+#: 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 ""
 
-#: gtk2_ardour/about.cc:129
-msgid "Jack O'Quin"
-msgstr "Jack O'Quin"
+#: gtk2_ardour/canvas-simplerect.c:138
+#: gtk2_ardour/canvas-ruler.c:110
+#: gtk2_ardour/canvas-simpleline.c:142
+msgid "y2"
+msgstr ""
 
-#: gtk2_ardour/about.cc:130
-msgid "Matt Krai"
-msgstr "Matt Krai"
+#: 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 ""
 
-#: gtk2_ardour/about.cc:131
-msgid "Ben Bell"
-msgstr "Ben Bell"
+#: gtk2_ardour/canvas-simplerect.c:149
+msgid "outline pixels"
+msgstr "Pixelbreite der Umrandung"
 
-#: gtk2_ardour/about.cc:132
-msgid "Gerard van Dongen"
-msgstr "Gerard van Dongen"
+#: gtk2_ardour/canvas-simplerect.c:150
+msgid "width in pixels of outline"
+msgstr "Pixelbreite der Umrandung"
 
-#: gtk2_ardour/about.cc:133
-msgid "Thomas Charbonnel"
-msgstr "Thomas Charbonnel"
+#: gtk2_ardour/canvas-simplerect.c:160
+msgid "outline what"
+msgstr "abzugrenzende Ränder"
 
-#: gtk2_ardour/about.cc:134
-msgid "Nick Mainsbridge"
-msgstr "Nick Mainsbridge"
+#: gtk2_ardour/canvas-simplerect.c:161
+msgid "which boundaries to outline (mask)"
+msgstr "abzugrenzende Ränder"
 
-#: gtk2_ardour/about.cc:135
-msgid "Colin Law"
-msgstr "Colin Law"
+#: gtk2_ardour/canvas-simplerect.c:172
+msgid "fill"
+msgstr "füllen"
 
-#: gtk2_ardour/about.cc:136
-msgid "Sampo Savolainen"
-msgstr "Sampo Savolainen"
+#: gtk2_ardour/canvas-simplerect.c:173
+msgid "fill rectangle"
+msgstr "Rechteck füllen"
 
-#: gtk2_ardour/about.cc:137
-msgid "Joshua Leach"
-msgstr "Joshua Leach"
+#: gtk2_ardour/canvas-simplerect.c:180
+msgid "draw"
+msgstr "zeichnen"
 
-#: gtk2_ardour/about.cc:138
-msgid "Rob Holland"
-msgstr "Rob Holland"
+#: gtk2_ardour/canvas-simplerect.c:181
+msgid "draw rectangle"
+msgstr "Rechteck zeichnen"
 
-#: gtk2_ardour/about.cc:139
-msgid "Per Sigmond"
-msgstr "Per Sigmond"
+#: gtk2_ardour/canvas-simplerect.c:189
+msgid "outline color rgba"
+msgstr "Rahmenfarbe RGBA"
 
-#: gtk2_ardour/about.cc:140
-msgid "Doug Mclain"
-msgstr "Doug Mclain"
+#: gtk2_ardour/canvas-simplerect.c:190
+msgid "color of outline"
+msgstr "Rahmenfarbe"
 
-#: gtk2_ardour/about.cc:141
-msgid "Petter Sundlöf"
-msgstr "Petter Sundlöf"
+#: gtk2_ardour/canvas-simplerect.c:200
+msgid "fill color rgba"
+msgstr "Füllfarbe RGBA"
 
-#: gtk2_ardour/about.cc:142
-msgid "Thorsten Wilms"
-msgstr "Thorsten Wilms"
+#: gtk2_ardour/canvas-simplerect.c:201
+#: gtk2_ardour/canvas-ruler.c:133
+msgid "color of fill"
+msgstr "Füllfarbe"
 
-#: gtk2_ardour/about.cc:143
-msgid "Ben Loftis"
-msgstr "Ben Loftis"
+#: gtk2_ardour/canvas-imageframe.c:104
+msgid "pixbuf"
+msgstr "Pixbuffer"
 
-#: gtk2_ardour/about.cc:144
-msgid "Stefan Kersten"
-msgstr "Stefan Kersten"
+#: gtk2_ardour/canvas-imageframe.c:105
+msgid "the pixbuf"
+msgstr "Pixbuffer"
 
-#: gtk2_ardour/about.cc:145
-msgid "Christopher George"
-msgstr "Christopher George"
+#: gtk2_ardour/canvas-imageframe.c:110
+msgid "x"
+msgstr "x"
 
-#: gtk2_ardour/about.cc:146
-msgid "Robert Jordens"
-msgstr "Robert Jordens"
+#: gtk2_ardour/canvas-imageframe.c:120
+msgid "y"
+msgstr "y"
 
-#: gtk2_ardour/about.cc:147
-msgid "Dave Robillard"
-msgstr "Dave Robillard"
+#: gtk2_ardour/canvas-imageframe.c:129
+msgid "width"
+msgstr "Breite"
 
-#: gtk2_ardour/about.cc:148
-msgid "Hans Fugal"
-msgstr "Hans Fugal"
+#: gtk2_ardour/canvas-imageframe.c:130
+msgid "the width"
+msgstr "Breite"
 
-#: gtk2_ardour/about.cc:149
-msgid "Brian Ahr"
-msgstr "Brian Ahr"
+#: gtk2_ardour/canvas-imageframe.c:139
+msgid "drawwidth"
+msgstr "gezeichnete Breite"
 
-#: gtk2_ardour/about.cc:150
-msgid "Nimal Ratnayake"
-msgstr "Nimal Ratnayake"
+#: gtk2_ardour/canvas-imageframe.c:140
+msgid "drawn width"
+msgstr "gezeichnete Breite"
 
-#: gtk2_ardour/about.cc:151
-msgid "Mike Täht"
-msgstr "Mike Täht"
+#: gtk2_ardour/canvas-imageframe.c:148
+msgid "height"
+msgstr "Höhe"
 
-#: gtk2_ardour/about.cc:152
-msgid "John Anderson"
-msgstr "John Anderson"
+#: gtk2_ardour/canvas-imageframe.c:149
+msgid "the height"
+msgstr "Höhe"
 
-#: gtk2_ardour/about.cc:153
-msgid "Nedko Arnaudov"
-msgstr "Nedko Arnaudov"
+#: gtk2_ardour/canvas-imageframe.c:157
+msgid "anchor"
+msgstr "Anker"
 
-#: gtk2_ardour/about.cc:154
-msgid "Carl Hetherington"
-msgstr "Carl Hetherington"
+#: gtk2_ardour/canvas-imageframe.c:158
+msgid "the anchor"
+msgstr "Anker"
 
-#: gtk2_ardour/about.cc:159
-msgid ""
-"French:\n"
-"\tAlain Fréhel <alain.frehel@free.fr>\n"
-"\tChristophe Combelles <ccomb@free.fr>\n"
+#: gtk2_ardour/canvas-ruler.c:121
+msgid "frames_per_unit"
 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/canvas-ruler.c:122
+#, fuzzy
+msgid "frames_per_unit of ruler"
+msgstr "Obere Grenze für das Lineal"
 
-#: gtk2_ardour/about.cc:161
-msgid ""
-"Italian:\n"
-"\tFilippo Pappalardo <filippo@email.it>\n"
-msgstr ""
-"Italian:\n"
-"\tFilippo Pappalardo <filippo@email.it>\n"
+#: gtk2_ardour/canvas-ruler.c:132
+msgid "fill color"
+msgstr "Füllfarbe"
 
-#: gtk2_ardour/about.cc:162
-msgid ""
-"Portuguese:\n"
-"\tRui Nuno Capela <rncbc@rncbc.org>\n"
-msgstr ""
-"Portuguese:\n"
-"\tRui Nuno Capela <rncbc@rncbc.org>\n"
+#: gtk2_ardour/canvas-ruler.c:143
+msgid "tick color"
+msgstr "Häkchenfarbe"
 
-#: gtk2_ardour/about.cc:163
-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"
+#: gtk2_ardour/canvas-ruler.c:144
+msgid "color of tick"
+msgstr "Häkchenfarbe"
 
-#: gtk2_ardour/about.cc:165
-msgid ""
-"Spanish:\n"
-"\t Alex Krohn <alexkrohn@fastmail.fm>\n"
-msgstr ""
-"Spanish:\n"
-"\t Alex Krohn <alexkrohn@fastmail.fm>\n"
+#: gtk2_ardour/canvas-simpleline.c:151
+msgid "color rgba"
+msgstr "RGBA-Farbe"
 
-#: gtk2_ardour/about.cc:166
-msgid ""
-"Russian:\n"
-"\t Igor Blinov <pitstop@nm.ru>\n"
-msgstr ""
-"Russian:\n"
-"\t Igor Blinov <pitstop@nm.ru>\n"
+#: gtk2_ardour/canvas-simpleline.c:152
+msgid "color of line"
+msgstr "Linienfarbe"
 
-#: gtk2_ardour/about.cc:167
-msgid ""
-"Greek:\n"
-"\t Klearchos Gourgourinis <muadib@in.gr>\n"
-msgstr ""
-"Greek:\n"
-"\t Klearchos Gourgourinis <muadib@in.gr>\n"
+#: gtk2_ardour/gtk-custom-ruler.c:126
+msgid "Lower"
+msgstr "Untergrenze"
 
-#: gtk2_ardour/about.cc:195
-msgid "Copyright (C) 1999-2007 Paul Davis\n"
-msgstr "Copyright (C) 1999-2007 Paul Davis\n"
+#: gtk2_ardour/gtk-custom-ruler.c:127
+msgid "Lower limit of ruler"
+msgstr "Untere Grenze des Lineals"
 
-#: 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"
-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/gtk-custom-ruler.c:136
+msgid "Upper"
+msgstr "Obergrenze"
 
-#: gtk2_ardour/about.cc:201
-msgid "visit http://www.ardour.org/"
-msgstr "besuchen Sie  http://www.ardour.org"
+#: gtk2_ardour/gtk-custom-ruler.c:137
+msgid "Upper limit of ruler"
+msgstr "Obere Grenze für das Lineal"
 
-#: gtk2_ardour/about.cc:202
-msgid ""
-"%1\n"
-"(built from revision %2)"
-msgstr ""
-"%1\n"
-"(built from revision %2)"
+#: gtk2_ardour/gtk-custom-ruler.c:146
+msgid "Position"
+msgstr "Position"
 
-#: gtk2_ardour/actions.cc:78
-msgid "badly formatted UI definition file"
-msgstr "die UI Definitionsdatei ist falsch formatiert"
+#: gtk2_ardour/gtk-custom-ruler.c:147
+msgid "Position of mark on the ruler"
+msgstr "Position der Markierung auf dem Lineal"
 
-#: gtk2_ardour/actions.cc:80
-msgid "Ardour menu definition file not found"
-msgstr "Konnte die ardour Menü-Definition nicht finden"
+#: gtk2_ardour/gtk-custom-ruler.c:156
+msgid "Max Size"
+msgstr "Maximale Größe"
 
-#: 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/gtk-custom-ruler.c:157
+msgid "Maximum size of the ruler"
+msgstr "Minimal Größe des Lineals"
 
-#: gtk2_ardour/actions.cc:265
-msgid "programmer error: %1 %2"
-msgstr "Programmierfehler: %1 %2"
+#: gtk2_ardour/gtk-custom-ruler.c:166
+msgid "Show Position"
+msgstr "Zeige Position"
 
-#: gtk2_ardour/actions.cc:284
-msgid "Unknown action name: %1"
-msgstr "Unbekannte Aktionsbezeichnung: %1"
+#: gtk2_ardour/gtk-custom-ruler.c:167
+msgid "Draw current ruler position"
+msgstr "Zeige aktuelle Position des Lineals"
 
-#: gtk2_ardour/add_route_dialog.cc:41
-#: gtk2_ardour/add_route_dialog.cc:219
-msgid "Mono"
-msgstr "Mono"
+#: gtk2_ardour/export_range_markers_dialog.cc:41
+msgid "ardour: export ranges"
+msgstr "ardour: Bereiche Exportieren"
 
-#: gtk2_ardour/add_route_dialog.cc:42
-#: gtk2_ardour/add_route_dialog.cc:221
-msgid "Stereo"
-msgstr "Stereo"
+#: gtk2_ardour/export_range_markers_dialog.cc:42
+msgid "Export to Directory"
+msgstr "In Verzeichnis exportieren"
 
-#: gtk2_ardour/add_route_dialog.cc:43
-msgid "3 Channels"
-msgstr "3 Kanäle"
+#: 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/add_route_dialog.cc:44
-msgid "4 Channels"
-msgstr "4 Kanäle"
+#: gtk2_ardour/export_range_markers_dialog.cc:151
+msgid "Please select an existing target directory. Files are not allowed!"
+msgstr ""
+"Bitte wählen Sie ein vorhandenes Zielverzeichnis aus.\n"
+"Dateien sind nicht möglich."
 
-#: gtk2_ardour/add_route_dialog.cc:45
-msgid "6 Channels"
-msgstr "6 Kanäle"
+#: gtk2_ardour/export_range_markers_dialog.cc:160
+msgid "Cannot write file in: "
+msgstr "Konnte Datei nicht in Verzeichnis  schreiben:"
 
-#: gtk2_ardour/add_route_dialog.cc:46
-msgid "8 Channels"
-msgstr "8 Kanäle"
+#: gtk2_ardour/audio_region_editor.cc:48
+msgid "NAME:"
+msgstr "Name:"
 
-#: gtk2_ardour/add_route_dialog.cc:47
-msgid "Manual Setup"
-msgstr "Manuell"
+#: gtk2_ardour/audio_region_editor.cc:49
+msgid "play"
+msgstr "Play"
 
-#: 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/audio_region_editor.cc:68
+msgid "audition this region"
+msgstr "Diese Region Vorhören"
 
-#: gtk2_ardour/add_route_dialog.cc:53
-#: gtk2_ardour/add_route_dialog.cc:202
-msgid "Tape"
-msgstr "Tape"
+#: gtk2_ardour/audio_region_editor.cc:83
+msgid "START:"
+msgstr "Beginn:"
 
-#: gtk2_ardour/add_route_dialog.cc:62
-msgid "ardour: add track/bus"
-msgstr "ardour: Füge Spur/Bus hinzu"
+#: gtk2_ardour/audio_region_editor.cc:85
+msgid "END:"
+msgstr "Ende:"
 
-#: gtk2_ardour/add_route_dialog.cc:63
-msgid "Tracks"
-msgstr "Audiospuren"
+#: gtk2_ardour/audio_region_editor.cc:87
+msgid "LENGTH:"
+msgstr "Länge:"
 
-#: gtk2_ardour/add_route_dialog.cc:64
-msgid "Busses"
-msgstr "Busse"
+#: gtk2_ardour/audio_region_editor.cc:123
+msgid "Region %1"
+msgstr "Region %1"
 
-#: gtk2_ardour/add_route_dialog.cc:113
-#: gtk2_ardour/plugin_ui.cc:220
-msgid "Add"
-msgstr "Hinzufügen"
+#: gtk2_ardour/audio_region_editor.cc:204
+msgid "change region start position"
+msgstr "Startposition der Region Ã¤ndern"
 
-#: gtk2_ardour/add_route_dialog.cc:131
-msgid "Name (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/add_route_dialog.cc:137
-msgid "Channel Configuration"
-msgstr "Kanaleinstellungen"
+#: gtk2_ardour/audio_region_editor.cc:242
+msgid "change region length"
+msgstr "Länge der Region verändern"
 
-#: gtk2_ardour/ardour_ui.cc:114
-msgid ""
-"pre\n"
-"roll"
-msgstr ""
-"pre\n"
-"roll"
+#: gtk2_ardour/theme_manager.cc:52
+msgid "Object"
+msgstr "Element"
 
-#: gtk2_ardour/ardour_ui.cc:115
-msgid ""
-"post\n"
-"roll"
-msgstr ""
-"post\n"
-"roll"
+#: gtk2_ardour/theme_manager.cc:53
+msgid "Color"
+msgstr "Farbe"
 
-#: gtk2_ardour/ardour_ui.cc:141
-msgid ""
-msgstr ""
+#: 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:143
-#: gtk2_ardour/ardour_ui_ed.cc:306
-msgid "Punch In"
-msgstr "Punch In"
+#: gtk2_ardour/generic_pluginui.cc:80
+msgid "<span size=\"large\">Presets</span>"
+msgstr "<span size=\"large\">Voreinstellungen</span>"
 
-#: gtk2_ardour/ardour_ui.cc:144
-#: gtk2_ardour/ardour_ui_ed.cc:309
-msgid "Punch Out"
-msgstr "Punch Out"
+#: gtk2_ardour/generic_pluginui.cc:171
+#: gtk2_ardour/ardour_ui_ed.cc:743
+msgid "Controls"
+msgstr "Steuerelemente"
 
-#: gtk2_ardour/ardour_ui.cc:145
-#: gtk2_ardour/ardour_ui_ed.cc:321
-msgid "Auto Return"
-msgstr "Auto Return"
+#: 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:146
-#: gtk2_ardour/ardour_ui_ed.cc:318
-msgid "Auto Play"
-msgstr "Auto Play"
+#: gtk2_ardour/generic_pluginui.cc:298
+msgid "Automation control"
+msgstr "Automation"
 
-#: gtk2_ardour/ardour_ui.cc:147
-#: gtk2_ardour/ardour_ui_ed.cc:315
-msgid "Auto Input"
-msgstr "Auto Input"
+#: gtk2_ardour/generic_pluginui.cc:305
+#, fuzzy
+msgid "Mgnual"
+msgstr "Manuell"
 
-#: 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/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:149
-msgid ""
-"time\n"
-"master"
-msgstr ""
-"Time\n"
-"Master"
+#: 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:151
-msgid "AUDITION"
-msgstr "VORHÖREN"
+#: 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:152
-msgid "SOLO"
-msgstr "SOLO"
+#: 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:154
-msgid "Errors"
-msgstr "Fehlermeldungen"
+#: gtk2_ardour/generic_pluginui.cc:347
+msgid "???"
+msgstr "???"
 
-#: gtk2_ardour/ardour_ui.cc:237
-msgid "could not initialize Ardour."
-msgstr "Konnte ardour nicht initialisieren."
+#: 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:548
-msgid "Ardour could not start JACK"
-msgstr "Ardour konnte JACK nicht starten"
+#: gtk2_ardour/gain_meter.cc:123
+#: gtk2_ardour/gain_meter.cc:769
+msgid "Fader automation mode"
+msgstr "Fader Automationsmodus"
 
-#: gtk2_ardour/ardour_ui.cc:550
-msgid "Ardour could not connect to JACK."
-msgstr "ardour konnte nicht zu JACK verbinden."
+#: gtk2_ardour/gain_meter.cc:124
+#: gtk2_ardour/gain_meter.cc:770
+msgid "Fader automation type"
+msgstr "Fader-Automationstyp"
 
-#: 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/gain_meter.cc:132
+#: gtk2_ardour/gain_meter.cc:658
+msgid "Trim"
+msgstr "Abschneiden"
 
-#: 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/gain_meter.cc:133
+#: gtk2_ardour/gain_meter.cc:662
+msgid "Abs"
+msgstr "Abs"
 
-#: 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/gain_meter.cc:287
+msgid "-Inf"
+msgstr "-Inf"
 
-#: 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/gain_meter.cc:473
+#: gtk2_ardour/gain_meter.cc:488
+msgid "meter point change"
+msgstr "Taktwechsel Ã¤ndern"
 
-#: 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"
-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/gain_meter.cc:626
+msgid "M"
+msgstr "M"
 
-#: gtk2_ardour/ardour_ui.cc:710
-msgid "Do not show this window again"
-msgstr "Diese Meldung nicht wieder anzeigen"
+#: gtk2_ardour/gain_meter.cc:629
+msgid "P"
+msgstr "P"
 
-#: gtk2_ardour/ardour_ui.cc:730
-msgid "quit"
-msgstr "Beenden"
+#: gtk2_ardour/gain_meter.cc:632
+msgid "T"
+msgstr "T"
 
-#: 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/gain_meter.cc:635
+msgid "W"
+msgstr "W"
 
-#: gtk2_ardour/ardour_ui.cc:763
-msgid "ardour: save session?"
-msgstr "ardour: Projekt speichern?"
+#: gtk2_ardour/ardour_ui2.cc:62
+msgid "UI: cannot setup editor"
+msgstr "Der Editor konnte nicht initialisiert werden."
 
-#: gtk2_ardour/ardour_ui.cc:770
-msgid "Don't %1"
-msgstr "Abbrechen"
+#: gtk2_ardour/ardour_ui2.cc:67
+msgid "UI: cannot setup mixer"
+msgstr "Der Mixer konnte nicht initialisiert werden."
 
-#: gtk2_ardour/ardour_ui.cc:772
-msgid "Just %1"
-msgstr "%1"
+#: gtk2_ardour/ardour_ui2.cc:110
+msgid "[ERROR]: "
+msgstr "[FEHLER]:"
 
-#: gtk2_ardour/ardour_ui.cc:774
-msgid "Save and %1"
-msgstr "Speichern und %1"
+#: gtk2_ardour/ardour_ui2.cc:112
+msgid "[WARNING]: "
+msgstr "[WARNUNG]:"
 
-#: gtk2_ardour/ardour_ui.cc:786
-msgid "session"
-msgstr "Das Projekt"
+#: gtk2_ardour/ardour_ui2.cc:114
+msgid "[INFO]: "
+msgstr "[INFO]: "
 
-#: gtk2_ardour/ardour_ui.cc:788
-msgid "snapshot"
-msgstr "Der Schnappschuss"
+#: gtk2_ardour/ardour_ui2.cc:282
+msgid "Play from playhead"
+msgstr "Wiedergabe ab Positionszeiger"
 
-#: 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/ardour_ui2.cc:283
+msgid "Stop playback"
+msgstr "Wiedergabe anhalten"
 
-#: gtk2_ardour/ardour_ui.cc:804
-msgid "Prompter"
-msgstr "Frage"
+#: gtk2_ardour/ardour_ui2.cc:284
+msgid "Play range/selection"
+msgstr "Bereich/Auswahl wiedergeben"
 
-#: gtk2_ardour/ardour_ui.cc:866
-#, c-format
-msgid "disconnected"
-msgstr "getrennt"
+#: gtk2_ardour/ardour_ui2.cc:285
+msgid "Go to start of session"
+msgstr "Zum Anfang des Projekts springen"
 
-#: gtk2_ardour/ardour_ui.cc:873
-#, c-format
-msgid "%.1f kHz / %4.1f ms"
-msgstr "%.1f kHz / %4.1f ms"
+#: gtk2_ardour/ardour_ui2.cc:286
+msgid "Go to end of session"
+msgstr "Zum Ende des Projekts springen"
 
-#: gtk2_ardour/ardour_ui.cc:877
-#, c-format
-msgid "%u kHz / %4.1f ms"
-msgstr "%u kHz / %4.1f ms"
+#: gtk2_ardour/ardour_ui2.cc:287
+msgid "Play loop range"
+msgstr "Schleife wiedergeben"
 
-#: gtk2_ardour/ardour_ui.cc:890
-#, c-format
-msgid "DSP: %5.1f%%"
-msgstr "DSP: %5.1f%%"
+#: gtk2_ardour/ardour_ui2.cc:289
+msgid "Return to last playback start when stopped"
+msgstr "Bei Stop zum letzten Wiedergabeanfang springen"
+
+#: gtk2_ardour/ardour_ui2.cc:290
+msgid "Start playback after any locate"
+msgstr "Startet die Wiedergabe nach setzen des Positionszeigers"
+
+#: gtk2_ardour/ardour_ui2.cc:291
+msgid "Be sensible about input monitoring"
+msgstr "Automatisches Input Monitoring aktivieren"
+
+#: gtk2_ardour/ardour_ui2.cc:292
+msgid "Start recording at 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 "Aufnahme am Ende des Punch-Bereichs beenden"
+
+#: gtk2_ardour/ardour_ui2.cc:294
+msgid "Enable/Disable audio click"
+msgstr "Aktiviert/Deaktiviert Audio Click"
+
+#: gtk2_ardour/ardour_ui2.cc:295
+msgid "Positional sync source"
+msgstr "Positionsbezogene Sync-quelle"
+
+#: gtk2_ardour/ardour_ui2.cc:296
+msgid "Does Ardour control the time?"
+msgstr "Bestimmt Ardour die Time?"
+
+#: gtk2_ardour/ardour_ui2.cc:297
+msgid "Shuttle speed control"
+msgstr "Shuttle-Geschwindigkeit"
 
-#: gtk2_ardour/ardour_ui.cc:900
+#: gtk2_ardour/ardour_ui2.cc:298
 #, c-format
-msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
-msgstr "Buffer p:%<PRIu32>%% c:%<PRIu32>%%"
+msgid "Select semitones or %%-age for speed display"
+msgstr "Geschwindigkeitsanzeige als Prozent oder Halbtöne einstellen"
+
+#: gtk2_ardour/ardour_ui2.cc:299
+msgid "Current transport speed"
+msgstr "Geschwindigkeitsanzeige"
+
+#: gtk2_ardour/ardour_ui2.cc:320
+msgid "Primary clock"
+msgstr "Primäre Zeitanzeige"
+
+#: gtk2_ardour/ardour_ui2.cc:321
+msgid "secondary clock"
+msgstr "Sekundäre Zeitanzeige"
+
+#: gtk2_ardour/ardour_ui2.cc:347
+msgid ""
+"When active, something is soloed.\n"
+"Click to de-solo everything"
+msgstr ""
+"Wird aktiv, wenn eine Spur Solo läuft.\n"
+"Schaltet bei Klick Solo aus."
+
+#: gtk2_ardour/ardour_ui2.cc:348
+msgid ""
+"When active, auditioning is taking place\n"
+"Click to stop the audition"
+msgstr ""
+"Wird beim Vorhören aktiv.\n"
+"Klicken stoppt das Vorhören."
+
+#: gtk2_ardour/ardour_ui2.cc:376
+#: 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:824
+msgid "wheel"
+msgstr "Drehrad"
+
+#: gtk2_ardour/ardour_ui2.cc:596
+msgid "Maximum speed"
+msgstr "Max. Geschwindigkeit"
+
+#: gtk2_ardour/ardour_ui2.cc:834
+#: gtk2_ardour/ardour_ui2.cc:857
+msgid "stop"
+msgstr "Stop"
+
+#: gtk2_ardour/ardour_ui2.cc:876
+msgid "-0.55"
+msgstr "-0.55"
+
+#: 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/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/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:91
+msgid "Import/Export"
+msgstr "Import/Export"
+
+#: gtk2_ardour/ardour_ui_ed.cc:92
+msgid "Cleanup"
+msgstr "Aufräumen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:93
+msgid "Sync"
+msgstr "Sync"
+
+#: gtk2_ardour/ardour_ui_ed.cc:94
+#: gtk2_ardour/ardour_ui_ed.cc:95
+msgid "Options"
+msgstr "Optionen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:96
+msgid "Help"
+msgstr "Hilfe"
+
+#: gtk2_ardour/ardour_ui_ed.cc:97
+msgid "Misc. Shortcuts"
+msgstr "Verschiedenes"
+
+#: gtk2_ardour/ardour_ui_ed.cc:98
+msgid "Audio File Format"
+msgstr "Audio-Dateiformat"
+
+#: gtk2_ardour/ardour_ui_ed.cc:99
+msgid "File Type"
+msgstr "Dateiformat"
+
+#: gtk2_ardour/ardour_ui_ed.cc:100
+msgid "Sample Format"
+msgstr "Sampleformat"
+
+#: gtk2_ardour/ardour_ui_ed.cc:101
+msgid "Control Surfaces"
+msgstr "Eingabegeräte / Controller"
+
+#: gtk2_ardour/ardour_ui_ed.cc:102
+msgid "Metering"
+msgstr "Pegelanzeige"
+
+#: gtk2_ardour/ardour_ui_ed.cc:103
+msgid "Fall off rate"
+msgstr "Abfall der Pegelanzeige"
+
+#: gtk2_ardour/ardour_ui_ed.cc:104
+msgid "Hold Time"
+msgstr "Pegelanzeige halten"
+
+#: gtk2_ardour/ardour_ui_ed.cc:105
+msgid "Denormal Handling"
+msgstr "Umgang mit Denormals"
+
+#: gtk2_ardour/ardour_ui_ed.cc:109
+msgid "New"
+msgstr "Neu"
+
+#: gtk2_ardour/ardour_ui_ed.cc:111
+msgid "Open"
+msgstr "Öffnen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:112
+msgid "Recent"
+msgstr "Zuletzt verwendet..."
+
+#: gtk2_ardour/ardour_ui_ed.cc:113
+msgid "Close"
+msgstr "Schließen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:116
+msgid "Add Track/Bus"
+msgstr "Spur/Bus hinzufügen..."
+
+#: gtk2_ardour/ardour_ui_ed.cc:128
+msgid "Connect"
+msgstr "Verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:136
+msgid "Snapshot"
+msgstr "Schnappschuss..."
+
+#: gtk2_ardour/ardour_ui_ed.cc:139
+msgid "Save Template..."
+msgstr "Als Vorlage Speichern..."
+
+#: gtk2_ardour/ardour_ui_ed.cc:142
+msgid "Export session to audiofile..."
+msgstr "Exportiere Projekt als Audio-Datei..."
+
+#: gtk2_ardour/ardour_ui_ed.cc:145
+msgid "Export selection to audiofile..."
+msgstr "Exportiere Auswahlbereich als Audio-Datei..."
+
+#: 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:153
+msgid "Export"
+msgstr "Exportieren"
+
+#: gtk2_ardour/ardour_ui_ed.cc:156
+msgid "Cleanup unused sources"
+msgstr "Nicht benutzte Dateien entfernen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:158
+msgid "Flush wastebasket"
+msgstr "Müll leeren"
+
+#: gtk2_ardour/ardour_ui_ed.cc:164
+msgid "JACK"
+msgstr "JACK"
+
+#: gtk2_ardour/ardour_ui_ed.cc:165
+msgid "Latency"
+msgstr "Latenz"
+
+#: gtk2_ardour/ardour_ui_ed.cc:167
+msgid "Reconnect"
+msgstr "Neu Verbinden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:170
+msgid "Disconnect"
+msgstr "Trennen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:197
+msgid "Window"
+msgstr "Fenster"
+
+#: gtk2_ardour/ardour_ui_ed.cc:198
+msgid "Quit"
+msgstr "Beenden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:202
+msgid "Maximise Editor Space"
+msgstr "Editor maximieren"
+
+#: gtk2_ardour/ardour_ui_ed.cc:204
+msgid "Show Editor"
+msgstr "Editor anzeigen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:205
+msgid "Show Mixer"
+msgstr "Mixer anzeigen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:206
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:207
+msgid "Track/Bus Inspector"
+msgstr "Verbindungen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:209
+msgid "Connections"
+msgstr "Verbindungen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:211
+msgid "Locations"
+msgstr "Positionen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:213
+msgid "Big Clock"
+msgstr "Große Zeitanzeige"
+
+#: gtk2_ardour/ardour_ui_ed.cc:215
+msgid "About"
+msgstr "Ãœber Ardour..."
+
+#: gtk2_ardour/ardour_ui_ed.cc:216
+msgid "Theme Manager"
+msgstr "Thema"
+
+#: gtk2_ardour/ardour_ui_ed.cc:217
+msgid "Keybindings"
+msgstr "Tastaturbefehle"
+
+#: gtk2_ardour/ardour_ui_ed.cc:219
+msgid "Add Audio Track"
+msgstr "Audiospur hinzufügen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:221
+msgid "Add Audio Bus"
+msgstr "Audio-Bus hinzufügen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:223
+msgid "Save"
+msgstr "Speichern"
+
+#: gtk2_ardour/ardour_ui_ed.cc:225
+msgid "Remove Last Capture"
+msgstr "Letzte Aufnahme entfernen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:232
+msgid "Transport"
+msgstr "Transport"
+
+#: gtk2_ardour/ardour_ui_ed.cc:238
+msgid "Stop"
+msgstr "Stop"
+
+#: gtk2_ardour/ardour_ui_ed.cc:241
+msgid "Roll"
+msgstr "Wiedergabe"
+
+#: gtk2_ardour/ardour_ui_ed.cc:245
+msgid "Start/Stop"
+msgstr "Start/Stop"
+
+#: gtk2_ardour/ardour_ui_ed.cc:248
+msgid "Stop + Forget Capture"
+msgstr "Stop + Aufnahme verwerfen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:258
+msgid "Transition To Roll"
+msgstr "Vorwärts wiedergeben"
+
+#: gtk2_ardour/ardour_ui_ed.cc:262
+msgid "Transition To Reverse"
+msgstr "Rückwärts wiedergeben"
+
+#: gtk2_ardour/ardour_ui_ed.cc:267
+msgid "Play Loop Range"
+msgstr "Schleife wiedergeben"
+
+#: gtk2_ardour/ardour_ui_ed.cc:270
+msgid "Play Selection"
+msgstr "Ausgewählten Bereich wiedergeben"
+
+#: gtk2_ardour/ardour_ui_ed.cc:274
+msgid "Enable Record"
+msgstr "Aufnahme aktivieren"
+
+#: gtk2_ardour/ardour_ui_ed.cc:276
+msgid "Start Recording"
+msgstr "Aufnahme beginnen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:279
+msgid "Rewind"
+msgstr "Rückwärts"
+
+#: gtk2_ardour/ardour_ui_ed.cc:282
+msgid "Rewind (Slow)"
+msgstr "Rückwärts (langsam)"
+
+#: gtk2_ardour/ardour_ui_ed.cc:285
+msgid "Rewind (Fast)"
+msgstr "Rückwärts (schnell)"
+
+#: gtk2_ardour/ardour_ui_ed.cc:288
+msgid "Forward"
+msgstr "Vorwärts"
+
+#: gtk2_ardour/ardour_ui_ed.cc:291
+msgid "Forward (Slow)"
+msgstr "Vorwärts (langsam)"
+
+#: gtk2_ardour/ardour_ui_ed.cc:294
+msgid "Forward (Fast)"
+msgstr "Vorwärts (schnell)"
+
+#: gtk2_ardour/ardour_ui_ed.cc:297
+msgid "Goto Zero"
+msgstr "Zum Nullpunkt springen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:300
+msgid "Goto Start"
+msgstr "Zum Anfang springen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:303
+msgid "Goto End"
+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: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:355
+msgid "Time master"
+msgstr "Time Master"
+
+#: 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:360
+msgid "Toggle Record Enable Track2"
+msgstr "Aufnahme aktivieren für Spur 2"
+
+#: 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:364
+msgid "Toggle Record Enable Track4"
+msgstr "Aufnahme aktivieren für Spur 4"
+
+#: 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:368
+msgid "Toggle Record Enable Track6"
+msgstr "Aufnahme aktivieren für Spur 6"
+
+#: 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:372
+msgid "Toggle Record Enable Track8"
+msgstr "Aufnahme aktivieren für Spur 8"
+
+#: 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:376
+msgid "Toggle Record Enable Track10"
+msgstr "Aufnahme aktivieren für Spur 10"
+
+#: 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:380
+msgid "Toggle Record Enable Track12"
+msgstr "Aufnahme aktivieren für Spur 12"
+
+#: 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:384
+msgid "Toggle Record Enable Track14"
+msgstr "Aufnahme aktivieren für Spur 14"
+
+#: 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:388
+msgid "Toggle Record Enable Track16"
+msgstr "Aufnahme aktivieren für Spur 16"
+
+#: 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:392
+msgid "Toggle Record Enable Track18"
+msgstr "Aufnahme aktivieren für Spur 18"
+
+#: 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:396
+msgid "Toggle Record Enable Track20"
+msgstr "Aufnahme aktivieren für Spur 20"
+
+#: 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:400
+msgid "Toggle Record Enable Track22"
+msgstr "Aufnahme aktivieren für Spur 22"
+
+#: 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:404
+msgid "Toggle Record Enable Track24"
+msgstr "Aufnahme aktivieren für Spur 24"
+
+#: 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:408
+msgid "Toggle Record Enable Track26"
+msgstr "Aufnahme aktivieren für Spur 26"
+
+#: 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:412
+msgid "Toggle Record Enable Track28"
+msgstr "Aufnahme aktivieren für Spur 28"
+
+#: 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:416
+msgid "Toggle Record Enable Track30"
+msgstr "Aufnahme aktivieren für Spur 30"
+
+#: 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:420
+msgid "Toggle Record Enable Track32"
+msgstr "Aufnahme aktivieren für Spur 32"
+
+#: gtk2_ardour/ardour_ui_ed.cc:425
+msgid "Percentage"
+msgstr "Prozent"
+
+#: gtk2_ardour/ardour_ui_ed.cc:426
+msgid "Semitones"
+msgstr "Halbtöne"
+
+#: gtk2_ardour/ardour_ui_ed.cc:430
+msgid "Send MTC"
+msgstr "MTC senden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:432
+msgid "Send MMC"
+msgstr "MMC senden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:434
+msgid "Use MMC"
+msgstr "Benutze MMC"
+
+#: gtk2_ardour/ardour_ui_ed.cc:436
+msgid "Send MIDI feedback"
+msgstr "MIDI Feedback senden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:439
+msgid "Use OSC"
+msgstr "Aktiviere OSC"
+
+#: 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:447
+msgid "Stop plugins with transport"
+msgstr "Plugins mit Transport stoppen"
+
+#: 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:449
+msgid "Make periodic safety backups"
+msgstr "Erstelle regelmäßig Sicherungskopien"
+
+#: gtk2_ardour/ardour_ui_ed.cc:450
+msgid "Stop recording on xrun"
+msgstr "Aufnahme bei xrun stoppen"
+
+#: 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:453
+msgid "-12dB gain reduce ffwd/rewind"
+msgstr "Beim Spulen Pegel um -12dB absenken"
+
+#: 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:455
+msgid "Region equivalents overlap"
+msgstr "Region entspricht Ãœberdeckung"
+
+#: 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:457
+msgid "Secondary Clock delta to edit point"
+msgstr "Sekundäre Zeitanzeige zeigt Abstand zum Arbeitspunkt"
+
+#: gtk2_ardour/ardour_ui_ed.cc:458
+msgid "Enable Editor Meters"
+msgstr "Aktiviere Pegelanzeigen im Editor"
+
+#: gtk2_ardour/ardour_ui_ed.cc:459
+msgid "Always copy imported files"
+msgstr "Importierte Dateien immer kopieren"
+
+#: 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 "Benutze DC bias"
+
+#: gtk2_ardour/ardour_ui_ed.cc:470
+msgid "No processor handling"
+msgstr "Keine Korrekturen"
+
+#: 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:481
+#: gtk2_ardour/ardour_ui_ed.cc:495
+msgid "Use DenormalsAreZero"
+msgstr "Benutze DenormalsAreZero"
 
-#: gtk2_ardour/ardour_ui.cc:928
-msgid "Disk: 24hrs+"
-msgstr "HD: >24 Std."
+#: 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.cc:948
-#, c-format
-msgid "Disk: %02dh:%02dm:%02ds"
-msgstr "HD: %02dh:%02dm:%02ds"
+#: gtk2_ardour/ardour_ui_ed.cc:506
+msgid "Do not run plugins while recording"
+msgstr "Plugins während der Aufnahme deaktivieren"
 
-#: gtk2_ardour/ardour_ui.cc:1061
-#: gtk2_ardour/new_session_dialog.cc:365
-msgid "Recent Sessions"
-msgstr "Zuletzt verwendete Projekte"
+#: gtk2_ardour/ardour_ui_ed.cc:508
+msgid "Latched solo"
+msgstr "Latch Solo"
 
-#: gtk2_ardour/ardour_ui.cc:1150
-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/ardour_ui_ed.cc:510
+msgid "Show solo muting"
+msgstr "Solo als Mute anzeigen"
 
-#: gtk2_ardour/ardour_ui.cc:1174
-msgid "open session"
-msgstr "Projekt Ã¶ffnen"
+#: gtk2_ardour/ardour_ui_ed.cc:519
+msgid "Slowest"
+msgstr "Sehr langsam"
 
-#: gtk2_ardour/ardour_ui.cc:1181
-msgid "Ardour sessions"
-msgstr "ardour-Projekte"
+#: gtk2_ardour/ardour_ui_ed.cc:520
+msgid "Slow"
+msgstr "Langsam"
 
-#: gtk2_ardour/ardour_ui.cc:1214
-msgid "Patience is a virtue.\n"
-msgstr "Geduld ist eine Tugend.\n"
+#: gtk2_ardour/ardour_ui_ed.cc:521
+#: gtk2_ardour/ardour_ui_ed.cc:528
+msgid "Medium"
+msgstr "Mittel"
 
-#: 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_ed.cc:522
+msgid "Fast"
+msgstr "Schnell"
 
-#: 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_ed.cc:523
+msgid "Faster"
+msgstr "Schneller"
 
-#: 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_ed.cc:524
+msgid "Fastest"
+msgstr "Schnellstmöglich"
 
-#: gtk2_ardour/ardour_ui.cc:1237
-msgid "tracks"
-msgstr "Spuren"
+#: gtk2_ardour/ardour_ui_ed.cc:527
+msgid "Short"
+msgstr "Kurz"
 
-#: gtk2_ardour/ardour_ui.cc:1237
-msgid "busses"
-msgstr "Audio-Bussen"
+#: gtk2_ardour/ardour_ui_ed.cc:529
+msgid "Long"
+msgstr "Lange"
 
-#: gtk2_ardour/ardour_ui.cc:1249
-msgid "could not create %1 new audio tracks"
-msgstr "Konnte %1 neue Spuren nicht erstellen."
+#: gtk2_ardour/ardour_ui_ed.cc:554
+msgid "JACK does monitoring"
+msgstr "Monitoring mit JACK"
 
-#: 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/ardour_ui_ed.cc:558
+msgid "Ardour does monitoring"
+msgstr "Monitoring mit Ardour"
 
-#: 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/ardour_ui_ed.cc:559
+msgid "Audio Hardware does monitoring"
+msgstr "Hardware Monitoring"
 
-#: 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/ardour_ui_ed.cc:563
+msgid "Solo in-place"
+msgstr "Solo-In-Place"
 
-#: gtk2_ardour/ardour_ui.cc:1662
-msgid "Unable to start the session running"
-msgstr "Konnte das aktuelle Projekt nicht starten"
+#: gtk2_ardour/ardour_ui_ed.cc:565
+msgid "Solo via bus"
+msgstr "Solo Ã¼ber Bus"
 
-#: gtk2_ardour/ardour_ui.cc:1753
-#: gtk2_ardour/ardour_ui.cc:1772
-#: gtk2_ardour/audio_clock.cc:508
-msgid "none"
-msgstr "keine"
+#: 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.cc:1762
-#: gtk2_ardour/ardour_ui.cc:1781
-msgid "off"
-msgstr "aus"
+#: gtk2_ardour/ardour_ui_ed.cc:572
+msgid "Manually connect inputs"
+msgstr "Eingänge manuell verbinden"
 
-#: gtk2_ardour/ardour_ui.cc:1807
-msgid "Name of New Snapshot"
-msgstr "Name für neuen Schnappschuss"
+#: 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.cc:1959
-msgid "Name for mix template:"
-msgstr "Name für Mixer-Vorlage"
+#: 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.cc:1960
-msgid "-template"
-msgstr "Vorlage"
+#: gtk2_ardour/ardour_ui_ed.cc:581
+msgid "Manually connect outputs"
+msgstr "Ausgänge manuell verbinden"
 
-#: 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/ardour_ui_ed.cc:586
+msgid "Remote ID assigned by User"
+msgstr "Fernsteuerungs-ID vom Benutzer festgelegt"
 
-#: 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/ardour_ui_ed.cc:588
+msgid "Remote ID follows order of Mixer"
+msgstr "Fernsteuerungs-ID aus Reihenfolge im Mixer"
 
-#: gtk2_ardour/ardour_ui.cc:2074
-#: gtk2_ardour/ardour_ui.cc:2131
-msgid "Starting audio engine"
-msgstr "Starte Audio Engine"
+#: 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.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/ardour_ui_ed.cc:593
+msgid "Auto Rebind Controls"
+msgstr "Controller automatisch anbinden"
 
-#: 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/ardour_ui_ed.cc:747
+msgid "Feedback"
+msgstr "Feedback"
 
-#: 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/ardour_ui_ed.cc:853
+msgid "Clock"
+msgstr "Zeitanzeige"
 
-#: 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/editor_edit_groups.cc:52
+msgid "Activate All"
+msgstr "Alle aktivieren"
 
-#: gtk2_ardour/ardour_ui.cc:2453
-#, fuzzy
-msgid "Loading Error"
-msgstr "Programmierfehler:"
+#: gtk2_ardour/editor_edit_groups.cc:53
+msgid "Disable All"
+msgstr "Alle deaktivieren"
 
-#: 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/editor_edit_groups.cc:55
+msgid "Add group"
+msgstr "Gruppe hinzufügen"
 
-#: gtk2_ardour/ardour_ui.cc:2527
-msgid "Could not create session in \"%1\""
-msgstr "Konnte kein Projekt in \"%1\" anlegen"
+#: gtk2_ardour/editor_edit_groups.cc:228
+msgid "unnamed"
+msgstr "unbenannt"
 
-#: gtk2_ardour/ardour_ui.cc:2587
-msgid "No audio files were ready for cleanup"
-msgstr "Keine Audiodateien zum Aufräumen vorhanden"
+#: gtk2_ardour/editor_edit_groups.cc:257
+msgid "-all-"
+msgstr "-alle-"
 
-#: 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/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.cc:2600
-msgid "ardour: cleanup"
-msgstr "ardour: Aufräumen"
+#: gtk2_ardour/audio_time_axis.cc:237
+msgid "Fader"
+msgstr "Fader"
 
-#: gtk2_ardour/ardour_ui.cc:2636
-#: gtk2_ardour/ardour_ui.cc:2642
-msgid "files were"
-msgstr "folgenden Dateien wurden"
+#: gtk2_ardour/audio_time_axis.cc:242
+msgid "Pan"
+msgstr "Pan"
 
-#: gtk2_ardour/ardour_ui.cc:2638
-#: gtk2_ardour/ardour_ui.cc:2644
-msgid "file was"
-msgstr "folgende Datei wurde"
+#: gtk2_ardour/audio_time_axis.cc:258
+msgid "Hide all crossfades"
+msgstr "Alle Crossfades verbergen"
 
-#: 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/audio_time_axis.cc:259
+msgid "Show all crossfades"
+msgstr "Alle Crossfades zeigen"
 
-#: 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/audio_time_axis.cc:267
+msgid "Show waveforms"
+msgstr "Wellenformen zeigen"
 
-#: gtk2_ardour/ardour_ui.cc:2696
-msgid "Clean Up"
-msgstr "Aufräumen"
+#: gtk2_ardour/audio_time_axis.cc:277
+msgid "Traditional"
+msgstr "Traditionell"
 
-#: gtk2_ardour/ardour_ui.cc:2699
-msgid "CleanupDialog"
-msgstr ""
+#: gtk2_ardour/audio_time_axis.cc:281
+msgid "Rectified"
+msgstr "Gleichgerichtet"
 
-#: gtk2_ardour/ardour_ui.cc:2727
-msgid "cleaned files"
-msgstr "aufgeräumte Dateien"
+#: gtk2_ardour/audio_time_axis.cc:291
+msgid "Linear"
+msgstr "Linear"
 
-#: 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/audio_time_axis.cc:294
+msgid "Logarithmic"
+msgstr "Logarithmisch"
+
+#: gtk2_ardour/audio_time_axis.cc:313
+msgid "Waveform"
+msgstr "Wellenform"
 
-#: gtk2_ardour/ardour_ui.cc:2756
-msgid "deleted file"
-msgstr "gelöschte Datei"
+#: gtk2_ardour/audio_time_axis.cc:385
+msgid "gain"
+msgstr "Gain"
 
-#: 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/audio_time_axis.cc:425
+msgid "pan"
+msgstr "Pan"
 
-#: 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/editor_imageframe.cc:624
+#: gtk2_ardour/editor_imageframe.cc:654
+msgid "programming error: no ImageFrameView selected"
+msgstr "Programmierfehler: kein ImageFrameView ausgewählt"
 
-#: 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/editor_imageframe.cc:847
+#: gtk2_ardour/editor_imageframe.cc:869
+msgid "programming error: no MarkerView selected"
+msgstr "Programmierfehler: kein MarkerView ausgewählt"
 
-#: 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/automation_time_axis.cc:55
+msgid "h"
+msgstr "h"
 
-#: 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/automation_time_axis.cc:56
+msgid "clear"
+msgstr "Leeren"
 
-#: gtk2_ardour/ardour_ui.cc:2936
-msgid "Recover from crash"
-msgstr "Daten wiederherstellen"
+#: gtk2_ardour/automation_time_axis.cc:97
+msgid "track height"
+msgstr "Anzeigehöhe"
 
-#: gtk2_ardour/ardour_ui.cc:2937
-msgid "Ignore crash data"
-msgstr "Daten verwerfen"
+#: gtk2_ardour/automation_time_axis.cc:98
+msgid "automation state"
+msgstr "Automationsmodus"
 
-#: gtk2_ardour/ardour_ui.cc:2955
-msgid "Could not disconnect from JACK"
-msgstr "Konnte Verbindung mit JACK nicht trennen"
+#: gtk2_ardour/automation_time_axis.cc:99
+msgid "clear track"
+msgstr "Spur zurücksetzen"
 
-#: gtk2_ardour/ardour_ui.cc:2968
-msgid "Could not reconnect to JACK"
-msgstr "Konnte nicht erneut zu JACK verbinden"
+#: gtk2_ardour/automation_time_axis.cc:100
+msgid "hide track"
+msgstr "Diese Spur verbergen"
 
-#: gtk2_ardour/ardour_ui2.cc:62
-msgid "UI: cannot setup editor"
-msgstr "Der Editor konnte nicht initialisiert werden."
+#: gtk2_ardour/automation_time_axis.cc:294
+msgid "clear automation"
+msgstr "Automation zurücksetzen"
 
-#: gtk2_ardour/ardour_ui2.cc:67
-msgid "UI: cannot setup mixer"
-msgstr "Der Mixer konnte nicht initialisiert werden."
+#: gtk2_ardour/automation_time_axis.cc:427
+msgid "Height"
+msgstr "Höhe"
 
-#: gtk2_ardour/ardour_ui2.cc:110
-msgid "[ERROR]: "
-msgstr "[FEHLER]:"
+#: gtk2_ardour/automation_time_axis.cc:429
+msgid "Hide"
+msgstr "Verbergen"
 
-#: gtk2_ardour/ardour_ui2.cc:112
-msgid "[WARNING]: "
-msgstr "[WARNUNG]:"
+#: gtk2_ardour/automation_time_axis.cc:431
+msgid "Clear"
+msgstr "Leeren"
 
-#: gtk2_ardour/ardour_ui2.cc:114
-msgid "[INFO]: "
-msgstr "[INFO]: "
+#: gtk2_ardour/automation_time_axis.cc:454
+msgid "State"
+msgstr "Automationssmodus"
 
-#: gtk2_ardour/ardour_ui2.cc:282
-msgid "Play from playhead"
-msgstr "Wiedergabe ab Positionszeiger"
+#: gtk2_ardour/analysis_window.cc:46
+msgid "Signal source"
+msgstr "Signalquelle"
 
-#: gtk2_ardour/ardour_ui2.cc:283
-msgid "Stop playback"
-msgstr "Wiedergabe anhalten"
+#: gtk2_ardour/analysis_window.cc:47
+msgid "Selected ranges"
+msgstr "Ausgewählte Bereiche"
 
-#: gtk2_ardour/ardour_ui2.cc:284
-msgid "Play range/selection"
-msgstr "Bereich/Auswahl wiedergeben"
+#: gtk2_ardour/analysis_window.cc:48
+msgid "Selected regions"
+msgstr "Ausgewählte Regionen"
 
-#: gtk2_ardour/ardour_ui2.cc:285
-msgid "Go to start of session"
-msgstr "Zum Anfang des Projekts springen"
+#: gtk2_ardour/analysis_window.cc:50
+msgid "Display model"
+msgstr "Anzeigetyp"
 
-#: gtk2_ardour/ardour_ui2.cc:286
-msgid "Go to end of session"
-msgstr "Zum Ende des Projekts springen"
+#: gtk2_ardour/analysis_window.cc:51
+msgid "Composite graphs for each track"
+msgstr "Graphen für jede Spur einzeln"
 
-#: gtk2_ardour/ardour_ui2.cc:287
-msgid "Play loop range"
-msgstr "Schleife wiedergeben"
+#: gtk2_ardour/analysis_window.cc:52
+msgid "Composite graph of all tracks"
+msgstr "Graphen aller Spuren zusammenfassen"
 
-#: gtk2_ardour/ardour_ui2.cc:289
-msgid "Return to last playback start when stopped"
-msgstr "Bei Stop zum letzten Wiedergabeanfang springen"
+#: gtk2_ardour/analysis_window.cc:54
+msgid "Show frequency power range"
+msgstr "Leistungsspektrum anzeigen"
 
-#: gtk2_ardour/ardour_ui2.cc:290
-msgid "Start playback after any locate"
-msgstr "Startet die Wiedergabe nach setzen des Positionszeigers"
+#: gtk2_ardour/analysis_window.cc:55
+msgid "Normalize values"
+msgstr "Normalisieren"
 
-#: gtk2_ardour/ardour_ui2.cc:291
-msgid "Be sensible about input monitoring"
-msgstr "Automatisches Input Monitoring aktivieren"
+#: gtk2_ardour/analysis_window.cc:59
+#: gtk2_ardour/analysis_window.cc:60
+msgid "FFT analysis window"
+msgstr "FFT - Analysefenster"
 
-#: gtk2_ardour/ardour_ui2.cc:292
-msgid "Start recording at auto-punch start"
-msgstr "Beginnt die Aufnahme bei Auto-Punch Start"
+#: gtk2_ardour/analysis_window.cc:67
+msgid "Track"
+msgstr "Spur"
 
-#: gtk2_ardour/ardour_ui2.cc:293
-msgid "Stop recording at auto-punch end"
-msgstr "Beginnt die Aufnahme bei Auto-Punch Ende"
+#: gtk2_ardour/analysis_window.cc:68
+msgid "Show"
+msgstr "Anzeigen"
 
-#: gtk2_ardour/ardour_ui2.cc:294
-msgid "Enable/Disable audio click"
-msgstr "Aktiviert/Deaktiviert Audio Click"
+#: gtk2_ardour/analysis_window.cc:135
+msgid "Re-analyze data"
+msgstr "Daten erneut analysieren"
 
-#: gtk2_ardour/ardour_ui2.cc:295
-msgid "Positional sync source"
-msgstr "Positionsbezogene Sync-quelle"
+#: gtk2_ardour/editor_rulers.cc:353
+msgid "New location marker"
+msgstr "Neuer Positionsmarker"
 
-#: gtk2_ardour/ardour_ui2.cc:296
-msgid "Does Ardour control the time?"
-msgstr "Bestimmt ardour die Time?"
+#: gtk2_ardour/editor_rulers.cc:354
+msgid "Clear all locations"
+msgstr "Alle Positionsmarker entfernen"
 
-#: gtk2_ardour/ardour_ui2.cc:297
-msgid "Shuttle speed control"
-msgstr "Shuttle-Geschwindigkeit"
+#: gtk2_ardour/editor_rulers.cc:355
+msgid "Unhide locations"
+msgstr "Positionen anzeigen"
 
-#: gtk2_ardour/ardour_ui2.cc:298
-#, c-format
-msgid "Select semitones or %%-age for speed display"
-msgstr "Geschwindigkeitsanzeige als Prozent oder Halbtöne einstellen"
+#: gtk2_ardour/editor_rulers.cc:360
+msgid "Clear all ranges"
+msgstr "Alle Bereiche entfernen"
 
-#: gtk2_ardour/ardour_ui2.cc:299
-msgid "Current transport speed"
-msgstr "Geschwindigkeitsanzeige"
+#: gtk2_ardour/editor_rulers.cc:361
+msgid "Unhide ranges"
+msgstr "Bereiche anzeigen"
 
-#: gtk2_ardour/ardour_ui2.cc:320
-msgid "Primary clock"
-msgstr "Primäre Zeitanzeige"
+#: gtk2_ardour/editor_rulers.cc:371
+msgid "New CD track marker"
+msgstr "Neuer CD-Track Marker"
 
-#: gtk2_ardour/ardour_ui2.cc:321
-msgid "secondary clock"
-msgstr "Sekundäre Zeitanzeige"
+#: gtk2_ardour/editor_rulers.cc:376
+msgid "New Tempo"
+msgstr "Tempowechsel einfügen..."
 
-#: gtk2_ardour/ardour_ui2.cc:347
-msgid ""
-"When active, something is soloed.\n"
-"Click to de-solo everything"
-msgstr ""
-"Wird aktiv, wenn eine Spur Solo läuft.\n"
-"Schaltet bei Klick Solo aus."
+#: gtk2_ardour/editor_rulers.cc:377
+msgid "Clear tempo"
+msgstr "Tempo zurücksetzen"
 
-#: gtk2_ardour/ardour_ui2.cc:348
-msgid ""
-"When active, auditioning is taking place\n"
-"Click to stop the audition"
-msgstr ""
-"Wird beim Vorhören aktiv.\n"
-"Klicken stoppt das Vorhören."
+#: gtk2_ardour/editor_rulers.cc:382
+msgid "New Meter"
+msgstr "Taktwechsel einfügen..."
 
-#: 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
-msgid "sprung"
-msgstr "Feder"
+#: gtk2_ardour/editor_rulers.cc:383
+msgid "Clear meter"
+msgstr "Taktart zurücksetzen"
 
-#: gtk2_ardour/ardour_ui2.cc:377
-#: gtk2_ardour/ardour_ui2.cc:828
-#: gtk2_ardour/ardour_ui_options.cc:1075
-msgid "wheel"
-msgstr "Drehrad"
+#: gtk2_ardour/gain_automation_time_axis.cc:64
+msgid "add gain automation event"
+msgstr "Punkt in die Lautstärkekurve einfügen"
 
-#: gtk2_ardour/ardour_ui2.cc:596
-msgid "Maximum speed"
-msgstr "Max. Geschwindigkeit"
+#: 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/ardour_ui2.cc:838
-#: gtk2_ardour/ardour_ui2.cc:861
-msgid "stop"
-msgstr "Stop"
+#: gtk2_ardour/editor_audio_import.cc:79
+#: gtk2_ardour/editor_audio_import.cc:112
+msgid "Add existing audio"
+msgstr "Audio importieren"
 
-#: gtk2_ardour/ardour_ui2.cc:880
-msgid "-0.55"
-msgstr "-0.55"
+#: 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/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_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/ardour_ui_dialogs.cc:170
-#: gtk2_ardour/playlist_selector.cc:73
-msgid "close"
-msgstr "Schließen"
+#: gtk2_ardour/editor_audio_import.cc:498
+msgid "importing %1"
+msgstr "importiere %1"
 
-#: gtk2_ardour/ardour_ui_ed.cc:84
-msgid "Session"
-msgstr "Projekt"
+#: 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/ardour_ui_ed.cc:85
-msgid "Import/Export"
-msgstr "Import/Export"
+#: gtk2_ardour/editor_audio_import.cc:615
+msgid "Cancel entire import"
+msgstr "Importieren Abbrechen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:86
-#: gtk2_ardour/editor.cc:576
-#: gtk2_ardour/editor.cc:647
-msgid "Regions"
-msgstr "Regionen"
+#: gtk2_ardour/editor_audio_import.cc:616
+msgid "Don't embed it"
+msgstr "Nicht einbetten"
 
-#: gtk2_ardour/ardour_ui_ed.cc:87
-msgid "Cleanup"
-msgstr "Aufräumen"
+#: gtk2_ardour/editor_audio_import.cc:617
+msgid "Embed all without questions"
+msgstr "Alle Importieren ohne nachzufragen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:88
-#: gtk2_ardour/option_editor.cc:144
-msgid "Sync"
-msgstr "Sync"
+#: 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/ardour_ui_ed.cc:89
-#: gtk2_ardour/ardour_ui_ed.cc:90
-#: gtk2_ardour/engine_dialog.cc:343
-msgid "Options"
-msgstr "Optionen"
+#: gtk2_ardour/editor_audio_import.cc:643
+msgid "Cancel"
+msgstr "Abbrechen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:91
-msgid "Help"
-msgstr "Hilfe"
+#: gtk2_ardour/editor_audio_import.cc:644
+msgid "Embed it anyway"
+msgstr "Trotzdem importieren"
 
-#: gtk2_ardour/ardour_ui_ed.cc:92
-msgid "KeyMouse Actions"
-msgstr "Tastatur/Maus-Befehle"
+#: gtk2_ardour/editor_audio_import.cc:692
+msgid "could not open %1"
+msgstr "Konnte \"%s\" nicht Ã¶ffnen."
 
-#: gtk2_ardour/ardour_ui_ed.cc:93
-msgid "Audio File Format"
-msgstr "Audio-Dateiformat"
+#: gtk2_ardour/editor_audio_import.cc:822
+msgid "insert sndfile"
+msgstr "Audiodatei einfügen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:94
-msgid "Header"
-msgstr "Header"
+#: gtk2_ardour/audio_streamview.cc:171
+msgid "programming error: %1"
+msgstr "Programmierfehler: %1"
 
-#: gtk2_ardour/ardour_ui_ed.cc:95
-msgid "Data"
-msgstr "Datenformat"
+#: gtk2_ardour/marker_time_axis.cc:209
+msgid "Remove"
+msgstr "Löschen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:96
-msgid "Control Surfaces"
-msgstr "Eingabegeräte / Controller"
+#: gtk2_ardour/marker_time_axis.cc:236
+msgid "1 seconds"
+msgstr "1 Sekunde"
 
-#: gtk2_ardour/ardour_ui_ed.cc:97
-msgid "Metering"
-msgstr "Pegelanzeige"
+#: gtk2_ardour/marker_time_axis.cc:237
+msgid "1.5 seconds"
+msgstr "1,5 Sekunden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:98
-msgid "Fall off rate"
-msgstr "Abfall der Pegelanzeige"
+#: gtk2_ardour/marker_time_axis.cc:238
+msgid "2 seconds"
+msgstr "2 Sekunden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:99
-msgid "Hold Time"
-msgstr "Pegelanzeige halten"
+#: gtk2_ardour/marker_time_axis.cc:239
+msgid "2.5 seconds"
+msgstr "2,5 Sekunden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:100
-msgid "Denormal Handling"
-msgstr "Umgang mit Denormals"
+#: gtk2_ardour/marker_time_axis.cc:240
+msgid "3 seconds"
+msgstr "3 Sekunden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:104
-#: gtk2_ardour/route_time_axis.cc:1343
-msgid "New"
-msgstr "Neu"
+#: gtk2_ardour/marker_time_axis.cc:245
+msgid "Duration (sec)"
+msgstr "Dauer (Sek)"
 
-#: gtk2_ardour/ardour_ui_ed.cc:106
-msgid "Open"
-msgstr "Öffnen"
+#: gtk2_ardour/marker_time_axis.cc:248
+msgid "Remove Marker"
+msgstr "Marker entfernen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:107
-msgid "Recent"
-msgstr "Zuletzt verwendet..."
+#: gtk2_ardour/marker_time_axis.cc:250
+msgid "Marker"
+msgstr "Marker"
 
-#: 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
-msgid "Close"
-msgstr "Schließen"
+#: gtk2_ardour/marker_time_axis.cc:251
+msgid "Rename Track"
+msgstr "Spur umbenennen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:111
-#: gtk2_ardour/route_params_ui.cc:513
-msgid "Add Track/Bus"
-msgstr "Spur/Bus hinzufügen..."
+#: gtk2_ardour/redirect_automation_time_axis.cc:95
+msgid "add automation event to "
+msgstr "Automationspunkt einfügen für"
 
-#: gtk2_ardour/ardour_ui_ed.cc:123
-msgid "Connect"
-msgstr "Verbinden"
+#: gtk2_ardour/export_session_dialog.cc:29
+msgid "Export to File"
+msgstr "Als Audiodatei exportieren"
 
-#: gtk2_ardour/ardour_ui_ed.cc:131
-msgid "Snapshot"
-msgstr "Schnappschuss..."
+#: gtk2_ardour/new_session_dialog.cc:51
+msgid "Name :"
+msgstr "Name :"
 
-#: gtk2_ardour/ardour_ui_ed.cc:134
-msgid "Save Template..."
-msgstr "Als Vorlage Speichern..."
+#: 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/ardour_ui_ed.cc:137
-msgid "Export session to audiofile..."
-msgstr "Exportiere Projekt als Audio-Datei..."
+#: gtk2_ardour/new_session_dialog.cc:76
+msgid "<b>Busses</b>"
+msgstr "<b>Busse</b>"
 
-#: gtk2_ardour/ardour_ui_ed.cc:140
-msgid "Export selection to audiofile..."
-msgstr "Exportiere Auswahlbereich als Audio-Datei..."
+#: gtk2_ardour/new_session_dialog.cc:77
+msgid "<b>Inputs</b>"
+msgstr "<b>Eingänge</b>"
 
-#: gtk2_ardour/ardour_ui_ed.cc:144
-msgid "Export range markers to audiofile..."
-msgstr "Exportiere Bereiche als Audio-Datei..."
+#: gtk2_ardour/new_session_dialog.cc:78
+msgid "<b>Outputs</b>"
+msgstr "<b>Ausgänge</b>"
 
-#: 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
-msgid "Export"
-msgstr "Exportieren"
+#: gtk2_ardour/new_session_dialog.cc:80
+msgid "Create Folder In :"
+msgstr "Verzeichnis erstellen in:"
 
-#: gtk2_ardour/ardour_ui_ed.cc:151
-msgid "Cleanup unused sources"
-msgstr "Nicht benutzte Dateien entfernen"
+#: gtk2_ardour/new_session_dialog.cc:82
+msgid "Template :"
+msgstr "Vorlage :"
 
-#: gtk2_ardour/ardour_ui_ed.cc:153
-msgid "Flush wastebasket"
-msgstr "Müll leeren"
+#: gtk2_ardour/new_session_dialog.cc:84
+msgid "Create Monitor Bus"
+msgstr "Monitor Bus erstellen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:159
-msgid "JACK"
-msgstr "JACK"
+#: gtk2_ardour/new_session_dialog.cc:91
+msgid "Create Master Bus"
+msgstr "Master Bus erstellen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:160
-msgid "Latency"
-msgstr "Latenz"
+#: gtk2_ardour/new_session_dialog.cc:93
+msgid "Automatically Connect to Physical Inputs"
+msgstr "Eingänge automatisch mit Audioeingängen verbinden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:162
-msgid "Reconnect"
-msgstr "Neu Verbinden"
+#: gtk2_ardour/new_session_dialog.cc:94
+#: gtk2_ardour/new_session_dialog.cc:107
+msgid "Use only"
+msgstr "Benutze nur"
 
-#: gtk2_ardour/ardour_ui_ed.cc:165
-#: gtk2_ardour/mixer_strip.cc:504
-#: gtk2_ardour/mixer_strip.cc:566
-msgid "Disconnect"
-msgstr "Trennen"
+#: gtk2_ardour/new_session_dialog.cc:106
+msgid "Automatically Connect Outputs"
+msgstr "Ausgänge automatisch verbinden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:192
-msgid "Windows"
-msgstr "Fenster"
+#: gtk2_ardour/new_session_dialog.cc:115
+msgid "... to Master Bus"
+msgstr "... mit Master Bus"
 
-#: gtk2_ardour/ardour_ui_ed.cc:193
-msgid "Quit"
-msgstr "Beenden"
+#: gtk2_ardour/new_session_dialog.cc:116
+msgid "... to Physical Outputs"
+msgstr "... mit Audioausgängen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:197
-msgid "Maximise Editor Space"
-msgstr "Editor Maximieren"
+#: gtk2_ardour/new_session_dialog.cc:122
+msgid "Advanced Options"
+msgstr "Erweiterte Einstellungen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:199
-msgid "Show Editor"
-msgstr "Editor anzeigen"
+#: gtk2_ardour/new_session_dialog.cc:130
+msgid "Recent:"
+msgstr "Zuletzt verwendet:"
 
-#: gtk2_ardour/ardour_ui_ed.cc:200
-msgid "Show Mixer"
-msgstr "Mixer anzeigen"
+#: gtk2_ardour/new_session_dialog.cc:167
+msgid "Browse:"
+msgstr "Durchsuchen:"
 
-#: gtk2_ardour/ardour_ui_ed.cc:201
-#: gtk2_ardour/option_editor.cc:117
-msgid "Preferences"
-msgstr "Einstellungen"
+#: gtk2_ardour/new_session_dialog.cc:379
+msgid "Session Control"
+msgstr "Projektübersicht"
 
-#: gtk2_ardour/ardour_ui_ed.cc:202
-#: gtk2_ardour/route_params_ui.cc:143
-#: gtk2_ardour/route_params_ui.cc:659
-msgid "Track/Bus Inspector"
-msgstr "Verbindungen"
+#: gtk2_ardour/new_session_dialog.cc:391
+msgid "Recent Sessions"
+msgstr "Zuletzt verwendete Projekte"
 
-#: gtk2_ardour/ardour_ui_ed.cc:204
-#: gtk2_ardour/connection_editor.cc:146
-#: gtk2_ardour/connection_editor.cc:147
-msgid "Connections"
-msgstr "Verbindungen"
+#: gtk2_ardour/new_session_dialog.cc:419
+msgid "select template"
+msgstr "Vorlage auswählen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:206
-#: gtk2_ardour/location_ui.cc:611
-msgid "Locations"
-msgstr "Positionen"
+#: gtk2_ardour/new_session_dialog.cc:425
+msgid "select session file"
+msgstr "Projektdatei auswählen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:208
-msgid "Big Clock"
-msgstr "Große Zeitanzeige"
+#: gtk2_ardour/new_session_dialog.cc:434
+msgid "select directory"
+msgstr "Verzeichnis auswählen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:210
-msgid "About"
-msgstr "Ãœber ardour..."
+#: gtk2_ardour/new_session_dialog.cc:493
+msgid "Audio Setup"
+msgstr "Audio-Einstellungen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:211
-msgid "Theme Manager"
-msgstr "Thema"
+#: gtk2_ardour/new_session_dialog.cc:517
+msgid "New Session"
+msgstr "Neues Projekt"
 
-#: gtk2_ardour/ardour_ui_ed.cc:212
-msgid "Keybindings"
-msgstr "Tastaturbefehle"
+#: gtk2_ardour/new_session_dialog.cc:522
+msgid "Open Session"
+msgstr "Projekt Ã¶ffnen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:214
-msgid "Add Audio Track"
-msgstr "Audiospur hinzufügen"
+#: gtk2_ardour/panner_ui.cc:57
+#: gtk2_ardour/panner_ui.cc:272
+msgid "link"
+msgstr "link"
 
-#: gtk2_ardour/ardour_ui_ed.cc:216
-msgid "Add Audio Bus"
-msgstr "Audio-Bus hinzufügen"
+#: gtk2_ardour/panner_ui.cc:70
+msgid "Pan automation mode"
+msgstr "Pan-Automationsmodus"
 
-#: gtk2_ardour/ardour_ui_ed.cc:218
-msgid "Save"
-msgstr "Speichern"
+#: gtk2_ardour/panner_ui.cc:71
+msgid "Pan automation type"
+msgstr "Pan-Automationstyp"
 
-#: gtk2_ardour/ardour_ui_ed.cc:220
-#: gtk2_ardour/editor_actions.cc:377
-msgid "Remove Last Capture"
-msgstr "Letzte Aufnahme entfernen"
+#: gtk2_ardour/panner_ui.cc:81
+msgid "panning link control"
+msgstr "Pan-Regler verbinden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:227
-msgid "Transport"
-msgstr "Transport"
+#: gtk2_ardour/panner_ui.cc:83
+msgid "panning link direction"
+msgstr "Richtung der Verbindung"
 
-#: gtk2_ardour/ardour_ui_ed.cc:233
-#: gtk2_ardour/engine_dialog.cc:56
-#: gtk2_ardour/sfdb_ui.cc:178
-msgid "Stop"
-msgstr "Stop"
+#: gtk2_ardour/panner_ui.cc:275
+msgid "L"
+msgstr "L"
 
-#: gtk2_ardour/ardour_ui_ed.cc:236
-msgid "Roll"
-msgstr "Wiedergabe"
+#: gtk2_ardour/panner_ui.cc:395
+#, c-format
+msgid "panner for channel %zu"
+msgstr "Pan-Regler für Kanal %zu"
 
-#: gtk2_ardour/ardour_ui_ed.cc:240
-msgid "Start/Stop"
-msgstr "Start/Stop"
+#: gtk2_ardour/panner_ui.cc:466
+msgid "Mute"
+msgstr "Mute"
 
-#: gtk2_ardour/ardour_ui_ed.cc:243
-msgid "Stop + Forget Capture"
-msgstr "Stop + Aufnahme verwerfen"
+#: gtk2_ardour/panner_ui.cc:474
+msgid "Bypass"
+msgstr "Bypass"
 
-#: gtk2_ardour/ardour_ui_ed.cc:253
-msgid "Transition To Roll"
-msgstr "Vorwärts wiedergeben"
+#: gtk2_ardour/panner_ui.cc:482
+msgid "Reset"
+msgstr "Zurücksetzen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:257
-msgid "Transition To Reverse"
-msgstr "Rückwärts wiedergeben"
+#: gtk2_ardour/panner_ui.cc:484
+msgid "Reset all"
+msgstr "Alle zurücksetzen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:262
-msgid "Play Loop Range"
-msgstr "Schleife wiedergeben"
+#: gtk2_ardour/opts.cc:50
+msgid "Usage: "
+msgstr "Aufruf:"
 
-#: gtk2_ardour/ardour_ui_ed.cc:265
-msgid "Play Selection"
-msgstr "Ausgewählten Bereich wiedergeben"
+#: gtk2_ardour/opts.cc:51
+msgid "  -v, --version                    Show version information\n"
+msgstr "  -v, --version                    Versionsinformation ausgeben\n"
 
-#: gtk2_ardour/ardour_ui_ed.cc:269
-msgid "Enable Record"
-msgstr "Aufnahme aktivieren"
+#: gtk2_ardour/opts.cc:52
+msgid "  -h, --help                       Print this message\n"
+msgstr "  -h, --help                       Diese Hinweise\n"
 
-#: gtk2_ardour/ardour_ui_ed.cc:271
-msgid "Start Recording"
-msgstr "Aufnahme beginnen"
+#: 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/ardour_ui_ed.cc:274
-msgid "Rewind"
-msgstr "Rückwärts"
+#: 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/ardour_ui_ed.cc:277
-msgid "Rewind (Slow)"
-msgstr "Rückwärts (langsam)"
+#: 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/ardour_ui_ed.cc:280
-msgid "Rewind (Fast)"
-msgstr "Rückwärts (schnell)"
+#: gtk2_ardour/opts.cc:56
+msgid "  -n, --show-splash                Show splash screen\n"
+msgstr "  -n, --show-splash               Zeige Splashscreen\n"
 
-#: gtk2_ardour/ardour_ui_ed.cc:283
-msgid "Forward"
-msgstr "Vorwärts"
+#: 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/ardour_ui_ed.cc:286
-msgid "Forward (Slow)"
-msgstr "Vorwärts (langsam)"
+#: 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/ardour_ui_ed.cc:289
-msgid "Forward (Fast)"
-msgstr "Vorwärts (schnell)"
+#: 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/ardour_ui_ed.cc:292
-msgid "Goto Zero"
-msgstr "Zum Nullpunkt springen"
+#: 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/ardour_ui_ed.cc:295
-msgid "Goto Start"
-msgstr "Zum Anfang springen"
+#: gtk2_ardour/opts.cc:62
+msgid "  -V, --novst                      Do not use VST support\n"
+msgstr "  -V, --novst                      VST-Unterstützung ausschalten\n"
 
-#: gtk2_ardour/ardour_ui_ed.cc:298
-msgid "Goto End"
-msgstr "Zum Ende Springen"
+#: 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/ardour_ui_ed.cc:302
-msgid "Focus On Clock"
-msgstr "Fokus auf Zeitanzeige setzen"
+#: gtk2_ardour/opts.cc:65
+msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
+msgstr "  -C, --curvetest filename         Kurvenalgorithmus debuggen\n"
 
-#: gtk2_ardour/ardour_ui_ed.cc:325
-msgid "Sync startup to video"
-msgstr "Mit Video synchronisieren"
+#: 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_ed.cc:326
-msgid "Time master"
-msgstr "Time Master"
+#: 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_ed.cc:329
-msgid "Toggle Record Enable Track1"
-msgstr "Aufnahme aktivieren für Spur 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_ed.cc:331
-msgid "Toggle Record Enable Track2"
-msgstr "Aufnahme aktivieren für Spur 2"
+#: 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_ed.cc:333
-msgid "Toggle Record Enable Track3"
-msgstr "Aufnahme aktivieren für Spur 3"
+#: 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_ed.cc:335
-msgid "Toggle Record Enable Track4"
-msgstr "Aufnahme aktivieren für Spur 4"
+#: 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_ed.cc:337
-msgid "Toggle Record Enable Track5"
-msgstr "Aufnahme aktivieren für Spur 5"
+#: 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_ed.cc:339
-msgid "Toggle Record Enable Track6"
-msgstr "Aufnahme aktivieren für Spur 6"
+#: gtk2_ardour/ardour_ui_options.cc:1180
+msgid "ST"
+msgstr "HT"
 
-#: gtk2_ardour/ardour_ui_ed.cc:341
-msgid "Toggle Record Enable Track7"
-msgstr "Aufnahme aktivieren für Spur 7"
+#: 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/ardour_ui_ed.cc:343
-msgid "Toggle Record Enable Track8"
-msgstr "Aufnahme aktivieren für Spur 8"
+#: gtk2_ardour/about.cc:201
+msgid "Copyright (C) 1999-2008 Paul Davis\n"
+msgstr "Copyright (C) 1999-2008 Paul Davis\n"
 
-#: gtk2_ardour/ardour_ui_ed.cc:345
-msgid "Toggle Record Enable Track9"
-msgstr "Aufnahme aktivieren für Spur 9"
+#: 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/ardour_ui_ed.cc:347
-msgid "Toggle Record Enable Track10"
-msgstr "Aufnahme aktivieren für Spur 10"
+#: gtk2_ardour/about.cc:207
+msgid "visit http://www.ardour.org/"
+msgstr "besuchen Sie  http://www.ardour.org"
 
-#: gtk2_ardour/ardour_ui_ed.cc:349
-msgid "Toggle Record Enable Track11"
-msgstr "Aufnahme aktivieren für Spur 11"
+#: gtk2_ardour/about.cc:208
+msgid ""
+"%1\n"
+"(built from revision %2)"
+msgstr ""
+"%1\n"
+"(Aus Revision %2 erstellt)"
 
-#: gtk2_ardour/ardour_ui_ed.cc:351
-msgid "Toggle Record Enable Track12"
-msgstr "Aufnahme aktivieren für Spur 12"
+#: 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/ardour_ui_ed.cc:353
-msgid "Toggle Record Enable Track13"
-msgstr "Aufnahme aktivieren für Spur 13"
+#: gtk2_ardour/pan_automation_time_axis.cc:90
+msgid "add pan automation event"
+msgstr "Pan-Automationspunkt einfügen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:355
-msgid "Toggle Record Enable Track14"
-msgstr "Aufnahme aktivieren für Spur 14"
+#: gtk2_ardour/automation_line.cc:610
+msgid "Ignoring illegal points on AutomationLine \"%1\""
+msgstr "Unzulässige Automationspunkte werden ignoriert: \"%1\""
 
-#: gtk2_ardour/ardour_ui_ed.cc:357
-msgid "Toggle Record Enable Track15"
-msgstr "Aufnahme aktivieren für Spur 15"
+#: gtk2_ardour/automation_line.cc:800
+msgid "automation event move"
+msgstr "Automationspunkt bewegen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:359
-msgid "Toggle Record Enable Track16"
-msgstr "Aufnahme aktivieren für Spur 16"
+#: gtk2_ardour/automation_line.cc:802
+msgid "automation range drag"
+msgstr "Automationsbereich bewegen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:361
-msgid "Toggle Record Enable Track17"
-msgstr "Aufnahme aktivieren für Spur 17"
+#: gtk2_ardour/automation_line.cc:1027
+msgid "remove control point"
+msgstr "Automationspunkt entfernen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:363
-msgid "Toggle Record Enable Track18"
-msgstr "Aufnahme aktivieren für Spur 18"
+#: gtk2_ardour/editor_route_list.cc:369
+#: gtk2_ardour/mixer_ui.cc:917
+msgid "Show All"
+msgstr "Alles zeigen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:365
-msgid "Toggle Record Enable Track19"
-msgstr "Aufnahme aktivieren für Spur 19"
+#: gtk2_ardour/editor_route_list.cc:370
+#: gtk2_ardour/mixer_ui.cc:918
+msgid "Hide All"
+msgstr "Alle verbergen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:367
-msgid "Toggle Record Enable Track20"
-msgstr "Aufnahme aktivieren für Spur 20"
+#: 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/ardour_ui_ed.cc:369
-msgid "Toggle Record Enable Track21"
-msgstr "Aufnahme aktivieren für Spur 21"
+#: 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/ardour_ui_ed.cc:371
-msgid "Toggle Record Enable Track22"
-msgstr "Aufnahme aktivieren für Spur 22"
+#: 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/ardour_ui_ed.cc:373
-msgid "Toggle Record Enable Track23"
-msgstr "Aufnahme aktivieren für Spur 23"
+#: 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/ardour_ui_ed.cc:375
-msgid "Toggle Record Enable Track24"
-msgstr "Aufnahme aktivieren für Spur 24"
+#: gtk2_ardour/editor_timefx.cc:71
+msgid "Quick but Ugly"
+msgstr "Quick but Ugly"
 
-#: gtk2_ardour/ardour_ui_ed.cc:377
-msgid "Toggle Record Enable Track25"
-msgstr "Aufnahme aktivieren für Spur 25"
+#: gtk2_ardour/editor_timefx.cc:72
+msgid "Skip Anti-aliasing"
+msgstr "Ãœberspringe Anti-Aliasing"
 
-#: gtk2_ardour/ardour_ui_ed.cc:379
-msgid "Toggle Record Enable Track26"
-msgstr "Aufnahme aktivieren für Spur 26"
+#: gtk2_ardour/editor_timefx.cc:73
+msgid "Contents:"
+msgstr "Inhalt:"
 
-#: gtk2_ardour/ardour_ui_ed.cc:381
-msgid "Toggle Record Enable Track27"
-msgstr "Aufnahme aktivieren für Spur 27"
+#: gtk2_ardour/editor_timefx.cc:74
+msgid "Strict Linear"
+msgstr "Linear"
 
-#: gtk2_ardour/ardour_ui_ed.cc:383
-msgid "Toggle Record Enable Track28"
-msgstr "Aufnahme aktivieren für Spur 28"
+#: gtk2_ardour/editor_timefx.cc:82
+msgid "Pitch Shift"
+msgstr "Pitch-Shift"
 
-#: gtk2_ardour/ardour_ui_ed.cc:385
-msgid "Toggle Record Enable Track29"
-msgstr "Aufnahme aktivieren für Spur 29"
+#: gtk2_ardour/editor_timefx.cc:84
+msgid "Time Stretch"
+msgstr "Time-Stretch"
 
-#: gtk2_ardour/ardour_ui_ed.cc:387
-msgid "Toggle Record Enable Track30"
-msgstr "Aufnahme aktivieren für Spur 30"
+#: gtk2_ardour/editor_timefx.cc:100
+msgid "Octaves"
+msgstr "Oktaven"
 
-#: gtk2_ardour/ardour_ui_ed.cc:389
-msgid "Toggle Record Enable Track31"
-msgstr "Aufnahme aktivieren für Spur 31"
+#: gtk2_ardour/editor_timefx.cc:104
+msgid "Semitones (12TET)"
+msgstr "Halbtöne"
 
-#: gtk2_ardour/ardour_ui_ed.cc:391
-msgid "Toggle Record Enable Track32"
-msgstr "Aufnahme aktivieren für Spur 32"
+#: gtk2_ardour/editor_timefx.cc:108
+msgid "Cents"
+msgstr "Cents"
 
-#: gtk2_ardour/ardour_ui_ed.cc:396
-msgid "Percentage"
-msgstr "Prozent"
+#: gtk2_ardour/editor_timefx.cc:114
+msgid "Shift"
+msgstr "Shift"
 
-#: gtk2_ardour/ardour_ui_ed.cc:397
-msgid "Semitones"
-msgstr "Halbtöne"
+#: gtk2_ardour/editor_timefx.cc:149
+msgid "Stretch/Shrink"
+msgstr "Stretch/Shrink"
 
-#: gtk2_ardour/ardour_ui_ed.cc:401
-msgid "Send MTC"
-msgstr "MTC senden"
+#: 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/ardour_ui_ed.cc:403
-msgid "Send MMC"
-msgstr "MMC senden"
+#: gtk2_ardour/editor_timefx.cc:405
+msgid "pitch shift"
+msgstr "pitch-shift"
 
-#: gtk2_ardour/ardour_ui_ed.cc:405
-msgid "Use MMC"
-msgstr "Benutze MMC"
+#: gtk2_ardour/editor_timefx.cc:405
+msgid "time stretch"
+msgstr "Time-Stretch"
 
-#: gtk2_ardour/ardour_ui_ed.cc:407
-msgid "Send MIDI feedback"
-msgstr "MIDI Feedback senden"
+#: gtk2_ardour/io_selector.cc:59
+#: gtk2_ardour/io_selector.cc:749
+msgid "OK"
+msgstr "OK"
 
-#: gtk2_ardour/ardour_ui_ed.cc:410
-msgid "Use OSC"
-msgstr "Aktiviere OSC"
+#: gtk2_ardour/io_selector.cc:61
+#: gtk2_ardour/io_selector.cc:751
+msgid "Rescan"
+msgstr "Auffrischen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:415
-msgid "Sync Editor and Mixer track order"
-msgstr "Einheitliche Reihenfolge der Spuren im Editor und Mixer"
+#: gtk2_ardour/io_selector.cc:69
+msgid "%1 input"
+msgstr "%1 Eingang"
 
-#: gtk2_ardour/ardour_ui_ed.cc:416
-msgid "Stop plugins with transport"
-msgstr "Plugins mit Transport stoppen"
+#: gtk2_ardour/io_selector.cc:71
+msgid "%1 output"
+msgstr "%1 Ausgang"
 
-#: gtk2_ardour/ardour_ui_ed.cc:417
-msgid "Verify remove last capture"
-msgstr "Verwerfen der letzten Aufnahme bestätigen"
+#: gtk2_ardour/io_selector.cc:143
+msgid "Inputs"
+msgstr "Eingänge"
 
-#: gtk2_ardour/ardour_ui_ed.cc:418
-msgid "Make periodic safety backups"
-msgstr "Erstelle regelmäßig Sicherungskopien"
+#: gtk2_ardour/io_selector.cc:143
+msgid "Outputs"
+msgstr "Ausgänge"
 
-#: gtk2_ardour/ardour_ui_ed.cc:419
-msgid "Stop recording on xrun"
-msgstr "Aufnahme bei XRUN stoppen"
+#: gtk2_ardour/io_selector.cc:144
+msgid "Add Input"
+msgstr "Hinzufügen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:420
-msgid "Stop transport at session end"
-msgstr "Transport am Ende des Projekts stoppen"
+#: gtk2_ardour/io_selector.cc:144
+msgid "Add Output"
+msgstr "Hinzufügen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:421
-msgid "-12dB gain reduce ffwd/rewind"
-msgstr "Beim Spulen Pegel um -12dB absenken"
+#: gtk2_ardour/io_selector.cc:145
+msgid "Remove Input"
+msgstr "Entfernen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:422
-msgid "Rec-enable stays engaged at stop"
-msgstr "Aufnahmestatus bleibt nach Stop erhalten"
+#: gtk2_ardour/io_selector.cc:145
+msgid "Remove Output"
+msgstr "Entfernen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:423
-msgid "Region equivalents overlap"
-msgstr "Region entspricht Ãœberdeckung"
+#: gtk2_ardour/io_selector.cc:146
+msgid "Disconnect All"
+msgstr "Alle trennen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:424
-msgid "Primary Clock delta to edit point"
-msgstr "Primäre Zeitanzeige zeigt Abstand zum Arbeitspunkt"
+#: gtk2_ardour/io_selector.cc:160
+msgid "Available connections"
+msgstr "Verfügbare Verbindungen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:425
-msgid "Secondary Clock delta to edit point"
-msgstr "Sekundäre Zeitanzeige zeigt Abstand zum Arbeitspunkt"
+#: 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/ardour_ui_ed.cc:426
-msgid "Enable Editor Meters"
-msgstr "Aktiviere Pegelanzeigen im Editor"
+#: gtk2_ardour/io_selector.cc:755
+msgid "ardour: "
+msgstr "ardour: "
 
-#: gtk2_ardour/ardour_ui_ed.cc:427
-msgid "Always copy imported files"
-msgstr "Importierte Dateien immer kopieren"
+#: gtk2_ardour/editor_selection_list.cc:180
+msgid "Name for Chunk:"
+msgstr "Name für Abschnitt:"
 
-#: gtk2_ardour/ardour_ui_ed.cc:431
-msgid "Use DC bias"
-msgstr "DC bias aktivieren"
+#: gtk2_ardour/editor_selection_list.cc:183
+msgid "Create Chunk"
+msgstr "Abschnitt erzeugen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:433
-msgid "No processor handling"
-msgstr "Keine Korrekturen"
+#: gtk2_ardour/editor_selection_list.cc:183
+msgid "Forget it"
+msgstr "Abbrechen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:442
-#: gtk2_ardour/ardour_ui_ed.cc:453
-msgid "Use FlushToZero"
-msgstr "Benutze FlushToZero"
+#: 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/ardour_ui_ed.cc:444
-#: gtk2_ardour/ardour_ui_ed.cc:458
-msgid "Use DenormalsAreZero"
-msgstr "Benutze DenormalsAreZero"
+#: gtk2_ardour/time_axis_view.cc:626
+msgid "Largest"
+msgstr "Am größten"
 
-#: gtk2_ardour/ardour_ui_ed.cc:446
-#: gtk2_ardour/ardour_ui_ed.cc:463
-msgid "Use FlushToZero & DenormalsAreZero"
-msgstr "Benutze FlushToZero & DenormalsAreZero"
+#: gtk2_ardour/time_axis_view.cc:627
+msgid "Large"
+msgstr "Groß"
 
-#: gtk2_ardour/ardour_ui_ed.cc:469
-msgid "Do not run plugins while recording"
-msgstr "Plugins während der Aufnahme daktivieren"
+#: gtk2_ardour/time_axis_view.cc:628
+msgid "Larger"
+msgstr "Größer"
 
-#: gtk2_ardour/ardour_ui_ed.cc:471
-msgid "Latched solo"
-msgstr "Latch Solo"
+#: gtk2_ardour/time_axis_view.cc:629
+msgid "Normal"
+msgstr "Normal"
 
-#: gtk2_ardour/ardour_ui_ed.cc:473
-msgid "Show solo muting"
-msgstr "Solo als Mute anzeigen"
+#: gtk2_ardour/time_axis_view.cc:630
+msgid "Smaller"
+msgstr "Kleiner"
 
-#: 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/time_axis_view.cc:631
+msgid "Small"
+msgstr "Klein"
 
-#: 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
-msgid "Slowest"
-msgstr "Sehr langsam"
+#: 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/ardour_ui_ed.cc:483
-#: gtk2_ardour/editor.cc:1339
-#: gtk2_ardour/editor.cc:1361
-msgid "Slow"
-msgstr "Langsam"
+#: gtk2_ardour/redirect_box.cc:239
+msgid "New send"
+msgstr "Neuer Send"
 
-#: gtk2_ardour/ardour_ui_ed.cc:484
-#: gtk2_ardour/ardour_ui_ed.cc:491
-msgid "Medium"
-msgstr "Mittel"
+#: gtk2_ardour/redirect_box.cc:240
+msgid "Show send controls"
+msgstr "Zeige Send-Steuerung"
 
-#: 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
-msgid "Fast"
-msgstr "Schnell"
+#: 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/ardour_ui_ed.cc:486
-msgid "Faster"
-msgstr "Schneller"
+#: 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/ardour_ui_ed.cc:487
-#: gtk2_ardour/editor.cc:1341
-#: gtk2_ardour/editor.cc:1363
-#: gtk2_ardour/sfdb_ui.cc:1071
-msgid "Fastest"
-msgstr "Schnellstmöglich"
+#: 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/ardour_ui_ed.cc:490
-#: gtk2_ardour/editor_actions.cc:79
-msgid "Short"
-msgstr "Kurz"
+#: 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/ardour_ui_ed.cc:492
-msgid "Long"
-msgstr "Lange"
+#: gtk2_ardour/redirect_box.cc:503
+msgid "Cannot set up new send: %1"
+msgstr "Kann keinen neuen Send erstellen: %1"
 
-#: gtk2_ardour/ardour_ui_ed.cc:511
-msgid "Hardware monitoring"
-msgstr "Hardware Monitoring"
+#: 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/ardour_ui_ed.cc:512
-msgid "Software monitoring"
-msgstr "Software Monitoring"
+#: 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/ardour_ui_ed.cc:513
-msgid "External monitoring"
-msgstr "Externes Monitoring"
+#: gtk2_ardour/redirect_box.cc:882
+msgid "rename redirect"
+msgstr "Redirect umbenennen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:517
-msgid "Solo in-place"
-msgstr "Solo-In-Place"
+#: 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/ardour_ui_ed.cc:519
-msgid "Solo via bus"
-msgstr "Solo Ã¼ber Bus"
+#: 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/ardour_ui_ed.cc:524
-msgid "Auto-connect inputs to physical inputs"
-msgstr "Eingänge automatisch mit Audioeingängen verbinden"
+#: 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/ardour_ui_ed.cc:526
-msgid "Manually connect inputs"
-msgstr "Eingänge manuell verbinden"
+#: 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/ardour_ui_ed.cc:531
-msgid "Auto-connect outputs to physical outs"
-msgstr "Ausgänge automatisch mit Audioausgängen verbinden"
+#: 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/ardour_ui_ed.cc:533
-msgid "Auto-connect outputs to master bus"
-msgstr "Ausgänge automatisch mit Master-Bus verbinden"
+#: gtk2_ardour/redirect_box.cc:1047
+msgid "Yes, remove them all"
+msgstr "Ja, alle löschen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:535
-msgid "Manually connect outputs"
-msgstr "Ausgänge manuell verbinden"
+#: 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/ardour_ui_ed.cc:540
-msgid "Remote ID assigned by User"
-msgstr "Fernsteuerungs-ID vom Benutzer festgelegt"
+#: gtk2_ardour/redirect_box.cc:1194
+msgid "New Plugin"
+msgstr "Plugin einfügen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:542
-msgid "Remote ID follows order of Mixer"
-msgstr "Fernsteuerungs-ID aus Reihenfolge im Mixer"
+#: gtk2_ardour/redirect_box.cc:1196
+msgid "New Insert"
+msgstr "Insert einfügen"
 
-#: gtk2_ardour/ardour_ui_ed.cc:544
-msgid "Remote ID follows order of Editor"
-msgstr "Fernsteuerungs-ID aus Reihenfolge im Editor"
+#: gtk2_ardour/redirect_box.cc:1198
+msgid "New Send ..."
+msgstr "Send einfügen..."
 
-#: gtk2_ardour/ardour_ui_ed.cc:693
-#: gtk2_ardour/generic_pluginui.cc:168
-msgid "Controls"
-msgstr "Steuerelemente"
+#: gtk2_ardour/redirect_box.cc:1204
+msgid "Cut"
+msgstr "Ausschneiden"
 
-#: gtk2_ardour/ardour_ui_ed.cc:697
-msgid "Feedback"
-msgstr "Feedback"
+#: gtk2_ardour/redirect_box.cc:1206
+msgid "Copy"
+msgstr "Kopieren"
 
-#: gtk2_ardour/ardour_ui_ed.cc:803
-msgid "Clock"
-msgstr "Zeitanzeige"
+#: gtk2_ardour/redirect_box.cc:1209
+msgid "Delete"
+msgstr "Löschen"
 
-#: 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/redirect_box.cc:1212
+msgid "Paste"
+msgstr "Einfügen"
 
-#: 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/redirect_box.cc:1215
+msgid "Select All"
+msgstr "Alles auswählen"
 
-#: 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/redirect_box.cc:1216
+msgid "Deselect All"
+msgstr "Nichts auswählen"
 
-#: 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/redirect_box.cc:1219
+msgid "Activate"
+msgstr "Aktivieren"
 
-#: 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/redirect_box.cc:1221
+msgid "Deactivate"
+msgstr "Deaktivieren"
 
-#: 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_box.cc:1223
+msgid "Activate all"
+msgstr "Alle aktivieren"
 
-#: 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/redirect_box.cc:1224
+msgid "Deactivate all"
+msgstr "Alle deaktivieren"
 
-#: gtk2_ardour/ardour_ui_options.cc:1086
-msgid "ST"
-msgstr "HT"
+#: gtk2_ardour/redirect_box.cc:1227
+msgid "Edit"
+msgstr "Bearbeiten"
 
-#: gtk2_ardour/audio_clock.cc:1885
-#: gtk2_ardour/editor.cc:179
-#: gtk2_ardour/editor_rulers.cc:410
-msgid "Timecode"
-msgstr "Timecode"
+#: gtk2_ardour/redirect_box.cc:1417
+msgid "%1: %2 (by %3)"
+msgstr "%1: %2 (by %3)"
 
-#: 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/mixer_ui.cc:88
+msgid "Strips"
+msgstr "Spur"
 
-#: gtk2_ardour/audio_clock.cc:1887
-msgid "Minutes:Seconds"
-msgstr "Minuten:Sekunden"
+#: gtk2_ardour/mixer_ui.cc:114
+msgid "Group"
+msgstr "Gruppe"
 
-#: gtk2_ardour/audio_clock.cc:1888
-#: gtk2_ardour/editor.cc:180
-#: gtk2_ardour/editor_rulers.cc:416
-msgid "Samples"
-msgstr "Samples"
+#: gtk2_ardour/mixer_ui.cc:115
+msgid "Active"
+msgstr "Aktiv"
 
-#: gtk2_ardour/route_time_axis.cc:88
-msgid "m"
-msgstr "m"
+#: gtk2_ardour/mixer_ui.cc:210
+#: gtk2_ardour/mixer_ui.cc:440
+#: gtk2_ardour/mixer_ui.cc:472
+msgid "Mixer"
+msgstr "Mixer"
 
-#: gtk2_ardour/route_time_axis.cc:88
-msgid "s"
-msgstr "s"
+#: 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/route_time_axis.cc:88
-msgid "r"
-msgstr "r"
+#: gtk2_ardour/utils.cc:138
+#: gtk2_ardour/utils.cc:181
+msgid "bad XPM header %1"
+msgstr "Fehlerhafter XPM Header %1"
 
-#: gtk2_ardour/route_time_axis.cc:92
-msgid "g"
-msgstr "g"
+#: gtk2_ardour/utils.cc:320
+msgid "missing RGBA style for \"%1\""
+msgstr "Fehlender RGBA Style für \"%1\""
 
-#: gtk2_ardour/route_time_axis.cc:93
-msgid "p"
-msgstr "w"
+#: gtk2_ardour/utils.cc:343
+msgid "no style found for %1, using red"
+msgstr "Kein Stil für %1 gefunden, verwende rot"
 
-#: 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/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/route_time_axis.cc:95
-msgid "a"
-msgstr "a"
+#: gtk2_ardour/utils.cc:583
+msgid "cannot find icon image for %1"
+msgstr "Konnte Icon-Bild für %1 nicht finden"
 
-#: gtk2_ardour/route_time_axis.cc:96
 #: gtk2_ardour/visual_time_axis.cc:72
 msgid "v"
 msgstr "v"
 
-#: gtk2_ardour/route_time_axis.cc:154
-#: gtk2_ardour/mixer_strip.cc:88
-msgid "Record"
-msgstr "Aufnahme"
-
-#: 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/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/route_time_axis.cc:170
-msgid "Edit Group"
-msgstr "Bearbeitungsgruppe"
-
-#: gtk2_ardour/route_time_axis.cc:171
 #: gtk2_ardour/visual_time_axis.cc:91
 msgid "Display Height"
 msgstr "Anzeigehöhe"
 
-#: gtk2_ardour/route_time_axis.cc:172
-msgid "Playlist"
-msgstr "Wiedergabeliste"
-
-#: gtk2_ardour/route_time_axis.cc:173
-#: gtk2_ardour/route_time_axis.cc:431
-msgid "Automation"
-msgstr "Automationen"
-
-#: gtk2_ardour/route_time_axis.cc:174
 #: gtk2_ardour/visual_time_axis.cc:92
 msgid "Visual options"
 msgstr "Visuelle optionen"
 
-#: gtk2_ardour/route_time_axis.cc:175
 #: gtk2_ardour/visual_time_axis.cc:93
 msgid "Hide this track"
 msgstr "Diese Spur verbergen"
 
-#: gtk2_ardour/route_time_axis.cc:282
-#: gtk2_ardour/mixer_strip.cc:907
-msgid "No group"
-msgstr "keine Gruppe"
-
-#: gtk2_ardour/route_time_axis.cc:391
-msgid "Show all automation"
-msgstr "Alle Automationen zeigen"
-
-#: gtk2_ardour/route_time_axis.cc:394
-msgid "Show existing automation"
-msgstr "Verfügbare Automationen zeigen"
-
-#: gtk2_ardour/route_time_axis.cc:397
-msgid "Hide all automation"
-msgstr "Automationen verbergen"
-
-#: gtk2_ardour/route_time_axis.cc:400
-msgid "Plugins"
-msgstr "Plugins"
-
-#: 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/visual_time_axis.cc:227
+msgid "ardour: color selection"
+msgstr "ardour: Farbe auswählen"
 
-#: 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/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/route_time_axis.cc:430
-#: gtk2_ardour/mixer_strip.cc:995
-msgid "Remote Control ID"
-msgstr "ID für Fernsteuerung"
+#: gtk2_ardour/visual_time_axis.cc:268
+msgid "No, do nothing."
+msgstr "Nein, nichts machen."
 
-#: gtk2_ardour/route_time_axis.cc:447
-msgid "Align with existing material"
-msgstr "An vorhandenem Material ausrichten"
+#: gtk2_ardour/visual_time_axis.cc:269
+msgid "Yes, remove it."
+msgstr "Ja, entfernen."
 
-#: gtk2_ardour/route_time_axis.cc:453
-msgid "Align with capture time"
-msgstr "An Aufnahmezeit ausrichten"
+#: gtk2_ardour/visual_time_axis.cc:315
+msgid "new name: "
+msgstr "Neuer Name: "
 
-#: gtk2_ardour/route_time_axis.cc:460
-msgid "Alignment"
-msgstr "Ausrichtung"
+#: 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/route_time_axis.cc:464
-msgid "Normal mode"
-msgstr "Normaler Modus"
+#: gtk2_ardour/crossfade_edit.cc:74
+msgid "ardour: x-fade edit"
+msgstr "ardour: Crossfade Editor"
 
-#: gtk2_ardour/route_time_axis.cc:467
-msgid "Tape mode"
-msgstr "Tape-Modus"
+#: gtk2_ardour/crossfade_edit.cc:79
+msgid "Fade"
+msgstr "Fade"
 
-#: 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/crossfade_edit.cc:80
+msgid "Out (dry)"
+msgstr "Out (dry)"
 
-#: 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
-msgid "Remove"
-msgstr "Löschen"
+#: gtk2_ardour/crossfade_edit.cc:81
+msgid "Out"
+msgstr "Out"
 
-#: 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/crossfade_edit.cc:82
+msgid "In (dry)"
+msgstr "In (dry)"
 
-#: gtk2_ardour/route_time_axis.cc:862
-msgid "Name for playlist"
-msgstr "Name für Wiedergabeliste"
+#: gtk2_ardour/crossfade_edit.cc:83
+msgid "In"
+msgstr "In"
 
-#: 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/crossfade_edit.cc:85
+msgid "With Pre-roll"
+msgstr "mit Pre-Roll"
 
-#: 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/crossfade_edit.cc:86
+msgid "With Post-roll"
+msgstr "mit Post-Roll"
 
-#: 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/crossfade_edit.cc:94
+msgid "Fade In"
+msgstr "Fade In"
 
-#: gtk2_ardour/route_time_axis.cc:1344
-msgid "New Copy"
-msgstr "Neue Kopie"
+#: gtk2_ardour/crossfade_edit.cc:95
+msgid "Fade Out"
+msgstr "Fade Out"
 
-#: gtk2_ardour/route_time_axis.cc:1346
-msgid "Clear Current"
-msgstr "Ausgewählte zurücksetzen"
+#: gtk2_ardour/crossfade_edit.cc:171
+#: gtk2_ardour/editor.cc:1835
+msgid "Audition"
+msgstr "Vorhören"
 
-#: gtk2_ardour/route_time_axis.cc:1349
-msgid "Select from all ..."
-msgstr "Aus allen auswählen..."
+#: gtk2_ardour/midi_port_dialog.cc:22
+msgid "Port name"
+msgstr "Port Name"
 
-#: 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/editor.cc:202
+msgid "Mins:Secs"
+msgstr "Min:Sek"
 
-#: gtk2_ardour/audio_time_axis.cc:214
-msgid "Fader"
-msgstr "Fader"
+#: gtk2_ardour/editor.cc:203
+msgid "Bars:Beats"
+msgstr "Takte:Schläge"
 
-#: gtk2_ardour/audio_time_axis.cc:219
-msgid "Pan"
-msgstr "Pan"
+#: gtk2_ardour/editor.cc:204
+msgid "Timecode"
+msgstr "Timecode"
 
-#: gtk2_ardour/audio_time_axis.cc:235
-msgid "Hide all crossfades"
-msgstr "Alle Crossfades verbergen"
+#: gtk2_ardour/editor.cc:206
+msgid "Tempo"
+msgstr "Tempo"
 
-#: gtk2_ardour/audio_time_axis.cc:236
-msgid "Show all crossfades"
-msgstr "Alle Crossfades zeigen"
+#: gtk2_ardour/editor.cc:207
+msgid "Meter"
+msgstr "Taktart"
 
-#: gtk2_ardour/audio_time_axis.cc:244
-msgid "Show waveforms"
-msgstr "Wellenformen zeigen"
+#: gtk2_ardour/editor.cc:208
+msgid "Location Markers"
+msgstr "Positionsmarker"
 
-#: gtk2_ardour/audio_time_axis.cc:254
-msgid "Traditional"
-msgstr "Traditionell"
+#: gtk2_ardour/editor.cc:209
+msgid "Range Markers"
+msgstr "Bereiche"
 
-#: gtk2_ardour/audio_time_axis.cc:258
-msgid "Rectified"
-msgstr "Gleichgerichtet"
+#: gtk2_ardour/editor.cc:210
+msgid "Loop/Punch Ranges"
+msgstr "Schleifen/Punch-Bereiche"
 
-#: 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/editor.cc:211
+msgid "CD Markers"
+msgstr "CD-Marker"
 
-#: gtk2_ardour/audio_time_axis.cc:271
-msgid "Logarithmic"
-msgstr "Logarithmisch"
+#: gtk2_ardour/editor.cc:228
+msgid "mode"
+msgstr "Modus"
 
-#: gtk2_ardour/audio_time_axis.cc:290
-msgid "Waveform"
-msgstr "Wellenform"
+#: gtk2_ardour/editor.cc:229
+msgid "automation"
+msgstr "Automation"
 
-#: gtk2_ardour/audio_time_axis.cc:362
-msgid "gain"
-msgstr "Gain"
+#: gtk2_ardour/editor.cc:513
+#: gtk2_ardour/editor.cc:537
+msgid "Name"
+msgstr "Name"
 
-#: gtk2_ardour/audio_time_axis.cc:402
-msgid "pan"
-msgstr "Pan"
+#: gtk2_ardour/editor.cc:616
+#: gtk2_ardour/editor.cc:687
+msgid "Regions"
+msgstr "Regionen"
 
-#: gtk2_ardour/automation_line.cc:794
-msgid "automation event move"
-msgstr "Automationspunkt bewegen"
+#: gtk2_ardour/editor.cc:659
+#: gtk2_ardour/editor.cc:701
+msgid "Chunks"
+msgstr "Teile"
 
-#: gtk2_ardour/automation_line.cc:796
-msgid "automation range drag"
-msgstr "Automationsbereich bewegen"
+#: gtk2_ardour/editor.cc:690
+msgid "Tracks/Busses"
+msgstr "Spuren/Busse"
 
-#: gtk2_ardour/automation_line.cc:1021
-#: gtk2_ardour/region_gain_line.cc:83
-msgid "remove control point"
-msgstr "Automationspunkt entfernen"
+#: gtk2_ardour/editor.cc:693
+msgid "Snapshots"
+msgstr "Schnappschüsse"
 
-#: gtk2_ardour/automation_time_axis.cc:56
-#: gtk2_ardour/editor_ops.cc:3404
-msgid "clear"
-msgstr "Leeren"
+#: gtk2_ardour/editor.cc:696
+msgid "Edit Groups"
+msgstr "Bearbeitungsgruppen"
 
-#: gtk2_ardour/automation_time_axis.cc:97
-msgid "track height"
-msgstr "Anzeigehöhe"
+#: gtk2_ardour/editor.cc:759
+msgid "Nudge Region/Selection Forwards"
+msgstr "Region/Auswahl schrittweise nach vorne"
 
-#: gtk2_ardour/automation_time_axis.cc:98
-msgid "automation state"
-msgstr "Automationsmodus"
+#: gtk2_ardour/editor.cc:760
+msgid "Nudge Region/Selection Backwards"
+msgstr "Region/Auswahl schrittweise nach hinten"
 
-#: gtk2_ardour/automation_time_axis.cc:99
-msgid "clear track"
-msgstr "Spur zurücksetzen"
+#: gtk2_ardour/editor.cc:790
+msgid "Editor"
+msgstr "Editor"
 
-#: gtk2_ardour/automation_time_axis.cc:100
-msgid "hide track"
-msgstr "Diese Spur verbergen"
+#: 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/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.cc:1251
+#: gtk2_ardour/editor.cc:1259
+msgid "Punch"
+msgstr "Punch"
 
-#: 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.cc:1456
+#: gtk2_ardour/route_time_axis.cc:1648
+msgid "programming error: "
+msgstr "Programmierfehler:"
 
-#: 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.cc:1563
+#: gtk2_ardour/editor.cc:1571
+msgid "Freeze"
+msgstr "Einfrieren"
 
-#: 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.cc:1567
+msgid "Unfreeze"
+msgstr "Auftauen"
 
-#: gtk2_ardour/automation_time_axis.cc:280
-#: gtk2_ardour/generic_pluginui.cc:344
-msgid "???"
-msgstr "???"
+#: gtk2_ardour/editor.cc:1754
+msgid "Unmute"
+msgstr "Unmute"
 
-#: gtk2_ardour/automation_time_axis.cc:294
-msgid "clear automation"
-msgstr "Automation zurücksetzen"
+#: gtk2_ardour/editor.cc:1763
+msgid "Convert to short"
+msgstr "In kurzen Crossfade umwandeln"
 
-#: 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.cc:1765
+msgid "Convert to full"
+msgstr "In langen Crossfade umwandeln"
 
-#: 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.cc:1776
+msgid "Crossfade"
+msgstr "Crossfade"
 
-#: gtk2_ardour/automation_time_axis.cc:477
-msgid "State"
-msgstr "Automationssmodus"
+#: gtk2_ardour/editor.cc:1825
+msgid "Popup region editor"
+msgstr "Regioneneditor Ã¶ffnen"
 
-#: gtk2_ardour/canvas-imageframe.c:104
-msgid "pixbuf"
-msgstr ""
+#: gtk2_ardour/editor.cc:1828
+msgid "Raise to top layer"
+msgstr "Region ganz nach oben"
 
-#: gtk2_ardour/canvas-imageframe.c:105
-msgid "the pixbuf"
-msgstr ""
+#: gtk2_ardour/editor.cc:1829
+msgid "Lower to bottom layer"
+msgstr "Region ganz nach unten"
 
-#: gtk2_ardour/canvas-imageframe.c:110
-msgid "x"
-msgstr ""
+#: gtk2_ardour/editor.cc:1831
+msgid "Define sync point"
+msgstr "Einrastpunkt definieren"
 
-#: 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.cc:1832
+msgid "Remove sync point"
+msgstr "Einrastpunkt entfernen"
 
-#: gtk2_ardour/canvas-imageframe.c:120
-msgid "y"
-msgstr ""
+#: gtk2_ardour/editor.cc:1837
+msgid "Bounce"
+msgstr "Bounce"
 
-#: 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.cc:1840
+#: gtk2_ardour/editor.cc:2016
+msgid "Spectral Analysis"
+msgstr "FFT-Analyse"
 
-#: gtk2_ardour/canvas-imageframe.c:129
-msgid "width"
-msgstr ""
+#: gtk2_ardour/editor.cc:1854
+msgid "Lock"
+msgstr "Sperren"
 
-#: gtk2_ardour/canvas-imageframe.c:130
-msgid "the width"
-msgstr ""
+#: gtk2_ardour/editor.cc:1861
+msgid "Glue to Bars&Beats"
+msgstr "An Takte und Schläge binden"
 
-#: gtk2_ardour/canvas-imageframe.c:139
-msgid "drawwidth"
-msgstr ""
+#: gtk2_ardour/editor.cc:1885
+msgid "Opaque"
+msgstr "Deckend"
 
-#: gtk2_ardour/canvas-imageframe.c:140
-msgid "drawn width"
-msgstr ""
+#: gtk2_ardour/editor.cc:1895
+msgid "Original position"
+msgstr "Ursprungsposition"
 
-#: gtk2_ardour/canvas-imageframe.c:148
-msgid "height"
-msgstr ""
+#: gtk2_ardour/editor.cc:1908
+msgid "Reset Envelope"
+msgstr "Lautstärkekurve zurücksetzen"
 
-#: gtk2_ardour/canvas-imageframe.c:149
-msgid "the height"
-msgstr ""
+#: gtk2_ardour/editor.cc:1910
+msgid "Envelope Visible"
+msgstr "Lautstärkekurve sichtbar"
 
-#: gtk2_ardour/canvas-imageframe.c:157
-msgid "anchor"
-msgstr ""
+#: gtk2_ardour/editor.cc:1919
+msgid "Envelope Active"
+msgstr "Lautstärkekurve aktiv"
 
-#: gtk2_ardour/canvas-imageframe.c:158
-msgid "the anchor"
-msgstr ""
+#: gtk2_ardour/editor.cc:1933
+msgid "DeNormalize"
+msgstr "DeNormalisieren"
 
-#: gtk2_ardour/canvas-simpleline.c:110
-#: gtk2_ardour/canvas-simplerect.c:106
-msgid "x1"
-msgstr ""
+#: gtk2_ardour/editor.cc:1935
+msgid "Normalize"
+msgstr "Normalisieren"
 
-#: gtk2_ardour/canvas-simpleline.c:120
-#: gtk2_ardour/canvas-simplerect.c:116
-msgid "y1"
-msgstr ""
+#: gtk2_ardour/editor.cc:1939
+msgid "Reverse"
+msgstr "Umkehren"
 
-#: gtk2_ardour/canvas-simpleline.c:131
-#: gtk2_ardour/canvas-simplerect.c:127
-msgid "x2"
-msgstr ""
+#: gtk2_ardour/editor.cc:1944
+#: gtk2_ardour/editor.cc:2035
+msgid "Add Range Markers"
+msgstr "Bereichsmarker einfügen"
 
-#: gtk2_ardour/canvas-simpleline.c:132
-#: gtk2_ardour/canvas-simplerect.c:128
-msgid "x coordinate of lower right corner of rect"
-msgstr ""
+#: gtk2_ardour/editor.cc:1945
+msgid "Set Range Selection"
+msgstr "Bereich auswählen"
 
-#: gtk2_ardour/canvas-simpleline.c:141
-#: gtk2_ardour/canvas-simplerect.c:137
-msgid "y2"
-msgstr ""
+#: gtk2_ardour/editor.cc:1954
+msgid "Nudge fwd"
+msgstr "Schritt nach vorne"
 
-#: gtk2_ardour/canvas-simpleline.c:142
-#: gtk2_ardour/canvas-simplerect.c:138
-msgid "y coordinate of lower right corner of rect "
-msgstr ""
+#: gtk2_ardour/editor.cc:1955
+msgid "Nudge bwd"
+msgstr "Schritt nach hinten"
 
-#: gtk2_ardour/canvas-simpleline.c:150
-msgid "color rgba"
-msgstr ""
+#: gtk2_ardour/editor.cc:1956
+msgid "Nudge fwd by capture offset"
+msgstr "Schritt nach vorne um Aufnahme-Offset"
 
-#: gtk2_ardour/canvas-simpleline.c:151
-msgid "color of line"
-msgstr ""
+#: gtk2_ardour/editor.cc:1957
+msgid "Nudge bwd by capture offset"
+msgstr "Schritt nach hinten um Aufnahme-Offset"
 
-#: gtk2_ardour/canvas-simplerect.c:148
-msgid "outline pixels"
-msgstr ""
+#: gtk2_ardour/editor.cc:1959
+#: gtk2_ardour/editor.cc:2131
+#: gtk2_ardour/editor.cc:2187
+msgid "Nudge"
+msgstr "Verschieben"
 
-#: gtk2_ardour/canvas-simplerect.c:149
-msgid "width in pixels of outline"
-msgstr ""
+#: gtk2_ardour/editor.cc:1966
+msgid "Start to edit point"
+msgstr "Von Anfang bis Arbeitspunkt"
 
-#: gtk2_ardour/canvas-simplerect.c:159
-msgid "outline what"
-msgstr ""
+#: gtk2_ardour/editor.cc:1967
+msgid "Edit point to end"
+msgstr "Von Arbeitspunkt bis Ende"
 
-#: gtk2_ardour/canvas-simplerect.c:160
-msgid "which boundaries to outline (mask)"
-msgstr ""
+#: gtk2_ardour/editor.cc:1968
+msgid "Trim To Loop"
+msgstr "Auf Schleife kürzen"
 
-#: gtk2_ardour/canvas-simplerect.c:171
-msgid "fill"
-msgstr ""
+#: gtk2_ardour/editor.cc:1969
+msgid "Trim To Punch"
+msgstr "Punch-Bereich schneiden"
 
-#: gtk2_ardour/canvas-simplerect.c:172
-msgid "fill rectangle"
-msgstr ""
+#: gtk2_ardour/editor.cc:1974
+msgid "Split"
+msgstr "Teilen"
 
-#: gtk2_ardour/canvas-simplerect.c:179
-msgid "draw"
-msgstr ""
+#: gtk2_ardour/editor.cc:1977
+msgid "Make mono regions"
+msgstr "Zu Mono-Regionen umwandeln"
 
-#: gtk2_ardour/canvas-simplerect.c:180
-msgid "draw rectangle"
-msgstr ""
+#: gtk2_ardour/editor.cc:1980
+#: gtk2_ardour/editor.cc:3278
+msgid "Duplicate"
+msgstr "Duplizieren"
 
-#: gtk2_ardour/canvas-simplerect.c:188
-msgid "outline color rgba"
-msgstr ""
+#: gtk2_ardour/editor.cc:1981
+msgid "Multi-Duplicate"
+msgstr "Mehrfach duplizieren"
 
-#: gtk2_ardour/canvas-simplerect.c:189
-msgid "color of outline"
-msgstr ""
+#: gtk2_ardour/editor.cc:1982
+msgid "Fill Track"
+msgstr "Spur auffüllen"
 
-#: gtk2_ardour/canvas-simplerect.c:199
-msgid "fill color rgba"
-msgstr ""
+#: gtk2_ardour/editor.cc:2011
+msgid "Play range"
+msgstr "Bereich abspielen"
 
-#: gtk2_ardour/canvas-simplerect.c:200
-msgid "color of fill"
-msgstr ""
+#: gtk2_ardour/editor.cc:2012
+msgid "Loop range"
+msgstr "Bereich in Schleife abspielen"
 
-#: gtk2_ardour/crossfade_edit.cc:74
-msgid "ardour: x-fade edit"
-msgstr "ardour: Crossfade Editor"
+#: gtk2_ardour/editor.cc:2020
+msgid "Extend Range to End of Region"
+msgstr "Bereich vergrößern bis zum Ende der Region "
 
-#: gtk2_ardour/crossfade_edit.cc:78
-#: gtk2_ardour/panner_ui.cc:420
-msgid "Reset"
-msgstr "Zurücksetzen"
+#: gtk2_ardour/editor.cc:2021
+msgid "Extend Range to Start of Region"
+msgstr "Bereich vergrößern bis zum Anfang der Region "
 
-#: gtk2_ardour/crossfade_edit.cc:79
-msgid "Fade"
-msgstr "Fade"
+#: gtk2_ardour/editor.cc:2024
+msgid "Convert to region in-place"
+msgstr "Am Rastpunkt der Regionen einrasten"
 
-#: gtk2_ardour/crossfade_edit.cc:80
-msgid "Out (dry)"
-msgstr "Out (dry)"
+#: gtk2_ardour/editor.cc:2025
+msgid "Convert to region in region list"
+msgstr "Bereich zur Regionenliste hinzufügen"
 
-#: gtk2_ardour/crossfade_edit.cc:81
-msgid "Out"
-msgstr "Out"
+#: gtk2_ardour/editor.cc:2028
+msgid "Select all in range"
+msgstr "Alles im Bereich auswählen"
 
-#: gtk2_ardour/crossfade_edit.cc:82
-msgid "In (dry)"
-msgstr "In (dry)"
+#: gtk2_ardour/editor.cc:2031
+msgid "Set loop from selection"
+msgstr "Schleife aus Auswahl erstellen"
 
-#: gtk2_ardour/crossfade_edit.cc:83
-msgid "In"
-msgstr "In"
+#: gtk2_ardour/editor.cc:2032
+msgid "Set punch from selection"
+msgstr "Punch-Bereich aus Auswahl erstellen"
 
-#: gtk2_ardour/crossfade_edit.cc:85
-msgid "With Pre-roll"
-msgstr "mit Pre-Roll"
+#: gtk2_ardour/editor.cc:2037
+msgid "Crop region to range"
+msgstr "Region auf Bereich kürzen"
 
-#: gtk2_ardour/crossfade_edit.cc:86
-msgid "With Post-roll"
-msgstr "mit Post-Roll"
+#: gtk2_ardour/editor.cc:2038
+msgid "Fill range with region"
+msgstr "Bereich mit Region ausfüllen"
 
-#: gtk2_ardour/crossfade_edit.cc:94
-msgid "Fade In"
-msgstr "Fade In"
+#: gtk2_ardour/editor.cc:2039
+msgid "Duplicate range"
+msgstr "Bereich duplizieren"
 
-#: gtk2_ardour/crossfade_edit.cc:95
-msgid "Fade Out"
-msgstr "Fade Out"
+#: gtk2_ardour/editor.cc:2040
+msgid "Create chunk from range"
+msgstr "Abschnitt aus Bereich erstellen..."
 
-#: gtk2_ardour/crossfade_edit.cc:171
-#: gtk2_ardour/editor.cc:1723
-#: gtk2_ardour/editor_actions.cc:459
-#: gtk2_ardour/option_editor.cc:148
-msgid "Audition"
-msgstr "Vorhören"
+#: gtk2_ardour/editor.cc:2042
+msgid "Consolidate range"
+msgstr "Bereich als neue Region"
 
-#: gtk2_ardour/editor.cc:109
-#: gtk2_ardour/editor.cc:3214
-msgid "CD Frames"
-msgstr "CD-Frames"
+#: gtk2_ardour/editor.cc:2043
+msgid "Bounce range to region list"
+msgstr "zur Liste der Regionen"
 
-#: gtk2_ardour/editor.cc:110
-#: gtk2_ardour/editor.cc:3216
-msgid "SMPTE Frames"
-msgstr "SMPTE-Frames"
+#: gtk2_ardour/editor.cc:2044
+msgid "Export range"
+msgstr "Bereich exportieren"
 
-#: 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:2058
+#: gtk2_ardour/editor.cc:2145
+msgid "Play from edit point"
+msgstr "Wiedergabe ab Arbeitspunkt"
 
-#: gtk2_ardour/editor.cc:112
-#: gtk2_ardour/editor.cc:3220
-msgid "SMPTE Minutes"
-msgstr "SMPTE-Minuten"
+#: gtk2_ardour/editor.cc:2059
+#: gtk2_ardour/editor.cc:2146
+msgid "Play from start"
+msgstr "Wiedergabe ab Anfang"
 
-#: gtk2_ardour/editor.cc:113
-#: gtk2_ardour/editor.cc:3222
-msgid "Seconds"
-msgstr "Sekunden"
+#: gtk2_ardour/editor.cc:2060
+msgid "Play region"
+msgstr "Region wiedergeben"
 
-#: gtk2_ardour/editor.cc:114
-#: gtk2_ardour/editor.cc:3224
-msgid "Minutes"
-msgstr "Minuten"
+#: gtk2_ardour/editor.cc:2062
+msgid "Loop Region"
+msgstr "Region in Schleife wiedergeben"
 
-#: gtk2_ardour/editor.cc:115
-#: gtk2_ardour/editor.cc:3198
-msgid "Beats/32"
-msgstr "Schläge / 32"
+#: 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:116
-#: gtk2_ardour/editor.cc:3196
-msgid "Beats/16"
-msgstr "Schläge / 16"
+#: gtk2_ardour/editor.cc:2074
+#: gtk2_ardour/editor.cc:2157
+msgid "Invert selection in track"
+msgstr "Auswahl in Spur umkehren"
 
-#: gtk2_ardour/editor.cc:117
-#: gtk2_ardour/editor.cc:3194
-msgid "Beats/8"
-msgstr "Schläge / 8"
+#: gtk2_ardour/editor.cc:2075
+#: gtk2_ardour/editor.cc:2158
+msgid "Invert selection"
+msgstr "Auswahl umkehren"
 
-#: gtk2_ardour/editor.cc:118
-#: gtk2_ardour/editor.cc:3192
-msgid "Beats/4"
-msgstr "Schläge / 4"
+#: gtk2_ardour/editor.cc:2077
+msgid "Set range to loop range"
+msgstr "Ausgewählten Bereich als Schleife"
 
-#: gtk2_ardour/editor.cc:119
-#: gtk2_ardour/editor.cc:3190
-msgid "Beats/3"
-msgstr "Schläge / 3"
+#: gtk2_ardour/editor.cc:2078
+msgid "Set range to punch range"
+msgstr "Ausgewählten Bereich als Punch-Bereich"
 
-#: gtk2_ardour/editor.cc:120
-#: gtk2_ardour/editor.cc:3200
-msgid "Beats"
-msgstr "Schläge"
+#: gtk2_ardour/editor.cc:2080
+msgid "Select All After Edit Point"
+msgstr "Alle Regionen nach dem Arbeitspunkt auswählen"
 
-#: gtk2_ardour/editor.cc:121
-#: gtk2_ardour/editor.cc:3202
-msgid "Bars"
-msgstr "Takte"
+#: gtk2_ardour/editor.cc:2081
+msgid "Select All Before Edit Point"
+msgstr "Alle Regionen vor dem Arbeitspunkt auswählen"
 
-#: gtk2_ardour/editor.cc:122
-#: gtk2_ardour/editor.cc:3204
-msgid "Marks"
-msgstr "Marker"
+#: gtk2_ardour/editor.cc:2082
+msgid "Select All After Playhead"
+msgstr "Alle Regionen nach dem Positionszeiger auswählen"
 
-#: gtk2_ardour/editor.cc:123
-#: gtk2_ardour/editor.cc:3206
-msgid "Region starts"
-msgstr "Regionen-Anfang"
+#: gtk2_ardour/editor.cc:2083
+msgid "Select All Before Playhead"
+msgstr "Alle Regionen vor dem Positionszeiger auswählen"
 
-#: gtk2_ardour/editor.cc:124
-#: gtk2_ardour/editor.cc:3208
-msgid "Region ends"
-msgstr "Regionen-Ende"
+#: 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:125
-#: gtk2_ardour/editor.cc:3212
-msgid "Region syncs"
-msgstr "Regionen-Sync"
+#: 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:126
-#: gtk2_ardour/editor.cc:3210
-msgid "Region bounds"
-msgstr "Regionen-Grenzen"
+#: 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:131
-#: gtk2_ardour/editor.cc:3240
-#: gtk2_ardour/editor_actions.cc:421
-msgid "No Grid"
-msgstr "Raster aus"
+#: gtk2_ardour/editor.cc:2090
+#: gtk2_ardour/editor.cc:2165
+msgid "Select"
+msgstr "Auswahl"
 
-#: gtk2_ardour/editor.cc:132
-#: gtk2_ardour/editor.cc:3242
-#: gtk2_ardour/editor_actions.cc:422
-msgid "Grid"
-msgstr "Einrasten"
+#: gtk2_ardour/editor.cc:2104
+msgid "Align"
+msgstr "Ausrichten"
 
-#: gtk2_ardour/editor.cc:133
-#: gtk2_ardour/editor.cc:3244
-#: gtk2_ardour/editor_actions.cc:423
-msgid "Magnetic"
-msgstr "Magnetisch"
+#: gtk2_ardour/editor.cc:2105
+msgid "Align Relative"
+msgstr "Relativ ausrichten"
 
-#: 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:2109
+msgid "Insert chunk"
+msgstr "Abschnitt einfügen"
 
-#: 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:2116
+msgid "Insert Selected Region"
+msgstr "Ausgewählte Region einfügen"
 
-#: 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:2117
+msgid "Insert Existing Audio"
+msgstr "Audio importieren..."
 
-#: 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:2126
+#: gtk2_ardour/editor.cc:2182
+msgid "Nudge entire track fwd"
+msgstr "Gesamte Spur schrittweise nach vorne"
 
-#: 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:2127
+#: gtk2_ardour/editor.cc:2183
+msgid "Nudge track after edit point fwd"
+msgstr "Spur nach Arbeitspunkt schrittweise nach vorne"
 
-#: gtk2_ardour/editor.cc:147
-#: gtk2_ardour/editor.cc:3306
-msgid "Center"
-msgstr "Mitte"
+#: 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:150
-#: gtk2_ardour/editor.cc:3312
-msgid "Edit Point"
-msgstr "Arbeitspunkt"
+#: 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:177
-msgid "Mins:Secs"
-msgstr "Min:Sek"
+#: gtk2_ardour/editor.cc:2160
+msgid "Select all after edit point"
+msgstr "Alles nach Arbeitspunkt auswählen"
 
-#: gtk2_ardour/editor.cc:181
-#: gtk2_ardour/editor_rulers.cc:436
-msgid "Tempo"
-msgstr "Tempo"
+#: gtk2_ardour/editor.cc:2161
+msgid "Select all before edit point"
+msgstr "Alles vor Arbeitspunkt auswählen"
 
-#: gtk2_ardour/editor.cc:182
-#: gtk2_ardour/editor_rulers.cc:430
-msgid "Meter"
-msgstr "Taktart"
+#: gtk2_ardour/editor.cc:2162
+msgid "Select all after playhead"
+msgstr "Alles nach Positionszeiger auswählen"
 
-#: gtk2_ardour/editor.cc:183
-#: gtk2_ardour/editor_rulers.cc:442
-msgid "Location Markers"
-msgstr "Positionsmarker"
+#: gtk2_ardour/editor.cc:2163
+msgid "Select all before playhead"
+msgstr "Alles vor Positionszeiger auswählen"
 
-#: gtk2_ardour/editor.cc:184
-#: gtk2_ardour/editor_rulers.cc:449
-msgid "Range Markers"
-msgstr "Bereiche"
+#: gtk2_ardour/editor.cc:2866
+msgid "Select/Move Objects"
+msgstr "Objekte auswählen/verschieben"
 
-#: gtk2_ardour/editor.cc:185
-#: gtk2_ardour/editor_rulers.cc:462
-msgid "Loop/Punch Ranges"
-msgstr "Schleifen/Punch-Bereiche"
+#: gtk2_ardour/editor.cc:2867
+msgid "Select/Move Ranges"
+msgstr "Editierbereich auswählen/verschieben"
 
-#: gtk2_ardour/editor.cc:186
-#: gtk2_ardour/editor_rulers.cc:456
-msgid "CD Markers"
-msgstr "CD-Marker"
+#: gtk2_ardour/editor.cc:2868
+msgid "Draw Gain Automation"
+msgstr "Lautstärkekurve zeichnen"
 
-#: gtk2_ardour/editor.cc:204
-msgid "mode"
-msgstr "Modus"
+#: gtk2_ardour/editor.cc:2869
+msgid "Select Zoom Range"
+msgstr "Zoombereich auswählen"
 
-#: gtk2_ardour/editor.cc:205
-msgid "automation"
-msgstr "Automation"
+#: gtk2_ardour/editor.cc:2870
+msgid "Stretch/Shrink Regions"
+msgstr "Regionen strecken/stauchen (Time-Stretch)"
 
-#: 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:2871
+msgid "Listen to Specific Regions"
+msgstr "Ausgewählte Regionen vorhören"
 
-#: gtk2_ardour/editor.cc:477
-#: gtk2_ardour/editor.cc:501
-msgid "Name"
-msgstr "Name"
+#: gtk2_ardour/editor.cc:2901
+msgid "Zoom In"
+msgstr "Vergrößern"
 
-#: gtk2_ardour/editor.cc:619
-#: gtk2_ardour/editor.cc:661
-msgid "Chunks"
-msgstr "Teile"
+#: gtk2_ardour/editor.cc:2907
+msgid "Zoom Out"
+msgstr "Verkleinern"
+
+#: gtk2_ardour/editor.cc:2913
+msgid "Zoom to Session"
+msgstr "Auf ganzes Projekt zoomen"
 
-#: gtk2_ardour/editor.cc:650
-msgid "Tracks/Busses"
-msgstr "Spuren/Busse"
+#: 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:653
-msgid "Snapshots"
-msgstr "Schnappschüsse"
+#: gtk2_ardour/editor.cc:2919
+msgid "Zoom focus"
+msgstr "Zoom-Mittelpunkt"
 
-#: gtk2_ardour/editor.cc:656
-msgid "Edit Groups"
-msgstr "Bearbeitungsgruppen"
+#: gtk2_ardour/editor.cc:2930
+#: gtk2_ardour/editor.cc:3431
+msgid "SMPTE Seconds"
+msgstr "SMPTE-Sekunden"
 
-#: gtk2_ardour/editor.cc:720
-msgid "Nudge Region/Selection Forwards"
-msgstr "Region/Auswahl schrittweise nach vorne"
+#: gtk2_ardour/editor.cc:2933
+msgid "Snap/Grid Units"
+msgstr "Einrast-Einheiten"
 
-#: gtk2_ardour/editor.cc:721
-msgid "Nudge Region/Selection Backwards"
-msgstr "Region/Auswahl schrittweise nach hinten"
+#: gtk2_ardour/editor.cc:2936
+msgid "Magnetic Snap"
+msgstr "Magnetisch einrasten"
 
-#: gtk2_ardour/editor.cc:751
-#: gtk2_ardour/editor_mixer.cc:358
-msgid "Editor"
-msgstr "Editor"
+#: gtk2_ardour/editor.cc:2939
+msgid "Snap/Grid Mode"
+msgstr "Einrastmodus"
 
-#: gtk2_ardour/editor.cc:1169
-#: gtk2_ardour/editor.cc:1177
-#: gtk2_ardour/editor.cc:4181
-#: gtk2_ardour/editor.cc:4209
-msgid "Loop"
-msgstr "Schleife"
+#: gtk2_ardour/editor.cc:2945
+msgid "Edit point"
+msgstr "Arbeitspunkt"
 
-#: gtk2_ardour/editor.cc:1182
-#: gtk2_ardour/editor.cc:1190
-msgid "Punch"
-msgstr "Punch"
+#: gtk2_ardour/editor.cc:3095
+msgid "malformed URL passed to drag-n-drop code"
+msgstr "Ungültige URL an drag-n-drop-Code weitergeleitet"
 
-#: 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:3214
+msgid "Undo"
+msgstr "Rückgängig"
 
-#: gtk2_ardour/editor.cc:1326
-#: gtk2_ardour/editor.cc:1348
-#: gtk2_ardour/redirect_box.cc:1200
-msgid "Deactivate"
-msgstr "Deaktivieren"
+#: gtk2_ardour/editor.cc:3216
+msgid "Undo (%1)"
+msgstr "Rückgängig (%1)"
 
-#: gtk2_ardour/editor.cc:1328
-#: gtk2_ardour/editor.cc:1350
-#: gtk2_ardour/redirect_box.cc:1198
-msgid "Activate"
-msgstr "Aktivieren"
+#: gtk2_ardour/editor.cc:3223
+msgid "Redo"
+msgstr "Wiederherstellen"
 
-#: gtk2_ardour/editor.cc:1475
-#: gtk2_ardour/editor.cc:1483
-#: gtk2_ardour/editor_ops.cc:3297
-msgid "Freeze"
-msgstr "Einfrieren"
+#: gtk2_ardour/editor.cc:3225
+msgid "Redo (%1)"
+msgstr "Wiederherstellen (%1)"
 
-#: gtk2_ardour/editor.cc:1479
-msgid "Unfreeze"
-msgstr "Auftauen"
+#: gtk2_ardour/editor.cc:3255
+msgid "Number of Duplications:"
+msgstr "Anzahl der Duplikate"
 
-#: gtk2_ardour/editor.cc:1649
-msgid "Unmute"
-msgstr "Unmute"
+#: gtk2_ardour/editor.cc:3386
+msgid "Splice Edit"
+msgstr "Splice Edit"
 
-#: 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:3388
+msgid "Slide Edit"
+msgstr "Slide Edit"
 
-#: gtk2_ardour/editor.cc:1658
-msgid "Convert to short"
-msgstr "In kurzen Crossfade umwandeln"
+#: gtk2_ardour/editor.cc:3390
+#, fuzzy
+msgid "Lock Edit"
+msgstr "Positionszeiger zum Arbeitspunkt"
 
-#: gtk2_ardour/editor.cc:1660
-msgid "Convert to full"
-msgstr "In langen Crossfade umwandeln"
+#: gtk2_ardour/editor.cc:3403
+msgid "Beats/3"
+msgstr "Schläge / 3"
 
-#: gtk2_ardour/editor.cc:1671
-msgid "Crossfade"
-msgstr "Crossfade"
+#: gtk2_ardour/editor.cc:3405
+msgid "Beats/4"
+msgstr "Schläge / 4"
 
-#: gtk2_ardour/editor.cc:1715
-msgid "Popup region editor"
-msgstr "Regioneneditor Ã¶ffnen"
+#: gtk2_ardour/editor.cc:3407
+msgid "Beats/8"
+msgstr "Schläge / 8"
 
-#: gtk2_ardour/editor.cc:1716
-msgid "Raise to top layer"
-msgstr "Region ganz nach oben"
+#: gtk2_ardour/editor.cc:3409
+msgid "Beats/16"
+msgstr "Schläge / 16"
 
-#: gtk2_ardour/editor.cc:1717
-msgid "Lower to bottom layer"
-msgstr "Region ganz nach unten"
+#: gtk2_ardour/editor.cc:3411
+msgid "Beats/32"
+msgstr "Schläge / 32"
 
-#: gtk2_ardour/editor.cc:1719
-msgid "Define sync point"
-msgstr "Einrastpunkt definieren"
+#: gtk2_ardour/editor.cc:3413
+msgid "Beats"
+msgstr "Schläge"
 
-#: gtk2_ardour/editor.cc:1720
-msgid "Remove sync point"
-msgstr "Einrastpunkt entfernen"
+#: gtk2_ardour/editor.cc:3415
+msgid "Bars"
+msgstr "Takte"
 
-#: gtk2_ardour/editor.cc:1725
-msgid "Bounce"
-msgstr "Bounce"
+#: gtk2_ardour/editor.cc:3417
+msgid "Marks"
+msgstr "Marker"
 
-#: gtk2_ardour/editor.cc:1728
-msgid "Analyze region"
-msgstr "Analysiere Region"
+#: gtk2_ardour/editor.cc:3419
+msgid "Region starts"
+msgstr "Regionen-Anfang"
 
-#: gtk2_ardour/editor.cc:1735
-#: gtk2_ardour/editor_markers.cc:591
-msgid "Lock"
-msgstr "Sperren"
+#: gtk2_ardour/editor.cc:3421
+msgid "Region ends"
+msgstr "Regionen-Ende"
 
-#: gtk2_ardour/editor.cc:1753
-msgid "Opaque"
-msgstr "Deckend"
+#: gtk2_ardour/editor.cc:3423
+msgid "Region bounds"
+msgstr "Regionen-Grenzen"
 
-#: gtk2_ardour/editor.cc:1763
-msgid "Original position"
-msgstr "Ursprungsposition"
+#: gtk2_ardour/editor.cc:3425
+msgid "Region syncs"
+msgstr "Regionen-Sync"
 
-#: gtk2_ardour/editor.cc:1776
-msgid "Reset Envelope"
-msgstr "Lautstärkekurve zurücksetzen"
+#: gtk2_ardour/editor.cc:3427
+msgid "CD Frames"
+msgstr "CD-Frames"
 
-#: gtk2_ardour/editor.cc:1778
-msgid "Envelope Visible"
-msgstr "Lautstärkekurve sichtbar"
+#: gtk2_ardour/editor.cc:3429
+msgid "SMPTE Frames"
+msgstr "SMPTE-Frames"
 
-#: gtk2_ardour/editor.cc:1787
-msgid "Envelope Active"
-msgstr "Lautstärkekurve aktiv"
+#: gtk2_ardour/editor.cc:3433
+msgid "SMPTE Minutes"
+msgstr "SMPTE-Minuten"
 
-#: gtk2_ardour/editor.cc:1801
-msgid "DeNormalize"
-msgstr "DeNormalisieren"
+#: gtk2_ardour/editor.cc:3435
+msgid "Seconds"
+msgstr "Sekunden"
 
-#: gtk2_ardour/editor.cc:1803
-msgid "Normalize"
-msgstr "Normalisieren"
+#: gtk2_ardour/editor.cc:3437
+msgid "Minutes"
+msgstr "Minuten"
 
-#: gtk2_ardour/editor.cc:1807
-msgid "Reverse"
-msgstr "Rückwärts"
+#: gtk2_ardour/editor.cc:3453
+msgid "No Grid"
+msgstr "Raster aus"
 
-#: gtk2_ardour/editor.cc:1812
-#: gtk2_ardour/editor.cc:1903
-msgid "Add Range Markers"
-msgstr "Bereichsmarker einfügen"
+#: gtk2_ardour/editor.cc:3455
+msgid "Grid"
+msgstr "Einrasten"
 
-#: gtk2_ardour/editor.cc:1813
-msgid "Set Range Selection"
-msgstr "Bereich auswählen"
+#: gtk2_ardour/editor.cc:3457
+msgid "Magnetic"
+msgstr "Magnetisch"
 
-#: gtk2_ardour/editor.cc:1822
-msgid "Nudge fwd"
-msgstr "Schritt nach vorne"
+#: gtk2_ardour/editor.cc:3515
+msgid "Left"
+msgstr "Links"
 
-#: gtk2_ardour/editor.cc:1823
-msgid "Nudge bwd"
-msgstr "Schritt nach hinten"
+#: gtk2_ardour/editor.cc:3517
+msgid "Right"
+msgstr "Rechts"
 
-#: gtk2_ardour/editor.cc:1824
-msgid "Nudge fwd by capture offset"
-msgstr "Schritt nach vorne um Aufnahme-Offset"
+#: gtk2_ardour/editor.cc:3519
+msgid "Center"
+msgstr "Mitte"
 
-#: gtk2_ardour/editor.cc:1825
-msgid "Nudge bwd by capture offset"
-msgstr "Schritt nach hinten um Aufnahme-Offset"
+#: gtk2_ardour/editor.cc:3523
+msgid "Mouse"
+msgstr "Maus"
 
-#: gtk2_ardour/editor.cc:1827
-#: gtk2_ardour/editor.cc:1998
-#: gtk2_ardour/editor.cc:2054
-msgid "Nudge"
-msgstr "Verschieben"
+#: gtk2_ardour/editor.cc:3525
+msgid "Active Mark"
+msgstr "Aktueller Marker"
 
-#: gtk2_ardour/editor.cc:1834
-#: gtk2_ardour/editor_actions.cc:253
-msgid "Start to edit point"
-msgstr "Von Anfang bis Arbeitspunkt"
+#: 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"
+"If deleted, audio files used by it alone by will cleaned."
+msgstr ""
+"Die Wiedergabeliste %1 wird nicht verwendet.\n"
+"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:1835
-#: gtk2_ardour/editor_actions.cc:255
-msgid "Edit point to end"
-msgstr "Von Arbeitspunkt bis Ende"
+#: gtk2_ardour/editor.cc:3800
+msgid "Delete playlist"
+msgstr "Wiedergabeliste löschen"
 
-#: gtk2_ardour/editor.cc:1836
-#: gtk2_ardour/editor_actions.cc:257
-msgid "Trim To Loop"
-msgstr "Auf Schleife kürzen"
+#: gtk2_ardour/editor.cc:3801
+msgid "Keep playlist"
+msgstr "Wiedergabeliste beibehalten"
 
-#: gtk2_ardour/editor.cc:1837
-#: gtk2_ardour/editor_actions.cc:259
-msgid "Trim To Punch"
-msgstr "Punch-Bereich schneiden"
+#: gtk2_ardour/editor.cc:3979
+msgid "New name of snapshot"
+msgstr "Name für neuen Schnappschuss"
 
-#: 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:3997
+msgid ""
+"Do you really want to remove snapshot \"%1\" ?\n"
+"(cannot be undone)"
+msgstr ""
+"Wollen Sie den Schnappschuss \"%1\" wirklich löschen?\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
 
-#: gtk2_ardour/editor.cc:1842
-msgid "Split"
-msgstr "Teilen"
+#: gtk2_ardour/editor.cc:4106
+msgid "new playlists"
+msgstr "Neue Wiedergabelisten"
 
-#: gtk2_ardour/editor.cc:1845
-msgid "Make mono regions"
-msgstr "Zu Mono-Regionen umwandeln"
+#: gtk2_ardour/editor.cc:4123
+msgid "copy playlists"
+msgstr "Wiedergabelisten kopieren"
 
-#: gtk2_ardour/editor.cc:1848
-msgid "Duplicate"
-msgstr "Duplizieren"
+#: gtk2_ardour/editor.cc:4140
+msgid "clear playlists"
+msgstr "Wiedergabelisten zurücksetzen"
 
-#: gtk2_ardour/editor.cc:1849
-msgid "Multi-Duplicate"
-msgstr "Mehrfach duplizieren"
+#: 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/editor.cc:1850
-msgid "Fill Track"
-msgstr "Spur auffüllen"
+#: gtk2_ardour/route_time_axis.cc:99
+msgid "m"
+msgstr "m"
 
-#: gtk2_ardour/editor.cc:1879
-msgid "Play range"
-msgstr "Bereich abspielen"
+#: gtk2_ardour/route_time_axis.cc:99
+msgid "s"
+msgstr "s"
 
-#: gtk2_ardour/editor.cc:1880
-msgid "Loop range"
-msgstr "Bereich in Schleife abspielen"
+#: gtk2_ardour/route_time_axis.cc:99
+msgid "r"
+msgstr "r"
 
-#: gtk2_ardour/editor.cc:1884
-msgid "Analyze range"
-msgstr "Bereich analysieren"
+#: gtk2_ardour/route_time_axis.cc:103
+msgid "g"
+msgstr "g"
 
-#: gtk2_ardour/editor.cc:1888
-#: gtk2_ardour/editor_actions.cc:370
-msgid "Extend Range to End of Region"
-msgstr "Bereich vergrößern bis zum Ende der Region "
+#: gtk2_ardour/route_time_axis.cc:104
+msgid "p"
+msgstr "w"
 
-#: gtk2_ardour/editor.cc:1889
-#: gtk2_ardour/editor_actions.cc:372
-msgid "Extend Range to Start of Region"
-msgstr "Bereich vergrößern bis zum Anfang der Region "
+#: gtk2_ardour/route_time_axis.cc:106
+msgid "a"
+msgstr "a"
 
-#: gtk2_ardour/editor.cc:1892
-msgid "Convert to region in-place"
-msgstr "Am Rastpunkt der Regionen einrasten"
+#: 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/editor.cc:1893
-#, fuzzy
-msgid "Convert to region in region list"
-msgstr "Bereich zur Regionenliste hinzufügen"
+#: 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/editor.cc:1896
-msgid "Select all in range"
-msgstr "Alles im Bereich auswählen"
+#: gtk2_ardour/route_time_axis.cc:183
+msgid "Edit Group"
+msgstr "Bearbeitungsgruppe"
 
-#: gtk2_ardour/editor.cc:1899
-msgid "Set loop from selection"
-msgstr "Schleife aus Auswahl erstellen"
+#: gtk2_ardour/route_time_axis.cc:185
+msgid "Playlist"
+msgstr "Wiedergabeliste"
 
-#: gtk2_ardour/editor.cc:1900
-msgid "Set punch from selection"
-msgstr "Punch-Bereich aus Auswahl erstellen"
+#: gtk2_ardour/route_time_axis.cc:186
+#: gtk2_ardour/route_time_axis.cc:451
+msgid "Automation"
+msgstr "Automationen"
 
-#: gtk2_ardour/editor.cc:1905
-msgid "Crop region to range"
-msgstr "Regionen-Editor Ã¶ffnen"
+#: gtk2_ardour/route_time_axis.cc:301
+#: gtk2_ardour/mixer_strip.cc:969
+msgid "No group"
+msgstr "keine Gruppe"
 
-#: gtk2_ardour/editor.cc:1906
-msgid "Fill range with region"
-msgstr "Bereich mit Region ausfüllen"
+#: gtk2_ardour/route_time_axis.cc:411
+msgid "Show all automation"
+msgstr "Alle Automationen zeigen"
 
-#: gtk2_ardour/editor.cc:1907
-msgid "Duplicate range"
-msgstr "Bereich Duplizieren"
+#: gtk2_ardour/route_time_axis.cc:414
+msgid "Show existing automation"
+msgstr "Verfügbare Automationen zeigen"
 
-#: gtk2_ardour/editor.cc:1908
-msgid "Create chunk from range"
-msgstr "Abschnitt aus Bereich erstellen..."
+#: gtk2_ardour/route_time_axis.cc:417
+msgid "Hide all automation"
+msgstr "Automationen verbergen"
 
-#: gtk2_ardour/editor.cc:1910
-msgid "Bounce range"
-msgstr "Bereich Bouncen"
+#: gtk2_ardour/route_time_axis.cc:420
+msgid "Plugins"
+msgstr "Plugins"
 
-#: gtk2_ardour/editor.cc:1911
-msgid "Export range"
-msgstr "Bereich exportieren"
+#: gtk2_ardour/route_time_axis.cc:450
+#: gtk2_ardour/mixer_strip.cc:1057
+msgid "Remote Control ID"
+msgstr "ID für Fernsteuerung"
 
-#: gtk2_ardour/editor.cc:1925
-#: gtk2_ardour/editor.cc:2012
-msgid "Play from edit point"
-msgstr "Wiedergabe ab Arbeitspunkt"
+#: gtk2_ardour/route_time_axis.cc:467
+msgid "Align with existing material"
+msgstr "An vorhandenem Material ausrichten"
 
-#: gtk2_ardour/editor.cc:1926
-#: gtk2_ardour/editor.cc:2013
-msgid "Play from start"
-msgstr "Wiedergabe ab Anfang"
+#: gtk2_ardour/route_time_axis.cc:473
+msgid "Align with capture time"
+msgstr "An Aufnahmezeit ausrichten"
 
-#: gtk2_ardour/editor.cc:1927
-msgid "Play region"
-msgstr "Region wiedergeben"
+#: gtk2_ardour/route_time_axis.cc:480
+msgid "Alignment"
+msgstr "Ausrichtung"
 
-#: gtk2_ardour/editor.cc:1929
-#: gtk2_ardour/editor_actions.cc:266
-msgid "Loop Region"
-msgstr "Region in Schleife wiedergeben"
+#: gtk2_ardour/route_time_axis.cc:484
+msgid "Normal mode"
+msgstr "Normaler Modus"
 
-#: gtk2_ardour/editor.cc:1939
-#: gtk2_ardour/editor.cc:2022
-msgid "Select All in track"
-msgstr "Alles in Spur auswählen"
+#: gtk2_ardour/route_time_axis.cc:487
+msgid "Tape mode"
+msgstr "Tape-Modus"
 
-#: 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/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/editor.cc:1941
-#: gtk2_ardour/editor.cc:2024
-msgid "Invert selection in track"
-msgstr "Auswahl in Spur umkehren"
+#: gtk2_ardour/route_time_axis.cc:860
+msgid "Name for playlist"
+msgstr "Name für Wiedergabeliste"
 
-#: gtk2_ardour/editor.cc:1942
-#: gtk2_ardour/editor.cc:2025
-msgid "Invert selection"
-msgstr "Auswahl umkehren"
+#: 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/editor.cc:1944
-msgid "Set range to loop range"
-msgstr "Ausgewählten Bereich als Schleife"
+#: gtk2_ardour/route_time_axis.cc:1386
+msgid "New Copy"
+msgstr "Neue Kopie"
 
-#: gtk2_ardour/editor.cc:1945
-msgid "Set range to punch range"
-msgstr "Ausgewählten Bereich als Punch-Bereich"
+#: gtk2_ardour/route_time_axis.cc:1390
+msgid "New Take"
+msgstr "Neuer Take"
 
-#: gtk2_ardour/editor.cc:1947
-#: gtk2_ardour/editor_actions.cc:143
-msgid "Select All After Edit Point"
-msgstr "Alle Regionen nach dem Arbeitspunkt auswählen"
+#: gtk2_ardour/route_time_axis.cc:1391
+msgid "Copy Take"
+msgstr "Take kopieren"
 
-#: gtk2_ardour/editor.cc:1948
-#: gtk2_ardour/editor_actions.cc:145
-msgid "Select All Before Edit Point"
-msgstr "Alle Regionen vor dem Arbeitspunkt auswählen"
+#: gtk2_ardour/route_time_axis.cc:1396
+msgid "Clear Current"
+msgstr "Ausgewählte zurücksetzen"
 
-#: gtk2_ardour/editor.cc:1949
-#: gtk2_ardour/editor_actions.cc:148
-msgid "Select All After Playhead"
-msgstr "Alle Regionen nach dem Positionszeiger auswählen"
+#: gtk2_ardour/route_time_axis.cc:1399
+msgid "Select from all ..."
+msgstr "Aus allen auswählen..."
 
-#: gtk2_ardour/editor.cc:1950
-#: gtk2_ardour/editor_actions.cc:150
-msgid "Select All Before Playhead"
-msgstr "Alle Regionen vor dem Positionszeiger auswählen"
+#: gtk2_ardour/keyeditor.cc:29
+msgid "Shortcut Editor"
+msgstr "Tastenkürzel - Editor"
 
-#: gtk2_ardour/editor.cc:1951
-#: gtk2_ardour/editor_actions.cc:152
-msgid "Select All Between Playhead & Edit Point"
-msgstr "Alle Regionen zwischen Positionszeiger und Arbeitspunkt auswählen"
+#: gtk2_ardour/keyeditor.cc:30
+msgid "Remove shortcut"
+msgstr "Tastenkürzel entfernen"
 
-#: gtk2_ardour/editor.cc:1952
-#: gtk2_ardour/editor_actions.cc:154
-msgid "Select All Within Playhead & Edit Point"
-msgstr "Alle Regionen innerhalb Positionszeiger und Arbeitspunkt auswählen"
+#: gtk2_ardour/keyeditor.cc:40
+msgid "Action"
+msgstr "Aktion"
 
-#: gtk2_ardour/editor.cc:1953
-#: gtk2_ardour/editor_actions.cc:157
-msgid "Select Range Between Playhead & Edit Point"
-msgstr "Wähle Bereich zwischen Positionszeiger und Arbeitspunkt aus"
+#: gtk2_ardour/keyeditor.cc:41
+msgid "Shortcut"
+msgstr "Tastenkürzel"
 
-#: gtk2_ardour/editor.cc:1957
-#: gtk2_ardour/editor.cc:2032
-#: gtk2_ardour/editor_actions.cc:48
-msgid "Select"
-msgstr "Auswahl"
+#: 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/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/keyeditor.cc:267
+msgid "Command-"
+msgstr "Befehl-"
 
-#: 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/keyeditor.cc:268
+msgid "Option-"
+msgstr "Option-"
 
-#: 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/keyeditor.cc:269
+msgid "Shift-"
+msgstr "Groß-"
 
-#: gtk2_ardour/editor.cc:1971
-msgid "Align"
-msgstr "Ausrichten"
+#: gtk2_ardour/keyeditor.cc:270
+msgid "Control-"
+msgstr "Strg-"
 
-#: gtk2_ardour/editor.cc:1972
-msgid "Align Relative"
-msgstr "Relativ ausrichten"
+#: gtk2_ardour/add_route_dialog.cc:62
+msgid "ardour: add track/bus"
+msgstr "ardour: Füge Spur/Bus hinzu"
 
-#: gtk2_ardour/editor.cc:1976
-msgid "Insert chunk"
-msgstr "Abschnitt einfügen"
+#: gtk2_ardour/add_route_dialog.cc:63
+msgid "Tracks"
+msgstr "Audiospuren"
 
-#: gtk2_ardour/editor.cc:1983
-msgid "Insert Selected Region"
-msgstr "Ausgewählte Region einfügen"
+#: gtk2_ardour/add_route_dialog.cc:64
+msgid "Busses"
+msgstr "Busse"
 
-#: gtk2_ardour/editor.cc:1984
-msgid "Insert Existing Audio"
-msgstr "Audio importieren..."
+#: gtk2_ardour/add_route_dialog.cc:114
+#: gtk2_ardour/plugin_ui.cc:316
+msgid "Add"
+msgstr "Hinzufügen"
 
-#: gtk2_ardour/editor.cc:1993
-#: gtk2_ardour/editor.cc:2049
-msgid "Nudge entire track fwd"
-msgstr "Gesamte Spur schrittweise nach vorne"
+#: gtk2_ardour/add_route_dialog.cc:132
+msgid "Name (template)"
+msgstr "Name für Mixer-Vorlage"
 
-#: gtk2_ardour/editor.cc:1994
-#: gtk2_ardour/editor.cc:2050
-msgid "Nudge track after edit point fwd"
-msgstr "Spur nach Arbeitspunkt schrittweise nach vorne"
+#: gtk2_ardour/add_route_dialog.cc:138
+msgid "Channel Configuration"
+msgstr "Kanaleinstellungen"
 
-#: gtk2_ardour/editor.cc:1995
-#: gtk2_ardour/editor.cc:2051
-msgid "Nudge entire track bwd"
-msgstr "Gesamte Spur schrittweise nach hinten"
+#: gtk2_ardour/add_route_dialog.cc:203
+msgid "Tape"
+msgstr "Tape"
 
-#: gtk2_ardour/editor.cc:1996
-#: gtk2_ardour/editor.cc:2052
-msgid "Nudge track after edit point bwd"
-msgstr "Spur nach Arbeitspunkt schrittweise nach hinten"
+#: gtk2_ardour/add_route_dialog.cc:220
+msgid "Mono"
+msgstr "Mono"
 
-#: gtk2_ardour/editor.cc:2027
-msgid "Select all after edit point"
-msgstr "Alles nach Arbeitspunkt auswählen"
+#: gtk2_ardour/add_route_dialog.cc:222
+msgid "Stereo"
+msgstr "Stereo"
 
-#: gtk2_ardour/editor.cc:2028
-msgid "Select all before edit point"
-msgstr "Alles vor Arbeitspunkt auswählen"
+#: gtk2_ardour/export_region_dialog.cc:34
+msgid "ardour: export region"
+msgstr "ardour: Region Exportieren"
 
-#: gtk2_ardour/editor.cc:2029
-msgid "Select all after playhead"
-msgstr "Alles nach Positionszeiger auswählen"
+#: 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/editor.cc:2030
-msgid "Select all before playhead"
-msgstr "Alles vor Positionszeiger auswählen"
+#: gtk2_ardour/mixer_strip.cc:99
+#: gtk2_ardour/mixer_strip.cc:120
+#: gtk2_ardour/mixer_strip.cc:848
+msgid "Comments"
+msgstr "Kommentare"
 
-#: gtk2_ardour/editor.cc:2684
-msgid "Select/Move Objects"
-msgstr "Objekte auswählen/verschieben"
+#: gtk2_ardour/mixer_strip.cc:147
+msgid "Input"
+msgstr "Eingang"
 
-#: gtk2_ardour/editor.cc:2685
-msgid "Select/Move Ranges"
-msgstr "Editierbereich auswählen/verschieben"
+#: gtk2_ardour/mixer_strip.cc:152
+#: gtk2_ardour/mixer_strip.cc:794
+msgid "Output"
+msgstr "Ausgang"
 
-#: gtk2_ardour/editor.cc:2686
-msgid "Draw Gain Automation"
-msgstr "Lautstärkekurve zeichnen"
+#: gtk2_ardour/mixer_strip.cc:164
+msgid "tupni"
+msgstr "tupni"
 
-#: gtk2_ardour/editor.cc:2687
-msgid "Select Zoom Range"
-msgstr "Zoombereich auswählen"
+#: gtk2_ardour/mixer_strip.cc:359
+msgid "Varispeed"
+msgstr "Varispeed"
 
-#: gtk2_ardour/editor.cc:2688
-msgid "Stretch/Shrink Regions"
-msgstr "Regionen vergrößern/verkleinern (Time-Stretch)"
+#: gtk2_ardour/mixer_strip.cc:375
+#: gtk2_ardour/mixer_strip.cc:1283
+msgid "input"
+msgstr "Input"
 
-#: gtk2_ardour/editor.cc:2689
-msgid "Listen to Specific Regions"
-msgstr "Ausgewählte Regionen vorhören"
+#: gtk2_ardour/mixer_strip.cc:383
+#: gtk2_ardour/mixer_strip.cc:1291
+msgid "post"
+msgstr "Post"
 
-#: gtk2_ardour/editor.cc:2719
-#: gtk2_ardour/editor_actions.cc:209
-msgid "Zoom In"
-msgstr "Vergrößern"
+#: 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/editor.cc:2725
-#: gtk2_ardour/editor_actions.cc:207
-msgid "Zoom Out"
-msgstr "Verkleinern"
+#: gtk2_ardour/mixer_strip.cc:484
+msgid "record"
+msgstr "Aufnahme"
 
-#: gtk2_ardour/editor.cc:2731
-#: gtk2_ardour/editor_actions.cc:211
-msgid "Zoom to Session"
-msgstr "Auf ganzes Projekt zoomen"
+#: gtk2_ardour/mixer_strip.cc:491
+msgid "comments"
+msgstr "Kommentare"
 
-#: gtk2_ardour/editor.cc:2737
-msgid "Zoom focus"
-msgstr "Zoom-Mittelpunkt"
+#: gtk2_ardour/mixer_strip.cc:494
+msgid "*comments*"
+msgstr "*Kommentare*"
 
-#: gtk2_ardour/editor.cc:2751
-msgid "Snap/Grid Units"
-msgstr "Einrast-Einheiten"
+#: gtk2_ardour/mixer_strip.cc:506
+msgid "Rec"
+msgstr "Rec"
 
-#: gtk2_ardour/editor.cc:2754
-msgid "Magnetic Snap"
-msgstr "Magnetisch einrasten"
+#: gtk2_ardour/mixer_strip.cc:509
+msgid "S"
+msgstr "S"
 
-#: gtk2_ardour/editor.cc:2757
-msgid "Snap/Grid Mode"
-msgstr "Einrastmodus"
+#: gtk2_ardour/mixer_strip.cc:513
+#: gtk2_ardour/mixer_strip.cc:858
+msgid "Cmt"
+msgstr "Kmt"
 
-#: gtk2_ardour/editor.cc:2763
-msgid "Edit point"
-msgstr "Arbeitspunkt"
+#: gtk2_ardour/mixer_strip.cc:516
+#: gtk2_ardour/mixer_strip.cc:855
+msgid "*Cmt*"
+msgstr "*Kmt*"
 
-#: gtk2_ardour/editor.cc:2913
-msgid "malformed URL passed to drag-n-drop code"
-msgstr ""
+#: 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/editor.cc:3032
-#: gtk2_ardour/editor_actions.cc:320
-msgid "Undo"
-msgstr "Rückgängig"
+#: gtk2_ardour/mixer_strip.cc:774
+msgid " Input"
+msgstr "Eingang"
 
-#: gtk2_ardour/editor.cc:3034
-msgid "Undo (%1)"
-msgstr "Rückgängig (%1)"
+#: gtk2_ardour/mixer_strip.cc:777
+msgid "I"
+msgstr "I"
 
-#: gtk2_ardour/editor.cc:3041
-#: gtk2_ardour/editor_actions.cc:322
-msgid "Redo"
-msgstr "Wiederherstellen"
+#: gtk2_ardour/mixer_strip.cc:797
+msgid "O"
+msgstr "O"
 
-#: gtk2_ardour/editor.cc:3043
-msgid "Redo (%1)"
-msgstr "Wiederherstellen (%1)"
+#: gtk2_ardour/mixer_strip.cc:845
+msgid "*Comments*"
+msgstr "*Kommentare*"
 
-#: gtk2_ardour/editor.cc:3073
-msgid "Duplicate how many times?"
-msgstr "Wie häufig duplizieren?"
+#: gtk2_ardour/mixer_strip.cc:900
+msgid ": comment editor"
+msgstr "Kommentare bearbeiten"
 
-#: gtk2_ardour/editor.cc:3175
-msgid "Splice Edit"
-msgstr "Kleben"
+#: gtk2_ardour/mixer_strip.cc:995
+msgid "Grp"
+msgstr "Grp"
 
-#: gtk2_ardour/editor.cc:3177
-msgid "Slide Edit"
-msgstr "Slide Edit"
+#: gtk2_ardour/mixer_strip.cc:998
+msgid "~G"
+msgstr "~G"
 
-#: gtk2_ardour/editor.cc:3572
-msgid ""
-"Playlist %1 is currently unused.\n"
-"If left alone, no audio files used by it will be cleaned.\n"
-"If deleted, audio files used by it alone by will cleaned."
-msgstr ""
-"Die Wiedergabeliste %1 wird nicht verwendet.\n"
-"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/mixer_strip.cc:1046
+msgid "Invert Polarity"
+msgstr "Polarität umkehren"
 
-#: gtk2_ardour/editor.cc:3582
-msgid "Delete playlist"
-msgstr "Wiedergabeliste löschen"
+#: gtk2_ardour/mixer_strip.cc:1049
+msgid "Protect against denormals"
+msgstr "Schutz vor Denormals"
 
-#: gtk2_ardour/editor.cc:3583
-msgid "Keep playlist"
-msgstr "Wiedergabeliste beibehalten"
+#: 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/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/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/editor.cc:3752
-msgid "New name of snapshot"
-msgstr "Name für neuen Schnappschuss"
+#: gtk2_ardour/plugin_ui.cc:99
+msgid "unknown type of editor-supplying plugin"
+msgstr "Unbekannter Plugintyp"
 
-#: gtk2_ardour/editor.cc:3770
-msgid ""
-"Do you really want to remove snapshot \"%1\" ?\n"
-"(cannot be undone)"
-msgstr ""
-"Wollen Sie den Schnappschuss \"%1\" wirklich löschen?\n"
-"(Dies kann nicht rückgängig gemacht werden!)"
+#: 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/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/plugin_ui.cc:347
+msgid "Plugin preset %1 not found"
+msgstr "Plugin Preset %1 nicht gefunden"
 
-#: 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/plugin_ui.cc:356
+msgid "Name of New Preset:"
+msgstr "Name für neue Voreinstellung:"
 
-#: gtk2_ardour/editor.cc:3883
-msgid "new playlists"
-msgstr "Neue Wiedergabelisten"
+#: gtk2_ardour/imageframe_socket_handler.cc:126
+msgid "Image Compositor Socket has been shutdown/closed"
+msgstr ""
 
-#: gtk2_ardour/editor.cc:3898
-msgid "copy playlists"
-msgstr "Wiedergabelisten kopieren"
+#: gtk2_ardour/location_ui.cc:49
+#: gtk2_ardour/location_ui.cc:52
+msgid "Use PH"
+msgstr "zu PZ"
 
-#: gtk2_ardour/editor.cc:3913
-msgid "clear playlists"
-msgstr "Wiedergabelisten zurücksetzen"
+#: gtk2_ardour/location_ui.cc:50
+#: gtk2_ardour/location_ui.cc:53
+msgid "Go"
+msgstr "Gehe zu"
 
-#: gtk2_ardour/editor_actions.cc:49
-msgid "Select Regions"
-msgstr "Region auswählen"
+#: gtk2_ardour/location_ui.cc:56
+msgid "CD"
+msgstr "CD"
 
-#: gtk2_ardour/editor_actions.cc:50
-msgid "Select Range Operations"
-msgstr "Bereichs"
+#: gtk2_ardour/location_ui.cc:57
+msgid "Hidden"
+msgstr "Versteckt"
 
-#: gtk2_ardour/editor_actions.cc:51
-msgid "Move Selected Marker"
-msgstr "Ausgewählten Positionsmarker verschieben"
+#: gtk2_ardour/location_ui.cc:59
+msgid "SCMS"
+msgstr "SCMS"
 
-#: gtk2_ardour/editor_actions.cc:52
-msgid "Region operations"
-msgstr "Region(en)"
+#: gtk2_ardour/location_ui.cc:60
+msgid "Pre-Emphasis"
+msgstr "Präemphase"
 
-#: gtk2_ardour/editor_actions.cc:53
-msgid "Tools"
-msgstr "Werkzeuge"
+#: gtk2_ardour/location_ui.cc:85
+#: gtk2_ardour/location_ui.cc:86
+msgid "Set value to Playhead"
+msgstr "Wert auf Positionszeiger setzen"
 
-#: gtk2_ardour/editor_actions.cc:54
-msgid "View"
-msgstr "Ansicht"
+#: 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/editor_actions.cc:55
-msgid "ZoomFocus"
-msgstr "Zoom-Mittelpunkt"
+#: gtk2_ardour/location_ui.cc:624
+msgid "Add New Location"
+msgstr "Neue Position hinzufügen"
 
-#: gtk2_ardour/editor_actions.cc:56
-msgid "Meter hold"
-msgstr "Pegelanzeige halten"
+#: gtk2_ardour/location_ui.cc:625
+msgid "Add New Range"
+msgstr "Neuen Bereich hinzufügen"
 
-#: gtk2_ardour/editor_actions.cc:57
-msgid "Meter falloff"
-msgstr "Abfall der Pegelanzeigen"
+#: gtk2_ardour/location_ui.cc:663
+msgid "Location (CD Index) Markers"
+msgstr "Positionsmarker (CD Index)"
 
-#: gtk2_ardour/editor_actions.cc:59
-msgid "Crossfades"
-msgstr "Crossfades"
+#: gtk2_ardour/location_ui.cc:683
+msgid "Range (CD Track) Markers"
+msgstr "Bereiche (CD Tracks)"
 
-#: gtk2_ardour/editor_actions.cc:60
-msgid "Monitoring"
-msgstr "Monitoring"
+#: gtk2_ardour/location_ui.cc:720
+msgid "remove marker"
+msgstr "Marker entfernen"
 
-#: gtk2_ardour/editor_actions.cc:61
-msgid "Autoconnect"
-msgstr "Automatisch verbinden"
+#: gtk2_ardour/location_ui.cc:851
+msgid "add marker"
+msgstr "Marker hinzufügen"
 
-#: gtk2_ardour/editor_actions.cc:62
-msgid "Layering"
-msgstr "Layering"
+#: gtk2_ardour/location_ui.cc:870
+msgid "add range marker"
+msgstr "Bereich hinzufügen"
 
-#: gtk2_ardour/editor_actions.cc:63
-msgid "Timecode fps"
-msgstr "Timecode FPS"
+#: 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/editor_actions.cc:64
-msgid "Pullup / Pulldown"
-msgstr "Pull-Up / Pull-Down"
+#: gtk2_ardour/sfdb_ui.cc:79
+#: gtk2_ardour/sfdb_ui.cc:99
+msgid "to selected tracks"
+msgstr "zu ausgewählten Spuren"
 
-#: gtk2_ardour/editor_actions.cc:65
-msgid "Subframes"
-msgstr "Subframes"
+#: gtk2_ardour/sfdb_ui.cc:81
+#: gtk2_ardour/sfdb_ui.cc:101
+msgid "to region list"
+msgstr "zur Liste der Regionen"
 
-#: gtk2_ardour/editor_actions.cc:66
-#, fuzzy
-msgid "Locate To Markers"
-msgstr "Positionsmarker"
+#: gtk2_ardour/sfdb_ui.cc:83
+#: gtk2_ardour/sfdb_ui.cc:103
+msgid "as new tape tracks"
+msgstr "als neue Tape-Spuren"
 
-#: gtk2_ardour/editor_actions.cc:70
-msgid "Link Region/Track Selection"
-msgstr "Spurauswahl folgt Auswahl der Region"
+#: gtk2_ardour/sfdb_ui.cc:87
+msgid "programming error: unknown import mode string %1"
+msgstr "Programmierfehler: unbekannter Importmodus %1"
 
-#: gtk2_ardour/editor_actions.cc:72
-msgid "Show Editor Mixer"
-msgstr "Mixer-Panel zeigen"
+#: gtk2_ardour/sfdb_ui.cc:115
+msgid "Auto-play"
+msgstr "Auto-Play"
 
-#: gtk2_ardour/editor_actions.cc:77
-msgid "Span Entire Overlap"
-msgstr "Gesamte Ãœberlappung"
+#: 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/editor_actions.cc:86
-msgid "Created Automatically"
-msgstr "Automatisch erzeugen"
+#: gtk2_ardour/sfdb_ui.cc:135
+msgid "Length:"
+msgstr "Länge:"
 
-#: gtk2_ardour/editor_actions.cc:89
-msgid "Playhead to Next Region Boundary"
-msgstr "Positionszeiger zur nächsten Regiongrenze"
+#: gtk2_ardour/sfdb_ui.cc:136
+msgid "Timestamp:"
+msgstr "Zeitstempel:"
 
-#: gtk2_ardour/editor_actions.cc:91
-msgid "Playhead to Previous Region Boundary"
-msgstr "Positionszeiger zur vorherigen Regiongrenze"
+#: gtk2_ardour/sfdb_ui.cc:137
+msgid "Format:"
+msgstr "Format:"
 
-#: gtk2_ardour/editor_actions.cc:94
-msgid "Playhead to Next Region Start"
-msgstr "Positionszeiger zum Anfang der nächsten Region"
+#: gtk2_ardour/sfdb_ui.cc:138
+msgid "Channels:"
+msgstr "Kanäle:"
 
-#: gtk2_ardour/editor_actions.cc:96
-msgid "Playhead to Next Region End"
-msgstr "Positionszeiger zum Ende der nächsten Region"
+#: 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/editor_actions.cc:98
-msgid "Playhead to Next Region Sync"
-msgstr "Positionszeiger zum Einrastpunkt der nächsten Region"
+#: gtk2_ardour/sfdb_ui.cc:171
+#: gtk2_ardour/sfdb_ui.cc:490
+msgid "Tags:"
+msgstr "Stichworte:"
 
-#: gtk2_ardour/editor_actions.cc:101
-msgid "Playhead to Previous Region Start"
-msgstr "Positionszeiger zum Anfang der vorherigen Region"
+#: gtk2_ardour/sfdb_ui.cc:181
+msgid "Play (double click)"
+msgstr "Play"
 
-#: gtk2_ardour/editor_actions.cc:103
-msgid "Playhead to Previous Region End"
-msgstr "Positionszeiger zum Ende der vorherigen Region"
+#: 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/editor_actions.cc:105
-msgid "Playhead to Previous Region Sync"
-msgstr "Positionszeiger zum Einrastpunkt der vorherigen Region"
+#: gtk2_ardour/sfdb_ui.cc:314
+msgid "Could not read file: %1 (%2)."
+msgstr "Konnte Datei nicht lesen: %1 (%2)."
 
-#: gtk2_ardour/editor_actions.cc:108
-msgid "to Next Region Boundary"
-msgstr "zur nächsten Regiongrenze"
+#: gtk2_ardour/sfdb_ui.cc:334
+msgid "Could not access soundfile: "
+msgstr "Konnte auf Audiodatei nicht zugreifen: "
 
-#: gtk2_ardour/editor_actions.cc:110
-msgid "to Previous Region Boundary"
-msgstr "zur vorherigen Regiongrenze"
+#: gtk2_ardour/sfdb_ui.cc:380
+msgid "SoundFileBox: Could not tokenize string: "
+msgstr "SoundFileBox: Konnte Zeichenkette nicht zerlegen: "
 
-#: gtk2_ardour/editor_actions.cc:113
-msgid "to Next Region Start"
-msgstr "zum Anfang der nächsten Region"
+#: gtk2_ardour/sfdb_ui.cc:400
+msgid "Search"
+msgstr "Suchen"
 
-#: gtk2_ardour/editor_actions.cc:115
-msgid "to Next Region End"
-msgstr "zum Ende der nächsten Region"
+#: gtk2_ardour/sfdb_ui.cc:402
+#: gtk2_ardour/sfdb_ui.cc:792
+msgid "Start Downloading"
+msgstr "Download beginnen"
 
-#: gtk2_ardour/editor_actions.cc:117
-msgid "to Next Region Sync"
-msgstr "zum Einrastpunkt der nächsten Region"
+#: gtk2_ardour/sfdb_ui.cc:417
+msgid "Audio files"
+msgstr "Audiodateien"
 
-#: gtk2_ardour/editor_actions.cc:120
-msgid "to Previous Region Start"
-msgstr "zum Anfang der vorherigen Region"
+#: gtk2_ardour/sfdb_ui.cc:420
+msgid "All files"
+msgstr "Alle Dateien"
 
-#: gtk2_ardour/editor_actions.cc:122
-msgid "to Previous Region End"
-msgstr "zum Ende der vorherigen Region"
+#: gtk2_ardour/sfdb_ui.cc:431
+msgid "Browse Files"
+msgstr "Durchsuchen"
 
-#: gtk2_ardour/editor_actions.cc:124
-msgid "to Previous Region Sync"
-msgstr "zum Einrastpunkt der vorherigen Region"
+#: gtk2_ardour/sfdb_ui.cc:458
+#: gtk2_ardour/sfdb_ui.cc:505
+msgid "Paths"
+msgstr "Pfade"
 
-#: gtk2_ardour/editor_actions.cc:127
-msgid "to Range Start"
-msgstr "zum Anfang des Auswahlbereichs"
+#: gtk2_ardour/sfdb_ui.cc:467
+msgid "Search Tags"
+msgstr "Stichwortsuche"
 
-#: gtk2_ardour/editor_actions.cc:129
-msgid "to Range End"
-msgstr "zum Ende des Auswahlbereichs"
+#: gtk2_ardour/sfdb_ui.cc:482
+msgid "User:"
+msgstr "Benutzer:"
 
-#: gtk2_ardour/editor_actions.cc:132
-msgid "Playhead to Range Start"
-msgstr "Positionszeiger zum Anfang des Auswahlbereichs"
+#: gtk2_ardour/sfdb_ui.cc:486
+msgid "Password:"
+msgstr "Passwort"
 
-#: gtk2_ardour/editor_actions.cc:134
-msgid "Playhead to Range End"
-msgstr "Positionszeiger zum Ende des Auswahlbereichs"
+#: gtk2_ardour/sfdb_ui.cc:515
+msgid "Search Freesound"
+msgstr "Freesound durchsuchen"
 
-#: gtk2_ardour/editor_actions.cc:139
-#: gtk2_ardour/redirect_box.cc:1195
-msgid "Deselect All"
-msgstr "Nichts auswählen"
+#: gtk2_ardour/sfdb_ui.cc:698
+msgid "SoundFileBrowser: Could not tokenize string: "
+msgstr "SoundFileBrowser: Konnte Zeichenkete nicht zerlegen:"
 
-#: gtk2_ardour/editor_actions.cc:141
-msgid "Invert Selection"
-msgstr "Auswahl umkehren"
+#: gtk2_ardour/sfdb_ui.cc:734
+msgid "Cancelling.."
+msgstr "Abbrechen..."
 
-#: gtk2_ardour/editor_actions.cc:160
-msgid "Select All in Punch Range"
-msgstr "Alle Regionen im Punch-Bereich auswählen"
+#: 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/editor_actions.cc:162
-msgid "Select All in Loop Range"
-msgstr "Alle Regionen innerhalb der Schleife auswählen"
+#: gtk2_ardour/sfdb_ui.cc:962
+#: gtk2_ardour/sfdb_ui.cc:1281
+msgid "one track per channel"
+msgstr "eine Spur pro Kanal"
 
-#: gtk2_ardour/editor_actions.cc:165
-msgid "Select Next Track/Bus"
-msgstr "Nächste Spur/Bus auswählen"
+#: gtk2_ardour/sfdb_ui.cc:970
+#: gtk2_ardour/sfdb_ui.cc:1283
+msgid "sequence files"
+msgstr "Dateien aneinanderreihen"
 
-#: gtk2_ardour/editor_actions.cc:167
-msgid "Select Previous Track/Bus"
-msgstr "Vorherige Spur/Bus auswählen"
+#: 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/editor_actions.cc:171
-#, fuzzy
-msgid "Locate to Mark 1"
-msgstr "Zu Marker 1 "
+#: gtk2_ardour/sfdb_ui.cc:979
+#: gtk2_ardour/sfdb_ui.cc:1285
+msgid "one region per file"
+msgstr "eine Region pro Datei"
 
-#: gtk2_ardour/editor_actions.cc:173
-#, fuzzy
-msgid "Locate to Mark 2"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:982
+#: gtk2_ardour/sfdb_ui.cc:1286
+msgid "one region per channel"
+msgstr "eine Region pro Kanal"
 
-#: gtk2_ardour/editor_actions.cc:175
-#, fuzzy
-msgid "Locate to Mark 3"
-msgstr "Positionszeiger zu Marker setzen"
+#: 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/editor_actions.cc:177
-#, fuzzy
-msgid "Locate to Mark 4"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:1167
+msgid "Copy files to session"
+msgstr "Kopiere Dateien zum Projekt"
 
-#: gtk2_ardour/editor_actions.cc:179
-#, fuzzy
-msgid "Locate to Mark 5"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:1183
+#: gtk2_ardour/sfdb_ui.cc:1318
+msgid "use file timestamp"
+msgstr "Zeitstempel"
 
-#: gtk2_ardour/editor_actions.cc:181
-#, fuzzy
-msgid "Locate to Mark 6"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:1184
+#: gtk2_ardour/sfdb_ui.cc:1320
+msgid "at edit point"
+msgstr "Arbeitspunkt"
 
-#: gtk2_ardour/editor_actions.cc:183
-#, fuzzy
-msgid "Locate to Mark 7"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:1185
+#: gtk2_ardour/sfdb_ui.cc:1322
+msgid "at playhead"
+msgstr "Positionszeiger"
 
-#: gtk2_ardour/editor_actions.cc:185
-#, fuzzy
-msgid "Locate to Mark 8"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:1186
+msgid "at session start"
+msgstr "Projektanfang"
 
-#: gtk2_ardour/editor_actions.cc:187
-#, fuzzy
-msgid "Locate to Mark 9"
-msgstr "Positionszeiger zu Marker setzen"
+#: gtk2_ardour/sfdb_ui.cc:1191
+msgid "Add files:"
+msgstr "Hinzufügen:"
 
-#: gtk2_ardour/editor_actions.cc:190
-msgid "Jump Forward to Mark"
-msgstr "Zum nächsten Marker springen"
+#: gtk2_ardour/sfdb_ui.cc:1213
+msgid "Insert:"
+msgstr "Einfügepunkt:"
 
-#: gtk2_ardour/editor_actions.cc:192
-msgid "Jump Backward to Mark"
-msgstr "Zum vorherigen Marker springen"
+#: gtk2_ardour/sfdb_ui.cc:1226
+msgid "Mapping:"
+msgstr "Zuordnung:"
 
-#: gtk2_ardour/editor_actions.cc:194
-msgid "Add Mark from Playhead"
-msgstr "Marker am Positionszeiger setzen"
+#: gtk2_ardour/sfdb_ui.cc:1244
+msgid "Conversion Quality:"
+msgstr "SR-Konvertierung:"
 
-#: gtk2_ardour/editor_actions.cc:197
-msgid "Nudge Forward"
-msgstr "Schritt nach vorne"
+#: gtk2_ardour/sfdb_ui.cc:1256
+#: gtk2_ardour/sfdb_ui.cc:1334
+msgid "Best"
+msgstr "bestmöglich"
 
-#: gtk2_ardour/editor_actions.cc:199
-msgid "Nudge Next Forward"
-msgstr "Nächste Region Schritt vorwärts"
+#: gtk2_ardour/sfdb_ui.cc:1257
+#: gtk2_ardour/sfdb_ui.cc:1336
+msgid "Good"
+msgstr "gut"
 
-#: gtk2_ardour/editor_actions.cc:201
-msgid "Nudge Backward"
-msgstr "Schritt nach Hinten"
+#: gtk2_ardour/sfdb_ui.cc:1258
+#: gtk2_ardour/sfdb_ui.cc:1338
+msgid "Quick"
+msgstr "schnell"
 
-#: gtk2_ardour/editor_actions.cc:203
-msgid "Nudge Next Backward"
-msgstr "Nächste Region Schritt rückwärts"
+#: gtk2_ardour/sfdb_ui.cc:1282
+msgid "merge files"
+msgstr "Dateien zusammenfügen"
 
-#: gtk2_ardour/editor_actions.cc:213
-msgid "Zoom to Region"
-msgstr "Auf Region zoomen"
+#: gtk2_ardour/sfdb_ui.cc:1359
+msgid "programming error: %1 (%2)"
+msgstr "Programmierfehler: %1 (%2)"
 
-#: gtk2_ardour/editor_actions.cc:215
-msgid "Toggle Zoom State"
+#: 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_actions.cc:218
-msgid "Scroll Tracks Up"
-msgstr "Spuren nach oben scrollen"
-
-#: gtk2_ardour/editor_actions.cc:220
-msgid "Scroll Tracks Down"
-msgstr "Spuren nach unten scrollen"
+#: 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:222
-msgid "Step Tracks Up"
-msgstr "Spuren langsam nach oben scrollen"
+#: gtk2_ardour/editor_actions.cc:49
+msgid "Autoconnect"
+msgstr "Automatisch verbinden"
 
-#: gtk2_ardour/editor_actions.cc:224
-msgid "Step Tracks Down"
-msgstr "Spuren langsam nach unten scrollen"
+#: gtk2_ardour/editor_actions.cc:50
+msgid "Crossfades"
+msgstr "Crossfades"
 
-#: gtk2_ardour/editor_actions.cc:227
-msgid "Scroll Backward"
-msgstr "Vorwärts scrollen"
+#: gtk2_ardour/editor_actions.cc:52
+msgid "Move Selected Marker"
+msgstr "Ausgewählten Positionsmarker verschieben"
 
-#: gtk2_ardour/editor_actions.cc:229
-msgid "Scroll Forward"
-msgstr "Rückwärts scrollen"
+#: gtk2_ardour/editor_actions.cc:53
+msgid "Select Range Operations"
+msgstr "Bereichs"
 
-#: gtk2_ardour/editor_actions.cc:231
-msgid "goto"
-msgstr "Gehe zu"
+#: gtk2_ardour/editor_actions.cc:54
+msgid "Select Regions"
+msgstr "Region auswählen"
 
-#: gtk2_ardour/editor_actions.cc:233
-#: gtk2_ardour/editor_actions.cc:235
-msgid "to Center"
-msgstr "zur Mitte"
+#: gtk2_ardour/editor_actions.cc:55
+msgid "Edit Point"
+msgstr "Arbeitspunkt"
 
-#: gtk2_ardour/editor_actions.cc:238
-msgid "Playhead forward"
-msgstr "Positionszeiger vorwärts"
+#: gtk2_ardour/editor_actions.cc:57
+msgid "Latch"
+msgstr "Latch"
 
-#: gtk2_ardour/editor_actions.cc:240
-msgid "Playhead Backward"
-msgstr "Positionszeiger rückwärts"
+#: gtk2_ardour/editor_actions.cc:58
+msgid "Layering"
+msgstr "Layering"
 
-#: gtk2_ardour/editor_actions.cc:243
-msgid "to Edit"
-msgstr "Positionszeiger zum Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:59
+msgid "Link"
+msgstr "Link"
 
-#: gtk2_ardour/editor_actions.cc:245
-msgid "to Playhead"
-msgstr "zum Positionszeiger"
+#: gtk2_ardour/editor_actions.cc:60
+#, fuzzy
+msgid "Locate To Markers"
+msgstr "Positionsmarker"
 
-#: gtk2_ardour/editor_actions.cc:248
-msgid "Trim start at edit point"
-msgstr "Schneide Regionanfang am Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:61
+#: gtk2_ardour/editor_actions.cc:685
+msgid "Markers"
+msgstr "Marker"
 
-#: gtk2_ardour/editor_actions.cc:250
-msgid "Trim end at edit point"
-msgstr "Schneide Regionende am Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:62
+msgid "Meter falloff"
+msgstr "Abfall der Pegelanzeigen"
 
-#: gtk2_ardour/editor_actions.cc:262
-msgid "Set Loop From Edit Range"
-msgstr "Schleife aus Editierbereich erstellen"
+#: gtk2_ardour/editor_actions.cc:63
+msgid "Meter hold"
+msgstr "Pegelanzeige halten"
 
-#: gtk2_ardour/editor_actions.cc:264
-msgid "Set Loop From Region"
-msgstr "Schleife aus Region erstellen"
+#: gtk2_ardour/editor_actions.cc:64
+msgid "Misc Options"
+msgstr "Sonstiges"
 
-#: gtk2_ardour/editor_actions.cc:268
-msgid "Set Punch From Edit Range"
-msgstr "Punch-Bereich aus Editierbereich erstellen"
+#: gtk2_ardour/editor_actions.cc:65
+msgid "Monitoring"
+msgstr "Monitoring"
 
-#: gtk2_ardour/editor_actions.cc:272
-msgid "Transpose"
-msgstr "Transponieren"
+#: gtk2_ardour/editor_actions.cc:70
+msgid "Primary Clock"
+msgstr "Erste Zeitanzeige"
 
-#: gtk2_ardour/editor_actions.cc:275
-msgid "Set Fade In Length"
-msgstr "Ändere Fade-In Länge"
+#: gtk2_ardour/editor_actions.cc:71
+msgid "Pullup / Pulldown"
+msgstr "Pull-Up / Pull-Down"
 
-#: gtk2_ardour/editor_actions.cc:277
-msgid "Toggle Fade In Active"
-msgstr "Fade-In aktivieren"
+#: gtk2_ardour/editor_actions.cc:72
+msgid "Region"
+msgstr "Region"
 
-#: gtk2_ardour/editor_actions.cc:279
-msgid "Set Fade Out Length"
-msgstr "Fade-Out verändern"
+#: gtk2_ardour/editor_actions.cc:73
+msgid "Region operations"
+msgstr "Region(en)"
 
-#: gtk2_ardour/editor_actions.cc:281
-msgid "Toggle Fade Out Active"
-msgstr "Fade-Out aktivieren"
+#: gtk2_ardour/editor_actions.cc:74
+msgid "Gain"
+msgstr "Gain"
 
-#: gtk2_ardour/editor_actions.cc:284
-msgid "Align Regions Start"
-msgstr "Anfang der Regionen ausrichten"
+#: gtk2_ardour/editor_actions.cc:75
+msgid "Rulers"
+msgstr "Markierungsleisten"
 
-#: gtk2_ardour/editor_actions.cc:286
-msgid "Align Regions Start Relative"
-msgstr "Anfang der Regionen relativ ausrichten"
+#: gtk2_ardour/editor_actions.cc:76
+msgid "Views"
+msgstr "Ansichten"
 
-#: gtk2_ardour/editor_actions.cc:288
-msgid "Align Regions End"
-msgstr "Regionenenden ausrichten"
+#: gtk2_ardour/editor_actions.cc:77
+msgid "Scroll"
+msgstr "Scrollen"
 
-#: gtk2_ardour/editor_actions.cc:290
-msgid "Align Regions End Relative"
-msgstr "Regionenenden relativ ausrichten"
+#: gtk2_ardour/editor_actions.cc:78
+msgid "Secondary Clock"
+msgstr "Zweite Zeitanzeige"
 
-#: gtk2_ardour/editor_actions.cc:293
-msgid "Align Regions Sync"
-msgstr "Regionen-Einrastpunkt ausrichten"
+#: gtk2_ardour/editor_actions.cc:81
+#: gtk2_ardour/editor_actions.cc:511
+msgid "Separate"
+msgstr "Teilen"
 
-#: gtk2_ardour/editor_actions.cc:295
-msgid "Align Regions Sync Relative"
-msgstr "Regionen-Einrastpunkt relativ ausrichten"
+#: gtk2_ardour/editor_actions.cc:85
+msgid "Subframes"
+msgstr "Subframes"
 
-#: gtk2_ardour/editor_actions.cc:298
-msgid "Play From Edit Point"
-msgstr "Wiedergabe ab Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:88
+msgid "Timecode fps"
+msgstr "Timecode FPS"
 
-#: gtk2_ardour/editor_actions.cc:300
-msgid "Play from Edit Point & Return"
-msgstr "Wiedergabe ab Arbeitspunkt & Return"
+#: gtk2_ardour/editor_actions.cc:91
+msgid "Tools"
+msgstr "Werkzeuge"
 
-#: gtk2_ardour/editor_actions.cc:303
-msgid "Play Edit Range"
-msgstr "Editierbereich wiedergeben"
+#: gtk2_ardour/editor_actions.cc:93
+msgid "View"
+msgstr "Ansicht"
 
-#: gtk2_ardour/editor_actions.cc:304
-msgid "Play Selected Region(s)"
-msgstr "Ausgewählte Regionen wiedergeben"
+#: gtk2_ardour/editor_actions.cc:94
+msgid "Waveforms"
+msgstr "Wellenform"
 
-#: gtk2_ardour/editor_actions.cc:306
-msgid "Brush at Mouse"
-msgstr "Pinsel an Mausposition (Brush)"
+#: gtk2_ardour/editor_actions.cc:95
+msgid "Zoom Focus"
+msgstr "Zoom Fokus"
 
-#: gtk2_ardour/editor_actions.cc:308
-msgid "Mute/Unmute Region"
-msgstr "Region Mute/Unmute"
+#: gtk2_ardour/editor_actions.cc:96
+msgid "Zoom"
+msgstr "Zoom"
 
-#: gtk2_ardour/editor_actions.cc:311
-msgid "Set Playhead"
-msgstr "Positionszeiger setzen"
+#: gtk2_ardour/editor_actions.cc:98
+msgid "Link Region/Track Selection"
+msgstr "Spurauswahl folgt Auswahl der Region"
 
-#: gtk2_ardour/editor_actions.cc:313
-msgid "Set Edit Point"
-msgstr "Arbeitspunkt setzen"
+#: gtk2_ardour/editor_actions.cc:99
+msgid "Break drag"
+msgstr "Verschieben abbrechen"
 
-#: gtk2_ardour/editor_actions.cc:315
-msgid "Split Region"
-msgstr "Region teilen (Split)"
+#: gtk2_ardour/editor_actions.cc:101
+msgid "Show Editor Mixer"
+msgstr "Mixer-Panel zeigen"
 
-#: gtk2_ardour/editor_actions.cc:317
-msgid "Set Region Sync Position"
-msgstr "Einrastpunkt der Region setzen"
+#: gtk2_ardour/editor_actions.cc:106
+msgid "Span Entire Overlap"
+msgstr "Gesamte Ãœberlappung"
 
-#: gtk2_ardour/editor_actions.cc:325
-msgid "Export Session"
-msgstr "Projekt exportieren..."
+#: gtk2_ardour/editor_actions.cc:115
+msgid "Created Automatically"
+msgstr "Automatisch erzeugen"
 
-#: gtk2_ardour/editor_actions.cc:327
-msgid "Export Range"
-msgstr "Bereiche exportieren..."
+#: gtk2_ardour/editor_actions.cc:118
+msgid "Use Region Fades (global)"
+msgstr "Regionen-Fades global benutzen"
 
-#: gtk2_ardour/editor_actions.cc:330
-msgid "Separate"
-msgstr "Teilen"
+#: gtk2_ardour/editor_actions.cc:120
+msgid "Show Region Fades"
+msgstr "Fades anzeigen"
 
-#: gtk2_ardour/editor_actions.cc:332
-#: gtk2_ardour/editor_actions.cc:355
-#, fuzzy
-msgid "Crop"
-msgstr "Kopieren"
+#: gtk2_ardour/editor_actions.cc:122
+msgid "Toggle Region Fade In"
+msgstr "Fade-In (de-)aktivieren"
 
-#: 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:124
+msgid "Toggle Region Fade Out"
+msgstr "Fade-Out (de-)aktivieren"
 
-#: gtk2_ardour/editor_actions.cc:343
-msgid "Duplicate Region"
-msgstr "Duplizieren"
+#: gtk2_ardour/editor_actions.cc:126
+msgid "Toggle Region Fades"
+msgstr "Ãœberblenden von Region (de-)aktivieren"
 
-#: gtk2_ardour/editor_actions.cc:345
-msgid "Multi-Duplicate Region"
-msgstr "Region mehrfach Duplizieren"
+#: gtk2_ardour/editor_actions.cc:129
+msgid "Playhead to Next Region Boundary"
+msgstr "Positionszeiger zur nächsten Regiongrenze"
 
-#: gtk2_ardour/editor_actions.cc:347
-msgid "Duplicate Range"
-msgstr "Bereich duplizieren"
+#: gtk2_ardour/editor_actions.cc:131
+msgid "Playhead to Previous Region Boundary"
+msgstr "Positionszeiger zur vorherigen Regiongrenze"
 
-#: gtk2_ardour/editor_actions.cc:349
-msgid "Insert Region"
-msgstr "Einfügen"
+#: 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:351
-msgid "Reverse Region"
-msgstr "Rückwärts"
+#: 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:353
-msgid "Normalize Region"
-msgstr "Normalisieren"
+#: 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:357
-msgid "Insert Chunk"
-msgstr "Abschnitt einfügen"
+#: gtk2_ardour/editor_actions.cc:141
+msgid "Playhead to Previous Region Start"
+msgstr "Positionszeiger zum Anfang der vorherigen Region"
 
-#: gtk2_ardour/editor_actions.cc:360
-msgid "Split At Edit Point"
-msgstr "Am Arbeitspunkt trennen"
+#: gtk2_ardour/editor_actions.cc:143
+msgid "Playhead to Previous Region End"
+msgstr "Positionszeiger zum Ende der vorherigen Region"
 
-#: gtk2_ardour/editor_actions.cc:363
-msgid "Start Range"
-msgstr "Bereich beginnen"
+#: gtk2_ardour/editor_actions.cc:145
+msgid "Playhead to Previous Region Sync"
+msgstr "Positionszeiger zum Einrastpunkt der vorherigen Region"
 
-#: gtk2_ardour/editor_actions.cc:365
-msgid "Finish Range"
-msgstr "Bereich beenden"
+#: gtk2_ardour/editor_actions.cc:148
+msgid "to Next Region Boundary"
+msgstr "zur nächsten Regiongrenze"
 
-#: gtk2_ardour/editor_actions.cc:367
-msgid "Finish add Range"
-msgstr "Bereich hinzufügen beenden"
+#: gtk2_ardour/editor_actions.cc:150
+msgid "to Previous Region Boundary"
+msgstr "zur vorherigen Regiongrenze"
 
-#: gtk2_ardour/editor_actions.cc:375
-msgid "Follow Playhead"
-msgstr "Positionszeiger folgen"
+#: gtk2_ardour/editor_actions.cc:153
+msgid "to Next Region Start"
+msgstr "zum Anfang der nächsten Region"
 
-#: gtk2_ardour/editor_actions.cc:383
-msgid "Zoom Focus Left"
-msgstr "Am linken Rand ausrichten"
+#: gtk2_ardour/editor_actions.cc:155
+msgid "to Next Region End"
+msgstr "zum Ende der nächsten Region"
 
-#: gtk2_ardour/editor_actions.cc:385
-msgid "Zoom Focus Right"
-msgstr "Am rechten Rand ausrichten"
+#: gtk2_ardour/editor_actions.cc:157
+msgid "to Next Region Sync"
+msgstr "zum Einrastpunkt der nächsten Region"
 
-#: gtk2_ardour/editor_actions.cc:387
-msgid "Zoom Focus Center"
-msgstr "Zentriert ausrichten"
+#: gtk2_ardour/editor_actions.cc:160
+msgid "to Previous Region Start"
+msgstr "zum Anfang der vorherigen Region"
 
-#: gtk2_ardour/editor_actions.cc:389
-msgid "Zoom Focus Playhead"
-msgstr "Am Positionszeiger ausrichten"
+#: gtk2_ardour/editor_actions.cc:162
+msgid "to Previous Region End"
+msgstr "zum Ende der vorherigen Region"
 
-#: gtk2_ardour/editor_actions.cc:391
-msgid "Zoom Focus Mouse"
-msgstr "Zoom Fokus zur Maus"
+#: gtk2_ardour/editor_actions.cc:164
+msgid "to Previous Region Sync"
+msgstr "zum Einrastpunkt der vorherigen Region"
 
-#: gtk2_ardour/editor_actions.cc:393
-msgid "Zoom Focus Edit"
-msgstr "Am Editierzeiger ausrichten"
+#: gtk2_ardour/editor_actions.cc:167
+msgid "to Range Start"
+msgstr "zum Anfang des Auswahlbereichs"
 
-#: gtk2_ardour/editor_actions.cc:399
-msgid "Object Tool"
-msgstr "Objektwerkzeug"
+#: gtk2_ardour/editor_actions.cc:169
+msgid "to Range End"
+msgstr "zum Ende des Auswahlbereichs"
 
-#: gtk2_ardour/editor_actions.cc:400
-msgid "Range Tool"
-msgstr "Bereich-Werkzeug (Range)"
+#: gtk2_ardour/editor_actions.cc:172
+msgid "Playhead to Range Start"
+msgstr "Positionszeiger zum Anfang des Auswahlbereichs"
 
-#: gtk2_ardour/editor_actions.cc:401
-msgid "Gain Tool"
-msgstr "Lautstärkewerkzeug (Gain)"
+#: gtk2_ardour/editor_actions.cc:174
+msgid "Playhead to Range End"
+msgstr "Positionszeiger zum Ende des Auswahlbereichs"
 
-#: gtk2_ardour/editor_actions.cc:402
-msgid "Zoom Tool"
-msgstr "Zoom-Werkzeug"
+#: gtk2_ardour/editor_actions.cc:181
+msgid "Invert Selection"
+msgstr "Auswahl umkehren"
 
-#: gtk2_ardour/editor_actions.cc:403
-msgid "Timefx Tool"
-msgstr "Zeit-Werkzeug (Time)"
+#: gtk2_ardour/editor_actions.cc:188
+msgid "Select All Overlapping Edit Range"
+msgstr "Alle Regionen des Bearbeitungsbereichs auswählen "
 
-#: gtk2_ardour/editor_actions.cc:410
-msgid "Change edit point"
-msgstr "Arbeitspunkt Ã¤ndern"
+#: gtk2_ardour/editor_actions.cc:190
+msgid "Select All Inside Edit Range"
+msgstr "Alles inerhalb des Bearbeitungsbereichs auswählen"
 
-#: gtk2_ardour/editor_actions.cc:411
-msgid "Change edit point (w/Marker)"
-msgstr "Setze Arbeitspunkt (über Positionsmarker)"
+#: gtk2_ardour/editor_actions.cc:193
+msgid "Select Edit Range"
+msgstr "Bearbeitungsbereich auswählen"
 
-#: gtk2_ardour/editor_actions.cc:413
-#, fuzzy
-msgid "Splice"
-msgstr "Teilen"
+#: 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:414
-#, fuzzy
-msgid "Slide"
-msgstr "Verbergen"
+#: 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:415
-msgid "Toggle Edit Mode"
-msgstr ""
+#: gtk2_ardour/editor_actions.cc:201
+msgid "Select Next Track/Bus"
+msgstr "Nächste Spur/Bus auswählen"
 
-#: gtk2_ardour/editor_actions.cc:417
-msgid "Snap To"
-msgstr "Raster"
+#: gtk2_ardour/editor_actions.cc:203
+msgid "Select Previous Track/Bus"
+msgstr "Vorherige Spur/Bus auswählen"
 
-#: gtk2_ardour/editor_actions.cc:418
-msgid "Snap Mode"
-msgstr "Einrastmodus"
+#: gtk2_ardour/editor_actions.cc:207
+msgid "Save View 1"
+msgstr "Ansicht 1 speichern"
 
-#: gtk2_ardour/editor_actions.cc:425
-msgid "Next Snap Mode"
-msgstr "Nächster Einrastmodus"
+#: gtk2_ardour/editor_actions.cc:209
+msgid "Goto View 1"
+msgstr "Ansicht 1 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:426
-msgid "Next Snap Choice"
-msgstr ""
+#: gtk2_ardour/editor_actions.cc:211
+msgid "Save View 2"
+msgstr "Ansicht 2 speichern"
 
-#: gtk2_ardour/editor_actions.cc:431
-msgid "Snap to cd frame"
-msgstr "An CD-Frames einrasten"
+#: gtk2_ardour/editor_actions.cc:213
+msgid "Goto View 2"
+msgstr "Ansicht 2 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:432
-msgid "Snap to SMPTE frame"
-msgstr "An SMPTE-Frames einrasten"
+#: gtk2_ardour/editor_actions.cc:215
+msgid "Save View 3"
+msgstr "Ansicht 3 speichern"
 
-#: gtk2_ardour/editor_actions.cc:433
-msgid "Snap to SMPTE seconds"
-msgstr "An SMPTE-Sekunden einrasten"
+#: gtk2_ardour/editor_actions.cc:217
+msgid "Goto View 3"
+msgstr "Ansicht 3 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:434
-msgid "Snap to SMPTE minutes"
-msgstr "An SMPTE-Minuten einrasten"
+#: gtk2_ardour/editor_actions.cc:219
+msgid "Save View 4"
+msgstr "Ansicht 4 speichern"
 
-#: gtk2_ardour/editor_actions.cc:435
-msgid "Snap to seconds"
-msgstr "An Sekunden einrasten"
+#: gtk2_ardour/editor_actions.cc:221
+msgid "Goto View 4"
+msgstr "Ansicht 4 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:436
-msgid "Snap to minutes"
-msgstr "An Minuten einrasten"
+#: gtk2_ardour/editor_actions.cc:223
+msgid "Save View 5"
+msgstr "Ansicht 5 speichern"
 
-#: gtk2_ardour/editor_actions.cc:437
-msgid "Snap to thirtyseconds"
-msgstr "An halben Minuten einrasten"
+#: gtk2_ardour/editor_actions.cc:225
+msgid "Goto View 5"
+msgstr "Ansicht 5 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:438
-msgid "Snap to asixteenthbeat"
-msgstr "An Sechzehnteln einrasten"
+#: gtk2_ardour/editor_actions.cc:227
+msgid "Save View 6"
+msgstr "Ansicht 6 speichern"
 
-#: gtk2_ardour/editor_actions.cc:439
-msgid "Snap to eighths"
-msgstr "An Achteln einrasten"
+#: gtk2_ardour/editor_actions.cc:229
+msgid "Goto View 6"
+msgstr "Ansicht 6 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:440
-msgid "Snap to quarters"
-msgstr "An Vierteln einrasten"
+#: gtk2_ardour/editor_actions.cc:231
+msgid "Save View 7"
+msgstr "Ansicht 7 speichern"
 
-#: gtk2_ardour/editor_actions.cc:441
-msgid "Snap to thirds"
-msgstr "An Triolen einrasten"
+#: gtk2_ardour/editor_actions.cc:233
+msgid "Goto View 7"
+msgstr "Ansicht 7 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:442
-msgid "Snap to beat"
-msgstr "An Schlägen einrasten"
+#: gtk2_ardour/editor_actions.cc:235
+msgid "Save View 8"
+msgstr "Ansicht 8 speichern"
 
-#: gtk2_ardour/editor_actions.cc:443
-msgid "Snap to bar"
-msgstr "An Takten einrasten"
+#: gtk2_ardour/editor_actions.cc:237
+msgid "Goto View 8"
+msgstr "Ansicht 8 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:444
-msgid "Snap to mark"
-msgstr "An Markern einrasten"
+#: gtk2_ardour/editor_actions.cc:239
+msgid "Save View 9"
+msgstr "Ansicht 9 speichern"
 
-#: gtk2_ardour/editor_actions.cc:445
-msgid "Snap to region start"
-msgstr "Am Anfang der Regionen einrasten"
+#: gtk2_ardour/editor_actions.cc:241
+msgid "Goto View 9"
+msgstr "Ansicht 9 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:446
-msgid "Snap to region end"
-msgstr "Am Ende der Regionen einrasten"
+#: gtk2_ardour/editor_actions.cc:243
+msgid "Save View 10"
+msgstr "Ansicht 10 speichern"
 
-#: gtk2_ardour/editor_actions.cc:447
-msgid "Snap to region sync"
-msgstr "Am Einrastpunkt der Regionen einrasten"
+#: gtk2_ardour/editor_actions.cc:245
+msgid "Goto View 10"
+msgstr "Ansicht 10 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:448
-msgid "Snap to region boundary"
-msgstr "An Grenzen der Regionen einrasten"
+#: gtk2_ardour/editor_actions.cc:247
+msgid "Save View 11"
+msgstr "Ansicht 11 speichern"
 
-#: gtk2_ardour/editor_actions.cc:457
-msgid "Sort"
-msgstr "Sortieren"
+#: gtk2_ardour/editor_actions.cc:249
+msgid "Goto View 11"
+msgstr "Ansicht 11 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:465
-msgid "Show all"
-msgstr "Alle zeigen"
+#: gtk2_ardour/editor_actions.cc:251
+msgid "Save View 12"
+msgstr "Ansicht 12 speichern"
 
-#: gtk2_ardour/editor_actions.cc:466
-msgid "Show automatic regions"
-msgstr "Automatische Regionen zeigen"
+#: gtk2_ardour/editor_actions.cc:253
+msgid "Goto View 12"
+msgstr "Ansicht 12 aufrufen"
 
-#: gtk2_ardour/editor_actions.cc:468
-msgid "Ascending"
-msgstr "aufsteigend"
+#: gtk2_ardour/editor_actions.cc:257
+msgid "Locate to Mark 1"
+msgstr "Positionszeiger zu Marker 1 setzen"
 
-#: gtk2_ardour/editor_actions.cc:470
-msgid "Descending"
-msgstr "absteigend"
+#: gtk2_ardour/editor_actions.cc:259
+msgid "Locate to Mark 2"
+msgstr "Positionszeiger zu Marker 2 setzen"
 
-#: gtk2_ardour/editor_actions.cc:473
-msgid "By Region Name"
-msgstr "nach Name der Region"
+#: gtk2_ardour/editor_actions.cc:261
+msgid "Locate to Mark 3"
+msgstr "Positionszeiger zu Marker 3 setzen"
 
-#: gtk2_ardour/editor_actions.cc:475
-msgid "By Region Length"
-msgstr "nach Länge der Region"
+#: gtk2_ardour/editor_actions.cc:263
+msgid "Locate to Mark 4"
+msgstr "Positionszeiger zu Marker 4 setzen"
 
-#: gtk2_ardour/editor_actions.cc:477
-msgid "By Region Position"
-msgstr "nach Position der Region"
+#: gtk2_ardour/editor_actions.cc:265
+msgid "Locate to Mark 5"
+msgstr "Positionszeiger zu Marker 5 setzen"
 
-#: gtk2_ardour/editor_actions.cc:479
-msgid "By Region Timestamp"
-msgstr "nach Zeitstempel der Region"
+#: gtk2_ardour/editor_actions.cc:267
+msgid "Locate to Mark 6"
+msgstr "Positionszeiger zu Marker 6 setzen"
 
-#: gtk2_ardour/editor_actions.cc:481
-msgid "By Region Start in File"
-msgstr "nach Anfang der Region in der Datei"
+#: gtk2_ardour/editor_actions.cc:269
+msgid "Locate to Mark 7"
+msgstr "Positionszeiger zu Marker 7 setzen"
 
-#: gtk2_ardour/editor_actions.cc:483
-msgid "By Region End in File"
-msgstr "nach Ende der Region in der Datei"
+#: gtk2_ardour/editor_actions.cc:271
+msgid "Locate to Mark 8"
+msgstr "Positionszeiger zu Marker 8 setzen"
 
-#: gtk2_ardour/editor_actions.cc:485
-msgid "By Source File Name"
-msgstr "nach Namen der Quelldatei"
+#: gtk2_ardour/editor_actions.cc:273
+msgid "Locate to Mark 9"
+msgstr "Positionszeiger zu Marker 9 setzen"
 
-#: gtk2_ardour/editor_actions.cc:487
-msgid "By Source File Length"
-msgstr "nach Länge der Quelldatei"
+#: gtk2_ardour/editor_actions.cc:276
+msgid "Jump Forward to Mark"
+msgstr "Zum nächsten Marker springen"
 
-#: gtk2_ardour/editor_actions.cc:489
-msgid "By Source File Creation Date"
-msgstr "nach Erstellungsdatum der Quelldatei"
+#: gtk2_ardour/editor_actions.cc:278
+msgid "Jump Backward to Mark"
+msgstr "Zum vorherigen Marker springen"
+
+#: gtk2_ardour/editor_actions.cc:280
+msgid "Add Mark from Playhead"
+msgstr "Marker am Positionszeiger setzen"
 
-#: gtk2_ardour/editor_actions.cc:491
-msgid "By Source Filesystem"
-msgstr "nach Dateisystem der Quelle"
+#: gtk2_ardour/editor_actions.cc:283
+msgid "Nudge Forward"
+msgstr "Schritt nach vorne"
 
-#: gtk2_ardour/editor_actions.cc:497
-msgid "Add Existing Audio"
-msgstr "Audio importieren"
+#: gtk2_ardour/editor_actions.cc:285
+msgid "Nudge Next Forward"
+msgstr "Nächste Region Schritt vorwärts"
 
-#: gtk2_ardour/editor_actions.cc:499
-msgid "Add External Audio"
-msgstr "Audio importieren..."
+#: gtk2_ardour/editor_actions.cc:287
+msgid "Nudge Backward"
+msgstr "Schritt nach Hinten"
 
-#: gtk2_ardour/editor_actions.cc:502
-msgid "Show Waveforms"
-msgstr "Wellenformen zeigen"
+#: gtk2_ardour/editor_actions.cc:289
+msgid "Nudge Next Backward"
+msgstr "Nächste Region Schritt rückwärts"
 
-#: gtk2_ardour/editor_actions.cc:503
-msgid "Show Waveforms While Recording"
-msgstr "Wellenformen beim Aufnehmen zeigen"
+#: gtk2_ardour/editor_actions.cc:292
+msgid "Nudge Playhead Forward"
+msgstr "Positionszeiger vorwärts"
 
-#: gtk2_ardour/editor_actions.cc:504
-msgid "Show Measures"
-msgstr "Takte zeigen"
+#: gtk2_ardour/editor_actions.cc:294
+msgid "Nudge Playhead Backward"
+msgstr "Positionszeiger rückwärts"
 
-#: gtk2_ardour/editor_actions.cc:508
-msgid "Show Logo"
-msgstr "Zeige Logo"
+#: gtk2_ardour/editor_actions.cc:296
+msgid "Forward To Grid"
+msgstr "Vorwärts auf Raster"
 
-#: gtk2_ardour/editor_actions.cc:514
-msgid "Later is Higher"
-msgstr "Neuste nach oben"
+#: gtk2_ardour/editor_actions.cc:298
+msgid "Backward To Grid"
+msgstr "Rückwärts auf Raster"
 
-#: gtk2_ardour/editor_actions.cc:515
-msgid "Most Recently Moved/Added is Higher"
-msgstr "Zuletzt bewegte/hinzugefügte nach oben"
+#: gtk2_ardour/editor_actions.cc:308
+msgid "Zoom to Region"
+msgstr "Auf Region zoomen"
 
-#: gtk2_ardour/editor_actions.cc:516
-msgid "Most Recently Added is Higher"
-msgstr "Zuletzt hinzugefügte nach oben"
+#: gtk2_ardour/editor_actions.cc:310
+msgid "Zoom to Region (W&H)"
+msgstr "Auf Region zoomen (B&H)"
 
-#: gtk2_ardour/editor_actions.cc:520
-msgid "23.976"
-msgstr "23,976"
+#: gtk2_ardour/editor_actions.cc:312
+msgid "Toggle Zoom State"
+msgstr "Letzten Zoom wählen"
 
-#: gtk2_ardour/editor_actions.cc:521
-msgid "24"
-msgstr "24"
+#: gtk2_ardour/editor_actions.cc:315
+msgid "Move Selected Tracks Up"
+msgstr "Ausgewählte Spuren nach oben verschieben"
 
-#: gtk2_ardour/editor_actions.cc:522
-msgid "24.976"
-msgstr "24,976"
+#: gtk2_ardour/editor_actions.cc:317
+msgid "Move Selected Tracks Down"
+msgstr "Ausgewählte Spuren nach unten verschieben"
 
-#: gtk2_ardour/editor_actions.cc:523
-msgid "25"
-msgstr "25"
+#: gtk2_ardour/editor_actions.cc:320
+msgid "Scroll Tracks Up"
+msgstr "Spuren nach oben scrollen"
 
-#: gtk2_ardour/editor_actions.cc:524
-msgid "29.97"
-msgstr "29,97"
+#: gtk2_ardour/editor_actions.cc:322
+msgid "Scroll Tracks Down"
+msgstr "Spuren nach unten scrollen"
 
-#: gtk2_ardour/editor_actions.cc:525
-msgid "29.97 drop"
-msgstr "29,97 (drop)"
+#: gtk2_ardour/editor_actions.cc:324
+msgid "Step Tracks Up"
+msgstr "Spuren langsam nach oben scrollen"
 
-#: gtk2_ardour/editor_actions.cc:526
-msgid "30"
-msgstr "30"
+#: gtk2_ardour/editor_actions.cc:326
+msgid "Step Tracks Down"
+msgstr "Spuren langsam nach unten scrollen"
 
-#: gtk2_ardour/editor_actions.cc:527
-msgid "30 drop"
-msgstr "30 (drop)"
+#: gtk2_ardour/editor_actions.cc:329
+msgid "Scroll Backward"
+msgstr "Nach rechts scrollen"
 
-#: gtk2_ardour/editor_actions.cc:528
-msgid "59.94"
-msgstr "59,94"
+#: gtk2_ardour/editor_actions.cc:331
+msgid "Scroll Forward"
+msgstr "Nach links scrollen"
 
-#: gtk2_ardour/editor_actions.cc:529
-msgid "60"
-msgstr "60"
+#: gtk2_ardour/editor_actions.cc:333
+msgid "goto"
+msgstr "Gehe zu"
 
-#: gtk2_ardour/editor_actions.cc:533
-msgid "+4.1667% + 0.1%"
-msgstr "+4,1667% + 0,1%"
+#: gtk2_ardour/editor_actions.cc:335
+msgid "Center Playhead"
+msgstr "Positionszeiger zentrieren"
 
-#: gtk2_ardour/editor_actions.cc:534
-msgid "+4.1667%"
-msgstr "+4,1667%"
+#: gtk2_ardour/editor_actions.cc:337
+msgid "Center Active Marker"
+msgstr "Marker zentrieren"
 
-#: gtk2_ardour/editor_actions.cc:535
-msgid "+4.1667% - 0.1%"
-msgstr "+4,1667% - 0,1%"
+#: gtk2_ardour/editor_actions.cc:340
+msgid "Playhead Forward"
+msgstr "Positionszeiger vorwärts"
 
-#: gtk2_ardour/editor_actions.cc:536
-msgid "+ 0.1%"
-msgstr "+ 0,1%"
+#: gtk2_ardour/editor_actions.cc:342
+msgid "Playhead Backward"
+msgstr "Positionszeiger rückwärts"
 
-#: 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/export_dialog.cc:956
-#: gtk2_ardour/export_dialog.cc:1294
-#: gtk2_ardour/route_ui.cc:513
-msgid "None"
-msgstr "Kein"
+#: gtk2_ardour/editor_actions.cc:345
+msgid "Playhead To Active Mark"
+msgstr "Positionszeiger zur aktiven Markierung"
 
-#: gtk2_ardour/editor_actions.cc:538
-msgid "- 0.1%"
-msgstr "- 0,1%"
+#: gtk2_ardour/editor_actions.cc:347
+msgid "Active Mark To Playhead"
+msgstr "Aktiven Marker zum Positionszeiger verschieben"
 
-#: gtk2_ardour/editor_actions.cc:539
-msgid "-4.1667% + 0.1%"
-msgstr "-4,1667% + 0,1%"
+#: gtk2_ardour/editor_actions.cc:350
+msgid "Trim Start At Edit Point"
+msgstr "Schneide Anfang der Region am Arbeitspunkt"
 
-#: gtk2_ardour/editor_actions.cc:540
-msgid "-4.1667%"
-msgstr "-4,1667%"
+#: gtk2_ardour/editor_actions.cc:353
+msgid "Trim End At Edit Point"
+msgstr "Schneide Ende der Region am Arbeitspunkt"
 
-#: gtk2_ardour/editor_actions.cc:541
-msgid "-4.1667% - 0.1%"
-msgstr "-4,1667% - 0,1%"
+#: gtk2_ardour/editor_actions.cc:357
+msgid "Start To Edit Point"
+msgstr "Von Anfang bis Arbeitspunkt"
 
-#: gtk2_ardour/editor_actions.cc:545
-msgid "80 per frame"
-msgstr "80 pro Frame"
+#: gtk2_ardour/editor_actions.cc:360
+msgid "Edit Point To End"
+msgstr "Von Arbeitspunkt bis Ende"
 
-#: gtk2_ardour/editor_actions.cc:547
-msgid "100 per frame"
-msgstr "100 pro Frame"
+#: gtk2_ardour/editor_actions.cc:370
+msgid "Set Loop From Edit Range"
+msgstr "Schleife aus Editierbereich erstellen"
 
-#: 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
-msgid "programming error: %1: %2"
-msgstr "Programmierfehler: %1: %2"
+#: gtk2_ardour/editor_actions.cc:372
+msgid "Set Loop From Region"
+msgstr "Schleife aus Region erstellen"
 
-#: gtk2_ardour/editor_actions.cc:1265
-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_actions.cc:377
+msgid "Set Punch From Edit Range"
+msgstr "Punch-Bereich aus Editierbereich erstellen"
 
-#: 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/editor_actions.cc:379
+msgid "Set Punch From Region"
+msgstr "Punch-Bereich aus Region erstellen"
 
-#: gtk2_ardour/editor_audio_import.cc:77
-#: gtk2_ardour/editor_audio_import.cc:110
-msgid "Add existing audio"
-msgstr "Audio importieren"
+#: gtk2_ardour/editor_actions.cc:382
+msgid "Transpose"
+msgstr "Transponieren"
 
-#: gtk2_ardour/editor_audio_import.cc:370
-msgid "importing %1"
-msgstr "importiere %1"
+#: gtk2_ardour/editor_actions.cc:384
+msgid "Toggle Opaque"
+msgstr "Deckend"
 
-#: gtk2_ardour/editor_audio_import.cc:376
-msgid "Cancel Import"
-msgstr "Importieren Abbrechen"
+#: gtk2_ardour/editor_actions.cc:388
+msgid "Set Fade In Length"
+msgstr "Ändere Fade-In Länge"
 
-#: 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/editor_actions.cc:390
+msgid "Toggle Fade In Active"
+msgstr "Fade-In aktivieren"
 
-#: gtk2_ardour/editor_audio_import.cc:487
-msgid "Cancel entire import"
-msgstr "Importieren Abbrechen"
+#: gtk2_ardour/editor_actions.cc:392
+msgid "Set Fade Out Length"
+msgstr "Fade-Out verändern"
 
-#: gtk2_ardour/editor_audio_import.cc:488
-msgid "Don't embed it"
-msgstr "Nicht einbetten"
+#: gtk2_ardour/editor_actions.cc:394
+msgid "Toggle Fade Out Active"
+msgstr "Fade-Out aktivieren"
 
-#: gtk2_ardour/editor_audio_import.cc:489
-msgid "Embed all without questions"
-msgstr "Alle Importieren ohne nachzufragen"
+#: gtk2_ardour/editor_actions.cc:397
+msgid "Align Regions Start"
+msgstr "Anfang der Regionen ausrichten"
 
-#: 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/editor_actions.cc:400
+msgid "Align Regions Start Relative"
+msgstr "Anfang der Regionen relativ ausrichten"
 
-#: gtk2_ardour/editor_audio_import.cc:516
-msgid "Embed it anyway"
-msgstr "Trotzdem importieren"
+#: gtk2_ardour/editor_actions.cc:403
+msgid "Align Regions End"
+msgstr "Regionenenden ausrichten"
 
-#: gtk2_ardour/editor_audio_import.cc:561
-msgid "could not open %1"
-msgstr "Konnte \"%s\" nicht Ã¶ffnen."
+#: gtk2_ardour/editor_actions.cc:406
+msgid "Align Regions End Relative"
+msgstr "Regionenenden relativ ausrichten"
 
-#: gtk2_ardour/editor_audio_import.cc:691
-msgid "insert sndfile"
-msgstr "Audiodatei einfügen"
+#: gtk2_ardour/editor_actions.cc:410
+msgid "Align Regions Sync"
+msgstr "Regionen-Einrastpunkt ausrichten"
 
-#: gtk2_ardour/editor_canvas.cc:129
-msgid "VerboseCanvasCursor"
-msgstr ""
+#: gtk2_ardour/editor_actions.cc:413
+msgid "Align Regions Sync Relative"
+msgstr "Regionen-Einrastpunkt relativ ausrichten"
 
-#: gtk2_ardour/editor_edit_groups.cc:52
-#: gtk2_ardour/mixer_ui.cc:848
-msgid "Activate All"
-msgstr "Alle aktivieren"
+#: gtk2_ardour/editor_actions.cc:417
+msgid "Play From Edit Point"
+msgstr "Wiedergabe ab Arbeitspunkt"
 
-#: gtk2_ardour/editor_edit_groups.cc:53
-#: gtk2_ardour/mixer_ui.cc:849
-msgid "Disable All"
-msgstr "Alle deaktivieren"
+#: gtk2_ardour/editor_actions.cc:419
+msgid "Play from Edit Point & Return"
+msgstr "Wiedergabe ab Arbeitspunkt & Return"
 
-#: gtk2_ardour/editor_edit_groups.cc:55
-#: gtk2_ardour/mixer_ui.cc:851
-msgid "Add group"
-msgstr "Gruppe hinzufügen"
+#: gtk2_ardour/editor_actions.cc:422
+msgid "Play Edit Range"
+msgstr "Editierbereich wiedergeben"
 
-#: gtk2_ardour/editor_edit_groups.cc:228
-#: gtk2_ardour/mixer_ui.cc:1092
-msgid "unnamed"
-msgstr "unbenannt"
+#: gtk2_ardour/editor_actions.cc:423
+msgid "Play Selected Region(s)"
+msgstr "Ausgewählte Regionen wiedergeben"
 
-#: gtk2_ardour/editor_edit_groups.cc:257
-#: gtk2_ardour/mixer_ui.cc:946
-msgid "-all-"
-msgstr "-alle-"
+#: gtk2_ardour/editor_actions.cc:426
+msgid "Brush at Mouse"
+msgstr "Pinsel an Mausposition (Brush)"
 
-#: 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_actions.cc:429
+msgid "Playhead to Mouse"
+msgstr "Positionszeiger zur Mausposition"
 
-#: 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:431
+msgid "Active Marker to Mouse"
+msgstr "Akitven Marker zur Mausposition"
 
-#: 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/editor_actions.cc:434
+msgid "Duplicate Region"
+msgstr "Region duplizieren"
 
-#: 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/editor_actions.cc:437
+msgid "Multi-Duplicate Region"
+msgstr "Region mehrfach duplizieren"
 
-#: gtk2_ardour/editor_keyboard.cc:82
-msgid "mute region"
-msgstr "Region stummschalten"
+#: gtk2_ardour/editor_actions.cc:440
+msgid "Duplicate Range"
+msgstr "Bereich duplizieren"
 
-#: 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/editor_actions.cc:443
+msgid "Insert Region"
+msgstr "Einfügen"
 
-#: 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/editor_actions.cc:446
+msgid "Normalize Region"
+msgstr "Normalisieren"
 
-#: gtk2_ardour/editor_markers.cc:441
-#: gtk2_ardour/location_ui.cc:699
-msgid "remove marker"
-msgstr "Marker entfernen"
+#: 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_markers.cc:582
-msgid "Locate to here"
-msgstr "Positionszeiger hierhin setzen"
+#: gtk2_ardour/editor_actions.cc:458
+msgid "Cut Region Gain"
+msgstr "Lautstärke erniedrigen"
 
-#: gtk2_ardour/editor_markers.cc:583
-msgid "Play from here"
-msgstr "Wiedergabe ab hier"
+#: gtk2_ardour/editor_actions.cc:461
+msgid "Split Region"
+msgstr "Region teilen (Split)"
 
-#: gtk2_ardour/editor_markers.cc:584
-msgid "Move Mark to Playhead"
-msgstr "Marker zum Positionszeiger verschieben"
+#: gtk2_ardour/editor_actions.cc:464
+msgid "Set Region Sync Position"
+msgstr "Einrastpunkt der Region setzen"
 
-#: gtk2_ardour/editor_markers.cc:592
-msgid "Unlock"
-msgstr "Entsperren"
+#: gtk2_ardour/editor_actions.cc:467
+msgid "Remove Region Sync"
+msgstr "Synchronisation entfernen"
 
-#: gtk2_ardour/editor_markers.cc:614
-msgid "Play Range"
-msgstr "Bereich wiedergeben"
+#: gtk2_ardour/editor_actions.cc:470
+msgid "Raise Region"
+msgstr "Region weiter nach oben"
 
-#: gtk2_ardour/editor_markers.cc:615
-msgid "Locate to Range Mark"
-msgstr "Positionszeiger zu Bereichsmarker"
+#: gtk2_ardour/editor_actions.cc:473
+msgid "Lower Region"
+msgstr "Region weiter nach unten"
 
-#: gtk2_ardour/editor_markers.cc:616
-msgid "Play from Range Mark"
-msgstr "Wiedergabe ab Bereichsmarker"
+#: gtk2_ardour/editor_actions.cc:476
+msgid "Export Region"
+msgstr "Region exportieren"
 
-#: gtk2_ardour/editor_markers.cc:618
-msgid "Loop Range"
-msgstr "Bereich in Schleife wiedergeben"
+#: gtk2_ardour/editor_actions.cc:479
+msgid "Lock Region"
+msgstr "Region sperren"
 
-#: gtk2_ardour/editor_markers.cc:620
-msgid "Set Range Mark from Playhead"
-msgstr "Bereichsmarker zum Positionszeiger verschieben"
+#: gtk2_ardour/editor_actions.cc:482
+msgid "Glue Region To Bars&Beats"
+msgstr "Region an an Takte und Schläge binden"
 
-#: gtk2_ardour/editor_markers.cc:622
-msgid "Set Range from Range Selection"
-msgstr "Bereichsmarker zum Auswahlbereich verschieben"
+#: gtk2_ardour/editor_actions.cc:485
+msgid "Move To Original Position"
+msgstr "Ursprungsposition"
 
-#: gtk2_ardour/editor_markers.cc:628
-msgid "Hide Range"
-msgstr "Bereich verbergen"
+#: gtk2_ardour/editor_actions.cc:497
+msgid "Mute/Unmute Region"
+msgstr "Region stummschalten"
 
-#: gtk2_ardour/editor_markers.cc:629
-#: gtk2_ardour/editor_markers.cc:1013
-msgid "Rename Range"
-msgstr "Bereich umbenennen"
+#: gtk2_ardour/editor_actions.cc:506
+msgid "Export Session"
+msgstr "Projekt exportieren..."
 
-#: gtk2_ardour/editor_markers.cc:630
-msgid "Remove Range"
-msgstr "Bereich entfernen"
+#: gtk2_ardour/editor_actions.cc:508
+msgid "Export Range"
+msgstr "Bereiche exportieren..."
 
-#: gtk2_ardour/editor_markers.cc:635
-msgid "Separate Regions in Range"
-msgstr "Regionen an Bereichsgrenzen teilen"
+#: gtk2_ardour/editor_actions.cc:514
+msgid "Separate Using Punch Range"
+msgstr "an Punch-Bereichsgrenzen teilen"
 
-#: gtk2_ardour/editor_markers.cc:636
-msgid "Select All in Range"
-msgstr "Alles im Bereich auswählen"
+#: gtk2_ardour/editor_actions.cc:517
+msgid "Separate Using Loop Range"
+msgstr "an Schleifenenden teilen"
 
-#: gtk2_ardour/editor_markers.cc:638
-msgid "Select Range"
-msgstr "Bereich auswählen"
+#: gtk2_ardour/editor_actions.cc:520
+#: gtk2_ardour/editor_actions.cc:550
+msgid "Crop"
+msgstr "Beschneiden"
 
-#: gtk2_ardour/editor_markers.cc:664
-msgid "Set Loop Range"
-msgstr "Schleife erstellen"
+#: gtk2_ardour/editor_actions.cc:533
+msgid "Set Tempo from Region=Bar"
+msgstr "Tempo setzen mit \"Region=Takt\""
 
-#: gtk2_ardour/editor_markers.cc:665
-msgid "Set Punch Range"
-msgstr "Punch-Bereich erstellen"
+#: gtk2_ardour/editor_actions.cc:536
+msgid "Set Tempo from Edit Range=Bar"
+msgstr "Tempo setzen mit \"Auswahl=Takt\""
 
-#: gtk2_ardour/editor_markers.cc:1007
-msgid "New Name:"
-msgstr "Neuer Name: "
+#: gtk2_ardour/editor_actions.cc:539
+msgid "Split Regions At Percussion Onsets"
+msgstr "Regionen an perkussiven Schlägen teilen"
 
-#: gtk2_ardour/editor_markers.cc:1011
-msgid "Rename Mark"
-msgstr "Marker umbenennen"
+#: gtk2_ardour/editor_actions.cc:542
+msgid "Rhythm Ferret"
+msgstr "Rhythm Ferret"
 
-#: gtk2_ardour/editor_markers.cc:1035
-msgid "rename marker"
-msgstr "Marker umbenennen"
+#: gtk2_ardour/editor_actions.cc:545
+msgid "Move Forward to Transient"
+msgstr "Zum nächsten Transienten"
 
-#: gtk2_ardour/editor_markers.cc:1059
-msgid "set loop range"
-msgstr "Loop-Bereich festlegen"
+#: gtk2_ardour/editor_actions.cc:547
+msgid "Move Backwards to Transient"
+msgstr "Zum vorherigen Transienten"
 
-#: gtk2_ardour/editor_markers.cc:1065
-msgid "set punch range"
-msgstr "Punch-Bereich festlegen"
+#: gtk2_ardour/editor_actions.cc:552
+msgid "Insert Chunk"
+msgstr "Abschnitt einfügen"
 
-#: gtk2_ardour/editor_mouse.cc:144
-msgid "Editor::event_frame() used on unhandled event type %1"
-msgstr ""
+#: gtk2_ardour/editor_actions.cc:555
+msgid "Split At Edit Point"
+msgstr "Am Arbeitspunkt trennen"
 
-#: 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/editor_actions.cc:558
+msgid "Start Range"
+msgstr "Bereich beginnen"
 
-#: gtk2_ardour/editor_mouse.cc:1898
-msgid "change fade in length"
-msgstr "Ändere Fade-In Länge"
+#: gtk2_ardour/editor_actions.cc:560
+msgid "Finish Range"
+msgstr "Bereich beenden"
 
-#: 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/editor_actions.cc:562
+msgid "Finish add Range"
+msgstr "Bereich hinzufügen beenden"
 
-#: gtk2_ardour/editor_mouse.cc:2014
-msgid "change fade out length"
-msgstr "Fade-Out verändern"
+#: gtk2_ardour/editor_actions.cc:570
+msgid "Follow Playhead"
+msgstr "Positionszeiger folgen"
 
-#: 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/editor_actions.cc:575
+msgid "Insert Time"
+msgstr "Stille Einfügen"
 
-#: gtk2_ardour/editor_mouse.cc:2301
-msgid "move marker"
-msgstr "Marker bewegen"
+#: gtk2_ardour/editor_actions.cc:579
+msgid "Toggle Active"
+msgstr "Spur Aktivieren / Deaktivieren"
 
-#: 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/editor_actions.cc:586
+msgid "Fit Selected Tracks"
+msgstr "An ausgewählte Spuren anpassen"
 
-#: gtk2_ardour/editor_mouse.cc:2434
-msgid "copy meter mark"
-msgstr "Taktmarker kopieren"
+#: gtk2_ardour/editor_actions.cc:611
+msgid "Zoom Focus Left"
+msgstr "Am linken Rand ausrichten"
 
-#: gtk2_ardour/editor_mouse.cc:2445
-msgid "move meter mark"
-msgstr "Taktwechsel bewegen"
+#: gtk2_ardour/editor_actions.cc:613
+msgid "Zoom Focus Right"
+msgstr "Am rechten Rand ausrichten"
 
-#: 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/editor_actions.cc:615
+msgid "Zoom Focus Center"
+msgstr "Zentriert ausrichten"
 
-#: 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/editor_actions.cc:617
+msgid "Zoom Focus Playhead"
+msgstr "Am Positionszeiger ausrichten"
 
-#: gtk2_ardour/editor_mouse.cc:2567
-msgid "copy tempo mark"
-msgstr "Tempomarker kopieren"
+#: gtk2_ardour/editor_actions.cc:619
+msgid "Zoom Focus Mouse"
+msgstr "Zoom Fokus zur Maus"
 
-#: gtk2_ardour/editor_mouse.cc:2578
-msgid "move tempo mark"
-msgstr "Tempowechsel bewegen"
+#: gtk2_ardour/editor_actions.cc:621
+msgid "Zoom Focus Edit"
+msgstr "Am Editierzeiger ausrichten"
 
-#: 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/editor_actions.cc:627
+msgid "Object Tool"
+msgstr "Objektwerkzeug"
 
-#: 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/editor_actions.cc:628
+msgid "Range Tool"
+msgstr "Bereich-Werkzeug (Range)"
 
-#: gtk2_ardour/editor_mouse.cc:2900
-msgid "move region(s)"
-msgstr "Region(en) bewegen"
+#: gtk2_ardour/editor_actions.cc:629
+msgid "Gain Tool"
+msgstr "Lautstärkewerkzeug (Gain)"
 
-#: gtk2_ardour/editor_mouse.cc:2964
-msgid "Drag region brush"
-msgstr "Region Brush ziehen"
+#: gtk2_ardour/editor_actions.cc:630
+msgid "Zoom Tool"
+msgstr "Zoom-Werkzeug"
 
-#: gtk2_ardour/editor_mouse.cc:3595
-msgid "fixed time region copy"
-msgstr "Region zeitgleich kopieren"
+#: gtk2_ardour/editor_actions.cc:631
+msgid "Timefx Tool"
+msgstr "Zeit-Werkzeug (Time)"
 
-#: gtk2_ardour/editor_mouse.cc:3597
-msgid "region copy"
-msgstr "Region kopieren"
+#: gtk2_ardour/editor_actions.cc:638
+msgid "Change edit point"
+msgstr "Arbeitspunkt Ã¤ndern"
 
-#: gtk2_ardour/editor_mouse.cc:3601
-msgid "fixed time region drag"
-msgstr "Region zeitgleich verschieben"
+#: gtk2_ardour/editor_actions.cc:639
+msgid "Change edit point (w/Marker)"
+msgstr "Setze Arbeitspunkt (über Positionsmarker)"
 
-#: gtk2_ardour/editor_mouse.cc:3603
-msgid "region drag"
-msgstr "Region verschieben"
+#: gtk2_ardour/editor_actions.cc:641
+msgid "Splice"
+msgstr "Teilen"
 
-#: gtk2_ardour/editor_mouse.cc:4007
-msgid "selection grab"
-msgstr "Auswählen"
+#: gtk2_ardour/editor_actions.cc:642
+#, fuzzy
+msgid "Slide"
+msgstr "Verbergen"
 
-#: gtk2_ardour/editor_mouse.cc:4157
-msgid "range selection"
-msgstr "Auswahlbereich"
+#: gtk2_ardour/editor_actions.cc:644
+msgid "Toggle Edit Mode"
+msgstr "Edit-Modus (de-) aktivieren"
 
-#: gtk2_ardour/editor_mouse.cc:4173
-msgid "trim selection start"
-msgstr "Anfangspunkt der Auswahl abschneiden"
+#: gtk2_ardour/editor_actions.cc:646
+msgid "Snap To"
+msgstr "Raster"
 
-#: gtk2_ardour/editor_mouse.cc:4189
-msgid "trim selection end"
-msgstr "Endpunkt der Auswahl abschneiden"
+#: gtk2_ardour/editor_actions.cc:647
+msgid "Snap Mode"
+msgstr "Einrastmodus"
 
-#: gtk2_ardour/editor_mouse.cc:4206
-msgid "move selection"
-msgstr "Auswahl bewegen"
+#: gtk2_ardour/editor_actions.cc:654
+msgid "Next Snap Mode"
+msgstr "Nächster Einrastmodus"
 
-#: gtk2_ardour/editor_mouse.cc:4595
-msgid "Start point trim"
-msgstr "Anfangspunkt verändern"
+#: gtk2_ardour/editor_actions.cc:655
+msgid "Next Snap Choice"
+msgstr "Nächster Einrastmodus"
 
-#: gtk2_ardour/editor_mouse.cc:4627
-msgid "End point trim"
-msgstr "Endpunkt verändern"
+#: gtk2_ardour/editor_actions.cc:660
+msgid "Snap to cd frame"
+msgstr "An CD-Frames einrasten"
 
-#: gtk2_ardour/editor_mouse.cc:4670
-msgid "trimmed region"
-msgstr "Abgeschnittene Region"
+#: gtk2_ardour/editor_actions.cc:661
+msgid "Snap to SMPTE frame"
+msgstr "An SMPTE-Frames einrasten"
 
-#: gtk2_ardour/editor_mouse.cc:4817
-msgid "new range marker"
-msgstr "Neuer Bereich"
+#: gtk2_ardour/editor_actions.cc:662
+msgid "Snap to SMPTE seconds"
+msgstr "An SMPTE-Sekunden einrasten"
 
-#: gtk2_ardour/editor_mouse.cc:5065
-msgid "rubberband selection"
-msgstr "Bereichsauswahl"
+#: gtk2_ardour/editor_actions.cc:663
+msgid "Snap to SMPTE minutes"
+msgstr "An SMPTE-Minuten einrasten"
 
-#: gtk2_ardour/editor_mouse.cc:5095
-msgid "Name for region:"
-msgstr "Name für Region:"
+#: gtk2_ardour/editor_actions.cc:664
+msgid "Snap to seconds"
+msgstr "An Sekunden einrasten"
 
-#: gtk2_ardour/editor_mouse.cc:5168
-msgid "timestretch"
-msgstr "Time-Stretch"
+#: gtk2_ardour/editor_actions.cc:665
+msgid "Snap to minutes"
+msgstr "An Minuten einrasten"
 
-#: gtk2_ardour/editor_ops.cc:114
-msgid "split"
-msgstr "Teile"
+#: gtk2_ardour/editor_actions.cc:666
+msgid "Snap to thirtyseconds"
+msgstr "An halben Minuten einrasten"
 
-#: gtk2_ardour/editor_ops.cc:180
-msgid "remove region"
-msgstr "Region(en) löschen"
+#: gtk2_ardour/editor_actions.cc:667
+msgid "Snap to asixteenthbeat"
+msgstr "An Sechzehnteln einrasten"
 
-#: gtk2_ardour/editor_ops.cc:200
-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 ?"
+#: gtk2_ardour/editor_actions.cc:668
+msgid "Snap to eighths"
+msgstr "An Achteln einrasten"
 
-#: gtk2_ardour/editor_ops.cc:204
-msgid "these regions"
-msgstr "diese Region"
+#: gtk2_ardour/editor_actions.cc:669
+msgid "Snap to quarters"
+msgstr "An Vierteln einrasten"
 
-#: gtk2_ardour/editor_ops.cc:204
-msgid "this region"
-msgstr "diese Region"
+#: gtk2_ardour/editor_actions.cc:670
+msgid "Snap to thirds"
+msgstr "An Triolen einrasten"
 
-#: gtk2_ardour/editor_ops.cc:209
-msgid "Yes, destroy them."
-msgstr "Ja, entfernen."
+#: gtk2_ardour/editor_actions.cc:671
+msgid "Snap to beat"
+msgstr "An Schlägen einrasten"
 
-#: gtk2_ardour/editor_ops.cc:211
-#: gtk2_ardour/editor_ops.cc:3955
-msgid "Yes, destroy it."
-msgstr "Ja, entfernen."
+#: gtk2_ardour/editor_actions.cc:672
+msgid "Snap to bar"
+msgstr "An Takten einrasten"
 
-#: gtk2_ardour/editor_ops.cc:297
-#: gtk2_ardour/editor_ops.cc:325
-msgid "extend selection"
-msgstr "Auswahl erweitern"
+#: gtk2_ardour/editor_actions.cc:673
+msgid "Snap to mark"
+msgstr "An Markern einrasten"
 
-#: gtk2_ardour/editor_ops.cc:341
-msgid "nudge regions forward"
-msgstr "Regionen Schritt vorwärts"
+#: gtk2_ardour/editor_actions.cc:674
+msgid "Snap to region start"
+msgstr "Am Anfang der Regionen einrasten"
 
-#: gtk2_ardour/editor_ops.cc:368
-#: gtk2_ardour/editor_ops.cc:445
-msgid "nudge location forward"
-msgstr "Position Schritt vorwärts"
+#: gtk2_ardour/editor_actions.cc:675
+msgid "Snap to region end"
+msgstr "Am Ende der Regionen einrasten"
 
-#: gtk2_ardour/editor_ops.cc:414
-msgid "nudge regions backward"
-msgstr "Regionen Schritt nach hinten"
+#: gtk2_ardour/editor_actions.cc:676
+msgid "Snap to region sync"
+msgstr "Am Einrastpunkt der Regionen einrasten"
 
-#: gtk2_ardour/editor_ops.cc:497
-#: gtk2_ardour/editor_ops.cc:524
-msgid "nudge forward"
-msgstr "Schritt vorwärts"
+#: gtk2_ardour/editor_actions.cc:677
+msgid "Snap to region boundary"
+msgstr "An Grenzen der Regionen einrasten"
 
-#: gtk2_ardour/editor_ops.cc:591
-msgid "build_region_boundary_cache called with snap_type = %1"
-msgstr ""
+#: gtk2_ardour/editor_actions.cc:684
+msgid "Ranges"
+msgstr "Bereiche"
 
-#: 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_actions.cc:687
+msgid "Loop/Punch"
+msgstr "Schleifen/Punch-Bereiche"
 
-#: gtk2_ardour/editor_ops.cc:1957
-msgid "clear markers"
-msgstr "Marker zurücksetzen"
+#: gtk2_ardour/editor_actions.cc:691
+msgid "Min:Sec"
+msgstr "Min:Sek"
 
-#: gtk2_ardour/editor_ops.cc:1970
-msgid "clear ranges"
-msgstr "Bereiche zurücksetzen"
+#: gtk2_ardour/editor_actions.cc:719
+msgid "Sort"
+msgstr "Sortieren"
 
-#: gtk2_ardour/editor_ops.cc:1990
-msgid "clear locations"
-msgstr "Positionen zurücksetzen"
+#: gtk2_ardour/editor_actions.cc:727
+msgid "Show all"
+msgstr "Alle zeigen"
 
-#: gtk2_ardour/editor_ops.cc:2063
-msgid "insert dragged region"
-msgstr "Region ziehen"
+#: gtk2_ardour/editor_actions.cc:728
+msgid "Show automatic regions"
+msgstr "Automatische Regionen zeigen"
 
-#: gtk2_ardour/editor_ops.cc:2110
-msgid "insert region"
-msgstr "Region einfügen"
+#: gtk2_ardour/editor_actions.cc:730
+msgid "Ascending"
+msgstr "aufsteigend"
 
-#: gtk2_ardour/editor_ops.cc:2321
-msgid "Rename Region"
-msgstr "Region umbenennen"
+#: gtk2_ardour/editor_actions.cc:732
+msgid "Descending"
+msgstr "absteigend"
 
-#: gtk2_ardour/editor_ops.cc:2325
-msgid "New name:"
-msgstr "Neuer Name: "
+#: gtk2_ardour/editor_actions.cc:735
+msgid "By Region Name"
+msgstr "nach Name der Region"
 
-#: gtk2_ardour/editor_ops.cc:2624
-msgid "separate"
-msgstr "Teilen"
+#: gtk2_ardour/editor_actions.cc:737
+msgid "By Region Length"
+msgstr "nach Länge der Region"
 
-#: gtk2_ardour/editor_ops.cc:2759
-msgid "trim to selection"
-msgstr "Auf Auswahl kürzen"
+#: gtk2_ardour/editor_actions.cc:739
+msgid "By Region Position"
+msgstr "nach Position der Region"
 
-#: gtk2_ardour/editor_ops.cc:2804
-msgid "region fill"
-msgstr "Region füllen"
+#: gtk2_ardour/editor_actions.cc:741
+msgid "By Region Timestamp"
+msgstr "nach Zeitstempel der Region"
 
-#: gtk2_ardour/editor_ops.cc:2868
-msgid "fill selection"
-msgstr "Auswahl füllen"
+#: gtk2_ardour/editor_actions.cc:743
+msgid "By Region Start in File"
+msgstr "nach Anfang der Region in der Datei"
 
-#: gtk2_ardour/editor_ops.cc:2906
-msgid "set sync point"
-msgstr "Einrastpunkt definieren"
+#: gtk2_ardour/editor_actions.cc:745
+msgid "By Region End in File"
+msgstr "nach Ende der Region in der Datei"
 
-#: gtk2_ardour/editor_ops.cc:2926
-msgid "remove sync"
-msgstr "Einrastpunkt entfernen"
+#: gtk2_ardour/editor_actions.cc:747
+msgid "By Source File Name"
+msgstr "nach Namen der Quelldatei"
 
-#: gtk2_ardour/editor_ops.cc:2941
-msgid "naturalize"
-msgstr "zur Ursprungsposition setzen"
+#: gtk2_ardour/editor_actions.cc:749
+msgid "By Source File Length"
+msgstr "nach Länge der Quelldatei"
 
-#: gtk2_ardour/editor_ops.cc:3026
-msgid "align selection (relative)"
-msgstr "Auswahl relativ ausrichten"
+#: gtk2_ardour/editor_actions.cc:751
+msgid "By Source File Creation Date"
+msgstr "nach Erstellungsdatum der Quelldatei"
 
-#: gtk2_ardour/editor_ops.cc:3055
-msgid "align selection"
-msgstr "Auswahl ausrichten"
+#: gtk2_ardour/editor_actions.cc:753
+msgid "By Source Filesystem"
+msgstr "nach Dateisystem der Quelle"
 
-#: gtk2_ardour/editor_ops.cc:3067
-msgid "align region"
-msgstr "Region ausrichten"
+#: gtk2_ardour/editor_actions.cc:759
+msgid "Import"
+msgstr "Importieren"
 
-#: gtk2_ardour/editor_ops.cc:3104
-msgid "trim to loop"
-msgstr "Auf Schleife kürzen"
+#: gtk2_ardour/editor_actions.cc:761
+msgid "Import to Region List"
+msgstr "Regionen importieren"
 
-#: gtk2_ardour/editor_ops.cc:3114
-msgid "trim to punch"
-msgstr "Auf Punch-Bereich kürzen"
+#: gtk2_ardour/editor_actions.cc:764
+msgid "Show Waveforms"
+msgstr "Wellenformen zeigen"
 
-#: gtk2_ardour/editor_ops.cc:3174
-msgid "trim region start to edit point"
-msgstr "Regionanfang bis Arbeitspunkt abschneiden"
+#: gtk2_ardour/editor_actions.cc:767
+msgid "Show Waveforms While Recording"
+msgstr "Wellenformen beim Aufnehmen zeigen"
 
-#: gtk2_ardour/editor_ops.cc:3216
-msgid "trim region end to edit point"
-msgstr "Regionende bis Arbeitspunkt abschneiden"
+#: gtk2_ardour/editor_actions.cc:768
+msgid "Show Measures"
+msgstr "Takt-Raster einblenden"
 
-#: gtk2_ardour/editor_ops.cc:3303
-msgid "Cancel Freeze"
-msgstr "Einfrieren abbrechen"
+#: gtk2_ardour/editor_actions.cc:779
+msgid "Show Logo"
+msgstr "Zeige Logo"
 
-#: gtk2_ardour/editor_ops.cc:3346
-msgid "bounce range"
-msgstr "Bereich Bouncen"
+#: gtk2_ardour/editor_actions.cc:785
+msgid "Later is Higher"
+msgstr "Spätere nach oben"
 
-#: gtk2_ardour/editor_ops.cc:3398
-msgid "cut"
-msgstr "Ausschneiden"
+#: gtk2_ardour/editor_actions.cc:786
+msgid "Most Recently Moved/Added is Higher"
+msgstr "Zuletzt bewegte/hinzugefügte nach oben"
 
-#: gtk2_ardour/editor_ops.cc:3401
-msgid "copy"
-msgstr "Kopieren"
+#: gtk2_ardour/editor_actions.cc:787
+msgid "Most Recently Added is Higher"
+msgstr "Zuletzt hinzugefügte nach oben"
 
-#: gtk2_ardour/editor_ops.cc:3429
-msgid " objects"
-msgstr "Objekte"
+#: gtk2_ardour/editor_actions.cc:791
+msgid "23.976"
+msgstr "23,976"
 
-#: gtk2_ardour/editor_ops.cc:3469
-msgid " range"
-msgstr "Bereich"
+#: gtk2_ardour/editor_actions.cc:792
+msgid "24"
+msgstr "24"
 
-#: gtk2_ardour/editor_ops.cc:3698
-msgid "paste"
-msgstr "Einfügen"
+#: gtk2_ardour/editor_actions.cc:793
+msgid "24.976"
+msgstr "24,976"
 
-#: gtk2_ardour/editor_ops.cc:3747
-msgid "paste chunk"
-msgstr "Abschnitt einfügen"
+#: gtk2_ardour/editor_actions.cc:794
+msgid "25"
+msgstr "25"
 
-#: gtk2_ardour/editor_ops.cc:3791
-msgid "duplicate region"
-msgstr "Region duplizieren"
+#: gtk2_ardour/editor_actions.cc:795
+msgid "29.97"
+msgstr "29,97"
 
-#: gtk2_ardour/editor_ops.cc:3839
-msgid "duplicate selection"
-msgstr "Auswahl duplizieren"
+#: gtk2_ardour/editor_actions.cc:796
+msgid "29.97 drop"
+msgstr "29,97 (drop)"
 
-#: gtk2_ardour/editor_ops.cc:3893
-msgid "clear playlist"
-msgstr "Wiedergabeliste zurücksetzen"
+#: gtk2_ardour/editor_actions.cc:797
+msgid "30"
+msgstr "30"
 
-#: gtk2_ardour/editor_ops.cc:3923
-msgid "nudge track"
-msgstr "Spur verschieben"
+#: gtk2_ardour/editor_actions.cc:798
+msgid "30 drop"
+msgstr "30 (drop)"
 
-#: gtk2_ardour/editor_ops.cc:3951
-msgid ""
-"Do you really want to destroy the last capture?\n"
-"(This is destructive and cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich die letzte Aufnahme rückgängig machen?\n"
-"(Dies kann nicht rückgängig gemacht werden!)"
+#: gtk2_ardour/editor_actions.cc:799
+msgid "59.94"
+msgstr "59,94"
 
-#: gtk2_ardour/editor_ops.cc:3979
-msgid "normalize"
-msgstr "Normalisieren"
+#: gtk2_ardour/editor_actions.cc:800
+msgid "60"
+msgstr "60"
 
-#: gtk2_ardour/editor_ops.cc:4032
-msgid "reverse regions"
-msgstr "Regionen umkehren"
+#: gtk2_ardour/editor_actions.cc:804
+msgid "+4.1667% + 0.1%"
+msgstr "+4,1667% + 0,1%"
 
-#: gtk2_ardour/editor_ops.cc:4145
-msgid "reset region gain"
-msgstr "Lautstärkekurve zurücksetzen"
+#: gtk2_ardour/editor_actions.cc:805
+msgid "+4.1667%"
+msgstr "+4,1667%"
 
-#: gtk2_ardour/editor_ops.cc:4258
-msgid "set fade in length"
-msgstr "Ändere Fade-In Länge"
+#: gtk2_ardour/editor_actions.cc:806
+msgid "+4.1667% - 0.1%"
+msgstr "+4,1667% - 0,1%"
 
-#: gtk2_ardour/editor_ops.cc:4265
-msgid "set fade out length"
-msgstr "Ändere Fade-Out Länge"
+#: gtk2_ardour/editor_actions.cc:807
+msgid "+ 0.1%"
+msgstr "+ 0,1%"
 
-#: gtk2_ardour/editor_ops.cc:4305
-msgid "toggle fade in active"
-msgstr "Fade-In aktivieren"
+#: gtk2_ardour/editor_actions.cc:808
+#: gtk2_ardour/route_ui.cc:604
+#: gtk2_ardour/export_dialog.cc:956
+#: gtk2_ardour/export_dialog.cc:1291
+msgid "None"
+msgstr "Kein"
 
-#: gtk2_ardour/editor_ops.cc:4305
-msgid "toggle fade out active"
-msgstr "Fade-Out aktivieren"
+#: gtk2_ardour/editor_actions.cc:809
+msgid "- 0.1%"
+msgstr "- 0,1%"
 
-#: gtk2_ardour/editor_ops.cc:4343
-msgid "set fade in shape"
-msgstr "Fade-In Kurve bearbeiten"
+#: gtk2_ardour/editor_actions.cc:810
+msgid "-4.1667% + 0.1%"
+msgstr "-4,1667% + 0,1%"
 
-#: gtk2_ardour/editor_ops.cc:4367
-msgid "set fade out shape"
-msgstr "Fade-Out Kurve Ã¤ndern"
+#: gtk2_ardour/editor_actions.cc:811
+msgid "-4.1667%"
+msgstr "-4,1667%"
 
-#: gtk2_ardour/editor_ops.cc:4391
-msgid "set fade in active"
-msgstr "Fade-In aktivieren"
+#: gtk2_ardour/editor_actions.cc:812
+msgid "-4.1667% - 0.1%"
+msgstr "-4,1667% - 0,1%"
 
-#: gtk2_ardour/editor_ops.cc:4415
-msgid "set fade out active"
-msgstr "Fade-Out aktivieren"
+#: gtk2_ardour/editor_actions.cc:816
+msgid "80 per frame"
+msgstr "80 pro Frame"
 
-#: gtk2_ardour/editor_ops.cc:4589
-msgid "trim front"
-msgstr "vorne abschneiden"
+#: gtk2_ardour/editor_actions.cc:818
+msgid "100 per frame"
+msgstr "100 pro Frame"
 
-#: gtk2_ardour/editor_ops.cc:4589
-msgid "trim back"
-msgstr "hinten Abschneiden"
+#: 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_ops.cc:4670
-msgid "set loop range from selection"
-msgstr "Schleife aus Auswahl erstellen"
+#: 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_ops.cc:4692
-msgid "set loop range from edit range"
-msgstr "Schleife aus Editierbereich erstellen"
+#: gtk2_ardour/keyboard.cc:81
+#: gtk2_ardour/keyboard.cc:592
+msgid "Unknown"
+msgstr "Unknown"
 
-#: gtk2_ardour/editor_ops.cc:4722
-msgid "set loop range from region"
-msgstr "Schleife aus Region erstellen"
+#: gtk2_ardour/keyboard.cc:473
+msgid "your own"
+msgstr ""
 
-#: gtk2_ardour/editor_ops.cc:4740
-msgid "set punch range from selection"
-msgstr "Punch-Bereich aus Auswahl erstellen"
+#: 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_ops.cc:4757
-msgid "set punch range from edit range"
-msgstr "Punch-Bereich aus Editierbereich erstellen"
+#: 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_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/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_region_list.cc:159
-msgid " (MISSING)"
-msgstr "(FEHLT)"
+#: gtk2_ardour/connection_editor.cc:50
+msgid "ardour: connections"
+msgstr "ardour: Verbindungen"
 
-#: 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/connection_editor.cc:51
+msgid "Input Connections"
+msgstr "Verbindungen der Eingänge"
 
-#: gtk2_ardour/editor_route_list.cc:338
-#: gtk2_ardour/mixer_ui.cc:811
-msgid "Show All"
-msgstr "Alles zeigen"
+#: gtk2_ardour/connection_editor.cc:52
+msgid "Output Connections"
+msgstr "Verbindungen der Ausgänge"
 
-#: gtk2_ardour/editor_route_list.cc:339
-#: gtk2_ardour/mixer_ui.cc:812
-msgid "Hide All"
-msgstr "Alle verbergen"
+#: gtk2_ardour/connection_editor.cc:53
+msgid "New Input"
+msgstr "Neuer Eingang"
 
-#: 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/connection_editor.cc:54
+msgid "New Output"
+msgstr "Neuer Ausgang"
 
-#: 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/connection_editor.cc:57
+#: gtk2_ardour/connection_editor.cc:100
+msgid "Add Port"
+msgstr "Port hinzufügen"
 
-#: 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/connection_editor.cc:105
+msgid "Available Ports"
+msgstr "Verfügbare Verbindungen"
 
-#: 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/connection_editor.cc:500
+msgid "Connection \""
+msgstr "Verbindung \""
 
-#: gtk2_ardour/editor_rulers.cc:366
-msgid "New location marker"
-msgstr "Neuer Positionsmarker"
+#: gtk2_ardour/connection_editor.cc:502
+msgid "\""
+msgstr ""
 
-#: gtk2_ardour/editor_rulers.cc:367
-msgid "Clear all locations"
-msgstr "Alle Positionsmarker entfernen"
+#: 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/editor_rulers.cc:368
-msgid "Unhide locations"
-msgstr "Positionen anzeigen"
+#: gtk2_ardour/connection_editor.cc:657
+msgid "Name for new connection:"
+msgstr "Name für neue Verbindung:"
 
-#: gtk2_ardour/editor_rulers.cc:373
-msgid "Clear all ranges"
-msgstr "Alle Bereiche entfernen"
+#: gtk2_ardour/route_ui.cc:238
+msgid "mute change"
+msgstr "Mute Ã¤ndern"
 
-#: gtk2_ardour/editor_rulers.cc:374
-msgid "Unhide ranges"
-msgstr "Bereiche anzeigen"
+#: gtk2_ardour/route_ui.cc:322
+#: gtk2_ardour/route_ui.cc:333
+msgid "solo change"
+msgstr "Solo Ã¤ndern"
 
-#: gtk2_ardour/editor_rulers.cc:384
-msgid "New CD track marker"
-msgstr "Neuer CD-Track Marker"
+#: 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/editor_rulers.cc:389
-msgid "New Tempo"
-msgstr "Tempowechsel einfügen..."
+#: gtk2_ardour/route_ui.cc:408
+msgid "rec-enable change"
+msgstr "Aufnahmestatus Ã¤ndern"
 
-#: gtk2_ardour/editor_rulers.cc:390
-msgid "Clear tempo"
-msgstr "Tempo zurücksetzen"
+#: gtk2_ardour/route_ui.cc:646
+msgid "Solo-safe"
+msgstr "Solo-Safe"
 
-#: gtk2_ardour/editor_rulers.cc:395
-msgid "New Meter"
-msgstr "Taktwechsel einfügen..."
+#: gtk2_ardour/route_ui.cc:668
+msgid "Pre Fader"
+msgstr "Pre Fader"
 
-#: gtk2_ardour/editor_rulers.cc:396
-msgid "Clear meter"
-msgstr "Taktart zurücksetzen"
+#: gtk2_ardour/route_ui.cc:675
+msgid "Post Fader"
+msgstr "Post Fader"
 
-#: gtk2_ardour/editor_rulers.cc:404
-msgid "Min:Secs"
-msgstr "Min:Sek"
+#: gtk2_ardour/route_ui.cc:682
+msgid "Control Outs"
+msgstr "Vorhörausgang"
 
-#: gtk2_ardour/editor_selection.cc:740
-msgid "set selected regions"
-msgstr "Regionen auswählen"
+#: gtk2_ardour/route_ui.cc:689
+msgid "Main Outs"
+msgstr "Main Ausgänge"
 
-#: gtk2_ardour/editor_selection.cc:850
-msgid "select all"
-msgstr "Alle Regionen auswählen"
+#: gtk2_ardour/route_ui.cc:726
+msgid "mix group solo  change"
+msgstr "Mixergruppe Solo-Status Ã¤ndern"
 
-#: gtk2_ardour/editor_selection.cc:939
-msgid "select all within"
-msgstr "Alle im Bereich auswählen"
+#: gtk2_ardour/route_ui.cc:765
+msgid "mix group mute change"
+msgstr "Mixergruppe Mute-Status Ã¤ndern"
 
-#: gtk2_ardour/editor_selection.cc:970
-msgid "set selection from region"
-msgstr "Auswahlbereich von Region erstellen"
+#: gtk2_ardour/route_ui.cc:782
+msgid "mix group rec-enable change"
+msgstr "Mixergruppe Aufnahmestatus Ã¤ndern"
 
-#: gtk2_ardour/editor_selection.cc:1003
-msgid "set selection from range"
-msgstr "Auswahlbereich von Bereich erstellen"
+#: gtk2_ardour/route_ui.cc:876
+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)"
+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:1033
-msgid "select all from range"
-msgstr "Alle im Bereich auswählen"
+#: gtk2_ardour/route_ui.cc:878
+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/editor_selection.cc:1055
-msgid "select all from punch"
-msgstr "Alle im Punch-Bereich auswählen"
+#: gtk2_ardour/route_ui.cc:903
+msgid "New Name: "
+msgstr "Neuer Name: "
 
-#: gtk2_ardour/editor_selection.cc:1077
-msgid "select all from loop"
-msgstr "Alle im Loop-Bereich auswählen"
+#: gtk2_ardour/export_dialog.cc:102
+msgid "Format"
+msgstr "Format"
 
-#: gtk2_ardour/editor_selection.cc:1091
-msgid "select all after cursor"
-msgstr "Alle nach Positionszeiger auswählen"
+#: gtk2_ardour/export_dialog.cc:103
+msgid "CD Marker File Type"
+msgstr "CD-Marker"
 
-#: gtk2_ardour/editor_selection.cc:1096
-msgid "select all before cursor"
-msgstr "Alle vor Positionszeiger auswählen"
+#: gtk2_ardour/export_dialog.cc:104
+msgid "Channels"
+msgstr "Kanäle"
 
-#: gtk2_ardour/editor_selection.cc:1122
-msgid "select all after edit"
-msgstr "Alles nach Arbeitspunkt auswählen"
+#: gtk2_ardour/export_dialog.cc:107
+msgid "Sample Endianness"
+msgstr "Bytefolge"
 
-#: gtk2_ardour/editor_selection.cc:1127
-msgid "select all before edit"
-msgstr "Alles vor Arbeitspunkt auswählen"
+#: gtk2_ardour/export_dialog.cc:108
+msgid "Sample Rate"
+msgstr "Samplerate"
 
-#: gtk2_ardour/editor_selection.cc:1237
-msgid "No edit range defined"
-msgstr "Kein Editierbereich definiert"
+#: gtk2_ardour/export_dialog.cc:109
+msgid "Conversion Quality"
+msgstr "SR-Konvertierung"
 
-#: 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/export_dialog.cc:110
+msgid "Dither Type"
+msgstr "Dithering"
 
-#: gtk2_ardour/editor_selection_list.cc:180
-msgid "Name for Chunk:"
-msgstr "Name für Abschnitt:"
+#: gtk2_ardour/export_dialog.cc:111
+msgid "Export CD Marker File Only"
+msgstr "Nur CD-Marker exportieren"
 
-#: gtk2_ardour/editor_selection_list.cc:183
-msgid "Create Chunk"
-msgstr "Abschnitt erzeugen"
+#: gtk2_ardour/export_dialog.cc:112
+msgid "Browse"
+msgstr "Durchsuchen"
 
-#: gtk2_ardour/editor_selection_list.cc:183
-msgid "Forget it"
-msgstr "Abbrechen"
+#: gtk2_ardour/export_dialog.cc:113
+msgid "Specific tracks ..."
+msgstr "Alle Spuren..."
 
-#: 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/export_dialog.cc:423
+msgid "22.05kHz"
+msgstr "22,05 kHz"
 
-#: gtk2_ardour/editor_tempodisplay.cc:293
-#: gtk2_ardour/editor_tempodisplay.cc:335
-msgid "add"
-msgstr "Hinzufügen"
+#: 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_tempodisplay.cc:316
-msgid "add tempo mark"
-msgstr "Tempowechsel einfügen"
+#: 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_tempodisplay.cc:357
-msgid "add meter mark"
-msgstr "Taktwechsel einfügen"
+#: 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_tempodisplay.cc:390
-#: gtk2_ardour/editor_tempodisplay.cc:419
-msgid "done"
-msgstr "Fertig"
+#: 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_tempodisplay.cc:408
-#: gtk2_ardour/editor_tempodisplay.cc:438
-msgid "replace tempo mark"
-msgstr "Tempowechsel ersetzen"
+#: 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_tempodisplay.cc:478
-#: gtk2_ardour/editor_tempodisplay.cc:510
-msgid "programming error: marker for meter is not a meter marker!"
-msgstr "Programmierfehler: marker for meter is not a meter marker!"
+#: 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_tempodisplay.cc:488
-#: gtk2_ardour/editor_tempodisplay.cc:522
-msgid "remove tempo mark"
-msgstr "Tempowechsel 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_timefx.cc:63
-msgid "Quick but Ugly"
-msgstr "Quick but Ugly"
+#: 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_timefx.cc:64
-msgid "Skip Anti-aliasing"
-msgstr "Ãœberspringe Anti-Aliasing"
+#: gtk2_ardour/export_dialog.cc:926
+msgid "TOC"
+msgstr "TOC"
 
-#: gtk2_ardour/editor_timefx.cc:68
-msgid "TimeFXDialog"
-msgstr ""
+#: gtk2_ardour/export_dialog.cc:941
+msgid "Not connected to audioengine"
+msgstr "Nicht mit JACK verbunden"
 
-#: gtk2_ardour/editor_timefx.cc:72
-msgid "Pitch Shift"
-msgstr "Pitch-Shift"
+#: 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_timefx.cc:74
-msgid "Time Stretch"
-msgstr "Time-Stretch"
+#: gtk2_ardour/export_dialog.cc:975
+msgid "Stop Export"
+msgstr "Export Abbrechen"
 
-#: gtk2_ardour/editor_timefx.cc:92
-msgid "Octaves"
-msgstr "Oktaven"
+#: gtk2_ardour/export_dialog.cc:1191
+msgid "Please enter a valid filename."
+msgstr "Bitte geben Sie einen gültigen Dateinamen ein."
 
-#: gtk2_ardour/editor_timefx.cc:96
-msgid "Semitones (12TET)"
-msgstr "Halbtöne"
+#: 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_timefx.cc:100
-msgid "Cents"
-msgstr "Cents"
+#: 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_timefx.cc:106
-msgid "Shift"
-msgstr "Shift"
+#: gtk2_ardour/export_dialog.cc:1277
+msgid "fastest"
+msgstr "schnellstmöglich"
 
-#: gtk2_ardour/editor_timefx.cc:116
-msgid "Stretch/Shrink"
-msgstr "Stretch/Shrink"
+#: gtk2_ardour/export_dialog.cc:1279
+msgid "linear"
+msgstr "Linear"
 
-#: gtk2_ardour/editor_timefx.cc:119
-#: gtk2_ardour/editor_timefx.cc:120
-msgid "TimeFXButton"
-msgstr ""
+#: gtk2_ardour/export_dialog.cc:1281
+msgid "better"
+msgstr "besser"
 
-#: gtk2_ardour/editor_timefx.cc:121
-msgid "TimeFXProgress"
-msgstr ""
+#: gtk2_ardour/export_dialog.cc:1283
+msgid "intermediate"
+msgstr "mittelmäßig"
 
-#: 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/export_dialog.cc:1293
+msgid "Rectangular"
+msgstr "rechteckig"
 
-#: gtk2_ardour/editor_timefx.cc:315
-msgid "pitch shift"
-msgstr "pitch-shift"
+#: gtk2_ardour/export_dialog.cc:1295
+msgid "Triangular"
+msgstr "dreieckig"
 
-#: gtk2_ardour/editor_timefx.cc:315
-msgid "time stretch"
-msgstr "Time-Stretch"
+#: gtk2_ardour/audio_region_view.cc:975
+msgid "add gain control point"
+msgstr "Lautstärkekurve bearbeiten"
 
-#: gtk2_ardour/engine_dialog.cc:46
+#: gtk2_ardour/engine_dialog.cc:49
 msgid "Realtime"
 msgstr "Realtime"
 
-#: gtk2_ardour/engine_dialog.cc:47
+#: gtk2_ardour/engine_dialog.cc:50
 msgid "Do not lock memory"
 msgstr "Speicherzugriff nicht sperren"
 
-#: gtk2_ardour/engine_dialog.cc:48
+#: gtk2_ardour/engine_dialog.cc:51
 msgid "Unlock memory"
 msgstr "Speicherzugriff Ã¶ffnen"
 
-#: gtk2_ardour/engine_dialog.cc:49
+#: gtk2_ardour/engine_dialog.cc:52
 msgid "No zombies"
 msgstr "Keine Zombies (Soft Mode)"
 
-#: gtk2_ardour/engine_dialog.cc:50
+#: gtk2_ardour/engine_dialog.cc:53
 msgid "Provide monitor ports"
 msgstr "Monitor-Ports erstellen"
 
-#: gtk2_ardour/engine_dialog.cc:51
+#: gtk2_ardour/engine_dialog.cc:54
 msgid "Force 16 bit"
 msgstr "Erzwinge 16 Bit"
 
-#: gtk2_ardour/engine_dialog.cc:52
+#: gtk2_ardour/engine_dialog.cc:55
 msgid "H/W monitoring"
 msgstr "Hardware Monitoring"
 
-#: gtk2_ardour/engine_dialog.cc:53
+#: gtk2_ardour/engine_dialog.cc:56
 msgid "H/W metering"
 msgstr "Hardware-Pegelanzeige"
 
-#: gtk2_ardour/engine_dialog.cc:54
+#: gtk2_ardour/engine_dialog.cc:57
 msgid "Verbose output"
 msgstr "Ausführliche Statusmeldungen"
 
-#: gtk2_ardour/engine_dialog.cc:55
+#: gtk2_ardour/engine_dialog.cc:58
 msgid "Start"
 msgstr "Start"
 
-#: gtk2_ardour/engine_dialog.cc:74
+#: gtk2_ardour/engine_dialog.cc:77
 msgid "8000Hz"
 msgstr "8000 Hz"
 
-#: gtk2_ardour/engine_dialog.cc:75
+#: gtk2_ardour/engine_dialog.cc:78
 msgid "22050Hz"
 msgstr "22050 Hz"
 
-#: gtk2_ardour/engine_dialog.cc:76
+#: gtk2_ardour/engine_dialog.cc:79
 msgid "44100Hz"
 msgstr "44100 Hz"
 
-#: gtk2_ardour/engine_dialog.cc:77
+#: gtk2_ardour/engine_dialog.cc:80
 msgid "48000Hz"
 msgstr "48000 Hz"
 
-#: gtk2_ardour/engine_dialog.cc:78
+#: gtk2_ardour/engine_dialog.cc:81
 msgid "88200Hz"
 msgstr "88200 Hz"
 
-#: gtk2_ardour/engine_dialog.cc:79
+#: gtk2_ardour/engine_dialog.cc:82
 msgid "96000Hz"
 msgstr "96000 Hz"
 
-#: gtk2_ardour/engine_dialog.cc:80
+#: gtk2_ardour/engine_dialog.cc:83
 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/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/engine_dialog.cc:101
-#: gtk2_ardour/engine_dialog.cc:484
+#: gtk2_ardour/engine_dialog.cc:104
+#: gtk2_ardour/engine_dialog.cc:515
 msgid "Shaped"
 msgstr "shaped"
 
 #: gtk2_ardour/engine_dialog.cc:129
-#: gtk2_ardour/engine_dialog.cc:435
-#: gtk2_ardour/engine_dialog.cc:803
+#: 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/engine_dialog.cc:130
-#: gtk2_ardour/engine_dialog.cc:439
-#: gtk2_ardour/engine_dialog.cc:464
-#: gtk2_ardour/engine_dialog.cc:806
+#: 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/engine_dialog.cc:131
-#: gtk2_ardour/engine_dialog.cc:446
-#: gtk2_ardour/engine_dialog.cc:809
+#: gtk2_ardour/engine_dialog.cc:468
+#: gtk2_ardour/engine_dialog.cc:915
 msgid "Playback only"
 msgstr "Nur Wiedergabe"
 
 #: gtk2_ardour/engine_dialog.cc:132
-#: gtk2_ardour/engine_dialog.cc:448
-#: gtk2_ardour/engine_dialog.cc:811
+#: gtk2_ardour/engine_dialog.cc:470
+#: gtk2_ardour/engine_dialog.cc:917
 msgid "Recording only"
 msgstr "Nur Aufnahme"
 
@@ -5141,11 +5568,6 @@ msgstr "Treiber"
 msgid "Interface"
 msgstr "Gerät / Interface"
 
-#: gtk2_ardour/engine_dialog.cc:151
-#: gtk2_ardour/export_dialog.cc:108
-msgid "Sample Rate"
-msgstr "Samplerate"
-
 #: gtk2_ardour/engine_dialog.cc:156
 msgid "Buffer size"
 msgstr "Größe Buffer"
@@ -5167,7 +5589,7 @@ msgid "Realtime Priority"
 msgstr "Realtime Priorität"
 
 #: gtk2_ardour/engine_dialog.cc:251
-#: gtk2_ardour/engine_dialog.cc:374
+#: gtk2_ardour/engine_dialog.cc:375
 msgid "Ignore"
 msgstr "ignorieren"
 
@@ -5185,12 +5607,11 @@ 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."
+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
-#, fuzzy
 msgid "Server:"
-msgstr "Stereo"
+msgstr "Server:"
 
 #: gtk2_ardour/engine_dialog.cc:303
 msgid "Input device"
@@ -5210,2072 +5631,1990 @@ 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: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/engine_dialog.cc:842
-msgid "JACK appears to be missing from the Ardour bundle"
-msgstr ""
-
-#: gtk2_ardour/engine_dialog.cc:1026
-msgid "AudioSetup value for %1 is missing data"
-msgstr ""
-
-#: 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/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/export_dialog.cc:809
-msgid "WAV"
-msgstr "WAV"
-
-#: gtk2_ardour/export_dialog.cc:941
-#, fuzzy
-msgid "Not connected to audioengine"
-msgstr "Nicht mit JACK verbunden - konnte die Aufnahme nicht starten"
-
-#: 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/export_dialog.cc:975
-msgid "Stop Export"
-msgstr "Export Abbrechen"
-
-#: gtk2_ardour/export_dialog.cc:1194
-msgid "Please enter a valid filename."
-msgstr "Bitte geben Sie einen gültigen Dateinamen ein."
-
-#: 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/export_dialog.cc:1210
-msgid "File already exists, do you want to overwrite it?"
-msgstr "Datei existiert bereits, wollen Sie sie Ã¼berschreiben?"
-
-#: 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/export_session_dialog.cc:29
-#: gtk2_ardour/export_region_dialog.cc:35
-msgid "Export to File"
-msgstr "Als Audiodatei exportieren"
-
-#: gtk2_ardour/export_region_dialog.cc:34
-msgid "ardour: export region"
-msgstr "ardour: Region Exportieren"
-
-#: gtk2_ardour/export_range_markers_dialog.cc:41
-msgid "ardour: export ranges"
-msgstr "ardour: Bereiche Exportieren"
-
-#: gtk2_ardour/export_range_markers_dialog.cc:42
-msgid "Export to Directory"
-msgstr "In Verzeichnis exportieren"
-
-#: 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/export_range_markers_dialog.cc:151
-msgid "Please select an existing target directory. Files are not allowed!"
-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"
-
-#: gtk2_ardour/gain_meter.cc:125
-msgid "Fader automation mode"
-msgstr "Fader Automationsmodus"
-
-#: gtk2_ardour/gain_meter.cc:126
-msgid "Fader automation type"
-msgstr "Fader-Automationstyp"
-
-#: 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/gain_meter.cc:519
-msgid "-Inf"
-msgstr "-Inf"
-
-#: gtk2_ardour/gain_meter.cc:723
-#: gtk2_ardour/gain_meter.cc:738
-msgid "meter point change"
-msgstr "Taktwechsel Ã¤ndern"
-
-#: gtk2_ardour/gain_meter.cc:871
-#: gtk2_ardour/mixer_strip.cc:443
-#: gtk2_ardour/panner_ui.cc:748
-msgid "M"
-msgstr "M"
-
-#: gtk2_ardour/gain_meter.cc:874
-#: gtk2_ardour/panner_ui.cc:751
-msgid "P"
-msgstr "P"
-
-#: gtk2_ardour/gain_meter.cc:877
-#: gtk2_ardour/panner_ui.cc:754
-msgid "T"
-msgstr "T"
-
-#: gtk2_ardour/gain_meter.cc:880
-#: gtk2_ardour/panner_ui.cc:757
-msgid "W"
-msgstr "W"
-
-#: gtk2_ardour/generic_pluginui.cc:77
-msgid "<span size=\"large\">Presets</span>"
-msgstr "<span size=\"large\">Voreinstellungen</span>"
-
-#: 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/generic_pluginui.cc:295
-msgid "Automation control"
-msgstr "Automation"
-
-#: gtk2_ardour/generic_pluginui.cc:302
-#, fuzzy
-msgid "Mgnual"
-msgstr "Manuell"
-
-#: gtk2_ardour/gtk-custom-ruler.c:126
-msgid "Lower"
-msgstr "Untergrenze"
-
-#: gtk2_ardour/gtk-custom-ruler.c:127
-msgid "Lower limit of ruler"
-msgstr "Untere Grenze des Lineals"
+msgstr "Hardware Eingangslatenz (Samples)"
 
-#: gtk2_ardour/gtk-custom-ruler.c:136
-msgid "Upper"
-msgstr "Obergrenze"
+#: gtk2_ardour/engine_dialog.cc:329
+msgid "Hardware output latency (samples)"
+msgstr "Hardware Ausgangslatenz (Samples)"
 
-#: gtk2_ardour/gtk-custom-ruler.c:137
-msgid "Upper limit of ruler"
-msgstr "Obere Grenze für das Lineal"
+#: gtk2_ardour/engine_dialog.cc:342
+msgid "Device"
+msgstr "Gerät"
 
-#: gtk2_ardour/gtk-custom-ruler.c:146
-msgid "Position"
-msgstr "Position"
+#: gtk2_ardour/engine_dialog.cc:344
+msgid "Advanced"
+msgstr "Erweitert"
 
-#: gtk2_ardour/gtk-custom-ruler.c:147
-msgid "Position of mark on the ruler"
-msgstr "Position der Markierung auf dem Lineal"
+#: 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/gtk-custom-ruler.c:156
-msgid "Max Size"
-msgstr "Maximale Größe"
+#: gtk2_ardour/engine_dialog.cc:720
+#, fuzzy
+msgid ""
+"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/gtk-custom-ruler.c:157
-msgid "Maximum size of the ruler"
-msgstr "Minimal Größe des Lineals"
+#: gtk2_ardour/engine_dialog.cc:733
+msgid "No suitable audio devices"
+msgstr "Keine passenden Audiogeräte."
 
-#: gtk2_ardour/gtk-custom-ruler.c:166
-msgid "Show Position"
-msgstr "Zeige Position"
+#: 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/gtk-custom-ruler.c:167
-msgid "Draw current ruler position"
-msgstr "Zeige aktuelle Position des Lineals"
+#: 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/imageframe_socket_handler.cc:126
-msgid "Image Compositor Socket has been shutdown/closed"
-msgstr ""
+#: 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/imageframe_time_axis.cc:285
-msgid "0.5 seconds"
-msgstr "0,5 Sekunden"
+#: 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/imageframe_time_axis.cc:286
-#: gtk2_ardour/marker_time_axis.cc:241
-msgid "1 seconds"
-msgstr "1 Sekunde"
+#: 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/imageframe_time_axis.cc:287
-#: gtk2_ardour/marker_time_axis.cc:242
-msgid "1.5 seconds"
-msgstr "1,5 Sekunden"
+#: 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/imageframe_time_axis.cc:288
-#: gtk2_ardour/marker_time_axis.cc:243
-msgid "2 seconds"
-msgstr "2 Sekunden"
+#: gtk2_ardour/editor_keyboard.cc:82
+msgid "mute region"
+msgstr "Region stummschalten"
 
-#: gtk2_ardour/imageframe_time_axis.cc:289
-#: gtk2_ardour/marker_time_axis.cc:244
-msgid "2.5 seconds"
-msgstr "2,5 Sekunden"
+#: gtk2_ardour/editor_ops.cc:127
+msgid "split"
+msgstr "Teile"
 
-#: gtk2_ardour/imageframe_time_axis.cc:290
-#: gtk2_ardour/marker_time_axis.cc:245
-msgid "3 seconds"
-msgstr "3 Sekunden"
+#: gtk2_ardour/editor_ops.cc:194
+#: gtk2_ardour/editor_ops.cc:217
+msgid "remove region"
+msgstr "Region(en) löschen"
 
-#: gtk2_ardour/imageframe_time_axis.cc:295
-#: gtk2_ardour/marker_time_axis.cc:250
-msgid "Duration (sec)"
-msgstr "Dauer (Sek)"
+#: gtk2_ardour/editor_ops.cc:315
+#: gtk2_ardour/editor_ops.cc:343
+msgid "extend selection"
+msgstr "Auswahl erweitern"
 
-#: gtk2_ardour/imageframe_time_axis.cc:300
-msgid "Remove Frame"
-msgstr "Frame löschen"
+#: gtk2_ardour/editor_ops.cc:384
+msgid "nudge regions forward"
+msgstr "Regionen Schritt vorwärts"
 
-#: gtk2_ardour/imageframe_time_axis.cc:303
-msgid "Image Frame"
-msgstr ""
+#: gtk2_ardour/editor_ops.cc:408
+#: gtk2_ardour/editor_ops.cc:493
+msgid "nudge location forward"
+msgstr "Position Schritt vorwärts"
 
-#: gtk2_ardour/imageframe_time_axis.cc:304
-#: gtk2_ardour/marker_time_axis.cc:256
-msgid "Rename Track"
-msgstr "Spur umbenennen"
+#: gtk2_ardour/editor_ops.cc:465
+msgid "nudge regions backward"
+msgstr "Regionen Schritt nach hinten"
 
-#: gtk2_ardour/io_selector.cc:59
-#: gtk2_ardour/io_selector.cc:747
-#: gtk2_ardour/connection_editor.cc:85
-msgid "OK"
-msgstr "OK"
+#: gtk2_ardour/editor_ops.cc:558
+#: gtk2_ardour/editor_ops.cc:588
+msgid "nudge forward"
+msgstr "Schritt vorwärts"
 
-#: 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/editor_ops.cc:655
+msgid "build_region_boundary_cache called with snap_type = %1"
+msgstr "build_region_boundary_cache wurde mit snap_type = %1 aufgerufen"
 
-#: gtk2_ardour/io_selector.cc:69
-msgid "%1 input"
-msgstr "%1 Eingang"
+#: gtk2_ardour/editor_ops.cc:1919
+#: gtk2_ardour/editor_markers.cc:1076
+msgid "New Name:"
+msgstr "Neuer Name: "
 
-#: gtk2_ardour/io_selector.cc:71
-msgid "%1 output"
-msgstr "%1 Ausgang"
+#: gtk2_ardour/editor_ops.cc:1922
+msgid "Name New Location Marker"
+msgstr "Marker benennen"
 
-#: gtk2_ardour/io_selector.cc:143
-#: gtk2_ardour/route_params_ui.cc:103
-msgid "Inputs"
-msgstr "Eingänge"
+#: gtk2_ardour/editor_ops.cc:2140
+msgid "clear markers"
+msgstr "Marker zurücksetzen"
 
-#: gtk2_ardour/io_selector.cc:143
-#: gtk2_ardour/route_params_ui.cc:104
-msgid "Outputs"
-msgstr "Ausgänge"
+#: gtk2_ardour/editor_ops.cc:2153
+msgid "clear ranges"
+msgstr "Bereiche zurücksetzen"
 
-#: gtk2_ardour/io_selector.cc:144
-msgid "Add Input"
-msgstr "Hinzufügen"
+#: gtk2_ardour/editor_ops.cc:2173
+msgid "clear locations"
+msgstr "Positionen zurücksetzen"
 
-#: gtk2_ardour/io_selector.cc:144
-msgid "Add Output"
-msgstr "Hinzufügen"
+#: gtk2_ardour/editor_ops.cc:2246
+msgid "insert dragged region"
+msgstr "Region ziehen"
 
-#: gtk2_ardour/io_selector.cc:145
-msgid "Remove Input"
-msgstr "Entfernen"
+#: gtk2_ardour/editor_ops.cc:2293
+msgid "insert region"
+msgstr "Region einfügen"
 
-#: gtk2_ardour/io_selector.cc:145
-msgid "Remove Output"
-msgstr "Entfernen"
+#: gtk2_ardour/editor_ops.cc:2517
+msgid "Rename Region"
+msgstr "Region umbenennen"
 
-#: gtk2_ardour/io_selector.cc:146
-msgid "Disconnect All"
-msgstr "Alle trennen"
+#: gtk2_ardour/editor_ops.cc:2521
+msgid "New name:"
+msgstr "Neuer Name: "
 
-#: gtk2_ardour/io_selector.cc:160
-msgid "Available connections"
-msgstr "Verfügbare Verbindungen"
+#: gtk2_ardour/editor_ops.cc:2859
+msgid "separate"
+msgstr "Teilen"
 
-#: 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/editor_ops.cc:3007
+msgid "trim to selection"
+msgstr "Auf Auswahl kürzen"
 
-#: gtk2_ardour/io_selector.cc:753
-msgid "ardour: "
-msgstr "ardour: "
+#: gtk2_ardour/editor_ops.cc:3055
+msgid "region fill"
+msgstr "Region füllen"
 
-#: gtk2_ardour/keyeditor.cc:25
-msgid "Keybinding Editor"
-msgstr ""
+#: gtk2_ardour/editor_ops.cc:3119
+msgid "fill selection"
+msgstr "Auswahl füllen"
 
-#: gtk2_ardour/keyeditor.cc:33
-msgid "Action"
-msgstr "Aktion"
+#: gtk2_ardour/editor_ops.cc:3158
+msgid "set sync point"
+msgstr "Einrastpunkt definieren"
 
-#: gtk2_ardour/keyeditor.cc:34
-msgid "Binding"
-msgstr "Zugewiesene Taste"
+#: gtk2_ardour/editor_ops.cc:3184
+msgid "remove sync"
+msgstr "Einrastpunkt entfernen"
 
-#: gtk2_ardour/keyeditor.cc:188
-msgid "Command-"
-msgstr "Befehl-"
+#: gtk2_ardour/editor_ops.cc:3206
+msgid "naturalize"
+msgstr "zur Ursprungsposition setzen"
 
-#: gtk2_ardour/keyeditor.cc:189
-msgid "Option-"
-msgstr "Option-"
+#: gtk2_ardour/editor_ops.cc:3306
+msgid "align selection (relative)"
+msgstr "Auswahl relativ ausrichten"
 
-#: gtk2_ardour/keyeditor.cc:190
-msgid "Shift-"
-msgstr ""
+#: gtk2_ardour/editor_ops.cc:3346
+msgid "align selection"
+msgstr "Auswahl ausrichten"
 
-#: gtk2_ardour/location_ui.cc:49
-#: gtk2_ardour/location_ui.cc:52
-msgid "Set"
-msgstr "Setzen"
+#: gtk2_ardour/editor_ops.cc:3358
+msgid "align region"
+msgstr "Region ausrichten"
 
-#: gtk2_ardour/location_ui.cc:50
-#: gtk2_ardour/location_ui.cc:53
-msgid "Go"
-msgstr "Gehe zu"
+#: gtk2_ardour/editor_ops.cc:3395
+msgid "trim to loop"
+msgstr "Auf Schleife kürzen"
 
-#: gtk2_ardour/location_ui.cc:56
-msgid "CD"
-msgstr "CD"
+#: gtk2_ardour/editor_ops.cc:3405
+msgid "trim to punch"
+msgstr "Auf Punch-Bereich kürzen"
 
-#: gtk2_ardour/location_ui.cc:59
-msgid "SCMS"
-msgstr "SCMS"
+#: gtk2_ardour/editor_ops.cc:3468
+msgid "trim region start to edit point"
+msgstr "Regionanfang bis Arbeitspunkt abschneiden"
 
-#: gtk2_ardour/location_ui.cc:60
-msgid "Pre-Emphasis"
-msgstr "Präemphase"
+#: gtk2_ardour/editor_ops.cc:3513
+msgid "trim region end to edit point"
+msgstr "Regionende bis Arbeitspunkt abschneiden"
 
-#: 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/editor_ops.cc:3600
+msgid "Cancel Freeze"
+msgstr "Einfrieren abbrechen"
 
-#: gtk2_ardour/location_ui.cc:605
-msgid "Add New Location"
-msgstr "Neue Position hinzufügen"
+#: gtk2_ardour/editor_ops.cc:3643
+msgid "bounce range"
+msgstr "Bereich Bouncen"
 
-#: gtk2_ardour/location_ui.cc:606
-msgid "Add New Range"
-msgstr "Neuen Bereich hinzufügen"
+#: gtk2_ardour/editor_ops.cc:3703
+msgid "cut"
+msgstr "Ausschneiden"
 
-#: gtk2_ardour/location_ui.cc:642
-msgid "Location (CD Index) Markers"
-msgstr "Positionsmarker (CD Index)"
+#: gtk2_ardour/editor_ops.cc:3706
+msgid "copy"
+msgstr "Kopieren"
 
-#: gtk2_ardour/location_ui.cc:662
-msgid "Range (CD Track) Markers"
-msgstr "Bereiche (CD Tracks)"
+#: gtk2_ardour/editor_ops.cc:3756
+msgid " objects"
+msgstr "Objekte"
 
-#: gtk2_ardour/location_ui.cc:840
-msgid "add range marker"
-msgstr "Bereich hinzufügen"
+#: gtk2_ardour/editor_ops.cc:3792
+msgid " range"
+msgstr "Bereich"
 
-#: gtk2_ardour/main.cc:153
-msgid "cannot open pango.rc file %1"
-msgstr "kann die Datei pango.rc nicht Ã¶ffnen %1"
+#: gtk2_ardour/editor_ops.cc:4031
+msgid "paste"
+msgstr "Einfügen"
 
-#: gtk2_ardour/main.cc:230
-msgid "Key bindings file \"%1\" not found. Default bindings used instead"
-msgstr ""
+#: gtk2_ardour/editor_ops.cc:4080
+msgid "paste chunk"
+msgstr "Abschnitt einfügen"
 
-#: gtk2_ardour/main.cc:292
-msgid "Ardour/GTK "
-msgstr "Ardour/GTK "
+#: gtk2_ardour/editor_ops.cc:4124
+msgid "duplicate region"
+msgstr "Region duplizieren"
 
-#: gtk2_ardour/main.cc:294
-msgid ""
-"\n"
-"   (built using "
-msgstr ""
-"\n"
-"   (kompiliert mit Version "
+#: gtk2_ardour/editor_ops.cc:4172
+msgid "duplicate selection"
+msgstr "Auswahl duplizieren"
 
-#: gtk2_ardour/main.cc:297
-msgid " and GCC version "
-msgstr " und GCC Version"
+#: gtk2_ardour/editor_ops.cc:4226
+msgid "clear playlist"
+msgstr "Wiedergabeliste zurücksetzen"
+
+#: gtk2_ardour/editor_ops.cc:4256
+msgid "nudge track"
+msgstr "Spur verschieben"
 
-#: gtk2_ardour/main.cc:307
-msgid "Copyright (C) 1999-2007 Paul Davis"
-msgstr "Copyright (C) 1999-2007 Paul Davis"
+#: gtk2_ardour/editor_ops.cc:4284
+msgid ""
+"Do you really want to destroy the last capture?\n"
+"(This is destructive and cannot be undone)"
+msgstr ""
+"Wollen Sie wirklich die letzte Aufnahme rückgängig machen?\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
 
-#: 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/editor_ops.cc:4288
+msgid "Yes, destroy it."
+msgstr "Ja, entfernen."
 
-#: 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/editor_ops.cc:4316
+msgid "normalize"
+msgstr "Normalisieren"
 
-#: 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/editor_ops.cc:4425
+msgid "reverse regions"
+msgstr "Regionen umkehren"
 
-#: 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/editor_ops.cc:4545
+msgid "reset region gain"
+msgstr "Lautstärkekurve zurücksetzen"
 
-#: 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/editor_ops.cc:4683
+msgid "set fade in length"
+msgstr "Ändere Fade-In Länge"
 
-#: gtk2_ardour/main.cc:324
-msgid "could not create ARDOUR GUI"
-msgstr "konnte das grafische Ardour User Interface nicht erstellen"
+#: gtk2_ardour/editor_ops.cc:4690
+msgid "set fade out length"
+msgstr "Ändere Fade-Out Länge"
 
-#: gtk2_ardour/marker.cc:244
-msgid "MarkerText"
-msgstr ""
+#: gtk2_ardour/editor_ops.cc:4738
+msgid "toggle fade in active"
+msgstr "Fade-In aktivieren"
 
-#: gtk2_ardour/marker_time_axis.cc:253
-msgid "Remove Marker"
-msgstr "Marker entfernen"
+#: gtk2_ardour/editor_ops.cc:4738
+msgid "toggle fade out active"
+msgstr "Fade-Out aktivieren"
 
-#: gtk2_ardour/midi_port_dialog.cc:22
-msgid "Port name"
-msgstr "Port Name"
+#: gtk2_ardour/editor_ops.cc:4788
+msgid "set fade in shape"
+msgstr "Fade-In Kurve bearbeiten"
 
-#: gtk2_ardour/mixer_strip.cc:97
-#: gtk2_ardour/mixer_strip.cc:143
-#: gtk2_ardour/mixer_strip.cc:1217
-msgid "pre"
-msgstr "Pre"
+#: gtk2_ardour/editor_ops.cc:4821
+msgid "set fade out shape"
+msgstr "Fade-Out Kurve Ã¤ndern"
 
-#: gtk2_ardour/mixer_strip.cc:98
-#: gtk2_ardour/mixer_strip.cc:786
-msgid "Comments"
-msgstr "Kommentare"
+#: gtk2_ardour/editor_ops.cc:4853
+msgid "set fade in active"
+msgstr "Fade-In aktivieren"
 
-#: gtk2_ardour/mixer_strip.cc:122
-msgid "Input"
-msgstr "Eingang"
+#: gtk2_ardour/editor_ops.cc:4887
+msgid "set fade out active"
+msgstr "Fade-Out aktivieren"
 
-#: gtk2_ardour/mixer_strip.cc:139
-#: gtk2_ardour/mixer_strip.cc:1213
-#: gtk2_ardour/option_editor.cc:707
-msgid "input"
-msgstr "Input"
+#: gtk2_ardour/editor_ops.cc:5097
+msgid "trim front"
+msgstr "vorne abschneiden"
 
-#: gtk2_ardour/mixer_strip.cc:147
-#: gtk2_ardour/mixer_strip.cc:1221
-msgid "post"
-msgstr "Post"
+#: gtk2_ardour/editor_ops.cc:5097
+msgid "trim back"
+msgstr "hinten Abschneiden"
 
-#: gtk2_ardour/mixer_strip.cc:154
-msgid "tupni"
-msgstr ""
+#: gtk2_ardour/editor_ops.cc:5179
+msgid "set loop range from selection"
+msgstr "Schleife aus Auswahl erstellen"
 
-#: gtk2_ardour/mixer_strip.cc:202
-msgid "Varispeed"
-msgstr "Varispeed"
+#: gtk2_ardour/editor_ops.cc:5201
+msgid "set loop range from edit range"
+msgstr "Schleife aus Editierbereich erstellen"
 
-#: 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/editor_ops.cc:5232
+msgid "set loop range from region"
+msgstr "Schleife aus Region erstellen"
 
-#: gtk2_ardour/mixer_strip.cc:419
-msgid "record"
-msgstr "Aufnahme"
+#: gtk2_ardour/editor_ops.cc:5250
+msgid "set punch range from selection"
+msgstr "Punch-Bereich aus Auswahl erstellen"
 
-#: gtk2_ardour/mixer_strip.cc:426
-msgid "comments"
-msgstr "Kommentare"
+#: gtk2_ardour/editor_ops.cc:5267
+msgid "set punch range from edit range"
+msgstr "Punch-Bereich aus Editierbereich erstellen"
 
-#: gtk2_ardour/mixer_strip.cc:429
-msgid "*comments*"
-msgstr "*Kommentare*"
+#: gtk2_ardour/editor_ops.cc:5293
+msgid "set punch range from region"
+msgstr "Punch-Bereich aus Region erstellen"
 
-#: gtk2_ardour/mixer_strip.cc:441
-msgid "Rec"
-msgstr "Rec"
+#: gtk2_ardour/editor_ops.cc:5377
+msgid "Add new marker"
+msgstr "Marker hinzufügen"
 
-#: gtk2_ardour/mixer_strip.cc:444
-msgid "S"
-msgstr "S"
+#: gtk2_ardour/editor_ops.cc:5378
+msgid "Set global tempo"
+msgstr "Globales tempo setzen"
 
-#: gtk2_ardour/mixer_strip.cc:448
-#: gtk2_ardour/mixer_strip.cc:796
-msgid "Cmt"
-msgstr "Kmt"
+#: 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/mixer_strip.cc:451
-#: gtk2_ardour/mixer_strip.cc:793
-msgid "*Cmt*"
-msgstr "*Kmt*"
+#: gtk2_ardour/editor_ops.cc:5403
+msgid "set tempo from region"
+msgstr "Tempo anhand von Region setzen"
 
-#: 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/editor_ops.cc:5437
+msgid "split regions"
+msgstr "Region teilen (Split)"
 
-#: 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/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/mixer_strip.cc:713
-msgid " Input"
-msgstr "Eingang"
+#: gtk2_ardour/editor_ops.cc:5489
+msgid "Call for the Ferret!"
+msgstr "Call for the Ferret!"
 
-#: gtk2_ardour/mixer_strip.cc:716
-msgid "I"
-msgstr "I"
+#: 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/mixer_strip.cc:736
-msgid "O"
-msgstr "O"
+#: 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/mixer_strip.cc:783
-msgid "*Comments*"
-msgstr "*Kommentare*"
+#: gtk2_ardour/editor_ops.cc:5495
+msgid "Excessive split?"
+msgstr "Ãœbermäßige Aufteilung?"
 
-#: gtk2_ardour/mixer_strip.cc:838
-msgid ": comment editor"
-msgstr "Kommentare bearbeiten"
+#: gtk2_ardour/editor_ops.cc:5798
+#: gtk2_ardour/ardour_ui.cc:1227
+msgid "tracks"
+msgstr "Spuren"
 
-#: gtk2_ardour/mixer_strip.cc:933
-msgid "Grp"
-msgstr "Grp"
+#: gtk2_ardour/editor_ops.cc:5800
+msgid "track"
+msgstr "Spur"
 
-#: gtk2_ardour/mixer_strip.cc:936
-msgid "~G"
-msgstr "~G"
+#: gtk2_ardour/editor_ops.cc:5804
+#: gtk2_ardour/ardour_ui.cc:1227
+msgid "busses"
+msgstr "Audio-Bussen"
 
-#: gtk2_ardour/mixer_strip.cc:984
-msgid "Invert Polarity"
-msgstr "Polarität umkehren"
+#: gtk2_ardour/editor_ops.cc:5806
+msgid "bus"
+msgstr "Bus"
 
-#: gtk2_ardour/mixer_strip.cc:987
-msgid "Protect against denormals"
-msgstr "Schutz vor Denormals"
+#: 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/mixer_ui.cc:89
-msgid "Strips"
-msgstr "Spur"
+#: 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/mixer_ui.cc:115
-msgid "Group"
-msgstr "Gruppe"
+#: 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/mixer_ui.cc:215
-#: gtk2_ardour/mixer_ui.cc:425
-#: gtk2_ardour/mixer_ui.cc:457
-msgid "Mixer"
-msgstr "Mixer"
+#: gtk2_ardour/editor_ops.cc:5828
+msgid "Yes, remove them."
+msgstr "Ja, entfernen."
 
-#: 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/editor_ops.cc:5873
+msgid "Stay in position"
+msgstr "Unverändert lassen"
 
-#: gtk2_ardour/new_session_dialog.cc:46
-msgid "Name :"
-msgstr "Name :"
+#: gtk2_ardour/editor_ops.cc:5874
+msgid "Move"
+msgstr "Verschieben"
 
-#: 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/editor_ops.cc:5875
+msgid "Split & Later Section Moves"
+msgstr "Teilen & hinteren Teil verschieben"
 
-#: gtk2_ardour/new_session_dialog.cc:71
-msgid "<b>Busses</b>"
-msgstr "<b>Busse</b>"
+#: gtk2_ardour/editor_ops.cc:5876
+msgid "Intersected regions should:"
+msgstr "Regionen am Positionsmarker:"
 
-#: gtk2_ardour/new_session_dialog.cc:72
-msgid "<b>Inputs</b>"
-msgstr "<b>Eingänge</b>"
+#: gtk2_ardour/editor_ops.cc:5877
+msgid "Move Glued Regions"
+msgstr "Taktgebundene Regionen mitbewegen"
 
-#: gtk2_ardour/new_session_dialog.cc:73
-msgid "<b>Outputs</b>"
-msgstr "<b>Ausgänge</b>"
+#: gtk2_ardour/editor_ops.cc:5878
+msgid "Move Markers"
+msgstr "Marker mitbewegen"
 
-#: gtk2_ardour/new_session_dialog.cc:75
-msgid "Create Folder In :"
-msgstr "Verzeichnis erstellen in:"
+#: gtk2_ardour/editor_ops.cc:5952
+msgid "insert time"
+msgstr "Stille einfügen"
 
-#: gtk2_ardour/new_session_dialog.cc:77
-msgid "Template :"
-msgstr "Vorlage :"
+#: 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/new_session_dialog.cc:79
-msgid "Create Monitor Bus"
-msgstr "Monitor Bus erstellen"
+#: gtk2_ardour/editor_ops.cc:6136
+#, c-format
+msgid "Saved view %u"
+msgstr "Ansicht %u gespeichert"
 
-#: gtk2_ardour/new_session_dialog.cc:86
-msgid "Create Master Bus"
-msgstr "Master Bus erstellen"
+#: gtk2_ardour/editor_tempodisplay.cc:213
+#: gtk2_ardour/editor_tempodisplay.cc:256
+msgid "add"
+msgstr "Hinzufügen"
 
-#: gtk2_ardour/new_session_dialog.cc:88
-msgid "Automatically Connect to Physical Inputs"
-msgstr "Eingänge automatisch mit Audioeingängen verbinden"
+#: gtk2_ardour/editor_tempodisplay.cc:237
+msgid "add tempo mark"
+msgstr "Tempowechsel einfügen"
 
-#: gtk2_ardour/new_session_dialog.cc:89
-#: gtk2_ardour/new_session_dialog.cc:102
-msgid "Use only"
-msgstr "Benutze nur"
+#: gtk2_ardour/editor_tempodisplay.cc:280
+msgid "add meter mark"
+msgstr "Taktwechsel einfügen"
 
-#: gtk2_ardour/new_session_dialog.cc:101
-msgid "Automatically Connect Outputs"
-msgstr "Ausgänge automatisch verbinden"
+#: gtk2_ardour/editor_tempodisplay.cc:313
+#: gtk2_ardour/editor_tempodisplay.cc:342
+msgid "done"
+msgstr "Fertig"
 
-#: gtk2_ardour/new_session_dialog.cc:110
-msgid "... to Master Bus"
-msgstr "... mit Master Bus"
+#: gtk2_ardour/editor_tempodisplay.cc:331
+#: gtk2_ardour/editor_tempodisplay.cc:363
+msgid "replace tempo mark"
+msgstr "Tempowechsel ersetzen"
 
-#: gtk2_ardour/new_session_dialog.cc:111
-msgid "... to Physical Outputs"
-msgstr "... mit Audioausgängen"
+#: 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/new_session_dialog.cc:117
-msgid "Advanced Options"
-msgstr "Erweiterte Einstellungen"
+#: gtk2_ardour/editor_tempodisplay.cc:415
+#: gtk2_ardour/editor_tempodisplay.cc:449
+msgid "remove tempo mark"
+msgstr "Tempowechsel entfernen"
 
-#: gtk2_ardour/new_session_dialog.cc:125
-msgid "Recent:"
-msgstr "Zuletzt verwendet:"
+#: gtk2_ardour/editor_region_list.cc:174
+msgid " (MISSING)"
+msgstr "(FEHLT)"
 
-#: gtk2_ardour/new_session_dialog.cc:162
-msgid "Browse:"
-msgstr "Durchsuchen:"
+#: gtk2_ardour/route_params_ui.cc:85
+msgid "Tracks/Buses"
+msgstr "Spuren/Busse"
 
-#: gtk2_ardour/new_session_dialog.cc:350
-msgid "Session Control"
-msgstr "Projektübersicht"
+#: gtk2_ardour/route_params_ui.cc:105
+msgid "Pre-fader Redirects"
+msgstr "Pre-Fader Redirects"
 
-#: gtk2_ardour/new_session_dialog.cc:393
-msgid "select template"
-msgstr "Vorlage auswählen"
+#: gtk2_ardour/route_params_ui.cc:106
+msgid "Post-fader Redirects"
+msgstr "Post-Fader Redirects"
 
-#: gtk2_ardour/new_session_dialog.cc:399
-msgid "select session file"
-msgstr "Projektdatei auswählen"
+#: 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/new_session_dialog.cc:408
-msgid "select directory"
-msgstr "Verzeichnis auswählen"
+#: gtk2_ardour/route_params_ui.cc:455
+msgid "NO TRACK"
+msgstr "KEINE SPUR"
 
-#: gtk2_ardour/new_session_dialog.cc:468
-msgid "Audio Setup"
-msgstr "Audio-Einstellungen"
+#: 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/new_session_dialog.cc:492
-msgid "New Session"
-msgstr "Neues Projekt"
+#: gtk2_ardour/editor_markers.cc:594
+msgid "Locate to here"
+msgstr "Positionszeiger hierhin setzen"
 
-#: gtk2_ardour/new_session_dialog.cc:497
-msgid "Open Session"
-msgstr "Projekt Ã¶ffnen"
+#: gtk2_ardour/editor_markers.cc:595
+msgid "Play from here"
+msgstr "Wiedergabe ab hier"
 
-#: gtk2_ardour/option_editor.cc:77
-msgid "Limit undo history"
-msgstr "Begrenze Aktionsliste"
+#: gtk2_ardour/editor_markers.cc:596
+msgid "Move Mark to Playhead"
+msgstr "Marker zum Positionszeiger verschieben"
 
-#: gtk2_ardour/option_editor.cc:78
-msgid "Save undo history"
-msgstr "Aktionsliste speichern"
+#: gtk2_ardour/editor_markers.cc:600
+msgid "Create range to next marker"
+msgstr "Bereich bis zum nächsten Marker erstellen"
+
+#: gtk2_ardour/editor_markers.cc:606
+msgid "Unlock"
+msgstr "Entsperren"
 
-#: gtk2_ardour/option_editor.cc:83
-msgid "SMPTE offset is negative"
-msgstr "Negatives SMPTE-Offset"
+#: gtk2_ardour/editor_markers.cc:628
+msgid "Play Range"
+msgstr "Bereich wiedergeben"
 
-#: gtk2_ardour/option_editor.cc:84
-msgid "Timecode source is sample-clock synced"
-msgstr ""
+#: gtk2_ardour/editor_markers.cc:629
+msgid "Locate to Range Mark"
+msgstr "Positionszeiger zu Bereichsmarker"
 
-#: gtk2_ardour/option_editor.cc:93
-msgid "Add new MIDI port"
-msgstr "Neuen MIDI-Port hinzufügen"
+#: gtk2_ardour/editor_markers.cc:630
+msgid "Play from Range Mark"
+msgstr "Wiedergabe ab Bereichsmarker"
 
-#: gtk2_ardour/option_editor.cc:145
-msgid "Paths/Files"
-msgstr "Pfade"
+#: gtk2_ardour/editor_markers.cc:632
+msgid "Loop Range"
+msgstr "Bereich in Schleife wiedergeben"
 
-#: gtk2_ardour/option_editor.cc:146
-msgid "Kbd/Mouse"
-msgstr "Tastatur/Maus"
+#: gtk2_ardour/editor_markers.cc:634
+msgid "Set Range Mark from Playhead"
+msgstr "Bereichsmarker beim Positionszeiger erzeugen"
 
-#: gtk2_ardour/option_editor.cc:149
-msgid "Misc"
-msgstr "Sonstiges"
+#: gtk2_ardour/editor_markers.cc:636
+msgid "Set Range from Range Selection"
+msgstr "Bereichsmarker für Auswahl erzeugen"
 
-#: gtk2_ardour/option_editor.cc:152
-msgid "MIDI"
-msgstr "MIDI"
+#: gtk2_ardour/editor_markers.cc:646
+msgid "Hide Range"
+msgstr "Bereich verbergen"
 
-#: gtk2_ardour/option_editor.cc:222
-msgid "session RAID path"
-msgstr "Projektverzeichnis (RAID)"
+#: gtk2_ardour/editor_markers.cc:647
+#: gtk2_ardour/editor_markers.cc:1082
+msgid "Rename Range"
+msgstr "Bereich umbenennen"
 
-#: gtk2_ardour/option_editor.cc:238
-#: gtk2_ardour/option_editor.cc:244
-#: gtk2_ardour/option_editor.cc:933
-#: gtk2_ardour/option_editor.cc:953
-msgid "internal"
-msgstr "intern"
+#: gtk2_ardour/editor_markers.cc:648
+msgid "Remove Range"
+msgstr "Bereich entfernen"
 
-#: gtk2_ardour/option_editor.cc:257
-msgid "Short crossfade length (msecs)"
-msgstr "Länge für kurze Crossfades (ms)"
+#: gtk2_ardour/editor_markers.cc:653
+msgid "Separate Regions in Range"
+msgstr "Regionen an Bereichsgrenzen teilen"
 
-#: gtk2_ardour/option_editor.cc:269
-msgid "Destructive crossfade length (msecs)"
-msgstr "Länge für destruktive Crossfades (ms)"
+#: gtk2_ardour/editor_markers.cc:654
+msgid "Select All in Range"
+msgstr "Alles im Bereich auswählen"
 
-#: gtk2_ardour/option_editor.cc:288
-msgid "History depth (commands)"
-msgstr "Anzahl der Befehle, die rückgängig gemacht werden können"
+#: gtk2_ardour/editor_markers.cc:656
+msgid "Select Range"
+msgstr "Bereich auswählen"
 
-#: gtk2_ardour/option_editor.cc:309
-msgid "Saved history depth (commands)"
-msgstr "Anzahl der Befehle, die im Verlauf gespeichert werden"
+#: gtk2_ardour/editor_markers.cc:682
+msgid "Set Loop Range"
+msgstr "Schleife erstellen"
 
-#: gtk2_ardour/option_editor.cc:407
-msgid "SMPTE Offset"
-msgstr "SMPTE Offset"
+#: gtk2_ardour/editor_markers.cc:683
+msgid "Set Punch Range"
+msgstr "Punch-Bereich erstellen"
 
-#: gtk2_ardour/option_editor.cc:480
-#, fuzzy
-msgid "Inbound MMC Device ID"
-msgstr "MMC Gerät ID"
+#: gtk2_ardour/editor_markers.cc:1080
+msgid "Rename Mark"
+msgstr "Marker umbenennen"
 
-#: gtk2_ardour/option_editor.cc:490
-#, fuzzy
-msgid "Outbound MMC Device ID"
-msgstr "MMC Gerät ID"
+#: gtk2_ardour/editor_markers.cc:1104
+msgid "rename marker"
+msgstr "Marker umbenennen"
 
-#: gtk2_ardour/option_editor.cc:522
-msgid "Port"
-msgstr "Port"
+#: gtk2_ardour/editor_markers.cc:1126
+msgid "set loop range"
+msgstr "Loop-Bereich festlegen"
 
-#: gtk2_ardour/option_editor.cc:526
-msgid "Offline"
-msgstr "Offline"
+#: gtk2_ardour/editor_markers.cc:1132
+msgid "set punch range"
+msgstr "Punch-Bereich festlegen"
 
-#: gtk2_ardour/option_editor.cc:530
+#: gtk2_ardour/ardour_ui.cc:115
 msgid ""
-"Trace\n"
-"Input"
+"pre\n"
+"roll"
 msgstr ""
-"Verfolge\n"
-"Eingang"
+"pre\n"
+"roll"
 
-#: gtk2_ardour/option_editor.cc:534
+#: gtk2_ardour/ardour_ui.cc:116
 msgid ""
-"Trace\n"
-"Output"
+"post\n"
+"roll"
 msgstr ""
-"Verfolge\n"
-"Ausgang"
-
-#: gtk2_ardour/option_editor.cc:538
-msgid "MTC"
-msgstr "MTC"
+"post\n"
+"roll"
 
-#: gtk2_ardour/option_editor.cc:542
-msgid "MMC"
-msgstr "MMC"
+#: gtk2_ardour/ardour_ui.cc:142
+msgid ""
+msgstr ""
 
-#: gtk2_ardour/option_editor.cc:546
+#: gtk2_ardour/ardour_ui.cc:150
 msgid ""
-"MIDI Parameter\n"
-"Control"
+"time\n"
+"master"
 msgstr ""
-"MIDI Parameter\n"
-"Steuerung"
+"Time\n"
+"Master"
 
-#: gtk2_ardour/option_editor.cc:585
-#: gtk2_ardour/option_editor.cc:592
-#: gtk2_ardour/option_editor.cc:595
-#: gtk2_ardour/option_editor.cc:808
-msgid "online"
-msgstr "Online"
+#: gtk2_ardour/ardour_ui.cc:152
+msgid "AUDITION"
+msgstr "VORHÖREN"
 
-#: gtk2_ardour/option_editor.cc:592
-#: gtk2_ardour/option_editor.cc:593
-#: gtk2_ardour/option_editor.cc:805
-msgid "offline"
-msgstr "Offline"
+#: gtk2_ardour/ardour_ui.cc:153
+msgid "SOLO"
+msgstr "SOLO"
 
-#: gtk2_ardour/option_editor.cc:709
-msgid "output"
-msgstr "Ausgang"
+#: gtk2_ardour/ardour_ui.cc:155
+msgid "Errors"
+msgstr "Fehlermeldungen"
 
-#: gtk2_ardour/option_editor.cc:880
-msgid "Choose Click"
-msgstr "Click auswählen"
+#: gtk2_ardour/ardour_ui.cc:246
+msgid "could not initialize Ardour."
+msgstr "Konnte Ardour nicht initialisieren."
 
-#: gtk2_ardour/option_editor.cc:902
-msgid "Choose Click Emphasis"
-msgstr "Click-Betonung auswählen"
+#: gtk2_ardour/ardour_ui.cc:272
+msgid "Starting audio engine"
+msgstr "Starte Audio Engine"
 
-#: gtk2_ardour/option_editor.cc:1005
-msgid "Click audio file"
-msgstr "Audiodatei für Click"
+#: gtk2_ardour/ardour_ui.cc:578
+msgid "Ardour could not start JACK"
+msgstr "Ardour konnte JACK nicht starten"
 
-#: gtk2_ardour/option_editor.cc:1011
-msgid "Click emphasis audiofile"
-msgstr "Audiodatei für Click-Betonung"
+#: gtk2_ardour/ardour_ui.cc:580
+msgid "Ardour could not connect to JACK."
+msgstr "Ardour konnte nicht zu JACK verbinden."
 
-#: gtk2_ardour/option_editor.cc:1048
+#: gtk2_ardour/ardour_ui.cc:589
 msgid ""
-"The auditioner is a dedicated mixer strip used\n"
-"for listening to specific regions outside the context\n"
-"of the overall mix. It can be connected just like any\n"
-"other mixer strip."
+"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 ""
-"Der Vorhör-Bus ist ein spezieller Mixer-Kanal,\n"
-"mit dem ausgewählte Regionen unabhängig\n"
-"vom Gesamt-Mix abgehört werden können.\n"
-"Dieser Bus lässt sich wie jeder andere Mixer-Kanal\n"
-"verbinden."
-
-#: gtk2_ardour/option_editor.cc:1139
-msgid "Edit using"
-msgstr "Bearbeiten mit"
-
-#: gtk2_ardour/option_editor.cc:1146
-#: gtk2_ardour/option_editor.cc:1173
-msgid "+ button"
-msgstr "und Maustaste"
-
-#: gtk2_ardour/option_editor.cc:1166
-msgid "Delete using"
-msgstr "Entfernen mit"
-
-#: gtk2_ardour/option_editor.cc:1193
-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/opts.cc:51
-msgid "  -h, --help                       Print this message\n"
-msgstr "  -h, --help                       Diese Hinweise\n"
+"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/opts.cc:52
-msgid "  -b, --bindings                   Print all possible keyboard binding names\n"
-msgstr "  -b, --bindings                   Alle möglichen Tastenzuweisungsnamen ausgeben\n"
+#: 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/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/ardour_ui.cc:644
+msgid "Ardour is ready for use"
+msgstr "Ardour ist bereit"
 
-#: gtk2_ardour/opts.cc:54
-msgid "  -d, --disable-plugins            Disable all plugins in an existing session\n"
+#: 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/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/ardour_ui.cc:694
+msgid "Do not show this window again"
+msgstr "Diese Meldung nicht wieder anzeigen"
 
-#: 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/ardour_ui.cc:723
+msgid "quit"
+msgstr "Beenden"
 
-#: 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/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 ""
+"Ardour konnte das Projekt nicht speichern.\n
\n"
+"Wenn Sie trotzdem beenden wollen, wählen Sie bitte\n"
+"\n"
+"\"Trotzdem beenden\"."
 
-#: 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/ardour_ui.cc:757
+msgid "ardour: save session?"
+msgstr "ardour: Projekt speichern?"
 
-#: gtk2_ardour/opts.cc:61
-msgid "  -V, --novst                      Do not use VST support\n"
-msgstr "  -V, --novst                      VST-Unterstützung ausschalten\n"
+#: gtk2_ardour/ardour_ui.cc:764
+msgid "Don't %1"
+msgstr "Abbrechen"
 
-#: 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/ardour_ui.cc:766
+msgid "Just %1"
+msgstr "%1"
 
-#: gtk2_ardour/opts.cc:64
-msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
-msgstr "  -C, --curvetest filename         Kurvenalgorithmus debuggen\n"
+#: gtk2_ardour/ardour_ui.cc:768
+msgid "Save and %1"
+msgstr "Speichern und %1"
 
-#: 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/ardour_ui.cc:780
+msgid "session"
+msgstr "Das Projekt"
 
-#: 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/ardour_ui.cc:782
+msgid "snapshot"
+msgstr "Der Schnappschuss"
 
-#: gtk2_ardour/pan_automation_time_axis.cc:90
-msgid "add pan automation event"
-msgstr "Pan-Automationspunkt einfügen"
+#: 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/panner2d.cc:588
-#: gtk2_ardour/panner_ui.cc:412
-#: gtk2_ardour/plugin_ui.cc:221
-msgid "Bypass"
-msgstr "Bypass"
+#: gtk2_ardour/ardour_ui.cc:798
+msgid "Prompter"
+msgstr "Frage"
 
-#: gtk2_ardour/panner_ui.cc:58
-#: gtk2_ardour/panner_ui.cc:217
-msgid "link"
-msgstr "link"
+#: gtk2_ardour/ardour_ui.cc:858
+#, c-format
+msgid "disconnected"
+msgstr "getrennt"
 
-#: gtk2_ardour/panner_ui.cc:69
-msgid "Pan automation mode"
-msgstr "Pan-Automationsmodus"
+#: gtk2_ardour/ardour_ui.cc:865
+#, c-format
+msgid "%.1f kHz / %4.1f ms"
+msgstr "%.1f kHz / %4.1f ms"
 
-#: gtk2_ardour/panner_ui.cc:70
-msgid "Pan automation type"
-msgstr "Pan-Automationstyp"
+#: gtk2_ardour/ardour_ui.cc:869
+#, c-format
+msgid "%u kHz / %4.1f ms"
+msgstr "%u kHz / %4.1f ms"
 
-#: gtk2_ardour/panner_ui.cc:80
-msgid "panning link control"
-msgstr "Pan-Regler verbinden"
+#: gtk2_ardour/ardour_ui.cc:882
+#, c-format
+msgid "DSP: %5.1f%%"
+msgstr "DSP: %5.1f%%"
 
-#: gtk2_ardour/panner_ui.cc:82
-msgid "panning link direction"
-msgstr "Richtung der Verbindung"
+#: gtk2_ardour/ardour_ui.cc:892
+#, c-format
+msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
+msgstr "Buffer p:%<PRIu32>%% c:%<PRIu32>%%"
 
-#: gtk2_ardour/panner_ui.cc:220
-msgid "L"
-msgstr "L"
+#: gtk2_ardour/ardour_ui.cc:920
+msgid "Disk: 24hrs+"
+msgstr "HD: >24 Std."
 
-#: gtk2_ardour/panner_ui.cc:333
+#: gtk2_ardour/ardour_ui.cc:940
 #, c-format
-msgid "panner for channel %zu"
-msgstr "Pan-Regler für Kanal %zu"
+msgid "Disk: %02dh:%02dm:%02ds"
+msgstr "HD: %02dh:%02dm:%02ds"
 
-#: gtk2_ardour/panner_ui.cc:422
-msgid "Reset all"
-msgstr "Alle zurücksetzen"
+#: 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/playlist_selector.cc:58
-msgid "Playlists"
-msgstr "Wiedergabelisten"
+#: gtk2_ardour/ardour_ui.cc:1164
+msgid "open session"
+msgstr "Projekt Ã¶ffnen"
 
-#: gtk2_ardour/playlist_selector.cc:63
-msgid "Playlists grouped by track"
-msgstr "Wiedergabelisten, nach Spur gruppiert"
+#: gtk2_ardour/ardour_ui.cc:1171
+msgid "Ardour sessions"
+msgstr "Ardour-Projekte"
 
-#: gtk2_ardour/playlist_selector.cc:112
-msgid "Playlist for %1"
-msgstr "Wiedergabeliste für %1"
+#: gtk2_ardour/ardour_ui.cc:1204
+msgid "Patience is a virtue.\n"
+msgstr "Geduld ist eine Tugend.\n"
 
-#: gtk2_ardour/playlist_selector.cc:126
-msgid "Other tracks"
-msgstr "Andere Spuren"
+#: 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/playlist_selector.cc:143
-msgid "unassigned"
-msgstr "nicht zugewiesen"
+#: 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/plugin_selector.cc:50
-#: gtk2_ardour/plugin_selector.cc:190
-msgid "Name contains"
-msgstr "Name enthält"
+#: 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/plugin_selector.cc:51
-#: gtk2_ardour/plugin_selector.cc:192
-msgid "Type contains"
+#: gtk2_ardour/ardour_ui.cc:1239
+msgid "could not create %1 new audio tracks"
+msgstr "Konnte %1 neue Spuren nicht erstellen."
+
+#: 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/plugin_selector.cc:52
-#: gtk2_ardour/plugin_selector.cc:194
-msgid "Author contains"
-msgstr "Autor enthält"
+#: 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/plugin_selector.cc:53
-#: gtk2_ardour/plugin_selector.cc:196
-msgid "Library contains"
+#: 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/plugin_selector.cc:58
-msgid "ardour: plugins"
-msgstr "ardour: Plugins"
+#: gtk2_ardour/ardour_ui.cc:1685
+msgid "Unable to start the session running"
+msgstr "Konnte das aktuelle Projekt nicht starten"
 
-#: gtk2_ardour/plugin_selector.cc:70
-msgid "Available Plugins"
-msgstr "Verfügbare Plugins"
+#: 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/plugin_selector.cc:71
-msgid "Type"
-msgstr "Typ"
+#: gtk2_ardour/ardour_ui.cc:1785
+#: gtk2_ardour/ardour_ui.cc:1804
+msgid "off"
+msgstr "aus"
 
-#: gtk2_ardour/plugin_selector.cc:72
-msgid "Category"
+#: gtk2_ardour/ardour_ui.cc:1830
+msgid "Name of New Snapshot"
+msgstr "Name für neuen Schnappschuss"
+
+#: gtk2_ardour/ardour_ui.cc:1940
+msgid "Name for mix template:"
+msgstr "Name für Mixer-Vorlage"
+
+#: gtk2_ardour/ardour_ui.cc:1941
+msgid "-template"
+msgstr "Vorlage"
+
+#: 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/plugin_selector.cc:73
-msgid "Creator"
-msgstr "Ersteller"
+#: 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/plugin_selector.cc:74
-msgid "# Inputs"
-msgstr "Eingänge"
+#: 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/plugin_selector.cc:75
-msgid "# Outputs"
-msgstr "Ausgänge"
+#: 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/plugin_selector.cc:85
-msgid "Plugins to be connected"
-msgstr "Plugins, die verbunden werden"
+#: gtk2_ardour/ardour_ui.cc:2442
+#: gtk2_ardour/ardour_ui.cc:2468
+msgid "Loading Error"
+msgstr "Fehler beim Laden"
 
-#: gtk2_ardour/plugin_selector.cc:98
-msgid "Add a plugin to the effect list"
-msgstr "Plugin zur Effektliste hinzufügen"
+#: 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/plugin_selector.cc:102
-msgid "Remove a plugin from the effect list"
-msgstr "Plugin aus der Effektliste entfernen"
+#: 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/plugin_selector.cc:104
-msgid "Update available plugins"
-msgstr "Verfügbare Plugins auffrischen"
+#: gtk2_ardour/ardour_ui.cc:2542
+msgid "Could not create session in \"%1\""
+msgstr "Konnte kein Projekt in \"%1\" anlegen"
 
-#: gtk2_ardour/plugin_selector.cc:141
-msgid "Insert Plugin(s)"
-msgstr "Plugin(s) einfügen"
+#: gtk2_ardour/ardour_ui.cc:2629
+msgid "No audio files were ready for cleanup"
+msgstr "Keine Audiodateien zum Aufräumen vorhanden"
 
-#: gtk2_ardour/plugin_ui.cc:81
-msgid "Eh? LADSPA plugins don't have editors!"
+#: 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/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/ardour_ui.cc:2642
+msgid "ardour: cleanup"
+msgstr "ardour: Aufräumen"
 
-#: gtk2_ardour/plugin_ui.cc:251
-msgid "Name of New Preset:"
-msgstr "Name für neue Voreinstellung:"
+#: gtk2_ardour/ardour_ui.cc:2678
+#: gtk2_ardour/ardour_ui.cc:2684
+msgid "files were"
+msgstr "folgenden Dateien wurden"
 
-#: 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.cc:2680
+#: gtk2_ardour/ardour_ui.cc:2686
+msgid "file was"
+msgstr "folgende Datei wurde"
 
-#: gtk2_ardour/redirect_automation_time_axis.cc:95
-msgid "add automation event to "
-msgstr "Automationspunkt einfügen für"
+#: 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/redirect_box.cc:237
-msgid "New send"
-msgstr "Neuer Send"
+#: 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/redirect_box.cc:238
-msgid "Show send controls"
-msgstr "Zeige Send-Steuerung"
+#: gtk2_ardour/ardour_ui.cc:2738
+msgid "Clean Up"
+msgstr "Aufräumen"
 
-#: 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/ardour_ui.cc:2741
+msgid "CleanupDialog"
+msgstr "Aufräumdialog"
+
+#: gtk2_ardour/ardour_ui.cc:2772
+msgid "cleaned files"
+msgstr "aufgeräumte Dateien"
 
-#: gtk2_ardour/redirect_box.cc:420
+#: gtk2_ardour/ardour_ui.cc:2773
 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"
+"The following %1 %2 not in use and \n"
+"have been moved to:\n"
+"%3. \n"
 "\n"
-"This makes no sense - you are throwing away\n"
-"part of the signal."
+"Flushing the wastebasket will \n"
+"release an additional\n"
+"%4 %5bytes of disk space.\n"
 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"
+"Die %1 %2 nicht benötigt und\n"
+"verschoben nach:\n"
+"%3. \n"
 "\n"
-"Das ist nicht möglich - es würden Teile\n"
-"des Signals fehlen."
+"Wenn Sie den Müll leeren werden weitere\n"
+"%4 %5byte Speicherplatz frei.\n"
+
+#: gtk2_ardour/ardour_ui.cc:2799
+msgid "deleted file"
+msgstr "gelöschte Datei"
 
-#: gtk2_ardour/redirect_box.cc:432
+#: gtk2_ardour/ardour_ui.cc:2800
 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."
+"The following %1 %2 deleted from\n"
+"%3,\n"
+"releasing %4 %5bytes of disk space"
 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."
+"Die %1 %2 gelöscht aus\n"
+"%3,\n"
+"und machten %4 %5byte Speicherplatz frei"
+
+#: 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/redirect_box.cc:445
+#: gtk2_ardour/ardour_ui.cc:2949
 msgid ""
-"You attempted to add a plugin (%1).\n"
+"The disk system on your computer\n"
+"was not able to keep up with Ardour.\n"
 "\n"
-"The I/O configuration doesn't make sense:\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"
-"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"
+"Die Daten konnten nicht schnell genug geschrieben\n"
+"werden, um die Aufnahme fortzuführen.\n"
+
+#: gtk2_ardour/ardour_ui.cc:2968
+msgid ""
+"The disk system on your computer\n"
+"was not able to keep up with Ardour.\n"
 "\n"
-"Ardour does not understand what to do in such situations.\n"
+"Specifically, it failed to read data from disk\n"
+"quickly enough to keep up with playback.\n"
 msgstr ""
-"Sie möchten ein Plugin hinzufügen (%1).\n"
+"Ihre Festplatte war nicht schnell genug,\n"
+"um Ardour zu folgen.\n"
 "\n"
-"Die Ein-/Ausgangskonfiguration ist aber nicht möglich:\n"
+"Die Daten konnten nicht schnell genug gelesen\n"
+"werden, um die Wiedergabe aufrechtzuerhalten.\n"
+
+#: gtk2_ardour/ardour_ui.cc:3008
+msgid "Crash Recovery"
+msgstr "Wiederherstellung"
+
+#: 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"
-"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"
+"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 mit dieser Situation nicht umgehen.\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/redirect_box.cc:542
-msgid "Pre-fader inserts, sends & plugins:"
-msgstr "Pre-Fader Inserts, Sends & Plugins:"
+#: gtk2_ardour/ardour_ui.cc:3021
+msgid "Ignore crash data"
+msgstr "Daten verwerfen"
 
-#: gtk2_ardour/redirect_box.cc:545
-msgid "Post-fader inserts, sends & plugins:"
-msgstr "Post-Fader Inserts, Sends & Plugins:"
+#: gtk2_ardour/ardour_ui.cc:3022
+msgid "Recover from crash"
+msgstr "Daten wiederherstellen"
 
-#: gtk2_ardour/redirect_box.cc:711
+#: gtk2_ardour/ardour_ui.cc:3042
+msgid "Sample Rate Mismatch"
+msgstr "Samplerate passt nicht"
+
+#: gtk2_ardour/ardour_ui.cc:3043
 msgid ""
-"You cannot reorder this set of redirects\n"
-"in that way because the inputs and\n"
-"outputs do not work correctly."
+"This session was created with a sample rate of %1 Hz\n"
+"\n"
+"The audioengine is currently running at %2 Hz\n"
 msgstr ""
-"Sie können diese Gruppe von Redirects\n"
-"nicht auf diese Weise verändern, denn\n"
-"die Ein-/Ausgänge arbeiten ncht korrekt."
+"Dieses Projekt wurde mit einer Samplrate von %1 Hz erstellt.\n"
+"\n"
+"Die Audioengine läuft derzeit mit %2 Hz.\n"
 
-#: gtk2_ardour/redirect_box.cc:858
-msgid "rename redirect"
-msgstr "Redirect umbenennen"
+#: gtk2_ardour/ardour_ui.cc:3052
+msgid "Do not load session"
+msgstr "Projekt nicht laden"
 
-#: 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/ardour_ui.cc:3053
+msgid "Load session anyway"
+msgstr "Projekt trotzdem laden"
 
-#: 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/ardour_ui.cc:3074
+msgid "Could not disconnect from JACK"
+msgstr "Konnte Verbindung mit JACK nicht trennen"
 
-#: 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/ardour_ui.cc:3087
+msgid "Could not reconnect to JACK"
+msgstr "Konnte nicht erneut zu JACK verbinden"
 
-#: 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/audio_clock.cc:1941
+msgid "Minutes:Seconds"
+msgstr "Minuten:Sekunden"
 
-#: 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)"
-msgstr ""
-"Wollen Sie wirklich alle Post-Fader-Redirects von diesem Bus entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
+#: 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/redirect_box.cc:1023
-msgid "Yes, remove them all"
-msgstr "Ja, alle löschen"
+#: gtk2_ardour/plugin_selector.cc:60
+msgid "ardour: plugins"
+msgstr "ardour: Plugins"
 
-#: gtk2_ardour/redirect_box.cc:1173
-msgid "New Plugin ..."
-msgstr "Plugin einfügen..."
+#: gtk2_ardour/plugin_selector.cc:77
+msgid "Fav"
+msgstr "Fav"
 
-#: gtk2_ardour/redirect_box.cc:1175
-msgid "New Insert"
-msgstr "Insert einfügen"
+#: gtk2_ardour/plugin_selector.cc:78
+msgid "Available Plugins"
+msgstr "Verfügbare Plugins"
 
-#: gtk2_ardour/redirect_box.cc:1177
-msgid "New Send ..."
-msgstr "Send einfügen..."
+#: gtk2_ardour/plugin_selector.cc:79
+msgid "Type"
+msgstr "Typ"
 
-#: gtk2_ardour/redirect_box.cc:1202
-msgid "Activate all"
-msgstr "Alle aktivieren"
+#: gtk2_ardour/plugin_selector.cc:80
+msgid "Category"
+msgstr "Kategorie"
 
-#: gtk2_ardour/redirect_box.cc:1203
-msgid "Deactivate all"
-msgstr "Alle deaktivieren"
+#: gtk2_ardour/plugin_selector.cc:81
+msgid "Creator"
+msgstr "Ersteller"
 
-#: gtk2_ardour/redirect_box.cc:1396
-msgid "%1: %2 (by %3)"
-msgstr "%1: %2 (by %3)"
+#: gtk2_ardour/plugin_selector.cc:82
+msgid "# Inputs"
+msgstr "Eingänge"
 
-#: gtk2_ardour/audio_region_editor.cc:48
-msgid "NAME:"
-msgstr "Name:"
+#: gtk2_ardour/plugin_selector.cc:83
+msgid "# Outputs"
+msgstr "Ausgänge"
 
-#: gtk2_ardour/audio_region_editor.cc:49
-msgid "play"
-msgstr "Play"
+#: gtk2_ardour/plugin_selector.cc:100
+msgid "Plugins to be connected"
+msgstr "Plugins, die verbunden werden"
 
-#: gtk2_ardour/audio_region_editor.cc:68
-msgid "audition this region"
-msgstr "Diese Region Vorhören"
+#: gtk2_ardour/plugin_selector.cc:113
+msgid "Add a plugin to the effect list"
+msgstr "Plugin zur Effektliste hinzufügen"
 
-#: gtk2_ardour/audio_region_editor.cc:83
-msgid "START:"
-msgstr "Beginn:"
+#: gtk2_ardour/plugin_selector.cc:117
+msgid "Remove a plugin from the effect list"
+msgstr "Plugin aus der Effektliste entfernen"
 
-#: gtk2_ardour/audio_region_editor.cc:85
-msgid "END:"
-msgstr "Ende:"
+#: gtk2_ardour/plugin_selector.cc:119
+msgid "Update available plugins"
+msgstr "Verfügbare Plugins auffrischen"
 
-#: gtk2_ardour/audio_region_editor.cc:87
-msgid "LENGTH:"
-msgstr "Längess:"
+#: gtk2_ardour/plugin_selector.cc:156
+msgid "Insert Plugin(s)"
+msgstr "Plugin(s) einfügen"
 
-#: gtk2_ardour/audio_region_editor.cc:123
-msgid "Region %1"
-msgstr "Region %1"
+#: gtk2_ardour/plugin_selector.cc:203
+#: gtk2_ardour/plugin_selector.cc:450
+msgid "Favorites only"
+msgstr "nur Favoriten"
 
-#: gtk2_ardour/audio_region_editor.cc:204
-msgid "change region start position"
-msgstr "Startposition der Region Ã¤ndern"
+#: gtk2_ardour/plugin_selector.cc:209
+msgid "Name contains"
+msgstr "Name enthält"
 
-#: gtk2_ardour/audio_region_editor.cc:221
-msgid "change region end position"
-msgstr "Endposition der Region Ã¤ndern"
+#: gtk2_ardour/plugin_selector.cc:211
+msgid "Type contains"
+msgstr "Typ enthält"
 
-#: gtk2_ardour/audio_region_editor.cc:242
-msgid "change region length"
-msgstr "Länge der Region verändern"
+#: gtk2_ardour/plugin_selector.cc:213
+msgid "Author contains"
+msgstr "Autor enthält"
 
-#: gtk2_ardour/audio_region_view.cc:922
-msgid "add gain control point"
-msgstr "Lautstärkekurve bearbeiten"
+#: gtk2_ardour/plugin_selector.cc:215
+msgid "Library contains"
+msgstr "Kategorie enthält"
 
-#: gtk2_ardour/route_params_ui.cc:85
-msgid "Tracks/Buses"
-msgstr "Spuren/Busse"
+#: gtk2_ardour/plugin_selector.cc:502
+msgid "Favorites"
+msgstr "Favoriten"
 
-#: gtk2_ardour/route_params_ui.cc:105
-msgid "Pre-fader Redirects"
-msgstr "Pre-Fader Redirects"
+#: gtk2_ardour/plugin_selector.cc:503
+msgid "Plugin Manager"
+msgstr "Alle Plugins ..."
 
-#: gtk2_ardour/route_params_ui.cc:106
-msgid "Post-fader Redirects"
-msgstr "Post-Fader Redirects"
+#: gtk2_ardour/tempo_dialog.cc:36
+msgid "edit tempo"
+msgstr "Tempo bearbeiten"
 
-#: 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/tempo_dialog.cc:42
+#: gtk2_ardour/tempo_dialog.cc:61
+msgid "Bar"
+msgstr "Takt"
 
-#: gtk2_ardour/route_params_ui.cc:452
-msgid "NO TRACK"
-msgstr "KEINE SPUR"
+#: gtk2_ardour/tempo_dialog.cc:43
+#: gtk2_ardour/tempo_dialog.cc:62
+msgid "Beat"
+msgstr "Schlag"
 
-#: 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/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/route_ui.cc:156
-msgid "mute change"
-msgstr "Mute Ã¤ndern"
+#: 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/route_ui.cc:234
-#: gtk2_ardour/route_ui.cc:245
-msgid "solo change"
-msgstr "Solo Ã¤ndern"
+#: 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/route_ui.cc:303
-msgid "Not connected to JACK - cannot engage record"
-msgstr "Nicht mit JACK verbunden - konnte die Aufnahme nicht starten"
+#: 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/route_ui.cc:317
-msgid "rec-enable change"
-msgstr "Aufnahmestatus Ã¤ndern"
+#: 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/route_ui.cc:555
-msgid "Solo-safe"
-msgstr "Solo-Safe"
+#: 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/route_ui.cc:577
-msgid "Pre Fader"
-msgstr "Pre Fader"
+#: 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/route_ui.cc:584
-msgid "Post Fader"
-msgstr "Post Fader"
+#: 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/route_ui.cc:591
-msgid "Control Outs"
-msgstr "Vorhörausgang"
+#: gtk2_ardour/tempo_dialog.cc:110
+msgid "Beats Per Minute:"
+msgstr "Schläge pro Minute"
 
-#: gtk2_ardour/route_ui.cc:598
-msgid "Main Outs"
-msgstr "Main Ausgänge"
+#: gtk2_ardour/tempo_dialog.cc:150
+msgid "Tempo Begins at:"
+msgstr "Tempo beginnt bei:"
 
-#: gtk2_ardour/route_ui.cc:635
-msgid "mix group solo  change"
-msgstr "Mixergruppe Solo-Status Ã¤ndern"
+#: gtk2_ardour/tempo_dialog.cc:246
+#: gtk2_ardour/tempo_dialog.cc:478
+msgid "garbaged note type entry (%1)"
+msgstr "Fehlerhafter Notentyp (%1)"
 
-#: gtk2_ardour/route_ui.cc:674
-msgid "mix group mute change"
-msgstr "Mixergruppe Mute-Status Ã¤ndern"
+#: 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/route_ui.cc:691
-msgid "mix group rec-enable change"
-msgstr "Mixergruppe Aufnahmestatus Ã¤ndern"
+#: gtk2_ardour/tempo_dialog.cc:317
+msgid "thirtq-second (32)"
+msgstr "Zweiunddreissigstel (32)"
 
-#: gtk2_ardour/route_ui.cc:709
-#: gtk2_ardour/visual_time_axis.cc:241
-msgid "ardour: color selection"
-msgstr "ardour: Farbe auswählen"
+#: gtk2_ardour/tempo_dialog.cc:338
+msgid "Note Value:"
+msgstr "Notenwert"
 
-#: gtk2_ardour/route_ui.cc:785
-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)"
-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/tempo_dialog.cc:339
+msgid "Beats Per Bar:"
+msgstr "Schläge pro Takt"
 
-#: 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/tempo_dialog.cc:357
+msgid "Meter Begins at Bar:"
+msgstr "Neue Taktart beginnt bei Takt:"
 
-#: gtk2_ardour/route_ui.cc:812
-msgid "New Name: "
-msgstr "Neuer Name: "
+#: gtk2_ardour/option_editor.cc:82
+msgid "Limit undo history"
+msgstr "Begrenze Aktionsliste"
 
-#: 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/option_editor.cc:83
+msgid "Save undo history"
+msgstr "Aktionsliste speichern"
 
-#: gtk2_ardour/sfdb_ui.cc:91
-#: gtk2_ardour/sfdb_ui.cc:100
-msgid "as new tracks"
-msgstr "als neue Spuren"
+#: gtk2_ardour/option_editor.cc:88
+msgid "SMPTE offset is negative"
+msgstr "Negatives SMPTE-Offset"
 
-#: gtk2_ardour/sfdb_ui.cc:93
-msgid "to selected tracks"
-msgstr "zu ausgewählten Spuren"
+#: gtk2_ardour/option_editor.cc:89
+msgid "Timecode source is sample-clock synced"
+msgstr "Timecode-Quelle ist mit Sample-Clock synchronisiert"
 
-#: gtk2_ardour/sfdb_ui.cc:95
-msgid "to region list"
-msgstr "zur Liste der Regionen"
+#: gtk2_ardour/option_editor.cc:98
+msgid "Add new MIDI port"
+msgstr "Neuen MIDI-Port hinzufügen"
 
-#: gtk2_ardour/sfdb_ui.cc:97
-msgid "as new tape tracks"
-msgstr "als neue Tape-Spuren"
+#: gtk2_ardour/option_editor.cc:154
+msgid "Paths/Files"
+msgstr "Pfade"
 
-#: gtk2_ardour/sfdb_ui.cc:109
-msgid "Auto-play"
-msgstr "Auto-Play"
+#: gtk2_ardour/option_editor.cc:155
+msgid "Kbd/Mouse"
+msgstr "Tastatur/Maus"
 
-#: 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/option_editor.cc:159
+msgid "Misc"
+msgstr "Sonstiges"
 
-#: gtk2_ardour/sfdb_ui.cc:129
-msgid "Length:"
-msgstr "Länge:"
+#: gtk2_ardour/option_editor.cc:162
+msgid "MIDI"
+msgstr "MIDI"
 
-#: gtk2_ardour/sfdb_ui.cc:130
-msgid "Timestamp:"
-msgstr "Zeitstempel:"
+#: gtk2_ardour/option_editor.cc:232
+msgid "session RAID path"
+msgstr "Projektverzeichnis (RAID)"
 
-#: gtk2_ardour/sfdb_ui.cc:131
-msgid "Format:"
-msgstr "Format:"
+#: 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/sfdb_ui.cc:132
-msgid "Channels:"
-msgstr "Kanäle:"
+#: gtk2_ardour/option_editor.cc:281
+msgid "Font Scaling"
+msgstr "Schriftskalierung"
 
-#: 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/option_editor.cc:295
+msgid "Short crossfade length (msecs)"
+msgstr "Länge für kurze Crossfades (ms)"
 
-#: gtk2_ardour/sfdb_ui.cc:165
-msgid "Tags:"
-msgstr "Stichworte:"
+#: gtk2_ardour/option_editor.cc:307
+msgid "Destructive crossfade length (msecs)"
+msgstr "Länge für destruktive Crossfades (ms)"
 
-#: gtk2_ardour/sfdb_ui.cc:175
-msgid "Play (double click)"
-msgstr "Wiedergabe (Doppelklick)"
+#: gtk2_ardour/option_editor.cc:326
+msgid "History depth (commands)"
+msgstr "Anzahl der Befehle, die rückgängig gemacht werden können"
 
-#: gtk2_ardour/sfdb_ui.cc:229
-#: gtk2_ardour/sfdb_ui.cc:230
-#: gtk2_ardour/sfdb_ui.cc:231
-msgid "n/a"
-msgstr ""
+#: gtk2_ardour/option_editor.cc:347
+msgid "Saved history depth (commands)"
+msgstr "Anzahl der Befehle, die im Verlauf gespeichert werden"
 
-#: gtk2_ardour/sfdb_ui.cc:306
-msgid "Could not read file: %1 (%2)."
-msgstr "Konnte Datei nicht lesen: %1 (%2)."
+#: gtk2_ardour/option_editor.cc:445
+msgid "SMPTE Offset"
+msgstr "SMPTE Offset"
 
-#: gtk2_ardour/sfdb_ui.cc:326
-msgid "Could not access soundfile: "
-msgstr "Konnte auf Audiodatei nicht zugreifen: "
+#: gtk2_ardour/option_editor.cc:518
+msgid "Inbound MMC Device ID"
+msgstr "ID des ausgehenden MMC-Geräts"
 
-#: gtk2_ardour/sfdb_ui.cc:372
-msgid "SoundFileBox: Could not tokenize string: "
-msgstr ""
+#: gtk2_ardour/option_editor.cc:528
+msgid "Outbound MMC Device ID"
+msgstr "ID des eingehenden MMC-Geräts"
 
-#: gtk2_ardour/sfdb_ui.cc:392
-msgid "Search"
-msgstr "Suchen"
+#: gtk2_ardour/option_editor.cc:538
+#, fuzzy
+msgid "Startup program change"
+msgstr "Bereich beginnen"
 
-#: gtk2_ardour/sfdb_ui.cc:421
-msgid "Paths"
-msgstr "Pfade"
+#: gtk2_ardour/option_editor.cc:577
+msgid "Port"
+msgstr "Port"
 
-#: gtk2_ardour/sfdb_ui.cc:425
-msgid "Browse Files"
-msgstr "Durchsuchen"
+#: gtk2_ardour/option_editor.cc:581
+msgid "Offline"
+msgstr "Offline"
 
-#: gtk2_ardour/sfdb_ui.cc:426
-msgid "Search Tags"
-msgstr "Stichwortsuche"
+#: gtk2_ardour/option_editor.cc:585
+msgid ""
+"Trace\n"
+"Input"
+msgstr ""
+"Verfolge\n"
+"Eingang"
 
-#: gtk2_ardour/sfdb_ui.cc:434
-msgid "Audio files"
-msgstr "Audiodateien"
+#: gtk2_ardour/option_editor.cc:589
+msgid ""
+"Trace\n"
+"Output"
+msgstr ""
+"Verfolge\n"
+"Ausgang"
 
-#: gtk2_ardour/sfdb_ui.cc:437
-msgid "All files"
-msgstr "Alle Dateien"
+#: gtk2_ardour/option_editor.cc:593
+msgid "MTC"
+msgstr "MTC"
 
-#: gtk2_ardour/sfdb_ui.cc:598
-msgid "SoundFileBrowser: Could not tokenize string: "
+#: gtk2_ardour/option_editor.cc:597
+msgid "MMC"
+msgstr "MMC"
+
+#: gtk2_ardour/option_editor.cc:601
+msgid ""
+"MIDI Parameter\n"
+"Control"
 msgstr ""
+"MIDI Parameter\n"
+"Steuerung"
 
-#: 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/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/sfdb_ui.cc:769
-#: gtk2_ardour/sfdb_ui.cc:1092
-msgid "one track per channel"
-msgstr "eine Spur pro Kanal"
+#: gtk2_ardour/option_editor.cc:647
+#: gtk2_ardour/option_editor.cc:648
+#: gtk2_ardour/option_editor.cc:860
+msgid "offline"
+msgstr "Offline"
 
-#: gtk2_ardour/sfdb_ui.cc:777
-#: gtk2_ardour/sfdb_ui.cc:1094
-#, fuzzy
-msgid "sequence files"
-msgstr "aufgeräumte Dateien"
+#: gtk2_ardour/option_editor.cc:764
+msgid "output"
+msgstr "Ausgang"
 
-#: 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/option_editor.cc:935
+msgid "Choose Click"
+msgstr "Click auswählen"
 
-#: gtk2_ardour/sfdb_ui.cc:786
-#: gtk2_ardour/sfdb_ui.cc:1096
-msgid "one region per file"
-msgstr "eine Region pro Datei"
+#: gtk2_ardour/option_editor.cc:957
+msgid "Choose Click Emphasis"
+msgstr "Click-Betonung auswählen"
 
-#: gtk2_ardour/sfdb_ui.cc:789
-#: gtk2_ardour/sfdb_ui.cc:1097
-msgid "one region per channel"
-msgstr "eine Region pro Kanal"
+#: gtk2_ardour/option_editor.cc:1056
+msgid "Click audio file"
+msgstr "Audiodatei für Click"
+
+#: gtk2_ardour/option_editor.cc:1062
+msgid "Click emphasis audiofile"
+msgstr "Audiodatei für Click-Betonung"
 
-#: gtk2_ardour/sfdb_ui.cc:847
+#: gtk2_ardour/option_editor.cc:1111
 msgid ""
-"One or more of the selected files\n"
-"cannot be used by Ardour"
+"The auditioner is a dedicated mixer strip used\n"
+"for listening to specific regions outside the context\n"
+"of the overall mix. It can be connected just like any\n"
+"other mixer strip."
 msgstr ""
-"Eine oder mehrere der ausgewählten Dateien\n"
-"können nicht von Ardour benutzt werden"
+"Der Vorhör-Bus ist ein spezieller Mixer-Kanal,\n"
+"mit dem ausgewählte Regionen unabhängig\n"
+"vom Gesamt-Mix abgehört werden können.\n"
+"Dieser Bus lässt sich wie jeder andere Mixer-Kanal\n"
+"verbinden."
 
-#: gtk2_ardour/sfdb_ui.cc:978
-msgid "Copy files to session"
-msgstr "Kopiere Dateien zum Projekt"
+#: gtk2_ardour/option_editor.cc:1203
+msgid "Edit using"
+msgstr "Bearbeiten mit"
 
-#: gtk2_ardour/sfdb_ui.cc:994
-#: gtk2_ardour/sfdb_ui.cc:1129
-msgid "use file timestamp"
-msgstr "verwende Datei-Zeitstempel"
+#: gtk2_ardour/option_editor.cc:1210
+#: gtk2_ardour/option_editor.cc:1237
+msgid "+ button"
+msgstr "und Maustaste"
 
-#: gtk2_ardour/sfdb_ui.cc:995
-#: gtk2_ardour/sfdb_ui.cc:1131
-msgid "at edit point"
-msgstr "am Arbeitspunkt"
+#: gtk2_ardour/option_editor.cc:1230
+msgid "Delete using"
+msgstr "Entfernen mit"
 
-#: gtk2_ardour/sfdb_ui.cc:996
-#: gtk2_ardour/sfdb_ui.cc:1133
-msgid "at playhead"
-msgstr "am Positionszeiger"
+#: gtk2_ardour/option_editor.cc:1257
+msgid "Ignore snap using"
+msgstr "Einrasten Ã¼bergehen mit"
 
-#: gtk2_ardour/sfdb_ui.cc:997
-msgid "at session start"
-msgstr "am Projektanfang"
+#: gtk2_ardour/option_editor.cc:1274
+msgid "Keyboard layout"
+msgstr "Tastaturlayout"
 
-#: gtk2_ardour/sfdb_ui.cc:1002
-msgid "Add files:"
-msgstr "Dateien hinzufügen:"
+#: gtk2_ardour/rhythm_ferret.cc:50
+msgid "Operation"
+msgstr "Aktionen"
 
-#: gtk2_ardour/sfdb_ui.cc:1024
-msgid "Insert:"
-msgstr "Einfügen:"
+#: gtk2_ardour/rhythm_ferret.cc:51
+msgid "Selection"
+msgstr "Auswahl"
 
-#: gtk2_ardour/sfdb_ui.cc:1037
-msgid "Mapping:"
-msgstr ""
+#: gtk2_ardour/rhythm_ferret.cc:52
+msgid "Analysis"
+msgstr "Analyse"
 
-#: gtk2_ardour/sfdb_ui.cc:1055
-msgid "Conversion Quality:"
-msgstr "Konvertierungsqualität:"
+#: gtk2_ardour/rhythm_ferret.cc:55
+msgid "Set Tempo Map"
+msgstr "Tempowechsel einfügen"
 
-#: gtk2_ardour/sfdb_ui.cc:1067
-#: gtk2_ardour/sfdb_ui.cc:1145
-msgid "Best"
-msgstr "bestmöglich"
+#: gtk2_ardour/rhythm_ferret.cc:56
+msgid "Conform Region"
+msgstr "Region angleichen"
 
-#: gtk2_ardour/sfdb_ui.cc:1068
-#: gtk2_ardour/sfdb_ui.cc:1147
-msgid "Good"
-msgstr "gut"
+#: gtk2_ardour/rhythm_ferret.cc:57
+msgid "Mode"
+msgstr "Modus"
 
-#: gtk2_ardour/sfdb_ui.cc:1069
-#: gtk2_ardour/sfdb_ui.cc:1149
-msgid "Quick"
-msgstr "schnell"
+#: gtk2_ardour/rhythm_ferret.cc:60
+msgid "Threshold"
+msgstr "Schwellwert"
 
-#: gtk2_ardour/sfdb_ui.cc:1093
-msgid "merge files"
-msgstr "Dateien zusammenfügen"
+#: gtk2_ardour/rhythm_ferret.cc:63
+msgid "Sensitivity"
+msgstr "Empfindlichkeit"
 
-#: gtk2_ardour/sfdb_ui.cc:1170
-msgid "programming error: %1 (%2)"
-msgstr "Programmierfehler: %1 (%2)"
+#: gtk2_ardour/rhythm_ferret.cc:64
+msgid "Analyze"
+msgstr "Daten analysieren"
 
-#: gtk2_ardour/tempo_dialog.cc:36
-msgid "edit tempo"
-msgstr "Tempo bearbeiten"
+#: gtk2_ardour/rhythm_ferret.cc:65
+msgid "Detection function"
+msgstr "Erkennungsfunktion"
 
-#: gtk2_ardour/tempo_dialog.cc:39
-#: gtk2_ardour/tempo_dialog.cc:59
-msgid "Beats per minute"
-msgstr "Schläge pro Minute"
+#: gtk2_ardour/rhythm_ferret.cc:68
+msgid "Peak Threshold"
+msgstr "Laut-Schwellwert (dB)"
 
-#: gtk2_ardour/tempo_dialog.cc:40
-msgid "BPM denominator"
-msgstr "BPM Zählzeit"
+#: gtk2_ardour/rhythm_ferret.cc:71
+msgid "Silent Threshold (dB)"
+msgstr "Ruhe-Schwellwert (dB)"
 
-#: 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/rhythm_ferret.cc:74
+msgid "Trigger gap (msecs)"
+msgstr "Mindestauslöseabstand (msec)"
 
-#: 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/rhythm_ferret.cc:394
+msgid "split regions (rhythm ferret)"
+msgstr "Regionen teilen (rhythm ferret)"
 
-#: 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/ardour_ui_dependents.cc:74
+msgid "Setup Editor"
+msgstr "Editor laden"
 
-#: 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/ardour_ui_dependents.cc:76
+msgid "Setup Mixer"
+msgstr "Mixer laden"
 
-#: 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/ardour_ui_dependents.cc:81
+msgid "Reload Session History"
+msgstr "Projektverlauf laden"
 
-#: 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/splash.cc:42
+msgid "Ardour loading ..."
+msgstr "Ardour startet ..."
 
-#: 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/playlist_selector.cc:58
+msgid "Playlists"
+msgstr "Wiedergabelisten"
 
-#: 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/playlist_selector.cc:63
+msgid "Playlists grouped by track"
+msgstr "Wiedergabelisten, nach Spur gruppiert"
 
-#: 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/playlist_selector.cc:73
+#: gtk2_ardour/ardour_ui_dialogs.cc:169
+msgid "close"
+msgstr "Schließen"
 
-#: 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/playlist_selector.cc:112
+msgid "Playlist for %1"
+msgstr "Wiedergabeliste für %1"
 
-#: gtk2_ardour/tempo_dialog.cc:225
-#: gtk2_ardour/tempo_dialog.cc:479
-msgid "garbaged note type entry (%1)"
-msgstr "Fehlerhafter Notentyp (%1)"
+#: gtk2_ardour/playlist_selector.cc:126
+msgid "Other tracks"
+msgstr "Andere Spuren"
 
-#: 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/playlist_selector.cc:143
+msgid "unassigned"
+msgstr "nicht zugewiesen"
 
-#: gtk2_ardour/tempo_dialog.cc:253
-#: gtk2_ardour/tempo_dialog.cc:271
-msgid "Meter denominator"
-msgstr "Takteinteilung"
+#: gtk2_ardour/imageframe_time_axis.cc:285
+msgid "0.5 seconds"
+msgstr "0,5 Sekunden"
 
-#: gtk2_ardour/tempo_dialog.cc:254
-#: gtk2_ardour/tempo_dialog.cc:272
-msgid "Beats per bar"
-msgstr "Schläge pro Takt"
+#: gtk2_ardour/imageframe_time_axis.cc:300
+msgid "Remove Frame"
+msgstr "Frame löschen"
 
-#: gtk2_ardour/tempo_dialog.cc:303
+#: gtk2_ardour/imageframe_time_axis.cc:303
 #, fuzzy
-msgid "thirtq-second (32)"
-msgstr "Zweiunddreissigstel (32)"
-
-#: gtk2_ardour/theme_manager.cc:51
-msgid "Object"
+msgid "Image Frame"
 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/main.cc:187
+msgid "cannot create user ardour folder %1 (%2)"
+msgstr "Kann benutzerspezifischen Ardour-Ordner %1 nicht erstellen:  %2"
+
+#: gtk2_ardour/main.cc:195
+msgid "cannot open pango.rc file %1"
+msgstr "kann die Datei pango.rc nicht Ã¶ffnen %1"
+
+#: gtk2_ardour/main.cc:244
+msgid "SIGPIPE received - JACK has probably died"
+msgstr "SIGPIPE empfangen - möglicherweise ist JACK abgestürzt"
+
+#: gtk2_ardour/main.cc:292
+msgid "Ardour/GTK "
+msgstr "Ardour/GTK "
 
-#: gtk2_ardour/time_axis_view.cc:111
-msgid "gTortnam"
+#: gtk2_ardour/main.cc:294
+msgid ""
+"\n"
+"   (built using "
 msgstr ""
+"\n"
+"   (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"
 
index 88bd7d0b1524f3bfc9d1421a444abb745bba1279..fe648352d0ed4ba02e2f4b1868dc3ba206085630 100644 (file)
@@ -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);
                
index 74d781a0d44092071a736c9ab647206274b5169d..92a301633a93813672f6d56bab9e3668896b9919 100644 (file)
@@ -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>);
index 253c033eb8c27626acf5aa3563fcb6b326ac1fdb..0af92a592a6442a2c2abf36db4ebea99a1d34e86 100644 (file)
@@ -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()
index a36a6bc35a1107e2445ae1743bf1ee6620227037..8e462c984e40a6c88e82e7d82027a874150baa42 100644 (file)
@@ -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);
index 26c99488cccc37d0a342bd38aa6ae8d6b75285e7..c53e205b495041491f820a276815f48cdc1aeb24 100644 (file)
@@ -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
index 67aa409dda01729c8e8dce42c2b6f84d3666565c..c784b9766801f2ae56ba06b0e14a7a6ff045400c 100644 (file)
@@ -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;
index 6ce6edd303903c3f5eecdf9cf1664d5a23752056..e99ea25cbdca7a889f6391fd196c9d07c90488c1 100644 (file)
@@ -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 ()
index 5a7298c51584222b84195b8bc64152e2ad994ae3..0d6356970e78309f9bc1624d46fc555d2d19fbdf 100644 (file)
@@ -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 ();
index 915c3c6d3c208d4a75ccb5eeb5d69179f02c1370..799e74898b413c316bf219f500de613a6d2a545e 100644 (file)
@@ -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 ();
        
index 8730c55f58fd16dec9ece4063d7c760d8f2c890d..9658af06fcf78a4c033a595ce432f3ddee9fd8a9 100644 (file)
@@ -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
index 3b1b4cb12b81271c06fe50e5f5db34d21405fcf8..fe974892415a810c9ab7b2d287e0c76e00ae3bf1 100644 (file)
@@ -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 */
 
index 9968fa9ea0ac629ba6aa039ca6155245072f8673..3735791eb815263e19548f892e5b7cafedef6657 100644 (file)
@@ -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();
        }
 
index 1887c6d7ea651dc01283abd841f7c7140a9f1cfa..7da878b9f358818e5f3730bd7e775948e0bf1b1a 100644 (file)
-/*
-    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);
 }
 
index 277e4dba445d9f0718741d7b68c5de25c18fd689..8c9576f95178bc6cb18fc63ecfa7a63ad52eee4f 100644 (file)
@@ -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;
 
index e02117385aaa33737720c45c6864b50a7c7b0a62..64690174694adc74b3e031b6891db8382fc840f8 100644 (file)
@@ -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;
index 37a0ade3fe120e98d62481b6ebe25447b41f89fa..d7cf0974ab8ee1023e717e7889364d79ec851ab6 100644 (file)
@@ -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;
index d083b17a1eee7958c0ad377d78855e29f9ed3237..f625ae958e1ff1b12d4995030c10634dce394e86 100644 (file)
@@ -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 (file)
index 0000000..450abfb
--- /dev/null
@@ -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 (file)
index 0000000..20b4f92
--- /dev/null
@@ -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>
index 2cfb4f3031523145d932069c97dcce6e811fd7ee..ce22bfe466c85234ece0e95552fa0851b2bb98bf 100644 (file)
@@ -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;
        }
index c4f65ec81ed4fd784d4999089cb13cefbf8987bf..7a3a5c8975174926cac25f8f5179f1840236b9a5 100644 (file)
@@ -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()
index 2e14c74b86e267016340b9d7764e5f41c33b3694..28eeeb190cf60afb4057c26d21f0b6be19806c54 100644 (file)
@@ -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 ();
index 71eaf60ade8cf7073cc0235af981cf4be54221bd..9a41e8e093f82ceb6de9dab2cd9aab6e05727421 100644 (file)
@@ -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);
index b8cde44b77b877ab737cda25e7bd514cd5bb26a6..5ebe22e312d276b6290166b45f8b242e1e068eb3 100644 (file)
@@ -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);
 };
index db481b2f992717466dd01a2495ecf3d48164b544..4cb6d1a79acba3736f3913dcda4aa98b7e2f8d97 100644 (file)
@@ -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();
        }
index d5aff74ab982d2020b540f8a9a23de4ad9265cb6..923967448cf572b18035f7c79edd1fdca9233472 100644 (file)
@@ -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&);
        
index 5565e204018b0803cc7ae9b781d43df255ffae65..bbf766d877a2cd3ec8a199cabcb51b216980c14e 100644 (file)
@@ -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)
index d7c2f4bd85154075f93dd1e04322ef93e4f7fbf6..33759feb9167ca7934afac3ad6bbea9cdaf8f457 100644 (file)
@@ -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);
 };
 
 }
index d3c8341623ce2c399c6a16adb7ce85c06587dc25..66f5d2be355eab35a85a2545f6478ac63927fade 100644 (file)
@@ -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);
index 12437ba9984f14c893be0ee1fe74298086284462..b88f3b225a566190c7794540f857761215a92a3c 100644 (file)
@@ -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);
index f963d3b2cffa2384067382af590816575857af9a..28d15b70906e068082667b96c5226d1e780006fd 100644 (file)
@@ -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;
index 017a78a015078c528bfce08d0c75667a080584ef..16db305f943c62d4ba9bd3de6f79a1606a9749db 100644 (file)
@@ -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
index ff8f48cd38e8f04d70376e386fc3814110ce430e..ffeacd30177b4bfc437ba5aaf2ff59d815f74c1d 100644 (file)
@@ -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;
index a44b97b5da8fab0bb22c2ee7be0061bb10447699..6c11d55e50cf0fe8b62136becc5905959e8004bf 100644 (file)
@@ -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
index fedd83ba68aa455415439237de3c143efbeca139..b524c5d5871f6e1640051c00bcbb14901b2738e4 100644 (file)
@@ -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 {
index d30899caf8605b44490007c82662f1db3002ab9f..816f08cbd5ec99b8b55c282152738185e78b39e4 100644 (file)
@@ -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;
index 9c7ea0f13fda9b664c628989686ac27ebc0f7fb7..16d5e390f8610294f87dbe91ecd824bf7501d1af 100644 (file)
@@ -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;
 
        }
index 788017555aee3253d721d88a7593604663523e1e..8b5d4ba42cfd76ce39fb6ad69c42b9a7d5bb4c69 100644 (file)
@@ -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;
index c5c04bc33df0ad9d4f839e9fbe4baff3166ee271..5d4748c2d4bffbdf7f4f41e94a4c83a22a8ff954 100644 (file)
@@ -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;
 }
index 4383f1a6965dd0fe5a9777bb97739fef6618044a..a6aceb784219cd8229163fc730fc0d4e34fdb3b5 100644 (file)
@@ -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
 
index 05ea7765f0a25bf7153b60bc2b13f1befc4a99ea..3a7b525db6ab48c367d314b8263b659c75f9e371 100644 (file)
@@ -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());
index a2a289737cd90f179318c08562a3d25b7ae7badc..c8db1a6b0d9c0f882a716ad663ba5e0fb03b087c 100644 (file)
@@ -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));
index 04b4543b7163091407f9644d813fa09397ec54d5..8be2e3b8b643ef8a1e0a23d4229666ff4bcf8846 100644 (file)
@@ -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())
index 3f6e60af33a3d9eed877ae6cda7250f3d089281b..6b3871c8145505b4eae9fd96c710902ecfbd48d6 100644 (file)
 #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);
index e245712feee8acb441b4554be4173b39988adaff..66023f1f4d67979995e0a5efd2675c58d89a286e 100644 (file)
@@ -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
 {
index 0a0fbc15292804e82f7eb27cc5d46fe707a9d708..1a8cd589da22f075f3c84bdeee592c2fec3d9c17 100644 (file)
@@ -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];
index 0c58040ad62a72f73481852f3fce04ee8df08ba3..ffd2df63beae0e30394dfd1f85697cd53f274827 100644 (file)
 
 #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;
+}
index fe0a792b6bde3c4b15f915650179bde56967aace..04c744b880976c9056da992e6d38f0f024c2db6a 100644 (file)
@@ -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 */
        }
index 0b5a14bf565622b5e0c4fea6ef6d81b484f8515c..8dd1a7abb0a5a890edd2245ba506dbe5c2321548 100644 (file)
@@ -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
index d0a8a3abbf587bb0a517170e13ec7707a410cfd4..a1dce0497f916831ae6078a1b83f8571b371c7f4 100644 (file)
@@ -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;
                                }
                        }
index 982eb3e023cd076be02b3c6da2af158b2e3cf0df..637552766438df48334d72a422cd74a1ea20a6c9 100644 (file)
@@ -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 */
@@ -336,6 +377,31 @@ Region::~Region ()
        GoingAway (); /* EMIT SIGNAL */
 }
 
+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)
 {
@@ -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;
        }
index 88925a7f1695b2216ba6dd38c1ab1c17804f12b1..742a65962e64e4987030a8a56cc5afbf55acfbe5 100644 (file)
@@ -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,12 +91,39 @@ 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)
 {
index 02ec2924b00025369100eb280d1135c808f5bebb..9c15b1e4d970f99c8749bbdfcbd99c12316e7282 100644 (file)
@@ -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));
index 5d1a26d3d09846b0ee030a5120639510bd1ce4a1..96f26a515cbc41bfdb3e682a56e97ef107f163fe 100644 (file)
@@ -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
+
+}
index 034bed77c3c26f1d718cb68ad321196838546781..58352a5dfe5be41dd0725a49389b3988fca6b61e 100644 (file)
@@ -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 */
 }
 
index 14ef0e1ac5b346a5b6a48e40ea33569265c957da..875b3179365678d1459d3532a559c121596d9262 100644 (file)
@@ -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;
 }
 
index 02f8569a3d4d7fa0c71e8951f5c1f410bd8da2a6..5fe7a92d3d7da9b41f2c69cd4022a56d7d53c0fe 100644 (file)
@@ -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;
 }
index 2e19041b9c0b6da7e740dcacda6c30ce2b7c47aa..90ad257d3bdf027159bba591297043df33442b7a 100644 (file)
@@ -60,6 +60,7 @@ Session::get_export_status ()
        return export_status;
 }
 
+
 int
 Session::pre_export ()
 {
index 64903f24a226b3c6765cd971fdcde3fb9a61b767..b85df5b7143b1a11d96e3ebcee3cd01d066cb434 100644 (file)
@@ -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++;
                }
 
index 3b81092a962ed55815347f64c4aa148316abb2c7..c2e78df643e4203cca9abe80ffdfd7ac9949ac10 100644 (file)
@@ -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
index b1a494584a705fa24763a973d25236cff82a39bb..cb4a9e5813f25b61c7592b24ca4e513b82031797 100644 (file)
@@ -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 ();
index 7f574d481157a3b89156380e2774e0208aec3320..5612429d0d279a6212bd6b67bd39cf6d24f0353f 100644 (file)
@@ -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.
index eb0e8a8afbcde6345b6f777ebc215f17af9db6ef..5cd00a8e96098e66ebd9504146e66230b972e11d 100644 (file)
@@ -1,5 +1,6 @@
 #include <ardour/sndfileimportable.h>
 #include <sndfile.h>
+#include <iostream>
 
 using namespace ARDOUR;
 using namespace std;
index 097f0c235d16d41142af0229891b565f22fc3994..6a4b5e325d60b3010588c9d3ecd87a992d5ca898 100644 (file)
@@ -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;
 }
 
index 0b7c0f3d9e4cc658c0cbc2e2652b4a4c91bcfaf3..4ada6b766cf86c5273676566246c6b92fca4139f 100644 (file)
@@ -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) {
 
index c598a3d27965c060bfad00d9e5f2ff8c710a12ab..18194678ed0284743d1dddc806b2b65d888b9699 100644 (file)
@@ -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-newer/SConscript b/libs/clearlooks-newer/SConscript
new file mode 100644 (file)
index 0000000..ca527c7
--- /dev/null
@@ -0,0 +1,50 @@
+# -*- python -*-
+
+import os.path
+import glob
+
+libclearlooks_files = [
+       'animation.c',
+       'cairo-support.c',
+        'clearlooks_draw.c',
+       'clearlooks_draw_glossy.c',
+       'clearlooks_draw_gummy.c',
+       'clearlooks_draw_inverted.c',
+       'clearlooks_rc_style.c',
+       'clearlooks_style.c',
+       'clearlooks_theme_main.c',
+       'support.c',
+       'widget-information.c'
+       ]
+
+Import ('env install_prefix')
+
+clearlooks = env.Clone()
+
+clearlooks.Replace(CCFLAGS = ' `pkg-config --cflags gtk+-2.0 cairo` ',
+                   LINKFLAGS = ' `pkg-config --libs gtk+-2.0 cairo` ')
+
+if env['GTKOSX']:
+    clearlooks.Append (CCFLAGS = '-DGTKOSX')
+
+libclearlooks = clearlooks.SharedLibrary('clearlooks', libclearlooks_files) 
+usable_libclearlooks = clearlooks.Install ('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', 'bits.c'] +
+                                    libclearlooks_files +
+                                    glob.glob('*.h')
+                                    ))
diff --git a/libs/clearlooks-newer/animation.c b/libs/clearlooks-newer/animation.c
new file mode 100644 (file)
index 0000000..82af498
--- /dev/null
@@ -0,0 +1,337 @@
+/* Clearlooks theme engine
+ *
+ * Copyright (C) 2006 Kulyk Nazar <schamane@myeburg.net>
+ * Copyright (C) 2006 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
+ * 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.
+ *
+ */
+
+/* This code is responsible for the clearlooks animation support. The code
+ * works by forcing a redraw on the animated widget.
+ */
+
+#include "animation.h"
+
+#ifdef HAVE_ANIMATION
+#include <glib/gtimer.h>
+
+struct _AnimationInfo {
+       GTimer *timer;
+       
+       gdouble start_modifier;
+       gdouble stop_time;
+       GtkWidget *widget;
+};
+typedef struct _AnimationInfo AnimationInfo;
+
+struct _SignalInfo {
+       GtkWidget *widget;
+       gulong handler_id;
+};
+typedef struct _SignalInfo SignalInfo;
+
+static GSList     *connected_widgets  = NULL;
+static GHashTable *animated_widgets   = NULL;
+static int         animation_timer_id = 0;
+
+
+static gboolean animation_timeout_handler (gpointer data);
+
+/* This forces a redraw on a widget */
+static void
+force_widget_redraw (GtkWidget *widget)
+{
+       if (GE_IS_PROGRESS_BAR (widget))
+               gtk_widget_queue_resize (widget);
+       else
+               gtk_widget_queue_draw (widget);
+}
+
+/* ensures that the timer is running */
+static void
+start_timer ()
+{
+       if (animation_timer_id == 0)
+               animation_timer_id = g_timeout_add (ANIMATION_DELAY, animation_timeout_handler, NULL);
+}
+
+/* ensures that the timer is stopped */
+static void
+stop_timer ()
+{
+       if (animation_timer_id != 0)
+       {
+               g_source_remove(animation_timer_id);
+               animation_timer_id = 0;
+       }
+}
+
+
+/* destroys an AnimationInfo structure including the GTimer */
+static void
+animation_info_destroy (AnimationInfo *animation_info)
+{
+       g_timer_destroy (animation_info->timer);
+       g_free (animation_info);
+}
+
+
+/* This function does not unref the weak reference, because the object
+ * is beeing destroyed currently. */
+static void
+on_animated_widget_destruction (gpointer data, GObject *object)
+{
+       /* steal the animation info from the hash table (destroying it would
+        * result in the weak reference to be unrefed, which does not work
+        * as the widget is already destroyed. */
+       g_hash_table_steal (animated_widgets, object);
+       animation_info_destroy ((AnimationInfo*) data);
+}
+
+/* This function also needs to unref the weak reference. */
+static void
+destroy_animation_info_and_weak_unref (gpointer data)
+{
+       AnimationInfo *animation_info = data;
+       
+       /* force a last redraw. This is so that if the animation is removed,
+        * the widget is left in a sane state. */
+       force_widget_redraw (animation_info->widget);
+       
+       g_object_weak_unref (G_OBJECT (animation_info->widget), on_animated_widget_destruction, data);
+       animation_info_destroy (animation_info);
+}
+
+/* Find and return a pointer to the data linked to this widget, if it exists */
+static AnimationInfo*
+lookup_animation_info (const GtkWidget *widget)
+{
+       if (animated_widgets)
+               return g_hash_table_lookup (animated_widgets, widget);
+       
+       return NULL;
+}
+
+/* Create all the relevant information for the animation, and insert it into the hash table. */
+static void
+add_animation (const GtkWidget *widget, gdouble stop_time)
+{
+       AnimationInfo *value;
+       
+       /* object already in the list, do not add it twice */
+       if (lookup_animation_info (widget))
+               return;
+       
+       if (animated_widgets == NULL)
+               animated_widgets = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+                                                         NULL, destroy_animation_info_and_weak_unref);
+       
+       value = g_new(AnimationInfo, 1);
+       
+       value->widget = (GtkWidget*) widget;
+       
+       value->timer = g_timer_new ();
+       value->stop_time= stop_time;
+       value->start_modifier = 0.0;
+
+       g_object_weak_ref (G_OBJECT (widget), on_animated_widget_destruction, value);
+       g_hash_table_insert (animated_widgets, (GtkWidget*) widget, value);
+       
+       start_timer ();
+}
+
+/* update the animation information for each widget. This will also queue a redraw
+ * and stop the animation if it is done. */
+static gboolean
+update_animation_info (gpointer key, gpointer value, gpointer user_data)
+{
+       AnimationInfo *animation_info = value;
+       GtkWidget *widget = key;
+       
+       g_assert ((widget != NULL) && (animation_info != NULL));
+       
+       /* remove the widget from the hash table if it is not drawable */
+       if (!GTK_WIDGET_DRAWABLE (widget))
+       {
+               return TRUE;
+       }
+       
+       if (GE_IS_PROGRESS_BAR (widget))
+       {
+               gfloat fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (widget));
+               
+               /* stop animation for filled/not filled progress bars */
+               if (fraction <= 0.0 || fraction >= 1.0)
+                       return TRUE;
+       }
+       
+       force_widget_redraw (widget);
+       
+       /* stop at stop_time */
+       if (animation_info->stop_time != 0 &&
+           g_timer_elapsed (animation_info->timer, NULL) > animation_info->stop_time)
+               return TRUE;
+       
+       return FALSE;
+}
+
+/* This gets called by the glib main loop every once in a while. */
+static gboolean
+animation_timeout_handler (gpointer data)
+{
+       /*g_print("** TICK **\n");*/
+       
+       /* enter threads as update_animation_info will use gtk/gdk. */
+       gdk_threads_enter ();
+       g_hash_table_foreach_remove (animated_widgets, update_animation_info, NULL);
+       /* leave threads again */
+       gdk_threads_leave ();
+       
+       if(g_hash_table_size(animated_widgets)==0)
+       {
+               stop_timer ();
+               return FALSE;
+       }
+       
+       return TRUE;
+}
+
+static void
+on_checkbox_toggle (GtkWidget *widget, gpointer data)
+{
+       AnimationInfo *animation_info = lookup_animation_info (widget);
+       
+       if (animation_info != NULL)
+       {
+               gfloat elapsed = g_timer_elapsed (animation_info->timer, NULL);
+               
+               animation_info->start_modifier = elapsed - animation_info->start_modifier;
+       }
+       else
+       {
+               add_animation (widget, CHECK_ANIMATION_TIME);
+       }
+}
+
+static void
+on_connected_widget_destruction (gpointer data, GObject *widget)
+{
+       connected_widgets = g_slist_remove (connected_widgets, data);
+       g_free (data);
+}
+
+static void
+disconnect_all_signals ()
+{
+       GSList * item = connected_widgets;
+       while (item != NULL)
+       {
+               SignalInfo *signal_info = (SignalInfo*) item->data;
+               
+               g_signal_handler_disconnect (signal_info->widget, signal_info->handler_id);
+               g_object_weak_unref (G_OBJECT (signal_info->widget), on_connected_widget_destruction, signal_info);
+               g_free (signal_info);
+               
+               item = g_slist_next (item);
+       }
+       
+       g_slist_free (connected_widgets);
+       connected_widgets = NULL;
+}
+
+/* helper function for clearlooks_animation_connect_checkbox */
+static gint
+find_signal_info (gconstpointer signal_info, gconstpointer widget)
+{
+       if (((SignalInfo*)signal_info)->widget == widget)
+               return 0;
+       else
+               return 1;
+}
+
+
+/* external interface */
+
+/* adds a progress bar */
+void
+clearlooks_animation_progressbar_add (GtkWidget *progressbar)
+{
+       gdouble fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progressbar));
+       
+       if (fraction < 1.0 && fraction > 0.0)
+               add_animation ((GtkWidget*) progressbar, 0.0);
+}
+
+/* hooks up the signals for check and radio buttons */
+void
+clearlooks_animation_connect_checkbox (GtkWidget *widget)
+{
+       if (GE_IS_CHECK_BUTTON (widget))
+       {
+               if (!g_slist_find_custom (connected_widgets, widget, find_signal_info))
+               {
+                       SignalInfo * signal_info = g_new (SignalInfo, 1);
+                       
+                       signal_info->widget = widget;
+                       signal_info->handler_id = g_signal_connect ((GObject*)widget, "toggled", G_CALLBACK (on_checkbox_toggle), NULL);
+                       
+                       connected_widgets = g_slist_append (connected_widgets, signal_info);
+                       g_object_weak_ref (G_OBJECT (widget), on_connected_widget_destruction, signal_info);
+               }
+       }
+}
+
+/* returns TRUE if the widget is animated, and FALSE otherwise */
+gboolean
+clearlooks_animation_is_animated (GtkWidget *widget)
+{
+       return lookup_animation_info (widget) != NULL ? TRUE : FALSE;
+}
+
+/* returns the elapsed time for the animation */
+gdouble
+clearlooks_animation_elapsed (gpointer data)
+{
+       AnimationInfo *animation_info = lookup_animation_info (data);
+       
+       if (animation_info)
+               return   g_timer_elapsed (animation_info->timer, NULL)
+                      - animation_info->start_modifier;
+       else
+               return 0.0;
+}
+
+/* cleans up all resources of the animation system */
+void
+clearlooks_animation_cleanup ()
+{
+       disconnect_all_signals ();
+       
+       if (animated_widgets != NULL)
+       {
+               g_hash_table_destroy (animated_widgets);
+               animated_widgets = NULL;
+       }
+       
+       stop_timer ();
+}
+#else /* !HAVE_ANIMATION */
+static void clearlooks_animation_dummy_function_so_wall_shuts_up_when_animations_is_disabled()
+{
+       clearlooks_animation_dummy_function_so_wall_shuts_up_when_animations_is_disabled();
+}
+#endif /* HAVE_ANIMATION */
diff --git a/libs/clearlooks-newer/animation.h b/libs/clearlooks-newer/animation.h
new file mode 100644 (file)
index 0000000..da70b6c
--- /dev/null
@@ -0,0 +1,34 @@
+/* Clearlooks Engine
+ *
+ * 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.
+ */
+
+#include "config.h"
+
+#ifdef HAVE_ANIMATION
+#include <gtk/gtk.h>
+#include <ge-support.h>
+
+#define CL_IS_PROGRESS_BAR(widget) GE_IS_PROGRESS_BAR(widget) && widget->allocation.x != -1 && widget->allocation.y != -1
+#define ANIMATION_DELAY 100
+#define CHECK_ANIMATION_TIME 0.5
+
+GE_INTERNAL void     clearlooks_animation_progressbar_add (GtkWidget *progressbar);
+GE_INTERNAL void     clearlooks_animation_connect_checkbox (GtkWidget *widget);
+GE_INTERNAL gboolean clearlooks_animation_is_animated (GtkWidget *widget);
+GE_INTERNAL gdouble  clearlooks_animation_elapsed (gpointer data);
+GE_INTERNAL void     clearlooks_animation_cleanup ();
+#endif /* HAVE_ANIMATION */
diff --git a/libs/clearlooks-newer/bits.c b/libs/clearlooks-newer/bits.c
new file mode 100644 (file)
index 0000000..1e871bc
--- /dev/null
@@ -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-newer/cairo-support.c b/libs/clearlooks-newer/cairo-support.c
new file mode 100644 (file)
index 0000000..dbe6fd3
--- /dev/null
@@ -0,0 +1,815 @@
+#include <math.h>
+#include "general-support.h"
+#include "cairo-support.h"
+
+/***********************************************
+ * ge_hsb_from_color -
+ *  
+ *   Get HSB values from RGB values.
+ *
+ *   Modified from Smooth but originated in GTK+
+ ***********************************************/
+void
+ge_hsb_from_color (const CairoColor *color, 
+                        gdouble *hue, 
+                        gdouble *saturation,
+                        gdouble *brightness) 
+{
+       gdouble min, max, delta;
+       gdouble red, green, blue;
+
+       red = color->r;
+       green = color->g;
+       blue = color->b;
+  
+       if (red > green)
+       {
+               max = MAX(red, blue);
+               min = MIN(green, blue);
+       }
+       else
+       {
+               max = MAX(green, blue);
+               min = MIN(red, blue);
+       }
+  
+       *brightness = (max + min) / 2;
+       
+       if (fabs(max - min) < 0.0001)
+       {
+               *hue = 0;
+               *saturation = 0;
+       }       
+       else
+       {
+               if (*brightness <= 0.5)
+                       *saturation = (max - min) / (max + min);
+               else
+                       *saturation = (max - min) / (2 - max - min);
+       
+               delta = max -min;
+               if (red == max)
+                       *hue = (green - blue) / delta;
+               else if (green == max)
+                       *hue = 2 + (blue - red) / delta;
+               else if (blue == max)
+                       *hue = 4 + (red - green) / delta;
+               *hue *= 60;
+               if (*hue < 0.0)
+                       *hue += 360;
+       }
+}
+/***********************************************
+ * ge_color_from_hsb -
+ *  
+ *   Get RGB values from HSB values.
+ *
+ *   Modified from Smooth but originated in GTK+
+ ***********************************************/
+#define MODULA(number, divisor) (((gint)number % divisor) + (number - (gint)number))
+void
+ge_color_from_hsb (gdouble hue, 
+                        gdouble saturation,
+                        gdouble brightness, 
+                        CairoColor *color)
+{
+       gint i;
+       gdouble hue_shift[3], color_shift[3];
+       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)
+                       color_shift[i] = m2;
+               else if (m3 < 240)
+                       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];      
+       color->a = 1.0; 
+}
+
+void
+ge_gdk_color_to_cairo (const GdkColor *c, CairoColor *cc)
+{
+       gdouble r, g, b;
+
+       g_return_if_fail (c && cc);
+
+       r = c->red / 65535.0;
+       g = c->green / 65535.0;
+       b = c->blue / 65535.0;
+
+       cc->r = r;
+       cc->g = g;
+       cc->b = b;
+       cc->a = 1.0;
+}
+
+void
+ge_cairo_color_to_gtk (const CairoColor *cc, GdkColor *c)
+{
+       gdouble r, g, b;
+
+       g_return_if_fail (c && cc);
+
+       r = cc->r * 65535.0;
+       g = cc->g * 65535.0;
+       b = cc->b * 65535.0;
+
+       c->red = r;
+       c->green = g;
+       c->blue = b;
+}
+
+void 
+ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube)
+{
+       int i;
+
+       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]);
+
+               ge_gdk_color_to_cairo (&style->dark[i], &cube->dark[i]);
+               ge_gdk_color_to_cairo (&style->light[i], &cube->light[i]);
+               ge_gdk_color_to_cairo (&style->mid[i], &cube->mid[i]);
+
+               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;
+
+       cube->white.r = cube->white.g = cube->white.b = 1;
+       cube->white.a = 1;
+}
+
+void
+ge_shade_color(const CairoColor *base, gdouble shade_ratio, CairoColor *composite)
+{
+       gdouble hue = 0;
+       gdouble saturation = 0;
+       gdouble brightness = 0;
+       g_return_if_fail (base && composite);
+
+       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; 
+}
+
+void
+ge_saturate_color (const CairoColor *base, gdouble saturate_level, CairoColor *composite)
+{
+       gdouble hue = 0;
+       gdouble saturation = 0;
+       gdouble brightness = 0;
+       g_return_if_fail (base && composite);
+
+       ge_hsb_from_color (base, &hue, &saturation, &brightness);
+
+       saturation = MIN(saturation*saturate_level, 1.0);
+       saturation = MAX(saturation, 0.0);
+
+       ge_color_from_hsb (hue, saturation, brightness, composite);
+       composite->a = base->a; 
+}
+
+void
+ge_mix_color (const CairoColor *color1, const CairoColor *color2, 
+              gdouble mix_factor, CairoColor *composite)
+{
+       g_return_if_fail (color1 && color2 && composite);
+
+       composite->r = color1->r * (1-mix_factor) + color2->r * mix_factor;
+       composite->g = color1->g * (1-mix_factor) + color2->g * mix_factor;
+       composite->b = color1->b * (1-mix_factor) + color2->b * mix_factor;
+       composite->a = 1.0;
+}
+
+cairo_t * 
+ge_gdk_drawable_to_cairo (GdkDrawable  *window, GdkRectangle *area)
+{
+       cairo_t *cr;
+
+       g_return_val_if_fail (window != NULL, NULL);
+
+       cr = (cairo_t*) gdk_cairo_create (window);
+       cairo_set_line_width (cr, 1.0);
+       cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+       cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
+
+       if (area) 
+       {
+               cairo_rectangle (cr, area->x, area->y, area->width, area->height);
+               cairo_clip_preserve (cr);
+               cairo_new_path (cr);
+       }
+
+       return cr;
+}
+
+void 
+ge_cairo_set_color (cairo_t *cr, const CairoColor *color)
+{
+       g_return_if_fail (cr && color);
+
+       cairo_set_source_rgba (cr, color->r, color->g, color->b, color->a);     
+}
+
+void
+ge_cairo_set_gdk_color_with_alpha (cairo_t *cr, const GdkColor *color, gdouble alpha)
+{
+       g_return_if_fail (cr && color);
+
+       cairo_set_source_rgba (cr, color->red / 65535.0,
+                                  color->green / 65535.0,
+                                  color->blue / 65535.0,
+                                  alpha);
+}
+
+void 
+ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern, 
+                                               gfloat offset, 
+                                               const CairoColor *color)
+{
+       g_return_if_fail (pattern && color);
+
+       cairo_pattern_add_color_stop_rgba (pattern, offset, color->r, color->g, color->b, color->a);    
+}
+
+void
+ge_cairo_pattern_add_color_stop_shade(cairo_pattern_t *pattern, 
+                                               gdouble offset, 
+                                               const CairoColor *color, 
+                                               gdouble shade)
+{
+       CairoColor shaded;
+
+       g_return_if_fail (pattern && color && (shade >= 0) && (shade <= 3));
+
+       shaded = *color;
+
+       if (shade != 1)
+       {
+               ge_shade_color(color, shade, &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
+ * is very small (or negative) it will instead just do a line_to.
+ * ge_cairo_rounded_corner assumes clockwise drawing. */
+void
+ge_cairo_rounded_corner (cairo_t      *cr,
+                         double        x,
+                         double        y,
+                         double        radius,
+                         CairoCorners  corner)
+{
+       if (radius < 0.0001)
+       {
+               cairo_line_to (cr, x, y);
+       }
+       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;
+               }
+       }
+}
+
+void
+ge_cairo_rounded_rectangle (cairo_t *cr,
+                                 double x, double y, double w, double h,
+                                 double radius, CairoCorners corners)
+{
+       g_return_if_fail (cr != NULL);
+
+       if (radius < 0.0001 || corners == CR_CORNER_NONE)
+       {
+               cairo_rectangle (cr, x, y, w, h);
+               return;
+       }
+#ifdef DEVELOPMENT
+       if ((corners == CR_CORNER_ALL) && (radius > w / 2.0 || radius > h / 2.0))
+               g_warning ("Radius is too large for width/height in ge_rounded_rectangle.\n");
+       else if (radius > w || radius > h) /* This isn't perfect. Assumes that only one corner is set. */
+               g_warning ("Radius is too large for width/height in ge_rounded_rectangle.\n");
+#endif
+
+       if (corners & CR_CORNER_TOPLEFT)
+               cairo_move_to (cr, x+radius, y);
+       else
+               cairo_move_to (cr, x, y);
+       
+       if (corners & CR_CORNER_TOPRIGHT)
+               cairo_arc (cr, x+w-radius, y+radius, radius, G_PI * 1.5, G_PI * 2);
+       else
+               cairo_line_to (cr, x+w, y);
+       
+       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);
+       
+       if (corners & CR_CORNER_BOTTOMLEFT)
+               cairo_arc (cr, x+radius,   y+h-radius, radius, G_PI * 0.5, G_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);
+       else
+               cairo_line_to (cr, x, y);
+}
+
+
+/* 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.)
+ */
+void
+ge_cairo_stroke_rectangle (cairo_t *cr, double x, double y, double w, double h)
+{
+       cairo_rectangle (cr, x, y, w, h);
+       cairo_stroke (cr);
+}
+
+/***********************************************
+ * 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)
+{
+       gboolean solid_color;
+
+       g_return_if_fail (cr != NULL);
+       g_return_if_fail (tl != NULL);
+       g_return_if_fail (br != NULL);
+       
+
+       solid_color = (tl == br) || ((tl->r == br->r) && (tl->g == br->g) && (tl->b == br->b) && (tl->a == br->a));
+
+       topleft_overlap &= !solid_color;
+
+       cairo_save(cr);
+
+       cairo_set_line_width (cr, 1);
+
+       if (topleft_overlap)
+       {
+               ge_cairo_set_color(cr, br);     
+
+               cairo_move_to(cr, x + 0.5, y + height - 0.5);
+               cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+               cairo_line_to(cr, x + width - 0.5, y + 0.5);
+               
+               cairo_stroke (cr);
+       }
+       ge_cairo_set_color(cr, tl);     
+
+       cairo_move_to(cr, x + 0.5, y + height - 0.5);
+       cairo_line_to(cr, x + 0.5, y + 0.5);
+       cairo_line_to(cr, x + width - 0.5, y + 0.5);
+
+       if (!topleft_overlap)
+       {
+               if (!solid_color)
+               {
+                       cairo_stroke(cr);
+                       ge_cairo_set_color(cr, br);     
+               }
+
+               cairo_move_to(cr, x + 0.5, y + height - 0.5);
+               cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
+               cairo_line_to(cr, x + width - 0.5, y + 0.5);
+       }
+
+       cairo_stroke(cr);
+
+       cairo_restore(cr);
+}
+
+void ge_cairo_polygon (cairo_t *cr,
+                               const CairoColor *color,
+                               GdkPoint *points,
+                               gint npoints)
+{
+       int i = 0;
+
+       cairo_save(cr);
+
+       ge_cairo_set_color(cr, color);  
+       cairo_move_to(cr, points[0].x, points[0].y);
+
+       for (i = 1; i < npoints; i++)
+       {
+               if (!((points[i].x == points[i + 1].x) &&
+                   (points[i].y == points[i + 1].y))) 
+               {
+                       cairo_line_to(cr, points[i].x, points[i].y);
+               }
+       }
+       
+       if ((points[npoints-1].x != points[0].y) ||
+               (points[npoints-1].y != points[0].y))
+       {
+               cairo_line_to(cr, points[0].x, points[0].y);
+       }
+
+       cairo_fill(cr);
+
+       cairo_restore(cr);
+}
+
+void ge_cairo_line (cairo_t *cr,
+                       const CairoColor *color,
+                       gint x1,
+                       gint y1,
+                       gint x2,
+                       gint y2)
+{ 
+       cairo_save(cr);
+
+       ge_cairo_set_color(cr, color);  
+       cairo_set_line_width (cr, 1);
+
+       cairo_move_to(cr, x1 + 0.5, y1 + 0.5);
+       cairo_line_to(cr, x2 + 0.5, y2 + 0.5);
+
+       cairo_stroke(cr);
+
+       cairo_restore(cr);
+}
+
+void
+ge_cairo_mirror (cairo_t     *cr,
+                 CairoMirror  mirror,
+                 gint        *x,
+                 gint        *y,
+                 gint        *width,
+                 gint        *height)
+{
+       cairo_matrix_t matrix;
+       
+       cairo_matrix_init_identity (&matrix);
+       
+       cairo_translate (cr, *x, *y);
+       *x = 0;
+       *y = 0;
+       
+       if (mirror & CR_MIRROR_HORIZONTAL)
+       {
+               cairo_matrix_scale (&matrix, -1, 1);
+               *x = -*width;
+       }
+       if (mirror & CR_MIRROR_VERTICAL)
+       {
+               cairo_matrix_scale (&matrix, 1, -1);
+               *y = -*height;
+       }
+
+       cairo_transform (cr, &matrix);
+}
+
+void
+ge_cairo_exchange_axis (cairo_t  *cr,
+                        gint     *x,
+                        gint     *y,
+                        gint     *width,
+                        gint     *height)
+{
+       gint tmp;
+       cairo_matrix_t matrix;
+
+       cairo_translate (cr, *x, *y);
+       cairo_matrix_init (&matrix, 0, 1, 1, 0, 0, 0);
+
+       cairo_transform (cr, &matrix);
+       
+       /* swap width/height */
+       tmp = *width;
+       *x = 0;
+       *y = 0;
+       *width = *height;
+       *height = tmp;
+}
+
+
+/***********************************************
+ * ge_cairo_pattern_fill -
+ *  
+ *   Fill an area with some pattern
+ *   Scaling or tiling if needed
+ ***********************************************/
+void 
+ge_cairo_pattern_fill(cairo_t *canvas,
+                       CairoPattern *pattern,
+                       gint x,
+                       gint y,
+                       gint width,
+                       gint height)
+{
+       cairo_matrix_t original_matrix, current_matrix;
+
+       if (pattern->operator == CAIRO_OPERATOR_DEST)
+       {
+               return;
+       }
+
+       cairo_pattern_get_matrix(pattern->handle, &original_matrix);
+       current_matrix = original_matrix;
+
+       if (pattern->scale != GE_DIRECTION_NONE)
+       {
+               gdouble scale_x = 1.0;
+               gdouble scale_y = 1.0;
+
+               if ((pattern->scale == GE_DIRECTION_VERTICAL) || (pattern->scale == GE_DIRECTION_BOTH))
+               {
+                       scale_x = 1.0/width;
+               }
+
+               if ((pattern->scale == GE_DIRECTION_HORIZONTAL) || (pattern->scale == GE_DIRECTION_BOTH))
+               {
+                       scale_y = 1.0/height;
+               }
+
+               cairo_matrix_scale(&current_matrix, scale_x, scale_y);
+       }
+
+       if (pattern->translate != GE_DIRECTION_NONE)
+       {
+               gdouble translate_x = 0;
+               gdouble translate_y = 0;
+
+               if ((pattern->translate == GE_DIRECTION_VERTICAL) || (pattern->translate == GE_DIRECTION_BOTH))
+               {
+                       translate_x = 0.0-x;
+               }
+
+               if ((pattern->translate == GE_DIRECTION_HORIZONTAL) || (pattern->translate == GE_DIRECTION_BOTH))
+               {
+                       translate_y = 0.0-y;
+               }
+
+               cairo_matrix_translate(&current_matrix, translate_x, translate_y);
+       }
+
+       cairo_pattern_set_matrix(pattern->handle, &current_matrix);
+
+       cairo_save(canvas);
+
+       cairo_set_source(canvas, pattern->handle);
+        cairo_set_operator(canvas, pattern->operator);
+       cairo_rectangle(canvas, x, y, width, height);
+
+       cairo_fill (canvas);
+
+       cairo_restore(canvas);
+
+       cairo_pattern_set_matrix(pattern->handle, &original_matrix);
+}
+
+/***********************************************
+ * ge_cairo_color_pattern -
+ *  
+ *   Create A Solid Color Pattern
+ ***********************************************/
+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)))
+               result->type = CAIRO_PATTERN_TYPE_SOLID;
+       #endif
+
+       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->operator = CAIRO_OPERATOR_SOURCE;
+       
+       return result;
+}
+
+/***********************************************
+ * ge_cairo_pixbuf_pattern -
+ *  
+ *   Create A Tiled Pixbuf Pattern
+ ***********************************************/
+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)))
+               result->type = CAIRO_PATTERN_TYPE_SURFACE;
+       #endif
+
+       result->scale = GE_DIRECTION_NONE;
+       result->translate = GE_DIRECTION_BOTH;
+
+       width = gdk_pixbuf_get_width(pixbuf);
+       height = gdk_pixbuf_get_height(pixbuf);
+       
+       surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+
+       canvas = cairo_create(surface);
+
+       gdk_cairo_set_source_pixbuf (canvas, pixbuf, 0, 0);
+       cairo_rectangle (canvas, 0, 0, width, height);
+       cairo_fill (canvas);
+       cairo_destroy(canvas);
+
+       result->handle = cairo_pattern_create_for_surface (surface);
+       cairo_surface_destroy(surface);
+
+       cairo_pattern_set_extend (result->handle, CAIRO_EXTEND_REPEAT);
+
+       result->operator = CAIRO_OPERATOR_SOURCE;
+
+       return result;
+}
+
+/***********************************************
+ * ge_cairo_pixmap_pattern -
+ *  
+ *   Create A Tiled Pixmap Pattern
+ ***********************************************/
+CairoPattern*
+ge_cairo_pixmap_pattern(GdkPixmap *pixmap)
+{      
+       CairoPattern * result = NULL;
+
+       GdkPixbuf * pixbuf;
+       gint width, height;
+
+       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);
+
+       result = ge_cairo_pixbuf_pattern(pixbuf);
+       
+       g_object_unref (pixbuf);
+
+       return result;
+}
+
+/***********************************************
+ * ge_cairo_linear_shade_gradient_pattern - 
+ *  
+ *   Create A Linear Shade Gradient Pattern
+ *   Aka Smooth Shade Gradient, from/to gradient
+ *   With End points defined as shades of the
+ *   base color
+ ***********************************************/
+CairoPattern *
+ge_cairo_linear_shade_gradient_pattern(CairoColor *base, 
+                                               gdouble shade1, 
+                                               gdouble shade2, 
+                                               gboolean vertical)
+{
+       CairoPattern * result = g_new0(CairoPattern, 1);
+       
+       #if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
+               result->type = CAIRO_PATTERN_TYPE_LINEAR;
+       #endif
+
+       if (vertical)
+       {
+               result->scale = GE_DIRECTION_VERTICAL;
+
+               result->handle = cairo_pattern_create_linear(0, 0, 1, 0);
+       }
+       else
+       {
+               result->scale = GE_DIRECTION_HORIZONTAL;
+
+               result->handle = cairo_pattern_create_linear(0, 0, 0, 1);
+       }
+
+       result->translate = GE_DIRECTION_BOTH;
+       result->operator = CAIRO_OPERATOR_SOURCE;
+
+       ge_cairo_pattern_add_color_stop_shade(result->handle, 0, base, shade1);
+       ge_cairo_pattern_add_color_stop_shade(result->handle, 1, base, shade2);
+
+       return result;
+}
+
+void
+ge_cairo_pattern_destroy(CairoPattern *pattern)
+{
+       if (pattern)
+       {
+               if (pattern->handle)
+                       cairo_pattern_destroy(pattern->handle);
+                       
+               g_free(pattern);
+       }
+}
+
+/* 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.
+ */
+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);
+}
diff --git a/libs/clearlooks-newer/cairo-support.h b/libs/clearlooks-newer/cairo-support.h
new file mode 100644 (file)
index 0000000..12163b0
--- /dev/null
@@ -0,0 +1,118 @@
+/* Helpful functions when dealing with cairo in gtk engines */
+
+#include <gtk/gtk.h>
+#include <math.h>
+
+typedef struct
+{
+       gdouble r;
+       gdouble g;
+       gdouble b;
+       gdouble a;
+} CairoColor;
+
+typedef struct
+{
+       CairoColor bg[5];
+       CairoColor fg[5];
+
+       CairoColor dark[5];
+       CairoColor light[5];
+       CairoColor mid[5];
+
+       CairoColor base[5];
+       CairoColor text[5];
+       CairoColor text_aa[5];
+
+       CairoColor black;
+       CairoColor white;
+} CairoColorCube;
+
+typedef enum
+{
+       CR_CORNER_NONE        = 0,
+       CR_CORNER_TOPLEFT     = 1,
+       CR_CORNER_TOPRIGHT    = 2,
+       CR_CORNER_BOTTOMLEFT  = 4,
+       CR_CORNER_BOTTOMRIGHT = 8,
+       CR_CORNER_ALL         = 15
+} CairoCorners;
+
+typedef enum
+{
+       CR_MIRROR_NONE       = 0,
+       CR_MIRROR_HORIZONTAL = 1 << 0,
+       CR_MIRROR_VERTICAL   = 1 << 1
+} CairoMirror;
+
+/*****************************/
+/* Pattern Fills             */
+/*****************************/
+typedef enum {
+       GE_DIRECTION_VERTICAL,
+       GE_DIRECTION_HORIZONTAL,
+       GE_DIRECTION_BOTH,
+       GE_DIRECTION_NONE
+} GeDirection;
+
+#if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
+typedef enum _cairo_pattern_type {
+    CAIRO_PATTERN_TYPE_SOLID,
+    CAIRO_PATTERN_TYPE_SURFACE,
+    CAIRO_PATTERN_TYPE_LINEAR,
+    CAIRO_PATTERN_TYPE_RADIAL
+} cairo_pattern_type_t;
+
+#      define CAIRO_PATTERN_TYPE(pattern) pattern->type;
+#else
+#      define CAIRO_PATTERN_TYPE(pattern) cairo_pattern_get_type (pattern->handle);
+#endif
+
+typedef struct
+{
+#if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
+       cairo_pattern_type_t type;
+#endif
+       GeDirection scale;
+       GeDirection translate;
+
+       cairo_pattern_t *handle;
+       cairo_operator_t operator;
+} CairoPattern;
+
+GE_INTERNAL void ge_hsb_from_color (const CairoColor *color, gdouble *hue, gdouble *saturation, gdouble *brightness);
+GE_INTERNAL void ge_color_from_hsb (gdouble hue, gdouble saturation, gdouble brightness, CairoColor *color);
+
+GE_INTERNAL void ge_gdk_color_to_cairo (const GdkColor * gc, CairoColor * cc);
+GE_INTERNAL void ge_cairo_color_to_gtk (const CairoColor *cc, GdkColor *c);
+GE_INTERNAL void ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube);
+
+GE_INTERNAL void ge_shade_color(const CairoColor *base, gdouble shade_ratio, CairoColor *composite);
+GE_INTERNAL void ge_saturate_color (const CairoColor * base, gdouble saturate_level, CairoColor *composite);
+GE_INTERNAL void ge_mix_color (const CairoColor *color1, const CairoColor *color2, gdouble mix_factor, CairoColor *composite);
+
+GE_INTERNAL cairo_t * ge_gdk_drawable_to_cairo (GdkDrawable  *window, GdkRectangle *area);
+GE_INTERNAL void ge_cairo_set_color (cairo_t *cr, const CairoColor *color);
+GE_INTERNAL void ge_cairo_set_gdk_color_with_alpha (cairo_t *cr, const GdkColor *color, gdouble alpha);
+GE_INTERNAL void ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern, gfloat offset, const CairoColor *color);
+GE_INTERNAL void ge_cairo_pattern_add_color_stop_shade (cairo_pattern_t *pattern, gdouble offset, const CairoColor *color, gdouble shade);
+
+GE_INTERNAL void ge_cairo_rounded_corner (cairo_t *cr, double x, double y, double radius, CairoCorners corner);
+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_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);
+GE_INTERNAL void ge_cairo_polygon (cairo_t *cr, const CairoColor *color, GdkPoint *points, gint npoints);
+
+GE_INTERNAL void ge_cairo_mirror (cairo_t *cr, CairoMirror mirror, gint *x, gint *y, gint *width, gint *height);
+GE_INTERNAL void ge_cairo_exchange_axis (cairo_t *cr, gint *x, gint *y, gint *width, gint *height);
+
+GE_INTERNAL void ge_cairo_pattern_fill(cairo_t *canvas, CairoPattern *pattern, gint x, gint y, gint width, gint height);
+
+GE_INTERNAL CairoPattern *ge_cairo_color_pattern(CairoColor *base);
+GE_INTERNAL CairoPattern *ge_cairo_pixbuf_pattern(GdkPixbuf *pixbuf);
+GE_INTERNAL CairoPattern *ge_cairo_pixmap_pattern(GdkPixmap *pixmap);
+GE_INTERNAL CairoPattern *ge_cairo_linear_shade_gradient_pattern(CairoColor *base, gdouble shade1, gdouble shade2, gboolean vertical);
+GE_INTERNAL void ge_cairo_pattern_destroy(CairoPattern *pattern);
diff --git a/libs/clearlooks-newer/clearlooks_draw.c b/libs/clearlooks-newer/clearlooks_draw.c
new file mode 100644 (file)
index 0000000..614317e
--- /dev/null
@@ -0,0 +1,2279 @@
+/* Clearlooks theme engine
+ * Copyright (C) 2006 Richard Stellingwerff
+ * Copyright (C) 2006 Daniel Borgman
+ * Copyright (C) 2007 Benjamin Berg
+ * Copyright (C) 2007 Andrea Cimitan
+ *
+ * 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.
+ *
+ */
+
+#include "clearlooks_draw.h"
+#include "clearlooks_style.h"
+#include "clearlooks_types.h"
+
+#include "support.h"
+#include <ge-support.h>
+#include <math.h>
+
+#include <cairo.h>
+
+typedef void (*menubar_draw_proto) (cairo_t *cr,
+                                    const ClearlooksColors *colors,
+                                    const WidgetParameters *params,
+                                    const MenuBarParameters *menubar,
+                                    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 w, double h, 
+                       double radius, uint8 corners)
+{
+       CairoColor shadow;
+       CairoColor highlight;
+
+       /* 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_move_to (cr, x + w + (radius * -0.2928932188), y - (radius * -0.2928932188)); /* 0.2928932... 1-sqrt(2)/2 gives middle of curve */
+
+       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);
+
+       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);
+
+       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);
+
+       /* shadow */
+       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, 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, 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, M_PI * 1.5, M_PI * 1.75);
+       else
+               cairo_line_to (cr, x + w, y);
+
+       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; 
+       ge_shade_color (&colors->shade[6], 0.92, &shadow);
+
+       cairo_set_line_width (cr, 1.0);
+       
+       cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.1);
+       
+       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);
+}
+
+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.5);
+       cairo_stroke          (cr);
+}
+
+#ifdef DEVELOPMENT
+#warning seems to be very slow in scrollbar_stepper
+#endif
+
+static void
+clearlooks_draw_highlight_and_shade (cairo_t *cr, const ClearlooksColors *colors,
+                                     const ShadowParameters *params,
+                                     int width, int height, gdouble radius)
+{
+       CairoColor hilight;
+       CairoColor shadow;
+       uint8 corners = params->corners;
+       double x = 1.0;
+       double y = 1.0;
+
+       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, y+height-radius);
+       else
+               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);
+       else
+               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_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);
+}
+
+static void
+clearlooks_set_border_gradient (cairo_t *cr, const CairoColor *color, double hilight, int width, int height)
+{
+       cairo_pattern_t *pattern;
+
+       CairoColor bottom_shade;
+       ge_shade_color (color, hilight, &bottom_shade);
+
+       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);
+}
+
+static void
+clearlooks_draw_gripdots (cairo_t *cr, const ClearlooksColors *colors, int x, int y,
+                          int width, int height, int xr, int yr,
+                          float contrast)
+{
+       const CairoColor *dark = &colors->shade[4];
+       CairoColor hilight;
+       int i, j;
+       int xoff, yoff;
+
+       ge_shade_color (dark, 1.5, &hilight);
+
+       for ( i = 0; i < xr; i++ ) 
+       {
+               for ( j = 0; j < yr; j++ )
+               {
+                       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, 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);
+               }
+       }
+}
+
+static void
+clearlooks_draw_button (cairo_t *cr,
+                        const ClearlooksColors *colors,
+                        const WidgetParameters *params,
+                        int x, int y, int width, int height)
+{
+       double xoffset = 0, yoffset = 0;
+       double radius = params->radius;
+       const CairoColor *fill = &colors->bg[params->state_type];
+       const CairoColor *border_normal = &colors->shade[6];
+       const CairoColor *border_disabled = &colors->shade[4];
+
+       CairoColor shadow;
+       ge_shade_color (border_normal, 0.925, &shadow);
+       
+       cairo_save (cr);
+       
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+
+       if (params->xthickness == 3 || params->ythickness == 3)
+       {
+               if (params->xthickness == 3)
+                       xoffset = 1;
+               if (params->ythickness == 3)
+                       yoffset = 1;
+       }
+
+       radius = MIN (radius, MIN ((width - 2.0 - xoffset * 2.0) / 2.0, (height - 2.0 - yoffset * 2) / 2.0));
+
+       if (params->xthickness == 3 || params->ythickness == 3)
+       {
+               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;
+               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, 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);
+       }
+       else
+       {
+               cairo_pattern_t *pattern;
+               
+               ge_cairo_set_color (cr, fill);
+               cairo_fill_preserve (cr);
+
+               pattern = cairo_pattern_create_linear (0, 0, 0, height);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.0);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.4, shadow.r, shadow.g, shadow.b, 0.0);
+               cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.2);
+               cairo_set_source (cr, pattern);
+               cairo_fill_preserve (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.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.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)
+       {
+               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_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);
+       else
+               if (!params->active)
+                       clearlooks_set_border_gradient (cr, border_normal, 1.32, 0, height); 
+               else
+                       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);
+}
+
+static void
+clearlooks_draw_entry (cairo_t *cr,
+                       const ClearlooksColors *colors,
+                       const WidgetParameters *params,
+                       int x, int y, int width, int height)
+{
+       const CairoColor *base = &colors->base[params->state_type];
+       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_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);
+
+       /* 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-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_stroke_rectangle (cr, 2, 2, width-5, height-5);
+       }
+       else
+       {
+               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_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_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); 
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_draw_spinbutton (cairo_t *cr,
+                            const ClearlooksColors *colors,
+                            const WidgetParameters *params,
+                            int x, int y, int width, int height)
+{
+       const CairoColor *border = &colors->shade[!params->disabled ? 5 : 3];
+       CairoColor hilight; 
+
+       params->style_functions->draw_button (cr, colors, params, x, y, width, height);
+
+       ge_shade_color (border, 1.5, &hilight);
+
+       cairo_translate (cr, x, y);
+
+       cairo_move_to (cr, params->xthickness + 0.5,       (height/2) + 0.5);
+       cairo_line_to (cr, width-params->xthickness - 0.5, (height/2) + 0.5);
+       ge_cairo_set_color (cr, border);
+       cairo_stroke (cr);
+
+       cairo_move_to (cr, params->xthickness + 0.5,       (height/2)+1.5);
+       cairo_line_to (cr, width-params->xthickness - 0.5, (height/2)+1.5);
+       ge_cairo_set_color (cr, &hilight);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_draw_spinbutton_down (cairo_t *cr,
+                                 const ClearlooksColors *colors,
+                                 const WidgetParameters *params,
+                                 int x, int y, int width, int height)
+{
+       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[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);
+}
+
+static void
+clearlooks_scale_draw_gradient (cairo_t *cr,
+                                const CairoColor *c1,
+                                const CairoColor *c2,
+                                const CairoColor *c3,
+                                int x, int y, int width, int height,
+                                boolean horizontal)
+{
+       cairo_pattern_t *pattern;
+
+       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+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_stroke_rectangle (cr, x, y, width, height);    
+}
+
+#define TROUGH_SIZE 6
+static void
+clearlooks_draw_scale_trough (cairo_t *cr,
+                              const ClearlooksColors *colors,
+                              const WidgetParameters *params,
+                              const SliderParameters *slider,
+                              int x, int y, int width, int height)
+{
+       int     trough_width, trough_height;
+       double  translate_x, translate_y;
+
+       if (slider->horizontal)
+       {
+               trough_width  = width-3;
+               trough_height = TROUGH_SIZE-2;
+               
+               translate_x   = x + 0.5;
+               translate_y   = y + 0.5 + (height/2) - (TROUGH_SIZE/2);
+       }
+       else
+       {
+               trough_width  = TROUGH_SIZE-2;
+               trough_height = height-3;
+               
+               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+2, trough_height+2, 0, 0);
+       
+       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
+               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
+clearlooks_draw_slider (cairo_t *cr,
+                        const ClearlooksColors *colors,
+                        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];
+       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_translate      (cr, x, y);
+
+       if (params->prelight)
+               border = &colors->spot[2];
+
+       /* fill the widget */
+       cairo_rectangle (cr, 0.5, 0.5, width-2, height-2);
+
+       /* Fake light */
+       if (!params->disabled)
+       {
+               const CairoColor *top = &colors->shade[0];
+               const CairoColor *bot = &colors->shade[2];
+
+               pattern = cairo_pattern_create_linear (0, 0, 0, height);
+               cairo_pattern_add_color_stop_rgb (pattern, 0.0,  top->r, top->g, top->b);
+               cairo_pattern_add_color_stop_rgb (pattern, 1.0,  bot->r, bot->g, bot->b);
+               cairo_set_source (cr, pattern);
+               cairo_fill (cr);
+               cairo_pattern_destroy (pattern);
+       }
+       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, 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, 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.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 
+       {
+               CairoColor hilight; 
+               ge_shade_color (fill, 1.5, &hilight);
+               cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
+       }
+
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       cairo_restore (cr);
+
+       /* Draw the border */
+       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
+               clearlooks_set_border_gradient (cr, border, 1.2, 0, height); 
+       cairo_stroke (cr);
+
+       /* Draw handle lines */
+       if (width > 14)
+       {
+               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);
+               cairo_set_source_rgba (cr, border->r,
+                                          border->g,
+                                          border->b,
+                                          0.3);
+               cairo_stroke (cr);
+       }
+}
+
+static void
+clearlooks_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_draw_progressbar_trough (cairo_t *cr,
+                                    const ClearlooksColors *colors,
+                                    const WidgetParameters *params,
+                                    int x, int y, int width, int height)
+{
+       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[3]);
+       cairo_fill (cr);
+
+       /* Draw border */
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width-1, height-1, radius, params->corners);
+       ge_cairo_set_color (cr, border);
+       cairo_stroke (cr);
+
+       /* clip the corners of the shadows */
+       ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
+       cairo_clip (cr);
+
+       ge_shade_color (border, 0.925, &shadow);
+
+       /* 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.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);
+
+       /* 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.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);
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_draw_progressbar_fill (cairo_t *cr,
+                                  const ClearlooksColors *colors,
+                                  const WidgetParameters *params,
+                                  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;
+
+       cairo_pattern_t *pattern;
+       CairoColor       bg_shade;
+       CairoColor       border;
+       CairoColor       shadow;
+
+       radius = MAX (0, params->radius - params->xthickness);
+
+       cairo_save (cr);
+
+       if (!is_horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
+               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
+
+       /* Clamp the radius so that the _height_ fits ...  */
+       radius = MIN (radius, height / 2.0);
+
+       stroke_width = height*2;
+       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
+       
+       cairo_translate (cr, x, y);
+
+       cairo_save (cr);
+       /* This is kind of nasty ... Clip twice from each side in case the length
+        * of the fill is smaller than twice the radius. */
+       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (cr);
+       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
+       cairo_clip (cr);
+
+       /* Draw the background gradient */
+       ge_shade_color (&colors->spot[1], 1.1, &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)
+       {
+               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;
+       }
+       
+       cairo_set_source_rgba (cr, colors->spot[2].r,
+                                  colors->spot[2].g,
+                                  colors->spot[2].b,
+                                  0.15);
+       
+       cairo_fill (cr);
+       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. */
+       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (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;
+       shadow.a = 0.1;
+
+       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);
+               ge_cairo_set_color (cr, &shadow);
+               cairo_stroke (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);
+       }
+       
+       cairo_restore (cr);
+
+       cairo_restore (cr); /* rotation, mirroring */
+}
+
+static void
+clearlooks_draw_optionmenu (cairo_t *cr,
+                            const ClearlooksColors *colors,
+                            const WidgetParameters *params,
+                            const OptionMenuParameters *optionmenu,
+                            int x, int y, int width, int height)
+{
+       SeparatorParameters separator;
+       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);
+}
+
+static void
+clearlooks_draw_menu_item_separator (cairo_t                   *cr,
+                                     const ClearlooksColors    *colors,
+                                     const WidgetParameters    *widget,
+                                     const SeparatorParameters *separator,
+                                     int x, int y, int width, int height)
+{
+       cairo_save (cr);
+       cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+       ge_cairo_set_color (cr, &colors->shade[5]);
+
+       if (separator->horizontal)
+               cairo_rectangle (cr, x, y, width, 1);
+       else
+               cairo_rectangle (cr, x, y, 1, height);
+
+       cairo_fill      (cr);
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_draw_menubar0 (cairo_t *cr,
+                          const ClearlooksColors *colors,
+                          const WidgetParameters *params,
+                          const MenuBarParameters *menubar,
+                          int x, int y, int width, int height)
+{
+/*     const CairoColor *light = &colors->shade[0]; */
+       const CairoColor *dark = &colors->shade[3];
+
+       cairo_set_line_width (cr, 1);
+       cairo_translate (cr, x, y+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);
+}
+
+static void
+clearlooks_draw_menubar2 (cairo_t *cr,
+                          const ClearlooksColors *colors,
+                          const WidgetParameters *params,
+                          const MenuBarParameters *menubar,
+                          int x, int y, int width, int height)
+{
+       CairoColor lower;
+       cairo_pattern_t *pattern;
+
+       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,
+                                                       colors->bg[0].g,
+                                                       colors->bg[0].b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, lower.r,
+                                                       lower.g,
+                                                       lower.b);
+       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);
+}
+
+static void
+clearlooks_draw_menubar1 (cairo_t *cr,
+                          const ClearlooksColors *colors,
+                          const WidgetParameters *params,
+                          const MenuBarParameters *menubar,
+                          int x, int y, int width, int height)
+{
+       const CairoColor *border = &colors->shade[3];
+
+       clearlooks_draw_menubar2 (cr, colors, params, menubar,
+                                 x, y, width, height);
+
+       ge_cairo_set_color (cr, border);
+       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
+}
+
+
+static menubar_draw_proto clearlooks_menubar_draw[3] =
+{ 
+       clearlooks_draw_menubar0, 
+       clearlooks_draw_menubar1,
+       clearlooks_draw_menubar2 
+};
+
+static void
+clearlooks_draw_menubar (cairo_t *cr,
+                         const ClearlooksColors *colors,
+                         const WidgetParameters *params,
+                         const MenuBarParameters *menubar,
+                         int x, int y, int width, int height)
+{
+       if (menubar->style < 0 || menubar->style > 3)
+               return;
+
+       clearlooks_menubar_draw[menubar->style](cr, colors, params, menubar,
+                                    x, y, width, height);
+}
+
+static void
+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),  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),  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.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.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);                    
+       }
+}
+
+static void
+clearlooks_draw_frame            (cairo_t *cr,
+                                  const ClearlooksColors     *colors,
+                                  const WidgetParameters     *params,
+                                  const FrameParameters      *frame,
+                                  int x, int y, int width, int height)
+{
+       const CairoColor *border = frame->border;
+       const CairoColor *dark   = (CairoColor*)&colors->shade[4];
+       ClearlooksRectangle bevel_clip = {0, 0, 0, 0};
+       ClearlooksRectangle frame_clip = {0, 0, 0, 0};
+       double radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
+       CairoColor 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+0.5, y+0.5);
+       
+       /* save everything */
+       cairo_save (cr);
+       /* Set clip for the bevel */
+       if (frame->gap_x != -1)
+       {
+               /* Set clip for gap */
+               cairo_set_fill_rule  (cr, CAIRO_FILL_RULE_EVEN_ODD);
+               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_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
+               else
+                       ge_cairo_rounded_rectangle (cr, 0, 0, width-2, height-2, radius, params->corners);
+               cairo_stroke (cr);
+       }
+       else if (frame->shadow != CL_SHADOW_NONE)
+       {
+               ShadowParameters shadow;
+               shadow.corners = params->corners;
+               shadow.shadow  = frame->shadow;
+               clearlooks_draw_highlight_and_shade (cr, colors, &shadow, width, height, 0);
+       }
+       
+       /* restore the previous clip region */
+       cairo_restore    (cr);
+       cairo_save       (cr);
+       if (frame->gap_x != -1)
+       {
+               /* Set clip for gap */
+               cairo_set_fill_rule  (cr, CAIRO_FILL_RULE_EVEN_ODD);
+               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);
+       }
+
+       /* Draw frame */
+       if (frame->shadow == CL_SHADOW_ETCHED_IN || frame->shadow == CL_SHADOW_ETCHED_OUT)
+       {
+               ge_cairo_set_color (cr, dark);
+               if (frame->shadow == CL_SHADOW_ETCHED_IN)
+                       ge_cairo_rounded_rectangle (cr, 0, 0, width-2, height-2, radius, params->corners);
+               else
+                       ge_cairo_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
+       }
+       else
+       {
+               ge_cairo_set_color (cr, border);
+               ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+       }
+       cairo_stroke (cr);
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_draw_tab (cairo_t *cr,
+                     const ClearlooksColors *colors,
+                     const WidgetParameters *params,
+                     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               strip_size;
+
+       radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
+
+       /* Set clip */
+       cairo_rectangle      (cr, x, y, width, height);
+       cairo_clip           (cr);
+       cairo_new_path       (cr);
+
+       /* Translate and set line width */      
+       cairo_set_line_width (cr, 1.0);
+       cairo_translate      (cr, x+0.5, y+0.5);
+
+
+       /* Make the tabs slightly bigger than they should be, to create a gap */
+       /* And calculate the strip size too, while you're at it */
+       if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
+       {
+               height += 3.0;
+               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;
+               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, 0, width-1, height-1,
+                                   radius, params->corners);
+       
+       /* Draw fill */
+       ge_cairo_set_color (cr, fill);
+       cairo_fill   (cr);
+
+
+       ge_shade_color (fill, 1.3, &hilight);
+
+       /* Draw highlight */
+       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;
+               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/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);
+       }
+       else
+       {
+               /* 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_rgb  (pattern, 0.0,        stripe_fill->r, stripe_fill->g, stripe_fill->b);
+               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_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+       
+       if (params->active)
+       {
+               ge_cairo_set_color (cr, border2);
+               cairo_stroke (cr);
+       }
+       else
+       {
+               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);
+               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);
+       }
+}
+
+static void
+clearlooks_draw_separator (cairo_t *cr,
+                           const ClearlooksColors     *colors,
+                           const WidgetParameters     *widget,
+                           const SeparatorParameters  *separator,
+                           int x, int y, int width, int height)
+{
+       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);
+
+       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);
+       }
+       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_restore (cr);
+}
+
+static void
+clearlooks_draw_list_view_header (cairo_t *cr,
+                                  const ClearlooksColors          *colors,
+                                  const WidgetParameters          *params,
+                                  const ListViewHeaderParameters  *header,
+                                  int x, int y, int width, int height)
+{
+       const CairoColor *border = &colors->shade[5];
+       cairo_pattern_t *pattern;
+       CairoColor hilight; 
+       CairoColor shadow;
+
+       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)
+       {
+               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)
+       {
+               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);
+               else
+                       params->style_functions->draw_separator (cr, colors, params, &separator,
+                                                                1.5, 4.0, 2, height-8.0);
+       }
+}
+
+/* We can't draw transparent things here, since it will be called on the same
+ * surface multiple times, when placed on a handlebox_bin or dockitem_bin */
+static void
+clearlooks_draw_toolbar (cairo_t *cr,
+                         const ClearlooksColors          *colors,
+                         const WidgetParameters          *widget,
+                         const ToolbarParameters         *toolbar,
+                         int x, int y, int width, int height)
+{
+       const CairoColor *fill  = &colors->bg[GTK_STATE_NORMAL];
+       const CairoColor *dark  = &colors->shade[3];
+       CairoColor 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) 
+       {
+               /* Draw highlight */
+               cairo_move_to       (cr, 0, 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-1, height-0.5);
+       ge_cairo_set_color  (cr, dark);
+       cairo_stroke        (cr);
+}
+
+static void
+clearlooks_draw_menuitem (cairo_t *cr,
+                          const ClearlooksColors          *colors,
+                          const WidgetParameters          *widget,
+                          int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       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 - 1, widget->radius, widget->corners);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0,   fill->r, fill->g, fill->b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, fill_shade.r, fill_shade.g, fill_shade.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, &border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_draw_menubaritem (cairo_t *cr,
+                          const ClearlooksColors          *colors,
+                          const WidgetParameters          *widget,
+                          int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       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);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0,   fill->r, fill->g, fill->b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, fill_shade.r, fill_shade.g, fill_shade.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, &border);
+       cairo_stroke_preserve (cr);
+}
+
+static void
+clearlooks_draw_selected_cell (cairo_t                  *cr,
+                              const ClearlooksColors   *colors,
+                              const WidgetParameters   *params,
+                              int x, int y, int width, int height)
+{
+       CairoColor upper_color;
+       CairoColor lower_color;
+       CairoColor border;
+       cairo_pattern_t *pattern;
+       cairo_save (cr);
+       
+       cairo_translate (cr, x, y);
+
+       if (params->focus)
+               upper_color = colors->base[params->state_type];
+       else
+               upper_color = colors->base[GTK_STATE_ACTIVE];
+
+       ge_shade_color(&upper_color, 0.92, &lower_color);
+
+       pattern = cairo_pattern_create_linear (0, 0, 0, height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.0, upper_color.r,
+                                                       upper_color.g,
+                                                       upper_color.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, lower_color.r,
+                                                       lower_color.g,
+                                                       lower_color.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_rectangle  (cr, 0, 0, width, height);
+       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);
+}
+
+
+static void
+clearlooks_draw_scrollbar_trough (cairo_t *cr,
+                                  const ClearlooksColors           *colors,
+                                  const WidgetParameters           *widget,
+                                  const ScrollBarParameters        *scrollbar,
+                                  int x, int y, int width, int height)
+{
+       const CairoColor *bg     = &colors->shade[2];
+       const CairoColor *border = &colors->shade[5];
+       CairoColor        bg_shade;
+       cairo_pattern_t *pattern;
+       
+       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);     
+
+       /* Draw fill */
+       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_rectangle (cr, 1, 0, 4, height);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+       
+       /* Draw border */
+       ge_cairo_set_color (cr, border);
+       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
+}
+
+static void
+clearlooks_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)
+{
+       CairoCorners corners = CR_CORNER_NONE;
+       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.05, &border);
+       
+       if (scrollbar->horizontal)
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
+               else if (stepper->stepper == CL_STEPPER_D)
+                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
+       }
+       else
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
+               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);
+                               
+       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);
+       
+       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
+clearlooks_draw_scrollbar_slider (cairo_t *cr,
+                                   const ClearlooksColors          *colors,
+                                   const WidgetParameters          *widget,
+                                   const ScrollBarParameters       *scrollbar,
+                                   int x, int y, int width, int height)
+{
+       if (scrollbar->junction & CL_JUNCTION_BEGIN)
+       {
+               if (scrollbar->horizontal)
+               {
+                       x -= 1;
+                       width += 1;
+               }
+               else
+               {
+                       y -= 1;
+                       height += 1;
+               }
+       }
+       if (scrollbar->junction & CL_JUNCTION_END)
+       {
+               if (scrollbar->horizontal)
+                       width += 1;
+               else
+                       height += 1;
+       }
+       
+       if (!scrollbar->horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       cairo_translate (cr, x, y);     
+
+       if (scrollbar->has_color)
+       {
+               const CairoColor *border  = &colors->shade[7];
+               CairoColor  fill    = scrollbar->color;
+               CairoColor  hilight;
+               CairoColor  shade1, shade2, shade3;
+               cairo_pattern_t *pattern;
+
+               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, 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);
+       }
+       else
+       {
+               const CairoColor *dark  = &colors->shade[4];
+               const CairoColor *light = &colors->shade[0];
+               CairoColor border;
+               CairoColor s1, s2, s3, s4, s5;
+               cairo_pattern_t *pattern;
+               int bar_x, i;
+
+               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.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_rectangle (cr, 1, 1, width-2, height-2);
+               cairo_set_source(cr, pattern);
+               cairo_fill(cr);
+               cairo_pattern_destroy(pattern);
+               
+               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, 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);
+               
+               bar_x = width/2 - 4;
+               cairo_translate(cr, 0.5, 0.5);
+               for (i=0; i<3; i++)
+               {
+                       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, 4);
+                       cairo_line_to (cr, bar_x+1, height-5);
+                       ge_cairo_set_color (cr, light);
+                       cairo_stroke (cr);
+                       
+                       bar_x += 3;
+               }
+       }
+       
+}
+
+static void
+clearlooks_draw_statusbar (cairo_t *cr,
+                           const ClearlooksColors          *colors,
+                           const WidgetParameters          *widget,
+                           int x, int y, int width, int height)
+{
+       const CairoColor *dark = &colors->shade[3];
+       CairoColor hilight;
+
+       ge_shade_color (dark, 1.4, &hilight);
+
+       cairo_set_line_width  (cr, 1);
+       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);
+       cairo_stroke          (cr);
+
+       cairo_translate       (cr, 0, 1);
+       cairo_move_to         (cr, 0, 0);
+       cairo_line_to         (cr, width, 0);
+       ge_cairo_set_color    (cr, &hilight);
+       cairo_stroke          (cr);
+}
+
+static void
+clearlooks_draw_menu_frame (cairo_t *cr,
+                            const ClearlooksColors          *colors,
+                            const WidgetParameters          *widget,
+                            int x, int y, int width, int height)
+{
+       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);
+}
+
+static void
+clearlooks_draw_tooltip (cairo_t *cr,
+                         const ClearlooksColors          *colors,
+                         const WidgetParameters          *widget,
+                         int x, int y, int width, int height)
+{
+       CairoColor border;
+
+       ge_shade_color (&colors->bg[widget->state_type], 0.6, &border);
+
+       cairo_save (cr);
+
+       cairo_translate      (cr, x, y);
+       cairo_set_line_width (cr, 1);
+
+       ge_cairo_set_color (cr, &colors->bg[widget->state_type]);
+       cairo_rectangle (cr, 0, 0, width, height);
+       cairo_fill (cr);
+
+       ge_cairo_set_color (cr, &border);
+       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_draw_handle (cairo_t *cr,
+                        const ClearlooksColors          *colors,
+                        const WidgetParameters          *params,
+                        const HandleParameters          *handle,
+                        int x, int y, int width, int height)
+{
+       const CairoColor *fill  = &colors->bg[params->state_type];
+       int num_bars = 6; /* shut up gcc warnings */
+       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;
+       }
+
+       if (params->prelight)
+       {
+               cairo_rectangle (cr, x, y, width, height);
+               ge_cairo_set_color (cr, fill);
+               cairo_fill (cr);
+       }
+       
+       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);
+       }
+       else
+       {
+               params->style_functions->draw_gripdots (cr, colors, 0, 0, width, height, 2, num_bars, 0.1);
+       }
+}
+
+static void
+clearlooks_draw_resize_grip (cairo_t *cr,
+                             const ClearlooksColors          *colors,
+                             const WidgetParameters          *widget,
+                             const ResizeGripParameters      *grip,
+                             int x, int y, int width, int height)
+{
+       const CairoColor *dark   = &colors->shade[4];
+       CairoColor hilight;
+       int lx, ly;
+       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. */
+       /* dots = MIN (width - 2, height - 2) / 3; */
+       dots = 4;
+
+       cairo_save (cr);
+
+       switch (grip->edge)
+       {
+               case CL_WINDOW_EDGE_NORTH_EAST:
+                       x_down = 0;
+                       y_down = 0;
+                       cairo_translate (cr, x + width - 3*dots + 2, y + 1);
+               break;
+               case CL_WINDOW_EDGE_SOUTH_EAST:
+                       x_down = 0;
+                       y_down = 1;
+                       cairo_translate (cr, x + width - 3*dots + 2, y + height - 3*dots + 2);
+               break;
+               case CL_WINDOW_EDGE_SOUTH_WEST:
+                       x_down = 1;
+                       y_down = 1;
+                       cairo_translate (cr, x + 1, y + height - 3*dots + 2);
+               break;
+               case CL_WINDOW_EDGE_NORTH_WEST:
+                       x_down = 1;
+                       y_down = 0;
+                       cairo_translate (cr, x + 1, y + 1);
+               break;
+               default:
+                       /* Not implemented. */
+                       return;
+       }
+
+       for (lx = 0; lx < dots; lx++) /* horizontally */
+       {
+               for (ly = 0; ly <= lx; ly++) /* vertically */
+               {
+                       int mx, my;
+                       mx = x_down * dots + (1 - x_down * 2) * lx - x_down;
+                       my = y_down * dots + (1 - y_down * 2) * ly - y_down;
+
+                       ge_cairo_set_color (cr, &hilight);
+                       cairo_rectangle (cr, mx*3-1, my*3-1, 2, 2);
+                       cairo_fill (cr);
+
+                       ge_cairo_set_color (cr, dark);
+                       cairo_rectangle (cr, mx*3-1, my*3-1, 1, 1);
+                       cairo_fill (cr);
+               }
+       }
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_draw_radiobutton (cairo_t *cr,
+                             const ClearlooksColors  *colors,
+                             const WidgetParameters  *widget,
+                             const CheckboxParameters *checkbox,
+                             int x, int y, int width, int height)
+{
+       const CairoColor *border;
+       const CairoColor *dot;
+       CairoColor shadow;
+       CairoColor highlight;
+       cairo_pattern_t *pt;
+       gboolean inconsistent;
+       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
+
+       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
+       draw_bullet |= inconsistent;
+
+       if (widget->disabled)
+       {
+               border = &colors->shade[5];
+               dot    = &colors->shade[6];
+       }
+       else
+       {
+               border = &colors->shade[6];
+               dot    = &colors->text[0];
+       }
+
+       ge_shade_color (&widget->parentbg, 0.9, &shadow);
+       ge_shade_color (&widget->parentbg, 1.1, &highlight);
+
+       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, 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, 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, 4);
+
+                       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, 7, 7, 3, 0, G_PI*2);
+                       ge_cairo_set_color (cr, dot);
+                       cairo_fill (cr);
+               
+                       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);
+               }
+       }
+}
+
+static void
+clearlooks_draw_checkbox (cairo_t *cr,
+                          const ClearlooksColors  *colors,
+                          const WidgetParameters  *widget,
+                          const CheckboxParameters *checkbox,
+                          int x, int y, int width, int height)
+{
+       const CairoColor *border;
+       const CairoColor *dot;
+       gboolean inconsistent = FALSE;
+       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
+
+       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
+       draw_bullet |= inconsistent;
+       
+       if (widget->disabled)
+       {
+               border = &colors->shade[5];
+               dot    = &colors->shade[6];
+       }
+       else
+       {
+               border = &colors->shade[6];
+               dot    = &colors->text[GTK_STATE_NORMAL];
+       }
+
+       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.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);
+       }
+       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);
+       }
+       
+       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) /* Inconsistent */
+               {
+                       cairo_set_line_width (cr, 2.0);
+                       cairo_move_to (cr, 3, height*0.5);
+                       cairo_line_to (cr, width-3, height*0.5);
+               }
+               else
+               {
+                       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);
+       }
+}
+
+static void
+clearlooks_draw_normal_arrow (cairo_t *cr, const CairoColor *color,
+                              double x, double y, double width, double height)
+{
+       double arrow_width;
+       double arrow_height;
+       double line_width_2;
+
+       cairo_save (cr);
+
+       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);
+       cairo_line_to (cr, -arrow_width / 2.0 + line_width_2, 0);
+       /* cairo_line_to (cr, 0, arrow_height - line_width_2); */
+       cairo_arc_negative (cr, 0, arrow_height - 2*line_width_2 - 2*line_width_2 * sqrt(2), 2*line_width_2, G_PI_2 + G_PI_4, G_PI_4);
+       cairo_line_to (cr, arrow_width / 2.0 - line_width_2, 0);
+       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);
+}
+
+static void
+clearlooks_draw_combo_arrow (cairo_t *cr, const CairoColor *color,
+                             double x, double y, double width, double height)
+{
+       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);
+}
+
+static void
+_clearlooks_draw_arrow (cairo_t *cr, const CairoColor *color,
+                        ClearlooksDirection dir, ClearlooksArrowType type,
+                        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)
+               rotate = G_PI*0.5;
+       else if (dir == CL_DIRECTION_UP)
+               rotate = G_PI;
+       else if (dir == CL_DIRECTION_DOWN)
+               rotate = 0;
+       else
+               return;
+       
+       if (type == CL_ARROW_NORMAL)
+       {
+               cairo_translate (cr, x, y);
+               cairo_rotate (cr, -rotate);             
+               clearlooks_draw_normal_arrow (cr, color, 0, 0, width, height);
+       }
+       else if (type == CL_ARROW_COMBO)
+       {
+               cairo_translate (cr, x, y);
+               clearlooks_draw_combo_arrow (cr, color, 0, 0, width, height);
+       }
+}
+
+static void
+clearlooks_draw_arrow (cairo_t *cr,
+                       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],
+                                       arrow->direction, arrow->type,
+                                       tx+0.5, ty+0.5, width, height);
+       }
+
+       cairo_identity_matrix (cr);
+       
+       _clearlooks_draw_arrow (cr, color, arrow->direction, arrow->type,
+                               tx, ty, width, height);
+}
+
+void
+clearlooks_register_style_classic (ClearlooksStyleFunctions *functions)
+{
+       g_assert (functions);
+
+       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_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 (file)
index 0000000..a3f2676
--- /dev/null
@@ -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-newer/clearlooks_draw_glossy.c b/libs/clearlooks-newer/clearlooks_draw_glossy.c
new file mode 100644 (file)
index 0000000..8a5921e
--- /dev/null
@@ -0,0 +1,1422 @@
+/* Clearlooks Glossy style
+ * Copyright (C) 2006 Benjamin Berg
+ * Copyright (C) 2007 Andrea Cimitan
+ *
+ * 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 Andrea Cimitan <andrea.cimitan@gmail.com>
+ *        and Benjamin Berg <benjamin@sipsolutions.net>
+ * Based on code by Richard Stellingwerff <remenic@gmail.com>
+ *              and Daniel Borgmann <daniel.borgmann@gmail.com>
+ * from the ubuntulooks engine.
+ */
+
+#include "clearlooks_draw.h"
+#include "clearlooks_style.h"
+#include "clearlooks_types.h"
+
+#include "support.h"
+#include <ge-support.h>
+
+#include <cairo.h>
+
+
+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)
+{
+       CairoColor a, b, c, d;
+       cairo_pattern_t *pt;
+
+       ge_shade_color (color, disabled? 1.06 : 1.16, &a);
+       ge_shade_color (color, disabled? 1.02 : 1.08, &b);
+       ge_shade_color (color, disabled? 0.98 : 1.00, &c);
+       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_set_source (cr, pt);
+       ge_cairo_rounded_rectangle (cr, x, y, width, height, radius, corners);
+       cairo_fill (cr);
+       
+       cairo_pattern_destroy (pt);
+}
+
+static void
+clearlooks_set_mixed_color (cairo_t          *cr, 
+                            const CairoColor *color1, 
+                            const CairoColor *color2, 
+                            gdouble mix_factor)
+{
+       CairoColor composite;
+
+       ge_mix_color (color1, color2, mix_factor, &composite);
+       ge_cairo_set_color (cr, &composite);
+}
+
+static void
+clearlooks_glossy_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;
+
+       /* 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_move_to (cr, x + w + (radius * -0.2928932188), y - (radius * -0.2928932188)); /* 0.2928932... 1-sqrt(2)/2 gives middle of curve */
+
+       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);
+
+       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);
+
+       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);
+
+       /* shadow */
+       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, 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, 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, M_PI * 1.5, M_PI * 1.75);
+       else
+               cairo_line_to (cr, x + w, y);
+
+       ge_cairo_set_color (cr, &shadow);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_glossy_draw_light_inset (cairo_t          *cr, 
+                                    const CairoColor *bg_color, 
+                                    double x, double y, double w, double h, 
+                                    double radius, uint8 corners)
+{
+       CairoColor shadow;
+       CairoColor highlight;
+
+       /* not really sure of shading ratios... we will think */
+       ge_shade_color (bg_color, 0.95, &shadow);
+       ge_shade_color (bg_color, 1.05, &highlight);
+
+       /* highlight */
+       cairo_move_to (cr, x + w + (radius * -0.2928932188), y - (radius * -0.2928932188)); /* 0.2928932... 1-sqrt(2)/2 gives middle of curve */
+
+       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);
+
+       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);
+
+       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);
+
+       /* shadow */
+       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, 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, 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, M_PI * 1.5, M_PI * 1.75);
+       else
+               cairo_line_to (cr, x + w, y);
+
+       ge_cairo_set_color (cr, &shadow);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_glossy_draw_highlight_and_shade (cairo_t          *cr, 
+                                            const CairoColor *bg_color,
+                                            const ShadowParameters *params,
+                                            int width, int height, gdouble radius)
+{
+       CairoColor shadow;
+       CairoColor highlight;
+       uint8 corners = params->corners;
+       double x = 1.0;
+       double y = 1.0;
+
+       /* not really sure of shading ratios... we will think */
+       ge_shade_color (bg_color, 0.8, &shadow);
+       ge_shade_color (bg_color, 1.2, &highlight);
+       
+       cairo_save (cr);
+       
+       /* Top/Left highlight */
+       if (corners & CR_CORNER_BOTTOMLEFT)
+               cairo_move_to (cr, x, y+height-radius);
+       else
+               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);
+       else
+               cairo_line_to (cr, x+width, y);
+       
+       if (params->shadow & CL_SHADOW_OUT)
+               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 */
+       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)
+               cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.5);
+       else
+               cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
+       
+       cairo_stroke (cr);
+       
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_glossy_draw_button (cairo_t *cr,
+                                   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];
+       CairoColor border_normal   = colors->shade[6];
+       CairoColor border_disabled = colors->shade[4];
+       double radius;
+
+       cairo_pattern_t *pattern;
+       
+       cairo_save (cr);
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+
+       /* 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)
+       {
+               cairo_translate (cr, 0.5, 0.5);
+
+               /* if (params->enable_glow && !params->active && !params->disabled) */
+               if (params->prelight && params->enable_glow && !params->active)
+               {
+                       /* 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, 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, 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);
+               }
+               
+               /* 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-1, height-1, params->radius+1, params->corners);
+                       else
+                               /*Draw a lighter inset */
+                               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, 
+                                     width-(xoffset*2)-2, height-(yoffset*2)-2, 
+                                     &fill, params->disabled, radius, params->corners);
+       
+       /* Pressed button shadow */
+       if (params->active)
+       {
+               CairoColor shadow;
+               ge_shade_color (&fill, 0.92, &shadow);
+
+               cairo_save (cr);
+
+               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);
+       
+               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+1, yoffset+4);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
+               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);
+               
+               cairo_rectangle (cr, xoffset+1, yoffset+1, 3, height-(yoffset*2)-2);
+       
+               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+4, yoffset+1);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
+               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);
+
+               cairo_restore (cr);
+       }
+       
+       /* Default button highlight */
+       if (params->is_default && !params->active && !params->disabled)
+       {
+               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, glow);
+               cairo_stroke (cr);
+
+               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, glow);
+               cairo_stroke (cr);
+               
+               hh--;
+
+               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, glow);
+               cairo_stroke (cr);
+       }
+       
+       /* Border */
+       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)
+               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);
+       cairo_stroke (cr);
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_glossy_draw_progressbar_trough (cairo_t *cr,
+                                    const ClearlooksColors *colors,
+                                    const WidgetParameters *params,
+                                    int x, int y, int width, int height)
+{
+       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]);
+       cairo_fill (cr);
+
+       /* Draw border */
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width-1, height-1, radius, params->corners);
+       clearlooks_set_mixed_color (cr, border, &colors->shade[2], 0.3);
+       cairo_stroke (cr);
+
+       /* clip the corners of the shadows */
+       ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
+       cairo_clip (cr);
+
+       ge_shade_color (border, 0.92, &shadow);
+
+       /* 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.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);
+
+       /* 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.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);
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_glossy_draw_progressbar_fill (cairo_t *cr,
+                                  const ClearlooksColors *colors,
+                                  const WidgetParameters *params,
+                                  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;
+
+       cairo_pattern_t *pattern;
+       CairoColor       a;
+       CairoColor       b;
+       CairoColor       e;
+       CairoColor       border;
+       CairoColor       shadow;
+
+       radius = MAX (0, params->radius - params->xthickness);
+
+       cairo_save (cr);
+
+       if (!is_horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
+               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
+
+       /* Clamp the radius so that the _height_ fits ...  */
+       radius = MIN (radius, height / 2.0);
+
+       stroke_width = height*2;
+       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
+       
+       cairo_translate (cr, x, y);
+
+       cairo_save (cr);
+       /* This is kind of nasty ... Clip twice from each side in case the length
+        * of the fill is smaller than twice the radius. */
+       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (cr);
+       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
+       cairo_clip (cr);
+
+       /* Draw the background gradient */
+       ge_shade_color (&colors->spot[1], 1.16, &a);
+       ge_shade_color (&colors->spot[1], 1.08, &b);
+       ge_shade_color (&colors->spot[1], 1.08, &e);
+       pattern = cairo_pattern_create_linear (0, 0, 0, height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.0, a.r, a.g, a.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.5, b.r, b.g, b.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.5, colors->spot[1].r, colors->spot[1].g, colors->spot[1].b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, e.r, e.g, e.b);
+       cairo_set_source (cr, pattern);
+       cairo_paint (cr);
+       cairo_pattern_destroy (pattern);
+
+       /* 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;
+       }
+       
+       cairo_set_source_rgba (cr, colors->spot[2].r,
+                                  colors->spot[2].g,
+                                  colors->spot[2].b,
+                                  0.15);
+       
+       cairo_fill (cr);
+       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.3);
+
+       /* 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. */
+       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (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;
+       ge_shade_color (&colors->shade[6], 0.92, &shadow);
+       shadow.a = 0.2;
+
+       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);
+               ge_cairo_set_color (cr, &shadow);
+               cairo_stroke (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);
+       }
+       
+       cairo_restore (cr);
+
+       cairo_restore (cr); /* rotation, mirroring */
+}
+
+static void
+clearlooks_glossy_scale_draw_gradient (cairo_t *cr,
+                                const CairoColor *c1,
+                                const CairoColor *c2,
+                                const CairoColor *c3,
+                                int x, int y, int width, int height,
+                                boolean horizontal)
+{
+       cairo_pattern_t *pattern;
+
+       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+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_stroke_rectangle (cr, x, y, width, height);
+}
+
+#define TROUGH_SIZE 6
+static void
+clearlooks_glossy_draw_scale_trough (cairo_t *cr,
+                              const ClearlooksColors *colors,
+                              const WidgetParameters *params,
+                              const SliderParameters *slider,
+                              int x, int y, int width, int height)
+{
+       int     trough_width, trough_height;
+       double  translate_x, translate_y;
+
+       if (slider->horizontal)
+       {
+               trough_width  = width-3;
+               trough_height = TROUGH_SIZE-2;
+               
+               translate_x   = x + 0.5;
+               translate_y   = y + 0.5 + (height/2) - (TROUGH_SIZE/2);
+       }
+       else
+       {
+               trough_width  = TROUGH_SIZE-2;
+               trough_height = height-3;
+               
+               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+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 */
+                                                   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 */
+                                                   0, 0, trough_width, trough_height,
+                                                   slider->horizontal);
+}
+
+static void
+clearlooks_glossy_draw_tab (cairo_t *cr,
+                            const ClearlooksColors *colors,
+                            const WidgetParameters *params,
+                            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;
+       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));
+
+       /* Set clip */
+       cairo_rectangle      (cr, x, y, width, height);
+       cairo_clip           (cr);
+       cairo_new_path       (cr);
+
+       /* Translate and set line width */
+       cairo_set_line_width (cr, 1.0);
+       cairo_translate      (cr, x+0.5, y+0.5);
+
+
+       /* Make the tabs slightly bigger than they should be, to create a gap */
+       /* And calculate the strip size too, while you're at it */
+       if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
+       {
+               height += 3.0;
+               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;
+               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, 0, width-1, height-1,
+                                   radius, params->corners);
+       
+       /* Draw fill */
+       ge_cairo_set_color (cr, fill);
+       cairo_fill   (cr);
+
+       ge_shade_color (fill, 1.3, &hilight);
+
+       /* Draw highlight */
+       if (!params->active)
+       {
+               ShadowParameters shadow;
+               
+               shadow.shadow  = CL_SHADOW_OUT;
+               shadow.corners = params->corners;
+               
+               clearlooks_glossy_draw_highlight_and_shade (cr, &colors->bg[0], &shadow,
+                                                    width,
+                                                    height, radius);
+       }
+
+       if (params->active)
+       {
+               CairoColor shadow, hilight, f1, f2;
+
+               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.06, &shadow);
+               ge_shade_color (fill, 1.18, &hilight);
+               ge_shade_color (fill, 1.12, &f1);
+               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/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);
+               cairo_set_source (cr, pattern);
+               cairo_fill (cr);
+               cairo_pattern_destroy (pattern);
+       }
+       else
+       {
+               /* 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.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);
+               cairo_pattern_destroy (pattern);
+       }
+
+       ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+       
+       if (params->active)
+       {
+               ge_cairo_set_color (cr, border);
+               cairo_stroke (cr);
+       }
+       else
+       {
+               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);
+               cairo_set_source (cr, pattern);
+               cairo_stroke (cr);
+               cairo_pattern_destroy (pattern);
+       }
+}
+
+static void
+clearlooks_glossy_draw_slider (cairo_t *cr,
+                        const ClearlooksColors *colors,
+                        const WidgetParameters *params,
+                        int x, int y, int width, int height)
+{
+       const CairoColor *border  = &colors->shade[7];
+       CairoColor  fill;
+       CairoColor  hilight;
+       CairoColor  a, b, c, d;
+       cairo_pattern_t *pattern;
+
+       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);
+
+       ge_shade_color (&fill, 1.25, &hilight);
+       ge_shade_color (&fill, 1.16, &a);
+       ge_shade_color (&fill, 1.08, &b);
+       ge_shade_color (&fill, 1.0,  &c);
+       ge_shade_color (&fill, 1.08, &d);
+
+       pattern = cairo_pattern_create_linear (1, 1, 1, height-2);
+       cairo_pattern_add_color_stop_rgb (pattern, 0,   a.r, a.g, a.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.5, b.r, b.g, b.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.5, c.r, c.g, c.b); 
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, d.r, d.g, d.b);
+       cairo_rectangle (cr, 1, 1, width-2, height-2);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       clearlooks_set_mixed_color (cr, border, &fill, 0.2);
+       if (params->prelight)
+               ge_cairo_set_color (cr, &colors->spot[2]);
+       ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, 2.5, params->corners);
+       cairo_stroke (cr);
+
+       cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
+       ge_cairo_rounded_rectangle (cr, 1.5, 1.5, width-3, height-3, 2.0, params->corners);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_glossy_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 - 1.0) / 2.0, (height - 1.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);
+}
+
+static void
+clearlooks_glossy_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)
+{
+       CairoCorners corners = CR_CORNER_NONE;
+       const CairoColor *border = &colors->shade[7];
+       CairoColor  fill, s1, s2, s4;
+       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)
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
+               else if (stepper->stepper == CL_STEPPER_D)
+                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
+       }
+       else
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
+               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);
+                               
+       fill = colors->bg[widget->state_type];
+       ge_shade_color(&fill, 1.16, &s1);
+       ge_shade_color(&fill, 1.08, &s2);
+       ge_shade_color(&fill, 1.08, &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.5,  fill.r, fill.g, fill.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);
+       
+       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;
+}
+
+static void
+clearlooks_glossy_draw_scrollbar_slider (cairo_t *cr,
+                                   const ClearlooksColors          *colors,
+                                   const WidgetParameters          *widget,
+                                   const ScrollBarParameters       *scrollbar,
+                                   int x, int y, int width, int height)
+{
+       const CairoColor *border  = &colors->shade[7];
+       CairoColor  fill  = scrollbar->color;
+       CairoColor  hilight;
+       CairoColor  shade1, shade2, shade3;
+       cairo_pattern_t *pattern;
+
+       if (scrollbar->junction & CL_JUNCTION_BEGIN)
+       {
+               if (scrollbar->horizontal)
+               {
+                       x -= 1;
+                       width += 1;
+               }
+               else
+               {
+                       y -= 1;
+                       height += 1;
+               }
+       }
+       if (scrollbar->junction & CL_JUNCTION_END)
+       {
+               if (scrollbar->horizontal)
+                       width += 1;
+               else
+                       height += 1;
+       }
+       
+       if (!scrollbar->horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       cairo_translate (cr, x, y);
+
+       if (widget->prelight)
+               ge_shade_color (&fill, 1.1, &fill);
+               
+       cairo_set_line_width (cr, 1);
+       
+       ge_shade_color (&fill, 1.25, &hilight);
+       ge_shade_color (&fill, 1.16, &shade1);
+       ge_shade_color (&fill, 1.08, &shade2);
+       ge_shade_color (&fill, 1.08, &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,   shade3.r, shade3.g, shade3.b);
+       cairo_rectangle (cr, 1, 1, width-2, height-2);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+       
+       if (scrollbar->has_color) 
+       {
+               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);
+       }
+
+       clearlooks_set_mixed_color (cr, border, &fill, scrollbar->has_color? 0.4 : 0.2);
+       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
+}
+
+static void
+clearlooks_glossy_draw_list_view_header (cairo_t *cr,
+                                  const ClearlooksColors          *colors,
+                                  const WidgetParameters          *params,
+                                  const ListViewHeaderParameters  *header,
+                                  int x, int y, int width, int height)
+{
+/*
+       CairoColor *border = !params->prelight? (CairoColor*)&colors->shade[4] : (CairoColor*)&colors->spot[1];
+*/
+       const CairoColor *border = &colors->shade[4];
+       const CairoColor *fill   = &colors->bg[params->state_type];
+       CairoColor hilight;
+       CairoColor shade1, shade2, shade3;
+
+       cairo_pattern_t *pattern;
+
+       ge_shade_color (fill, 1.2, &hilight);
+       ge_shade_color (fill, 1.08, &shade1);
+       ge_shade_color (fill, 1.04, &shade2);
+       ge_shade_color (fill, 1.04, &shade3);
+
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+
+       /* Draw the fill */
+       pattern = cairo_pattern_create_linear (0, 0, 0, height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.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-1.0/height, shade3.r, shade3.g, shade3.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0-1.0/height, border->r, border->g, border->b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, border->r, border->g, border->b);
+
+       cairo_set_source (cr, pattern);
+       cairo_rectangle (cr, 0, 0, width, height);
+       cairo_fill (cr);
+
+       cairo_pattern_destroy (pattern);
+       
+       /* Draw highlight */
+       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);
+       
+       cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
+       cairo_stroke (cr);
+       
+       /* Draw resize grip */
+       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);
+               else
+                       params->style_functions->draw_separator (cr, colors, params, &separator,
+                                                                1.5, 4.0, 2, height-8.0);
+       }
+}
+
+static void 
+clearlooks_glossy_draw_toolbar (cairo_t *cr,
+                         const ClearlooksColors          *colors,
+                         const WidgetParameters          *widget,
+                         const ToolbarParameters         *toolbar,
+                         int x, int y, int width, int height)
+{
+       const CairoColor *fill  = &colors->bg[GTK_STATE_NORMAL];
+       const CairoColor *dark  = &colors->shade[3];
+       CairoColor light;
+       ge_shade_color (fill, 1.1, &light);
+       
+       cairo_set_line_width (cr, 1.0);
+       cairo_translate (cr, x, y);
+       
+       if (toolbar->style == 1) /* Enable Extra features */
+       { 
+               cairo_pattern_t *pattern;
+               CairoColor shade1, shade2, shade3;
+               
+               ge_shade_color (fill, 1.08, &shade1);
+               ge_shade_color (fill, 1.04, &shade2);
+               ge_shade_color (fill, 1.04, &shade3);
+
+               /* Draw the fill */
+               pattern = cairo_pattern_create_linear (0, 0, 0, height);
+               cairo_pattern_add_color_stop_rgb (pattern, 0.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_rectangle (cr, 0, 0, width, height);
+               cairo_fill (cr);
+
+               cairo_pattern_destroy (pattern);
+       }
+       else /* Flat */
+       { 
+               ge_cairo_set_color (cr, fill);
+               cairo_paint (cr);
+
+               if (!toolbar->topmost) 
+               {
+                       /* Draw highlight */
+                       cairo_move_to       (cr, 0, 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-1, height-0.5);
+       ge_cairo_set_color  (cr, dark);
+       cairo_stroke        (cr);
+}
+
+static void
+clearlooks_glossy_draw_menuitem (cairo_t                   *cr,
+                                 const ClearlooksColors    *colors,
+                                 const WidgetParameters    *params,
+                                 int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       const CairoColor *border = &colors->spot[2];
+       CairoColor shade1, shade2, shade3;
+       cairo_pattern_t *pattern;
+
+       ge_shade_color (fill, 1.16, &shade1);
+       ge_shade_color (fill, 1.08, &shade2);
+       ge_shade_color (fill, 1.08, &shade3);
+       cairo_set_line_width (cr, 1.0);
+
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       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,   shade3.r, shade3.g, shade3.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_glossy_draw_menubaritem (cairo_t                   *cr,
+                                    const ClearlooksColors    *colors,
+                                    const WidgetParameters    *params,
+                                    int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       const CairoColor *border = &colors->spot[2];
+       CairoColor shade1, shade2, shade3;
+       cairo_pattern_t *pattern;
+
+       ge_shade_color (fill, 1.16, &shade1);
+       ge_shade_color (fill, 1.08, &shade2);
+       ge_shade_color (fill, 1.08, &shade3);
+       cairo_set_line_width (cr, 1.0);
+
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       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,   shade3.r, shade3.g, shade3.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_glossy_draw_selected_cell (cairo_t                  *cr,
+                                     const ClearlooksColors   *colors,
+                                     const WidgetParameters   *params,
+                                     int x, int y, int width, int height)
+{
+       CairoColor color;
+
+       if (params->focus)
+               color = colors->base[params->state_type];
+       else
+               color = colors->base[GTK_STATE_ACTIVE];
+
+       clearlooks_draw_glossy_gradient (cr, x, y, width, height, &color, params->disabled, 0.0, CR_CORNER_NONE);
+}
+
+
+static void
+clearlooks_glossy_draw_radiobutton (cairo_t *cr,
+                             const ClearlooksColors  *colors,
+                             const WidgetParameters  *widget,
+                             const CheckboxParameters *checkbox,
+                             int x, int y, int width, int height)
+{
+       const CairoColor *border;
+       const CairoColor *dot;
+       CairoColor shadow;
+       CairoColor highlight;
+       cairo_pattern_t *pt;
+       gboolean inconsistent;
+       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
+
+       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
+       draw_bullet |= inconsistent;
+
+       if (widget->disabled)
+       {
+               border = &colors->shade[5];
+               dot    = &colors->shade[6];
+       }
+       else
+       {
+               if (widget->prelight)
+                       border = &colors->spot[2];
+               else
+                       border = &colors->shade[6];
+               dot    = &colors->text[0];
+       }
+
+       ge_shade_color (&widget->parentbg, 0.9, &shadow);
+       ge_shade_color (&widget->parentbg, 1.1, &highlight);
+
+       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, 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, 1);
+
+       cairo_arc       (cr, 7, 7, 5.5, 0, G_PI*2);
+       
+       if (!widget->disabled)
+       {
+               if (widget->prelight)
+                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
+               else            
+                       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, 4);
+
+                       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, 7, 7, 3, 0, G_PI*2);
+                       ge_cairo_set_color (cr, dot);
+                       cairo_fill (cr);
+               
+                       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);
+               }
+       }
+}
+
+static void
+clearlooks_glossy_draw_checkbox (cairo_t *cr,
+                          const ClearlooksColors  *colors,
+                          const WidgetParameters  *widget,
+                          const CheckboxParameters *checkbox,
+                          int x, int y, int width, int height)
+{
+       const CairoColor *border;
+       const CairoColor *dot; 
+       gboolean inconsistent = FALSE;
+       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
+
+       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
+       draw_bullet |= inconsistent;
+       
+       if (widget->disabled)
+       {
+               border = &colors->shade[5];
+               dot    = &colors->shade[6];
+       }
+       else
+       {
+               if (widget->prelight)
+                       border = &colors->spot[2];
+               else            
+                       border = &colors->shade[6];
+               dot    = &colors->text[GTK_STATE_NORMAL];
+       }
+
+       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.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);
+       }
+       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);
+       }
+       
+       if (!widget->disabled)
+       {
+               if (widget->prelight)
+                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
+               else
+                       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) /* Inconsistent */
+               {
+                       cairo_set_line_width (cr, 2.0);
+                       cairo_move_to (cr, 3, height*0.5);
+                       cairo_line_to (cr, width-3, height*0.5);
+               }
+               else
+               {
+                       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);
+       }
+}
+
+void
+clearlooks_register_style_glossy (ClearlooksStyleFunctions *functions)
+{
+       functions->draw_inset              = clearlooks_glossy_draw_inset;
+       functions->draw_button             = clearlooks_glossy_draw_button;
+       functions->draw_progressbar_trough = clearlooks_glossy_draw_progressbar_trough;
+       functions->draw_progressbar_fill   = clearlooks_glossy_draw_progressbar_fill;
+       functions->draw_scale_trough       = clearlooks_glossy_draw_scale_trough;
+       functions->draw_tab                = clearlooks_glossy_draw_tab;
+       functions->draw_slider             = clearlooks_glossy_draw_slider;
+       functions->draw_slider_button      = clearlooks_glossy_draw_slider_button;
+       functions->draw_scrollbar_stepper  = clearlooks_glossy_draw_scrollbar_stepper;
+       functions->draw_scrollbar_slider   = clearlooks_glossy_draw_scrollbar_slider;
+       functions->draw_list_view_header   = clearlooks_glossy_draw_list_view_header;
+       functions->draw_toolbar            = clearlooks_glossy_draw_toolbar;
+       functions->draw_menuitem           = clearlooks_glossy_draw_menuitem;
+       functions->draw_menubaritem        = clearlooks_glossy_draw_menubaritem;
+       functions->draw_selected_cell      = clearlooks_glossy_draw_selected_cell;
+       functions->draw_checkbox           = clearlooks_glossy_draw_checkbox;
+       functions->draw_radiobutton        = clearlooks_glossy_draw_radiobutton;
+}
diff --git a/libs/clearlooks-newer/clearlooks_draw_gummy.c b/libs/clearlooks-newer/clearlooks_draw_gummy.c
new file mode 100644 (file)
index 0000000..e2a9902
--- /dev/null
@@ -0,0 +1,1524 @@
+/* Clearlooks Gummy style
+ * Copyright (C) 2007 Andrea Cimitan
+ *
+ * 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 Andrea Cimitan <andrea.cimitan@gmail.com>
+ */
+
+#include "clearlooks_draw.h"
+#include "clearlooks_style.h"
+#include "clearlooks_types.h"
+
+#include "support.h"
+#include <ge-support.h>
+
+#include <cairo.h>
+
+/* Normal shadings */
+#define SHADE_TOP 1.08
+#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
+#define LISTVIEW_SHADE_BOTTOM 0.96
+
+/* Toolbar */
+#define TOOLBAR_SHADE_TOP 1.04
+#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,
+                                const CairoColor *color,
+                                gboolean disabled, gboolean radius, CairoCorners corners)
+{
+       CairoColor fill;
+       CairoColor shade1, shade2, shade3;
+       cairo_pattern_t *pt;
+
+       ge_shade_color (color, disabled? 1.04 : SHADE_TOP, &shade1);
+       ge_shade_color (color, disabled? 1.01 : SHADE_CENTER_TOP, &shade2);
+       ge_shade_color (color, disabled? 0.99 : 1.0, &fill);
+       ge_shade_color (color, disabled? 0.96 : SHADE_BOTTOM, &shade3);
+
+       pt = cairo_pattern_create_linear (x, y, x, y+height);
+       cairo_pattern_add_color_stop_rgb (pt, 0.0, shade1.r, shade1.g, shade1.b);
+       cairo_pattern_add_color_stop_rgb (pt, 0.5, shade2.r, shade2.g, shade2.b);
+       cairo_pattern_add_color_stop_rgb (pt, 0.5, fill.r, fill.g, fill.b);
+       cairo_pattern_add_color_stop_rgb (pt, 1.0, shade3.r, shade3.g, shade3.b);
+
+       cairo_set_source (cr, pt);
+       ge_cairo_rounded_rectangle (cr, x, y, width, height, radius, corners);
+       cairo_fill (cr);
+
+       cairo_pattern_destroy (pt);
+}
+
+static void
+clearlooks_set_mixed_color (cairo_t          *cr, 
+                            const CairoColor *color1, 
+                            const CairoColor *color2, 
+                            gdouble mix_factor)
+{
+       CairoColor composite;
+
+       ge_mix_color (color1, color2, mix_factor, &composite);
+       ge_cairo_set_color (cr, &composite);
+}
+
+static void
+clearlooks_gummy_draw_highlight_and_shade (cairo_t                *cr, 
+                                           const CairoColor       *bg_color,
+                                           const ShadowParameters *params,
+                                           int width, int height, gdouble radius)
+{
+       CairoColor shadow;
+       CairoColor highlight;
+       uint8 corners = params->corners;
+       double x = 1.0;
+       double y = 1.0;
+
+       /* not really sure of shading ratios... we will think */
+       ge_shade_color (bg_color, 0.8, &shadow);
+       ge_shade_color (bg_color, 1.2, &highlight);
+
+       cairo_save (cr);
+
+       /* Top/Left highlight */
+       if (corners & CR_CORNER_BOTTOMLEFT)
+               cairo_move_to (cr, x, y+height-radius);
+       else
+               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);
+       else
+               cairo_line_to (cr, x+width, y);
+
+       if (params->shadow & CL_SHADOW_OUT)
+               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 */
+       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)
+               cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.5);
+       else
+               cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
+
+       cairo_stroke (cr);
+
+       cairo_restore (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,
+                              int x, int y, int width, int height)
+{
+       double xoffset = 0, yoffset = 0;
+       CairoColor fill            = colors->bg[params->state_type];
+       CairoColor border_normal   = colors->shade[6];
+       CairoColor border_disabled = colors->shade[4];
+       double radius;
+
+       cairo_pattern_t *pattern;
+
+       cairo_save (cr);
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+
+       /* 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)
+       {
+               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_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_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);
+               }
+
+               if (params->is_default)
+               {
+                       CairoColor shadow = colors->spot[1];
+
+                       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, 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_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);
+
+       /* Pressed button shadow */
+       if (params->active)
+       {
+               CairoColor shadow;
+               ge_shade_color (&fill, 0.92, &shadow);
+
+               cairo_save (cr);
+
+               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);
+
+               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+1, yoffset+4);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
+               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);
+
+               cairo_rectangle (cr, xoffset+1, yoffset+1, 3, height-(yoffset*2)-2);
+
+               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+4, yoffset+1);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
+               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);
+
+               cairo_restore (cr);
+       }
+
+       /* Border */
+       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);
+       cairo_stroke (cr);
+
+       if (!params->active)
+       {
+               cairo_translate (cr, 0.5, 0.5);
+               clearlooks_gummy_draw_top_left_highlight (cr, &fill, params, width, height, radius);
+       }
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_gummy_draw_entry (cairo_t                *cr,
+                             const ClearlooksColors *colors,
+                             const WidgetParameters *params,
+                             int x, int y, int width, int height)
+{
+       const CairoColor *base = &colors->base[params->state_type];
+       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_translate (cr, x+0.5, y+0.5);
+       cairo_set_line_width (cr, 1.0);
+
+       /* 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-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_stroke_rectangle (cr, 2, 2, width-5, height-5);
+       }
+       else
+       {
+               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_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_rounded_rectangle (cr, 1, 1, width-3, height-3, radius, params->corners);
+       ge_cairo_set_color (cr, &border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_gummy_draw_progressbar_trough (cairo_t                *cr,
+                                          const ClearlooksColors *colors,
+                                          const WidgetParameters *params,
+                                          int x, int y, int width, int height)
+{
+       const CairoColor *border = &colors->shade[7];
+       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]);
+       cairo_fill (cr);
+
+       /* Draw border */
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width-1, height-1, radius, params->corners);
+       clearlooks_set_mixed_color (cr, border, &colors->shade[2], 0.3);
+       cairo_stroke (cr);
+
+       /* clip the corners of the shadows */
+       ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
+       cairo_clip (cr);
+
+       ge_shade_color (border, 0.92, &shadow);
+
+       /* 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.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);
+
+       /* 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.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);
+
+       cairo_restore (cr);
+}
+
+static void
+clearlooks_gummy_draw_progressbar_fill (cairo_t                     *cr,
+                                        const ClearlooksColors      *colors,
+                                        const WidgetParameters      *params,
+                                        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;
+
+       cairo_pattern_t *pattern;
+       CairoColor       shade1, shade2, shade3;
+       CairoColor       border;
+       CairoColor       shadow;
+
+       radius = MAX (0, params->radius - params->xthickness);
+
+       cairo_save (cr);
+
+       if (!is_horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
+               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
+
+       /* Clamp the radius so that the _height_ fits ... */
+       radius = MIN (radius, height / 2.0);
+
+       stroke_width = height*2;
+       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
+
+       cairo_translate (cr, x, y);
+
+       cairo_save (cr);
+       /* This is kind of nasty ... Clip twice from each side in case the length
+        * of the fill is smaller than twice the radius. */
+       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (cr);
+       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
+       cairo_clip (cr);
+
+       /* Draw the background gradient */
+       ge_shade_color (&colors->spot[1], SHADE_TOP, &shade1);
+       ge_shade_color (&colors->spot[1], SHADE_CENTER_TOP, &shade2);
+       ge_shade_color (&colors->spot[1], SHADE_BOTTOM, &shade3);
+       pattern = cairo_pattern_create_linear (0, 0, 0, height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.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, colors->spot[1].r, colors->spot[1].g, colors->spot[1].b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade3.r, shade3.g, shade3.b);
+       cairo_set_source (cr, pattern);
+       cairo_paint (cr);
+       cairo_pattern_destroy (pattern);
+
+       /* 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;
+       }
+
+       cairo_set_source_rgba (cr, colors->spot[2].r,
+                                  colors->spot[2].g,
+                                  colors->spot[2].b,
+                                  0.15);
+
+       cairo_fill (cr);
+       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.2);
+
+       /* 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. */
+       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (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.6;
+       ge_shade_color (&colors->shade[7], 0.92, &shadow);
+       shadow.a = 0.2;
+
+       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);
+               ge_cairo_set_color (cr, &shadow);
+               cairo_stroke (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);
+       }
+
+       cairo_restore (cr);
+
+       cairo_restore (cr); /* rotation, mirroring */
+}
+
+static void
+clearlooks_gummy_scale_draw_gradient (cairo_t          *cr,
+                                      const CairoColor *fill,
+                                      const CairoColor *border,
+                                      int x, int y, int width, int height,
+                                      gboolean horizontal, gboolean in)
+{
+       cairo_pattern_t *pattern;
+
+       CairoColor f1, f2;
+
+       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, 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+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_stroke_rectangle (cr, x, y, width, height);
+}
+
+#define TROUGH_SIZE 6
+static void
+clearlooks_gummy_draw_scale_trough (cairo_t                *cr,
+                                    const ClearlooksColors *colors,
+                                    const WidgetParameters *params,
+                                    const SliderParameters *slider,
+                                    int x, int y, int width, int height)
+{
+       int     trough_width, trough_height;
+       double  translate_x, translate_y;
+
+       if (slider->horizontal)
+       {
+               trough_width  = width-3;
+               trough_height = TROUGH_SIZE-2;
+
+               translate_x   = x + 0.5;
+               translate_y   = y + 0.5 + (height/2) - (TROUGH_SIZE/2);
+       }
+       else
+       {
+               trough_width  = TROUGH_SIZE-2;
+               trough_height = height-3;
+
+               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+2, trough_height+2, 0, 0);
+
+       cairo_translate (cr, 1, 1);
+
+       if (!slider->lower && !slider->fill_level)
+               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)
+               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);
+       }
+
+}
+
+static void
+clearlooks_gummy_draw_tab (cairo_t                *cr,
+                           const ClearlooksColors *colors,
+                           const WidgetParameters *params,
+                           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;
+
+       double               radius;
+       double               strip_size;
+
+       radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
+
+       /* Set clip */
+       cairo_rectangle      (cr, x, y, width, height);
+       cairo_clip           (cr);
+       cairo_new_path       (cr);
+
+       /* Translate and set line width */
+       cairo_set_line_width (cr, 1.0);
+       cairo_translate      (cr, x+0.5, y+0.5);
+
+       /* Make the tabs slightly bigger than they should be, to create a gap */
+       /* And calculate the strip size too, while you're at it */
+       if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
+       {
+               height += 3.0;
+               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;
+               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, 0, width-1, height-1,
+                                   radius, params->corners);
+
+       /* Draw fill */
+       ge_cairo_set_color (cr, fill);
+       cairo_fill  (cr);
+
+       /* Draw highlight */
+       if (!params->active)
+       {
+               ShadowParameters shadow;
+
+               shadow.shadow  = CL_SHADOW_OUT;
+               shadow.corners = params->corners;
+
+               clearlooks_gummy_draw_highlight_and_shade (cr, &colors->bg[0], &shadow,
+                                                    width, height, radius);
+       }
+
+       if (params->active)
+       {
+               CairoColor hilight;
+               CairoColor shade1, shade2, shade3;
+
+               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);
+
+               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
+       {
+               /* 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.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);
+               cairo_pattern_destroy (pattern);
+       }
+
+       ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+
+       if (params->active)
+       {
+               ge_cairo_set_color (cr, border);
+               cairo_stroke (cr);
+       }
+       else
+       {
+               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);
+               cairo_set_source (cr, pattern);
+               cairo_stroke (cr);
+               cairo_pattern_destroy (pattern);
+       }
+}
+
+static void
+clearlooks_gummy_draw_separator (cairo_t                   *cr,
+                                 const ClearlooksColors    *colors,
+                                 const WidgetParameters    *widget,
+                                 const SeparatorParameters *separator,
+                                 int x, int y, int width, int height)
+{
+       CairoColor color = colors->shade[3];
+       CairoColor hilight;
+       ge_shade_color (&color, 1.3, &hilight);
+
+       cairo_save (cr);
+       cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+
+       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);
+       }
+       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_restore (cr);
+}
+
+static void
+clearlooks_gummy_draw_slider (cairo_t                *cr,
+                              const ClearlooksColors *colors,
+                              const WidgetParameters *params,
+                              int x, int y, int width, int height)
+{
+       const CairoColor *border = &colors->shade[7];
+       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_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);
+
+       ge_shade_color (&fill, SHADE_TOP, &shade1);
+       ge_shade_color (&fill, SHADE_CENTER_TOP, &shade2);
+       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_rectangle (cr, 1, 1, width-2, height-2);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       clearlooks_set_mixed_color (cr, border, &fill, 0.2);
+       if (params->prelight)
+               ge_cairo_set_color (cr, &colors->spot[2]);
+       ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, 2.5, params->corners);
+       cairo_stroke (cr);
+
+       /* Handle */
+       shift_x = (width%2 == 0 ? 1 : 0);
+       bar_x = width/2-3+shift_x;
+       cairo_translate (cr, 0.5, 0.5);
+       ge_cairo_set_color (cr, border);
+       for (i=0; i<3-shift_x; i++)
+       {
+               cairo_move_to (cr, bar_x, 4);
+               cairo_line_to (cr, bar_x, height-5);
+               bar_x += 3;
+       }
+       cairo_stroke (cr);
+
+       clearlooks_gummy_draw_top_left_highlight (cr, &fill, params, width, height, 2.0);
+}
+
+static void
+clearlooks_gummy_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 - 1.0) / 2.0, (height - 1.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);
+}
+
+static void
+clearlooks_gummy_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)
+{
+       CairoCorners corners = CR_CORNER_NONE;
+       const CairoColor *border = &colors->shade[scrollbar->has_color ? 7 : 6];
+       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)
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
+               else if (stepper->stepper == CL_STEPPER_D)
+                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
+       }
+       else
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
+               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);
+
+       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);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       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
+clearlooks_gummy_draw_scrollbar_slider (cairo_t                   *cr,
+                                        const ClearlooksColors    *colors,
+                                        const WidgetParameters    *widget,
+                                        const ScrollBarParameters *scrollbar,
+                                        int x, int y, int width, int height)
+{
+       CairoColor fill = scrollbar->color;
+       CairoColor border, handles;
+       CairoColor hilight;
+       CairoColor shade1, shade2, shade3;
+       cairo_pattern_t *pattern;
+       int bar_x, i;
+
+       gdouble hue_scroll, brightness_scroll, saturation_scroll;
+       gdouble hue_bg, brightness_bg, saturation_bg;
+
+       ge_hsb_from_color (&fill, &hue_scroll, &saturation_scroll, &brightness_scroll);
+       ge_hsb_from_color (&colors->bg[0], &hue_bg, &saturation_bg, &brightness_bg);
+
+       /* Set the right color for border and handles */
+       if ((fabs(saturation_scroll - saturation_bg) < 0.30) &&
+           (fabs(brightness_scroll - brightness_bg) < 0.20))
+               ge_shade_color (&fill, 0.475, &border);
+       else
+               ge_shade_color (&fill, 0.575, &border);
+       /* The following lines increase contrast when the HUE is between 25 and 195, */
+       /* fixing a LOT of colorschemes! */
+       if (scrollbar->has_color && (hue_scroll < 195) && (hue_scroll > 25))
+               ge_shade_color (&border, 0.85, &border);
+
+       handles = border;
+       ge_mix_color (&border, &fill, scrollbar->has_color? 0.3 : 0.2, &border);
+
+       if (scrollbar->junction & CL_JUNCTION_BEGIN)
+       {
+               if (scrollbar->horizontal)
+               {
+                       x -= 1;
+                       width += 1;
+               }
+               else
+               {
+                       y -= 1;
+                       height += 1;
+               }
+       }
+       if (scrollbar->junction & CL_JUNCTION_END)
+       {
+               if (scrollbar->horizontal)
+                       width += 1;
+               else
+                       height += 1;
+       }
+
+       if (!scrollbar->horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       cairo_translate (cr, x, y);
+
+       if (widget->prelight)
+               ge_shade_color (&fill, 1.04, &fill);
+
+       cairo_set_line_width (cr, 1);
+
+       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);
+
+       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,   shade3.r, shade3.g, shade3.b);
+       cairo_rectangle (cr, 1, 1, width-2, height-2);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       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);
+       }
+       else
+       {
+               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, TOPLEFT_HIGHLIGHT_ALPHA);
+               cairo_stroke(cr);
+       }
+
+       ge_cairo_set_color (cr, &border);
+       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
+
+       /* Handle */
+       bar_x = width/2 - 4;
+       cairo_translate(cr, 0.5, 0.5);
+       ge_cairo_set_color (cr, &handles);
+       for (i=0; i<3; i++)
+       {
+               cairo_move_to (cr, bar_x, 5);
+               cairo_line_to (cr, bar_x, height-6);
+               bar_x += 3;
+       }
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_gummy_draw_list_view_header (cairo_t                        *cr,
+                                        const ClearlooksColors         *colors,
+                                        const WidgetParameters         *params,
+                                        const ListViewHeaderParameters *header,
+                                        int x, int y, int width, int height)
+{
+/*
+       CairoColor *border = !params->prelight? (CairoColor*)&colors->shade[4] : (CairoColor*)&colors->spot[1];
+*/
+       const CairoColor *border = &colors->shade[4];
+       const CairoColor *fill   = &colors->bg[params->state_type];
+       CairoColor hilight;
+       CairoColor shade1, shade2, shade3;
+
+       cairo_pattern_t *pattern;
+
+       ge_shade_color (fill, 1.11, &hilight);
+       ge_shade_color (fill, LISTVIEW_SHADE_TOP, &shade1);
+       ge_shade_color (fill, LISTVIEW_SHADE_CENTER_TOP, &shade2);
+       ge_shade_color (fill, LISTVIEW_SHADE_BOTTOM, &shade3);
+
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+
+       /* Draw the fill */
+       pattern = cairo_pattern_create_linear (0, 0, 0, height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.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-1.0/height, shade3.r, shade3.g, shade3.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0-1.0/height, border->r, border->g, border->b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, border->r, border->g, border->b);
+
+       cairo_set_source (cr, pattern);
+       cairo_rectangle (cr, 0, 0, width, height);
+       cairo_fill (cr);
+
+       cairo_pattern_destroy (pattern);
+
+       /* Draw highlight */
+       if (header->order == CL_ORDER_FIRST)
+       {
+               cairo_move_to (cr, 0.5, height-1.5);
+               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 resize grip */
+       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);
+               else
+                       params->style_functions->draw_separator (cr, colors, params, &separator,
+                                                                1.5, 4.0, 2, height-8.0);
+       }
+}
+
+static void
+clearlooks_gummy_draw_toolbar (cairo_t                 *cr,
+                               const ClearlooksColors  *colors,
+                               const WidgetParameters  *widget,
+                               const ToolbarParameters *toolbar,
+                               int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->bg[GTK_STATE_NORMAL];
+       const CairoColor *dark = &colors->shade[3];
+       CairoColor light;
+       ge_shade_color (fill, toolbar->style == 1 ? 1.1 : 1.05, &light);
+
+       cairo_set_line_width (cr, 1.0);
+       cairo_translate (cr, x, y);
+
+       if (toolbar->style == 1) /* Enable Extra features */
+       {
+               cairo_pattern_t *pattern;
+               CairoColor shade1, shade2, shade3;
+
+               ge_shade_color (fill, TOOLBAR_SHADE_TOP, &shade1);
+               ge_shade_color (fill, TOOLBAR_SHADE_CENTER_TOP, &shade2);
+               ge_shade_color (fill, TOOLBAR_SHADE_BOTTOM, &shade3);
+
+               /* Draw the fill */
+               pattern = cairo_pattern_create_linear (0, 0, 0, height);
+               cairo_pattern_add_color_stop_rgb (pattern, 0.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_rectangle (cr, 0, 0, width, height);
+               cairo_fill (cr);
+
+               cairo_pattern_destroy (pattern);
+       }
+       else /* Flat */
+       {
+               ge_cairo_set_color (cr, fill);
+               cairo_paint (cr);
+       }
+
+       if (!toolbar->topmost)
+       {
+               /* Draw highlight */
+               cairo_move_to       (cr, 0, 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-1, height-0.5);
+       ge_cairo_set_color  (cr, dark);
+       cairo_stroke        (cr);
+}
+
+static void
+clearlooks_gummy_draw_menuitem (cairo_t                *cr,
+                                const ClearlooksColors *colors,
+                                const WidgetParameters *params,
+                                int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       const CairoColor *border = &colors->spot[2];
+       CairoColor shade1, shade2, shade3;
+       cairo_pattern_t *pattern;
+
+       ge_shade_color (fill, SHADE_TOP, &shade1);
+       ge_shade_color (fill, SHADE_CENTER_TOP, &shade2);
+       ge_shade_color (fill, SHADE_BOTTOM, &shade3);
+       cairo_set_line_width (cr, 1.0);
+
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       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,   shade3.r, shade3.g, shade3.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_gummy_draw_menubaritem (cairo_t                *cr,
+                                   const ClearlooksColors *colors,
+                                   const WidgetParameters *params,
+                                   int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       const CairoColor *border = &colors->spot[2];
+       CairoColor shade1, shade2, shade3;
+       cairo_pattern_t *pattern;
+
+       ge_shade_color (fill, SHADE_TOP, &shade1);
+       ge_shade_color (fill, SHADE_CENTER_TOP, &shade2);
+       ge_shade_color (fill, SHADE_BOTTOM, &shade3);
+       cairo_set_line_width (cr, 1.0);
+
+       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       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,   shade3.r, shade3.g, shade3.b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_gummy_draw_selected_cell (cairo_t                *cr,
+                                    const ClearlooksColors *colors,
+                                    const WidgetParameters *params,
+                                    int x, int y, int width, int height)
+{
+       CairoColor color;
+
+       if (params->focus)
+               color = colors->base[params->state_type];
+       else
+               color = colors->base[GTK_STATE_ACTIVE];
+
+       clearlooks_draw_gummy_gradient (cr, x, y, width, height, &color, params->disabled, 0.0, CR_CORNER_NONE);
+}
+
+static void
+clearlooks_gummy_draw_statusbar (cairo_t                *cr,
+                                 const ClearlooksColors *colors,
+                                 const WidgetParameters *widget,
+                                 int x, int y, int width, int height)
+{
+       const CairoColor *dark = &colors->shade[3];
+       CairoColor hilight;
+
+       ge_shade_color (dark, 1.3, &hilight);
+
+       cairo_set_line_width  (cr, 1);
+       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);
+       cairo_stroke          (cr);
+
+       cairo_translate       (cr, 0, 1);
+       cairo_move_to         (cr, 0, 0);
+       cairo_line_to         (cr, width, 0);
+       ge_cairo_set_color    (cr, &hilight);
+       cairo_stroke          (cr);
+}
+
+static void
+clearlooks_gummy_draw_radiobutton (cairo_t                  *cr,
+                                   const ClearlooksColors   *colors,
+                                   const WidgetParameters   *widget,
+                                   const CheckboxParameters *checkbox,
+                                   int x, int y, int width, int height)
+{
+       const CairoColor *border;
+       const CairoColor *dot;
+       CairoColor shadow;
+       CairoColor highlight;
+       cairo_pattern_t *pt;
+       gboolean inconsistent;
+       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
+
+       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
+       draw_bullet |= inconsistent;
+
+       if (widget->disabled)
+       {
+               border = &colors->shade[5];
+               dot    = &colors->shade[6];
+       }
+       else
+       {
+               if (widget->prelight)
+                       border = &colors->spot[2];
+               else
+                       border = &colors->shade[6];
+               dot    = &colors->text[0];
+       }
+
+       ge_shade_color (&widget->parentbg, 0.9, &shadow);
+       ge_shade_color (&widget->parentbg, 1.1, &highlight);
+
+       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, 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, 1);
+
+       cairo_arc (cr, 7, 7, 5.5, 0, G_PI*2);
+
+       if (!widget->disabled)
+       {
+               if (widget->prelight)
+                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
+               else
+                       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, 4);
+
+                       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, 7, 7, 3, 0, G_PI*2);
+                       ge_cairo_set_color (cr, dot);
+                       cairo_fill (cr);
+
+                       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);
+               }
+       }
+}
+
+static void
+clearlooks_gummy_draw_checkbox (cairo_t                  *cr,
+                                const ClearlooksColors   *colors,
+                                const WidgetParameters   *widget,
+                                const CheckboxParameters *checkbox,
+                                int x, int y, int width, int height)
+{
+       const CairoColor *border;
+       const CairoColor *dot; 
+       gboolean inconsistent = FALSE;
+       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
+
+       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
+       draw_bullet |= inconsistent;
+
+       if (widget->disabled)
+       {
+               border = &colors->shade[5];
+               dot    = &colors->shade[6];
+       }
+       else
+       {
+               if (widget->prelight)
+                       border = &colors->spot[2];
+               else            
+                       border = &colors->shade[6];
+               dot    = &colors->text[GTK_STATE_NORMAL];
+       }
+
+       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.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);
+       }
+       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);
+       }
+       
+       if (!widget->disabled)
+       {               
+               if (widget->prelight)
+                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
+               else            
+                       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) /* Inconsistent */
+               {
+                       cairo_set_line_width (cr, 2.0);
+                       cairo_move_to (cr, 3, height*0.5);
+                       cairo_line_to (cr, width-3, height*0.5);
+               }
+               else
+               {
+                       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);
+       }
+}
+
+void
+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;
+}
diff --git a/libs/clearlooks-newer/clearlooks_draw_inverted.c b/libs/clearlooks-newer/clearlooks_draw_inverted.c
new file mode 100644 (file)
index 0000000..2e8ee3b
--- /dev/null
@@ -0,0 +1,1002 @@
+/* Clearlooks Inverted style
+ * Copyright (C) 2007 Andrea Cimitan
+ *
+ * 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 Andrea Cimitan <andrea.cimitan@gmail.com>
+ */
+
+#include "clearlooks_draw.h"
+#include "clearlooks_style.h"
+#include "clearlooks_types.h"
+
+#include "support.h"
+#include <ge-support.h>
+
+#include <cairo.h>
+
+
+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;
+
+       CairoColor bottom_shade;
+       ge_shade_color (color, hilight, &bottom_shade);
+
+       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);
+}
+
+static void
+clearlooks_inverted_draw_button (cairo_t *cr,
+                        const ClearlooksColors *colors,
+                        const WidgetParameters *params,
+                        int x, int y, int width, int height)
+{
+       double xoffset = 0, yoffset = 0;
+       double radius = params->radius;
+       const CairoColor *fill = &colors->bg[params->state_type];       
+       const CairoColor *border_disabled = &colors->shade[4];
+       CairoColor border_normal;
+       CairoColor shadow;
+
+       ge_shade_color(&colors->shade[6], 1.05, &border_normal);
+       ge_shade_color (&border_normal, 0.925, &shadow);
+       
+       cairo_save (cr);
+       
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+
+       if (params->xthickness == 3 || params->ythickness == 3)
+       {
+               if (params->xthickness == 3)
+                       xoffset = 1;
+               if (params->ythickness == 3)
+                       yoffset = 1;
+       }
+
+       radius = MIN (radius, MIN ((width - 2.0 - xoffset * 2.0) / 2.0, (height - 2.0 - yoffset * 2) / 2.0));
+
+       if (params->xthickness == 3 || params->ythickness == 3)
+       {
+               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, bottom_shade;
+               ge_shade_color (fill, 0.95, &top_shade);                
+               ge_shade_color (fill, 1.05, &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, 1.0, bottom_shade.r, bottom_shade.g, bottom_shade.b);
+               cairo_set_source (cr, pattern);
+               cairo_fill (cr);
+               cairo_pattern_destroy (pattern);
+       }
+       else
+       {
+               cairo_pattern_t *pattern;
+               
+               ge_cairo_set_color (cr, fill);
+               cairo_fill_preserve (cr);
+
+               pattern = cairo_pattern_create_linear (0, 0, 0, height);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.0);
+               cairo_pattern_add_color_stop_rgba (pattern, 0.4, shadow.r, shadow.g, shadow.b, 0.0);
+               cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.2);
+               cairo_set_source (cr, pattern);
+               cairo_fill_preserve (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.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.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)
+       {
+               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_set_color (cr, d);
+               ge_cairo_stroke_rectangle (cr, 3.5, 3.5, width-7, height-7);
+       }
+       
+       if (params->disabled)
+                       ge_cairo_set_color (cr, border_disabled);
+       else
+               if (!params->active)
+                       clearlooks_set_border_gradient (cr, &border_normal, 1.32, 0, height); 
+               else
+                       ge_cairo_set_color (cr, &border_normal);
+       
+       ge_cairo_rounded_rectangle (cr, xoffset + 0.5, yoffset + 0.5,
+                                  width-(xoffset*2)-1, height-(yoffset*2)-1,
+                                  radius, params->corners);
+       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);
+}
+
+static void
+clearlooks_inverted_draw_progressbar_fill (cairo_t *cr,
+                                  const ClearlooksColors *colors,
+                                  const WidgetParameters *params,
+                                  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;
+
+       cairo_pattern_t *pattern;
+       CairoColor       bg_shade;
+       CairoColor       border;
+       CairoColor       shadow;
+       CairoColor       top_shade;
+
+       radius = MAX (0, params->radius - params->xthickness);
+
+       cairo_save (cr);
+
+       if (!is_horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
+               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
+
+       /* Clamp the radius so that the _height_ fits ...  */
+       radius = MIN (radius, height / 2.0);
+
+       stroke_width = height*2;
+       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
+       
+       cairo_translate (cr, x, y);
+
+       cairo_save (cr);
+       /* This is kind of nasty ... Clip twice from each side in case the length
+        * of the fill is smaller than twice the radius. */
+       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (cr);
+       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
+       cairo_clip (cr);
+
+               
+       ge_shade_color (&colors->spot[1], 1.05, &top_shade);
+
+       /* Draw the background gradient */
+       ge_shade_color (&colors->spot[1], 0.925, &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.5, top_shade.r, top_shade.g, top_shade.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)
+       {
+               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;
+       }
+       
+       cairo_set_source_rgba (cr, colors->spot[2].r,
+                                  colors->spot[2].g,
+                                  colors->spot[2].b,
+                                  0.15);
+       
+       cairo_fill (cr);
+       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. */
+       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+       cairo_clip (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;
+       shadow.a = 0.1;
+
+       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);
+               ge_cairo_set_color (cr, &shadow);
+               cairo_stroke (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);
+       }
+       
+       cairo_restore (cr);
+
+       cairo_restore (cr); /* rotation, mirroring */
+}
+
+static void
+clearlooks_inverted_draw_menuitem (cairo_t *cr,
+                          const ClearlooksColors          *colors,
+                          const WidgetParameters          *widget,
+                          int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->spot[1];
+       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 - 1, widget->radius, widget->corners);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0, fill_shade.r, fill_shade.g, fill_shade.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0,   fill->r, fill->g, fill->b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, &border);
+       cairo_stroke (cr);
+}
+
+static void
+clearlooks_inverted_draw_menubaritem (cairo_t *cr,
+                          const ClearlooksColors          *colors,
+                          const WidgetParameters          *widget,
+                          int x, int y, int width, int height)
+{
+       CairoColor *fill = (CairoColor*)&colors->spot[1];
+       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);
+
+       pattern = cairo_pattern_create_linear (x, y, x, y + height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0, fill_shade.r, fill_shade.g, fill_shade.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0,   fill->r, fill->g, fill->b);
+
+       cairo_set_source (cr, pattern);
+       cairo_fill_preserve  (cr);
+       cairo_pattern_destroy (pattern);
+
+       ge_cairo_set_color (cr, &border);
+       cairo_stroke_preserve (cr);
+}
+
+static void
+clearlooks_inverted_draw_tab (cairo_t *cr,
+                     const ClearlooksColors *colors,
+                     const WidgetParameters *params,
+                     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;
+       CairoColor           shadow;
+
+       cairo_pattern_t     *pattern;
+       
+       double               radius;
+       double               strip_size;
+
+       radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
+
+       /* Set clip */
+       cairo_rectangle      (cr, x, y, width, height);
+       cairo_clip           (cr);
+       cairo_new_path       (cr);
+
+       /* Translate and set line width */      
+       cairo_set_line_width (cr, 1.0);
+       cairo_translate      (cr, x+0.5, y+0.5);
+
+
+       /* Make the tabs slightly bigger than they should be, to create a gap */
+       /* And calculate the strip size too, while you're at it */
+       if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
+       {
+               height += 3.0;
+               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;
+               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, 0, width-1, height-1,
+                                   radius, params->corners);
+       
+       /* Draw fill */
+       ge_cairo_set_color (cr, fill);
+       cairo_fill   (cr);
+
+       ge_shade_color (fill, 1.3, &hilight);
+
+       /* Draw highlight */
+       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)
+       {
+               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/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);
+       }
+       else
+       {
+               /* 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_rgb  (pattern, 0.0,        stripe_fill->r, stripe_fill->g, stripe_fill->b);
+               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.0);
+               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_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+       
+       if (params->active)
+       {
+               ge_cairo_set_color (cr, border2);       
+               cairo_stroke (cr);
+       }
+       else
+       {
+               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);
+               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);
+       }
+}
+
+static void
+clearlooks_inverted_draw_slider (cairo_t *cr,
+                        const ClearlooksColors *colors,
+                        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];
+       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_translate      (cr, x, y);
+
+       if (params->disabled)
+               border = &colors->shade[4];
+       else if (params->prelight)
+               border = &colors->spot[2];
+       else
+               border = &colors->shade[6];
+
+       /* fill the widget */
+       cairo_rectangle (cr, 0.5, 0.5, width-2, height-2);
+
+       /* Fake light */
+       if (!params->disabled)
+       {
+               const CairoColor *top = &colors->shade[2];
+               const CairoColor *bot = &colors->shade[0];
+
+               pattern = cairo_pattern_create_linear (0, 0, 0, height);
+               cairo_pattern_add_color_stop_rgb (pattern, 0.0,  top->r, top->g, top->b);
+               cairo_pattern_add_color_stop_rgb (pattern, 1.0,  bot->r, bot->g, bot->b);
+               cairo_set_source (cr, pattern);
+               cairo_fill (cr);
+               cairo_pattern_destroy (pattern);
+       }
+       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, 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, 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.5, &highlight);
+               cairo_pattern_add_color_stop_rgb (pattern, 0.0, spot->r, spot->g, spot->b);
+               cairo_pattern_add_color_stop_rgb (pattern, 1.0, highlight.r, highlight.g, highlight.b);
+               cairo_set_source (cr, pattern);
+       }
+       else {
+               CairoColor hilight; 
+               ge_shade_color (fill, 1.5, &hilight);
+               cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
+       }
+
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       cairo_restore (cr);
+
+       /* Draw the border */
+       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
+               clearlooks_set_border_gradient (cr, border, 1.2, 0, height);
+       cairo_stroke (cr);
+
+       /* Draw handle lines */
+       if (width > 14)
+       {
+               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);
+               cairo_set_source_rgba (cr, border->r,
+                                          border->g,
+                                          border->b,
+                                          0.3);
+               cairo_stroke (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,
+                                  const ListViewHeaderParameters  *header,
+                                  int x, int y, int width, int height)
+{
+       const CairoColor *fill = &colors->bg[params->state_type];
+       const CairoColor *border = &colors->shade[4];
+       cairo_pattern_t *pattern;
+       CairoColor hilight_header;
+       CairoColor hilight;
+       CairoColor shadow;
+
+       ge_shade_color (border, 1.5, &hilight);
+       ge_shade_color (fill, 1.05, &hilight_header);   
+       ge_shade_color (fill, 0.95, &shadow);   
+
+       cairo_translate (cr, x, y);
+       cairo_set_line_width (cr, 1.0);
+       
+       /* Draw highlight */
+       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, 0, 0.0, height-1.0);
+       cairo_pattern_add_color_stop_rgb     (pattern, 0.0, shadow.r, shadow.g, shadow.b);
+       cairo_pattern_add_color_stop_rgb     (pattern, 1.0, hilight_header.r, hilight_header.g, hilight_header.b);
+
+       cairo_rectangle       (cr, 0, 1, width, height-2);
+       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)
+       {
+               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);
+               else
+                       params->style_functions->draw_separator (cr, colors, params, &separator,
+                                                                1.5, 4.0, 2, height-8.0);
+       }
+}
+
+
+static void
+clearlooks_inverted_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)
+{
+       CairoCorners corners = CR_CORNER_NONE;
+       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);
+
+       if (scrollbar->horizontal)
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
+               else if (stepper->stepper == CL_STEPPER_D)
+                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
+       }
+       else
+       {
+               if (stepper->stepper == CL_STEPPER_A)
+                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
+               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);
+                               
+       s1 = colors->bg[widget->state_type];
+       ge_shade_color(&s1, 0.95, &s2); 
+       ge_shade_color(&s1, 1.05, &s3); 
+       
+       cairo_pattern_add_color_stop_rgb(pattern, 0,    s2.r, s2.g, s2.b);
+       cairo_pattern_add_color_stop_rgb(pattern, 1.0,  s3.r, s3.g, s3.b);
+       cairo_set_source (cr, pattern);
+       cairo_fill (cr);
+       cairo_pattern_destroy (pattern);
+
+       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
+clearlooks_inverted_draw_scrollbar_slider (cairo_t *cr,
+                                   const ClearlooksColors          *colors,
+                                   const WidgetParameters          *widget,
+                                   const ScrollBarParameters       *scrollbar,
+                                   int x, int y, int width, int height)
+{
+       if (scrollbar->junction & CL_JUNCTION_BEGIN)
+       {
+               if (scrollbar->horizontal)
+               {
+                       x -= 1;
+                       width += 1;
+               }
+               else
+               {
+                       y -= 1;
+                       height += 1;
+               }
+       }
+       if (scrollbar->junction & CL_JUNCTION_END)
+       {
+               if (scrollbar->horizontal)
+                       width += 1;
+               else
+                       height += 1;
+       }
+       
+       if (!scrollbar->horizontal)
+               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+
+       cairo_translate (cr, x, y);     
+
+       if (scrollbar->has_color)
+       {
+               const CairoColor *border = &colors->shade[8];
+               CairoColor  fill    = scrollbar->color;
+               CairoColor  hilight;
+               CairoColor  shade1, shade2, shade3;
+               cairo_pattern_t *pattern;
+                               
+               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,    fill.r,  fill.g,  fill.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,  shade2.r, shade2.g, shade2.b); 
+               cairo_pattern_add_color_stop_rgb (pattern, 1.0,  shade1.r, shade1.g, shade1.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);
+       }
+       else
+       {
+               CairoColor border;
+               CairoColor s1, s2, s3;
+               cairo_pattern_t *pattern;
+               int bar_x, i;
+               
+               const CairoColor *dark  = &colors->shade[4];
+               const CairoColor *light = &colors->shade[0];            
+
+               ge_shade_color(&colors->shade[6], 1.05, &border);
+
+               pattern = cairo_pattern_create_linear(1, 1, 1, height-1);
+
+               s1 = colors->bg[widget->state_type];
+               ge_shade_color(&s1, 0.95, &s2); 
+               ge_shade_color(&s1, 1.05, &s3); 
+
+               cairo_pattern_add_color_stop_rgb(pattern, 0,    s2.r, s2.g, s2.b);
+               cairo_pattern_add_color_stop_rgb(pattern, 1.0,  s3.r, s3.g, s3.b);
+
+               cairo_rectangle (cr, 1, 1, width-2, height-2);
+               cairo_set_source(cr, pattern);
+               cairo_fill(cr);
+               cairo_pattern_destroy(pattern);
+               
+               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);
+               
+               /* draw handles */
+               cairo_set_line_width (cr, 1);
+               
+               bar_x = width/2 - 4;
+               cairo_translate(cr, 0.5, 0.5);
+               for (i=0; i<3; i++)
+               {
+                       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, 4);
+                       cairo_line_to (cr, bar_x+1, height-5);
+                       ge_cairo_set_color (cr, light);
+                       cairo_stroke (cr);
+                       
+                       bar_x += 3;
+               }
+       }
+}
+
+static void
+clearlooks_inverted_draw_selected_cell (cairo_t                  *cr,
+                              const ClearlooksColors   *colors,
+                              const WidgetParameters   *params,
+                              int x, int y, int width, int height)
+{
+       CairoColor upper_color;
+       CairoColor lower_color;
+       CairoColor border;
+       cairo_pattern_t *pattern;
+       cairo_save (cr);
+       
+       cairo_translate (cr, x, y);
+
+       if (params->focus)
+               upper_color = colors->base[params->state_type];
+       else
+               upper_color = colors->base[GTK_STATE_ACTIVE];
+
+       ge_shade_color(&upper_color, 0.9, &lower_color);
+
+       pattern = cairo_pattern_create_linear (0, 0, 0, height);
+       cairo_pattern_add_color_stop_rgb (pattern, 0.0, lower_color.r,
+                                                       lower_color.g,
+                                                       lower_color.b);
+       cairo_pattern_add_color_stop_rgb (pattern, 1.0, upper_color.r,
+                                                       upper_color.g,
+                                                       upper_color.b);
+
+
+       cairo_set_source (cr, pattern);
+       cairo_rectangle  (cr, 0, 0, width, height);
+       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);
+}
+
+void
+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;
+       functions->draw_tab               = clearlooks_inverted_draw_tab;
+       functions->draw_list_view_header  = clearlooks_inverted_draw_list_view_header;
+       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;
+}
+
diff --git a/libs/clearlooks-newer/clearlooks_rc_style.c b/libs/clearlooks-newer/clearlooks_rc_style.c
new file mode 100644 (file)
index 0000000..f486453
--- /dev/null
@@ -0,0 +1,473 @@
+/* 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>
+ * Modified by Kulyk Nazar <schamane@myeburg.net>
+ */
+
+#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);
+static void      clearlooks_rc_style_merge        (GtkRcStyle             *dest,
+                                                  GtkRcStyle             *src);
+
+
+static GtkRcStyleClass *clearlooks_parent_rc_class;
+
+GType clearlooks_type_rc_style = 0;
+
+enum
+{
+       TOKEN_SCROLLBARCOLOR = G_TOKEN_LAST + 1,
+       TOKEN_COLORIZESCROLLBAR,
+       TOKEN_CONTRAST,
+       TOKEN_SUNKENMENU,
+       TOKEN_PROGRESSBARSTYLE,
+       TOKEN_MENUBARSTYLE,
+       TOKEN_TOOLBARSTYLE,
+       TOKEN_MENUITEMSTYLE,
+       TOKEN_LISTVIEWITEMSTYLE,
+       TOKEN_ANIMATION,
+       TOKEN_STYLE,
+       TOKEN_RADIUS,
+
+       TOKEN_CLASSIC,
+       TOKEN_GLOSSY,
+       TOKEN_INVERTED,
+       TOKEN_GUMMY,
+
+       TOKEN_TRUE,
+       TOKEN_FALSE
+};
+
+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 }
+};
+
+
+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->style = CL_STYLE_CLASSIC;
+
+       clearlooks_rc->flags = 0;
+
+       clearlooks_rc->contrast = 1.0;
+       clearlooks_rc->menubarstyle = 0;
+       clearlooks_rc->toolbarstyle = 0;
+       clearlooks_rc->animation = FALSE;
+       clearlooks_rc->colorize_scrollbar = FALSE;
+       clearlooks_rc->radius = 3.0;
+}
+
+#ifdef HAVE_ANIMATION
+static void
+clearlooks_rc_style_finalize (GObject *object)
+{
+       /* cleanup all the animation stuff */
+       clearlooks_animation_cleanup ();
+
+       if (G_OBJECT_CLASS (clearlooks_parent_rc_class)->finalize != NULL)
+               G_OBJECT_CLASS (clearlooks_parent_rc_class)->finalize(object);
+}
+#endif
+
+
+static void
+clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass)
+{
+       GtkRcStyleClass *rc_style_class = GTK_RC_STYLE_CLASS (klass);
+#ifdef HAVE_ANIMATION
+       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;
+
+#ifdef HAVE_ANIMATION
+       g_object_class->finalize = clearlooks_rc_style_finalize;
+#endif
+}
+
+static guint
+clearlooks_gtk2_rc_parse_boolean (GtkSettings *settings,
+                     GScanner     *scanner,
+                     gboolean *retval)
+{
+       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 == TOKEN_TRUE)
+          *retval = TRUE;
+       else if (token == TOKEN_FALSE)
+          *retval = FALSE;
+       else
+          return TOKEN_TRUE;
+
+       return G_TOKEN_NONE;
+}
+
+static guint
+clearlooks_gtk2_rc_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
+clearlooks_gtk2_rc_parse_double (GtkSettings  *settings,
+                                 GScanner     *scanner,
+                                 gdouble      *val)
+{
+       guint token;
+
+       /* Skip 'blah' */
+       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;
+
+       *val = scanner->value.v_float;
+
+       return G_TOKEN_NONE;
+}
+
+static guint
+clearlooks_gtk2_rc_parse_int (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
+clearlooks_gtk2_rc_parse_style (GtkSettings      *settings,
+                                GScanner         *scanner,
+                                ClearlooksStyles *style)
+{
+       guint token;
+
+       g_assert (CL_NUM_STYLES == CL_STYLE_GUMMY + 1); /* so that people don't forget ;-) */
+
+       /* Skip 'style' */
+       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);
+  
+       switch (token)
+       {
+               case TOKEN_CLASSIC:
+                  *style = CL_STYLE_CLASSIC;
+                  break;
+               case TOKEN_GLOSSY:
+                  *style = CL_STYLE_GLOSSY;
+                  break;
+               case TOKEN_INVERTED:
+                  *style = CL_STYLE_INVERTED;
+                  break;
+               case TOKEN_GUMMY:
+                  *style = CL_STYLE_GUMMY;
+                  break;
+               default:
+                  return TOKEN_CLASSIC;
+       }
+
+       return G_TOKEN_NONE;
+}
+
+static guint
+clearlooks_gtk2_rc_parse_dummy (GtkSettings      *settings,
+                                GScanner         *scanner,
+                                gchar            *name)
+{
+       guint token;
+
+       /* Skip option */
+       token = g_scanner_get_next_token (scanner);
+
+       /* print a warning. Isn't there a way to get the string from the scanner? */
+       g_scanner_warn (scanner, "Clearlooks configuration option \"%s\" is not supported and will be ignored.", name);
+
+       /* equal sign */
+       token = g_scanner_get_next_token (scanner);
+       if (token != G_TOKEN_EQUAL_SIGN)
+          return G_TOKEN_EQUAL_SIGN;
+
+       /* eat whatever comes next */
+       token = g_scanner_get_next_token (scanner);
+
+       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, 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 */
+
+       token = g_scanner_peek_next_token(scanner);
+       while (token != G_TOKEN_RIGHT_CURLY)
+       {
+               switch (token)
+               {
+                       case TOKEN_SCROLLBARCOLOR:
+                               token = clearlooks_gtk2_rc_parse_color (settings, scanner, &clearlooks_style->scrollbar_color);
+                               clearlooks_style->flags |= CL_FLAG_SCROLLBAR_COLOR;
+                               break;
+                       case TOKEN_COLORIZESCROLLBAR:
+                               token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->colorize_scrollbar);
+                               clearlooks_style->flags |= CL_FLAG_COLORIZE_SCROLLBAR;
+                               break;
+                       case TOKEN_CONTRAST:
+                               token = clearlooks_gtk2_rc_parse_double (settings, scanner, &clearlooks_style->contrast);
+                               clearlooks_style->flags |= CL_FLAG_CONTRAST;
+                               break;
+                       case TOKEN_MENUBARSTYLE:
+                               token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->menubarstyle);
+                               clearlooks_style->flags |= CL_FLAG_MENUBARSTYLE;
+                               break;
+                       case TOKEN_TOOLBARSTYLE:
+                               token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->toolbarstyle);
+                               clearlooks_style->flags |= CL_FLAG_TOOLBARSTYLE;
+                               break;
+                       case TOKEN_ANIMATION:
+                               token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->animation);
+                               clearlooks_style->flags |= CL_FLAG_ANIMATION;
+                               break;
+                       case TOKEN_STYLE:
+                               token = clearlooks_gtk2_rc_parse_style (settings, scanner, &clearlooks_style->style);
+                               clearlooks_style->flags |= CL_FLAG_STYLE;
+                               break;
+                       case TOKEN_RADIUS:
+                               token = clearlooks_gtk2_rc_parse_double (settings, scanner, &clearlooks_style->radius);
+                               clearlooks_style->flags |= CL_FLAG_RADIUS;
+                               break;
+
+                       /* stuff to ignore */
+                       case TOKEN_SUNKENMENU:
+                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "sunkenmenu");
+                               break;
+                       case TOKEN_PROGRESSBARSTYLE:
+                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "progressbarstyle");
+                               break;
+                       case TOKEN_MENUITEMSTYLE:
+                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "menuitemstyle");
+                               break;
+                       case TOKEN_LISTVIEWITEMSTYLE:
+                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "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;
+       ClearlooksRcFlags flags;
+
+       clearlooks_parent_rc_class->merge (dest, src);
+
+       if (!CLEARLOOKS_IS_RC_STYLE (src))
+               return;
+
+       src_w = CLEARLOOKS_RC_STYLE (src);
+       dest_w = CLEARLOOKS_RC_STYLE (dest);
+
+       flags = (~dest_w->flags) & src_w->flags;
+
+       if (flags & CL_FLAG_STYLE)
+               dest_w->style = src_w->style;
+       if (flags & CL_FLAG_CONTRAST)
+               dest_w->contrast = src_w->contrast;
+       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_SCROLLBAR_COLOR)
+               dest_w->scrollbar_color = src_w->scrollbar_color;
+       if (flags & CL_FLAG_COLORIZE_SCROLLBAR)
+               dest_w->colorize_scrollbar = src_w->colorize_scrollbar;
+       if (flags & CL_FLAG_ANIMATION)
+               dest_w->animation = src_w->animation;
+       if (flags & CL_FLAG_RADIUS)
+               dest_w->radius = src_w->radius;
+
+       dest_w->flags |= src_w->flags;
+}
+
+
+/* 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-newer/clearlooks_rc_style.h b/libs/clearlooks-newer/clearlooks_rc_style.h
new file mode 100644 (file)
index 0000000..a80a846
--- /dev/null
@@ -0,0 +1,74 @@
+/* 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>
+ * Modified by Kulyk Nazar <schamane@myeburg.net>
+ */
+
+#include <gtk/gtkrc.h>
+#include "clearlooks_types.h"
+
+typedef struct _ClearlooksRcStyle ClearlooksRcStyle;
+typedef struct _ClearlooksRcStyleClass ClearlooksRcStyleClass;
+
+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))
+#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))
+
+/* XXX: needs fixing! */
+typedef enum {
+       CL_FLAG_STYLE              = 1 <<  0,
+       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;
+
+       ClearlooksRcFlags flags;
+
+       ClearlooksStyles style;
+
+       GdkColor scrollbar_color;
+       gboolean colorize_scrollbar;
+       double contrast;
+       guint8 menubarstyle;
+       guint8 toolbarstyle;
+       gboolean animation;
+       double radius;
+};
+
+struct _ClearlooksRcStyleClass
+{
+  GtkRcStyleClass parent_class;
+};
+
+GE_INTERNAL void clearlooks_rc_style_register_type (GTypeModule *module);
diff --git a/libs/clearlooks-newer/clearlooks_style.c b/libs/clearlooks-newer/clearlooks_style.c
new file mode 100644 (file)
index 0000000..48b6647
--- /dev/null
@@ -0,0 +1,1647 @@
+/* Clearlooks theme engine
+ * 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
+ * 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.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include <cairo.h>
+#include <math.h>
+#include <string.h>
+
+#include <ge-support.h>
+#include "clearlooks_style.h"
+#include "clearlooks_rc_style.h"
+#include "clearlooks_draw.h"
+#include "support.h"
+
+/* #define DEBUG 1 */
+
+#define DETAIL(xx)   ((detail) && (!strcmp(xx, detail)))
+
+#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
+
+#ifdef HAVE_ANIMATION
+#include "animation.h"
+#endif
+
+#define STYLE_FUNCTION(function) (clearlooks_style_class->style_functions[CLEARLOOKS_STYLE (style)->style].function)
+
+static ClearlooksStyleClass *clearlooks_style_class;
+static GtkStyleClass *clearlooks_parent_class;
+
+static void
+clearlooks_set_widget_parameters (const GtkWidget      *widget,
+                                  const GtkStyle       *style,
+                                  GtkStateType          state_type,
+                                  WidgetParameters     *params)
+{
+       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
+        * the background color of a notebook. */
+       params->parentbg = CLEARLOOKS_STYLE (style)->colors.bg[state_type];
+       clearlooks_get_parent_bg (widget, &params->parentbg);
+}
+
+static void
+clearlooks_style_draw_flat_box (DRAW_ARGS)
+{
+       if (detail &&   
+           state_type == GTK_STATE_SELECTED && (
+           !strncmp ("cell_even", detail, 9) ||
+           !strncmp ("cell_odd", detail, 8)))
+       {
+               WidgetParameters params;
+               ClearlooksStyle  *clearlooks_style;
+               ClearlooksColors *colors;
+               cairo_t          *cr;
+
+               CHECK_ARGS
+               SANITIZE_SIZE
+
+               clearlooks_style = CLEARLOOKS_STYLE (style);
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               colors = &clearlooks_style->colors;
+               cr = ge_gdk_drawable_to_cairo (window, area);
+
+               /* XXX: We could expose the side details by setting params->corners accordingly
+                *      or adding another option. */
+               STYLE_FUNCTION (draw_selected_cell) (cr, colors, &params, x, y, width, height);
+
+               cairo_destroy (cr);
+       }
+       else if (DETAIL ("tooltip"))
+       {
+               WidgetParameters params;
+               ClearlooksStyle  *clearlooks_style;
+               ClearlooksColors *colors;
+               cairo_t          *cr;
+
+               CHECK_ARGS
+               SANITIZE_SIZE
+
+               clearlooks_style = CLEARLOOKS_STYLE (style);
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               colors = &clearlooks_style->colors;
+               cr = ge_gdk_drawable_to_cairo (window, area);
+
+               STYLE_FUNCTION (draw_tooltip) (cr, colors, &params, x, y, width, height);
+
+               cairo_destroy (cr);
+       }
+       else if ((CLEARLOOKS_STYLE (style)->style == CL_STYLE_GLOSSY || CLEARLOOKS_STYLE (style)->style == CL_STYLE_GUMMY) &&
+                ((DETAIL("checkbutton") || DETAIL("radiobutton")) && state_type == GTK_STATE_PRELIGHT))
+       {
+               /* XXX: Don't draw any check/radiobutton bg in GLOSSY or GUMMY mode. */
+       }
+       else
+       {
+               clearlooks_parent_class->draw_flat_box (style, window, state_type,
+                                            shadow_type,
+                                            area, widget, detail,
+                                            x, y, width, height);
+       }
+}
+
+static void
+clearlooks_style_draw_shadow (DRAW_ARGS)
+{
+       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
+       ClearlooksColors *colors = &clearlooks_style->colors;
+       cairo_t          *cr     = ge_gdk_drawable_to_cairo (window, area);
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       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))
+                       params.state_type = GTK_WIDGET_STATE (widget);
+
+               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;
+               }
+               
+               STYLE_FUNCTION (draw_entry) (cr, &clearlooks_style->colors, &params,
+                                      x, y, width, height);
+       }
+       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);
+               
+               STYLE_FUNCTION (draw_statusbar) (cr, colors, &params,
+                                          x, y, width, height);
+       }
+       else if (DETAIL ("frame"))
+       {
+               WidgetParameters params;
+               FrameParameters  frame;
+               frame.shadow  = shadow_type;
+               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);
+       }
+       else if (DETAIL ("scrolled_window") || DETAIL ("viewport") || detail == NULL)
+       {
+               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);
+               cairo_set_line_width (cr, 1);
+               cairo_stroke (cr);
+       }
+       else
+       {
+               WidgetParameters params;
+               FrameParameters frame;
+
+               frame.shadow = shadow_type;
+               frame.gap_x  = -1;
+               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 
+clearlooks_style_draw_box_gap (DRAW_ARGS,
+                 GtkPositionType gap_side,
+                 gint            gap_x,
+                 gint            gap_width)
+{
+       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
+       ClearlooksColors *colors = &clearlooks_style->colors;
+       cairo_t          *cr;
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       cr = ge_gdk_drawable_to_cairo (window, area);
+
+       if (DETAIL ("notebook"))
+       {
+               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) {
+                       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 (start)
+                                               params.corners ^= CR_CORNER_TOPLEFT;
+                                       if (end)
+                                               params.corners ^= CR_CORNER_TOPRIGHT;
+                               } else {
+                                       if (start)
+                                               params.corners ^= CR_CORNER_TOPRIGHT;
+                                       if (end)
+                                               params.corners ^= CR_CORNER_TOPLEFT;
+                               }
+                       break;
+                       case GTK_POS_BOTTOM:
+                               if (ge_widget_is_ltr (widget)) {
+                                       if (start)
+                                               params.corners ^= CR_CORNER_BOTTOMLEFT;
+                                       if (end)
+                                               params.corners ^= CR_CORNER_BOTTOMRIGHT;
+                               } else {
+                                       if (start)
+                                               params.corners ^= CR_CORNER_BOTTOMRIGHT;
+                                       if (end)
+                                               params.corners ^= CR_CORNER_BOTTOMLEFT;
+                               }
+                       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);
+       }
+       else
+       {
+               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);     
+}
+
+static void
+clearlooks_style_draw_extension (DRAW_ARGS, GtkPositionType gap_side)
+{
+       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
+       ClearlooksColors *colors = &clearlooks_style->colors;
+       cairo_t          *cr;
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       cr = ge_gdk_drawable_to_cairo (window, area);
+       
+       if (DETAIL ("tab"))
+       {
+               WidgetParameters params;
+               TabParameters    tab;
+               
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               
+               tab.gap_side = (ClearlooksGapSide)gap_side;
+               
+               switch (gap_side)
+               {
+                       case CL_GAP_BOTTOM:
+                               params.corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
+                               break;
+                       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;
+               }
+               
+               STYLE_FUNCTION(draw_tab) (cr, colors, &params, &tab,
+                                    x, y, width, height);
+       }
+       else
+       {
+               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 
+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;
+               HandleParameters handle;
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               handle.type = CL_HANDLE_TOOLBAR;
+               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);
+       }
+       else if (DETAIL ("paned"))
+       {
+               WidgetParameters params;
+               HandleParameters handle;
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               handle.type = CL_HANDLE_SPLITTER;
+               handle.horizontal = orientation == GTK_ORIENTATION_HORIZONTAL;
+                       
+               STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
+                                       x, y, width, height);
+       }
+       else
+       {
+               WidgetParameters params;
+               HandleParameters handle;
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               handle.type = CL_HANDLE_TOOLBAR;
+               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);
+       }
+
+       cairo_destroy (cr);
+}
+
+static void
+clearlooks_style_draw_box (DRAW_ARGS)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       const ClearlooksColors *colors;
+       cairo_t *cr;
+
+       cr     = ge_gdk_drawable_to_cairo (window, area);
+       colors = &clearlooks_style->colors;
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       if (DETAIL ("menubar") && !ge_is_panel_widget_item(widget))
+       {
+               WidgetParameters params;
+               MenuBarParameters menubar;
+               
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+
+               menubar.style = clearlooks_style->menubarstyle;
+
+               STYLE_FUNCTION(draw_menubar) (cr, colors, &params, &menubar,
+                                        x, y, width, height);
+       }
+       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 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);
+               }
+               else if (GE_IS_CLIST (widget->parent))
+               {
+                       clearlooks_clist_get_header_index (GTK_CLIST(widget->parent),
+                                                                               widget, &column_index, &columns);
+               }
+               
+               header.resizable = resizable;
+               
+               if (column_index == 0)
+                       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);
+       }
+       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);
+
+               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)
+                       {
+                               if (params.ltr)
+                                       x--;
+                               width++;
+                       }                       
+               }
+               else
+               {
+                       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);
+       }
+       else if (DETAIL ("spinbutton_up") || DETAIL ("spinbutton_down"))
+       {
+               if (state_type == GTK_STATE_ACTIVE)
+               {
+                       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;
+                               if (params.ltr)
+                                       params.corners = CR_CORNER_TOPRIGHT;
+                               else
+                                       params.corners = CR_CORNER_TOPLEFT;
+                       }
+                       else
+                       {
+                               if (params.ltr)
+                                       params.corners = CR_CORNER_BOTTOMRIGHT;
+                               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;
+               
+               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);
+       }
+       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");
+
+               slider.horizontal = (GTK_RANGE (widget)->orientation == GTK_ORIENTATION_HORIZONTAL);
+               
+               STYLE_FUNCTION(draw_scale_trough) (cr, &clearlooks_style->colors,
+                                             &params, &slider,
+                                             x, y, width, height);
+       }
+       else if (DETAIL ("trough") && widget && GE_IS_PROGRESS_BAR (widget))
+       {
+               WidgetParameters params;
+               
+               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") && widget && (GE_IS_VSCROLLBAR (widget) || GE_IS_HSCROLLBAR (widget)))
+       {
+               WidgetParameters params;
+               ScrollBarParameters scrollbar;
+               
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               params.corners = CR_CORNER_NONE;
+               
+               scrollbar.horizontal = TRUE;
+               scrollbar.junction   = clearlooks_scrollbar_get_junction (widget);
+               
+               if (GE_IS_RANGE (widget))
+                       scrollbar.horizontal = GTK_RANGE (widget)->orientation == GTK_ORIENTATION_HORIZONTAL;
+               
+               if (scrollbar.horizontal)
+               {
+                       x += 2;
+                       width -= 4;
+               }
+               else
+               {
+                       y += 2;
+                       height -= 4;
+               }
+               
+               STYLE_FUNCTION(draw_scrollbar_trough) (cr, colors, &params, &scrollbar,
+                                                 x, y, width, height);
+       }
+       else if (DETAIL ("bar"))
+       {
+               WidgetParameters      params;
+               ProgressBarParameters progressbar;
+               gdouble               elapsed = 0.0;
+
+#ifdef HAVE_ANIMATION
+               if(clearlooks_style->animation && CL_IS_PROGRESS_BAR (widget))
+               {       
+                       gboolean activity_mode = GTK_PROGRESS (widget)->activity_mode;
+                       
+                       if (!activity_mode)
+                               clearlooks_animation_progressbar_add ((gpointer)widget);
+               }
+
+               elapsed = clearlooks_animation_elapsed (widget);
+#endif
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+
+               if (widget && GE_IS_PROGRESS_BAR (widget))
+               {
+                       progressbar.orientation = gtk_progress_bar_get_orientation (GTK_PROGRESS_BAR (widget));
+                       progressbar.value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(widget));
+                       progressbar.pulsing = GTK_PROGRESS (widget)->activity_mode;
+               }
+               else
+               {
+                       progressbar.orientation = CL_ORIENTATION_LEFT_TO_RIGHT;
+                       progressbar.value = 0;
+                       progressbar.pulsing = FALSE;
+               }
+               
+               if (!params.ltr)
+               {
+                       if (progressbar.orientation == GTK_PROGRESS_LEFT_TO_RIGHT)
+                               progressbar.orientation = GTK_PROGRESS_RIGHT_TO_LEFT;
+                       else if (progressbar.orientation == GTK_PROGRESS_RIGHT_TO_LEFT)
+                               progressbar.orientation = GTK_PROGRESS_LEFT_TO_RIGHT;
+               }
+
+               /* Following is a hack to have a larger clip area, the one passed in
+                * does not allow for the shadow. */
+               if (area)
+               {
+                       GdkRectangle tmp = *area;
+                       if (!progressbar.pulsing)
+                       {
+                               switch (progressbar.orientation)
+                               {
+                                       case GTK_PROGRESS_RIGHT_TO_LEFT:
+                                               tmp.x -= 1;
+                                       case GTK_PROGRESS_LEFT_TO_RIGHT:
+                                               tmp.width += 1;
+                                               break;
+                                       case GTK_PROGRESS_BOTTOM_TO_TOP:
+                                               tmp.y -= 1;
+                                       case GTK_PROGRESS_TOP_TO_BOTTOM:
+                                               tmp.height += 1;
+                                               break;
+                               }
+                       }
+                       else
+                       {
+                               if (progressbar.orientation == GTK_PROGRESS_RIGHT_TO_LEFT ||
+                                   progressbar.orientation == GTK_PROGRESS_LEFT_TO_RIGHT)
+                               {
+                                       tmp.x -= 1;
+                                       tmp.width += 2;
+                               }
+                               else
+                               {
+                                       tmp.y -= 1;
+                                       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);
+       }
+       else if (DETAIL ("optionmenu"))
+       {
+               WidgetParameters params;
+               OptionMenuParameters optionmenu;
+               
+               GtkRequisition indicator_size;
+               GtkBorder indicator_spacing;
+               
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               
+               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);          
+       }
+       else if (DETAIL ("menuitem"))
+       {
+               WidgetParameters params;
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               
+               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);
+               }
+       }
+       else if (DETAIL ("hscrollbar") || DETAIL ("vscrollbar")) /* This can't be "stepper" for scrollbars ... */
+       {
+               WidgetParameters    params;
+               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) {
+                       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);
+       }
+       else if (DETAIL ("toolbar") || DETAIL ("handlebox_bin") || DETAIL ("dockitem_bin"))
+       {
+               WidgetParameters  params;
+               ToolbarParameters toolbar;
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               clearlooks_set_toolbar_parameters (&toolbar, widget, window, x, y);
+
+               toolbar.style = clearlooks_style->toolbarstyle;
+
+               /* 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"))
+       {
+                       
+       }
+       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"))
+       {
+               const gchar *new_detail = detail;
+               /* Draw a normal separator, we just use this because it gives more control
+                * over sizing (currently). */
+
+               /* This isn't nice ... but it seems like the best cleanest way to me right now.
+                * It will get slightly nicer in the future hopefully. */
+               if (GE_IS_MENU_ITEM (widget))
+                       new_detail = "menuitem";
+
+               if (DETAIL ("hseparator")) {
+                       gtk_paint_hline (style, window, state_type, area, widget, new_detail,
+                                        x, x + width - 1, y + height/2);
+               } else
+                       gtk_paint_vline (style, window, state_type, area, widget, new_detail,
+                                        y, y + height - 1, x + width/2);
+       }
+       else
+       {
+               clearlooks_parent_class->draw_box (style, window, state_type, shadow_type, area,
+                                       widget, detail, x, y, width, height);
+       }
+       
+       cairo_destroy (cr);
+}
+
+static void
+clearlooks_style_draw_slider (DRAW_ARGS, GtkOrientation orientation)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       const ClearlooksColors *colors;
+       cairo_t *cr;
+
+       cr     = ge_gdk_drawable_to_cairo (window, area);
+       colors = &clearlooks_style->colors;
+
+       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);
+       }
+       else if (DETAIL ("slider"))
+       {
+               WidgetParameters    params;
+               ScrollBarParameters scrollbar;
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+               params.corners = CR_CORNER_NONE;
+
+               scrollbar.has_color  = FALSE;
+               scrollbar.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
+               scrollbar.junction   = clearlooks_scrollbar_get_junction (widget);
+
+               if (clearlooks_style->colorize_scrollbar) {
+                       scrollbar.color = colors->spot[1];
+                       scrollbar.has_color = TRUE;
+               }
+
+               /* Set scrollbar color */
+               if (clearlooks_style->has_scrollbar_color)
+               {
+                       ge_gdk_color_to_cairo (&clearlooks_style->scrollbar_color, &scrollbar.color);
+                       scrollbar.has_color = TRUE;
+               }
+
+               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
+       {
+               clearlooks_parent_class->draw_slider (style, window, state_type, shadow_type, area,
+                                          widget, detail, x, y, width, height, orientation);
+       }
+
+       cairo_destroy (cr);
+}
+
+static void
+clearlooks_style_draw_option (DRAW_ARGS)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       const ClearlooksColors *colors;
+       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);
+}
+
+static void
+clearlooks_style_draw_check (DRAW_ARGS)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       WidgetParameters params;
+       CheckboxParameters checkbox;
+       cairo_t *cr;
+
+       CHECK_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);
+       
+       cairo_destroy (cr);
+}
+
+static void
+clearlooks_style_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);
+       const ClearlooksColors *colors;
+       SeparatorParameters separator = { FALSE };
+       cairo_t *cr;
+
+       CHECK_ARGS
+
+       colors = &clearlooks_style->colors;
+
+       cr = ge_gdk_drawable_to_cairo (window, area);
+
+       /* There is no such thing as a vertical menu separator
+        * (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);
+}
+
+static void
+clearlooks_style_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);
+       const ClearlooksColors *colors;
+       cairo_t *cr;
+       SeparatorParameters separator;
+
+       CHECK_ARGS
+
+       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);
+       
+       cairo_destroy (cr);
+}
+
+static void 
+clearlooks_style_draw_shadow_gap (DRAW_ARGS,
+                 GtkPositionType gap_side,
+                 gint            gap_x,
+                 gint            gap_width)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       const ClearlooksColors *colors;
+       cairo_t *cr;
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       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);
+       }
+       else
+       {
+               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)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       ClearlooksColors *colors = &clearlooks_style->colors;
+       cairo_t *cr;
+       WidgetParameters params;
+       ResizeGripParameters grip;
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       grip.edge = (ClearlooksWindowEdge)edge;
+
+       g_return_if_fail (window != NULL);
+
+       cr = ge_gdk_drawable_to_cairo (window, area);
+
+       clearlooks_set_widget_parameters (widget, style, state_type, &params);  
+
+       STYLE_FUNCTION(draw_resize_grip) (cr, colors, &params, &grip,
+                                    x, y, width, height);
+
+       cairo_destroy (cr);
+}
+
+static void
+clearlooks_style_draw_tab (DRAW_ARGS)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       ClearlooksColors *colors = &clearlooks_style->colors;
+       WidgetParameters params;
+       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;     
+
+       STYLE_FUNCTION(draw_arrow) (cr, colors, &params, &arrow, x, y, width, height);
+
+       cairo_destroy (cr);
+}
+
+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)
+{
+       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
+       ClearlooksColors *colors = &clearlooks_style->colors;
+       WidgetParameters params;
+       ArrowParameters  arrow;
+       cairo_t *cr = ge_gdk_drawable_to_cairo (window, area);
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       if (arrow_type == GTK_ARROW_NONE) {
+               cairo_destroy (cr);
+               return;
+       }
+
+       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))
+       {
+               if (params.ltr)
+                       x += 1;
+               else
+                       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)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (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->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);
+
+       if (clearlooks_style->has_scrollbar_color)
+               clearlooks_style->scrollbar_color = CLEARLOOKS_RC_STYLE (rc_style)->scrollbar_color;
+}
+
+static void
+clearlooks_style_realize (GtkStyle * style)
+{
+       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+       double shades[] = {1.15, 0.95, 0.896, 0.82, 0.7, 0.665, 0.475, 0.45, 0.4};
+       CairoColor spot_color;
+       CairoColor bg_normal;
+       double contrast;
+       int i;
+       
+       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]-0.7) * contrast + 0.7, &clearlooks_style->colors.shade[i]);
+       }
+               
+       ge_gdk_color_to_cairo (&style->bg[GTK_STATE_SELECTED], &spot_color);
+       
+       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]);
+               ge_gdk_color_to_cairo (&style->bg[i], &clearlooks_style->colors.bg[i]);
+               ge_gdk_color_to_cairo (&style->base[i], &clearlooks_style->colors.base[i]);
+               ge_gdk_color_to_cairo (&style->text[i], &clearlooks_style->colors.text[i]);
+       }
+}
+
+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)
+{
+       cairo_t *cr;
+       gboolean free_dash_list = FALSE;
+       gint line_width = 1;
+       gint8 *dash_list = (gint8 *)"\1\1";
+
+       if (widget)
+       {
+               gtk_widget_style_get (widget,
+                                     "focus-line-width", &line_width,
+                                     "focus-line-pattern",
+                                     (gchar *) & dash_list, NULL);
+
+               free_dash_list = TRUE;
+       }
+
+       if (detail && !strcmp (detail, "add-mode"))
+       {
+               if (free_dash_list)
+                       g_free (dash_list);
+
+               dash_list = (gint8 *)"\4\4";
+               free_dash_list = FALSE;
+       }
+
+       CHECK_ARGS
+       SANITIZE_SIZE
+
+       cr = gdk_cairo_create (window);
+
+       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
+               ge_cairo_set_gdk_color_with_alpha (cr, &style->fg[state_type],
+                                                      0.7);
+
+       cairo_set_line_width (cr, line_width);
+
+       if (dash_list[0])
+       {
+               gint n_dashes = strlen ((gchar *)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] = dash_list[i];
+                       total_length += dash_list[i];
+               }
+
+               /* 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);
+       }
+
+       if (area)
+       {
+               gdk_cairo_rectangle (cr, area);
+               cairo_clip (cr);
+       }
+
+       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
+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->menubarstyle        = cl_src->menubarstyle;
+       cl_style->toolbarstyle        = cl_src->toolbarstyle;
+       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;
+       
+       clearlooks_parent_class->copy (style, src);
+}
+
+static void
+clearlooks_style_unrealize (GtkStyle * style)
+{
+       clearlooks_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 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)
+{
+       GdkGC *gc;
+
+       g_return_if_fail (GTK_IS_STYLE (style));
+       g_return_if_fail (window != NULL);
+
+       gc = use_text ? style->text_gc[state_type] : style->fg_gc[state_type];
+
+       if (area)
+               gdk_gc_set_clip_rectangle (gc, area);
+
+       if (state_type == GTK_STATE_INSENSITIVE) {
+               ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+               ClearlooksColors *colors = &clearlooks_style->colors;
+
+               WidgetParameters params;
+               GdkColor etched;
+               CairoColor temp;
+
+               clearlooks_set_widget_parameters (widget, style, state_type, &params);
+
+               if (GTK_WIDGET_NO_WINDOW (widget))
+                       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);
+
+               gdk_draw_layout_with_colors (window, gc, x + 1, y + 1, layout, &etched, NULL);
+               gdk_draw_layout (window, gc, x, y, layout);
+       }
+       else
+               gdk_draw_layout (window, gc, x, y, layout);
+
+       if (area)
+               gdk_gc_set_clip_rectangle (gc, NULL);
+}
+
+static GdkPixbuf *
+clearlooks_style_draw_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);
+                       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);
+       
+       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;
+       style_class->unrealize        = clearlooks_style_unrealize;
+       style_class->init_from_rc     = clearlooks_style_init_from_rc;
+       style_class->draw_handle      = clearlooks_style_draw_handle;
+       style_class->draw_slider      = clearlooks_style_draw_slider;
+       style_class->draw_shadow_gap  = clearlooks_style_draw_shadow_gap;
+       style_class->draw_focus       = clearlooks_style_draw_focus;
+       style_class->draw_box         = clearlooks_style_draw_box;
+       style_class->draw_shadow      = clearlooks_style_draw_shadow;
+       style_class->draw_box_gap     = clearlooks_style_draw_box_gap;
+       style_class->draw_extension   = clearlooks_style_draw_extension;
+       style_class->draw_option      = clearlooks_style_draw_option;
+       style_class->draw_check       = clearlooks_style_draw_check;
+       style_class->draw_flat_box    = clearlooks_style_draw_flat_box;
+       style_class->draw_vline       = clearlooks_style_draw_vline;
+       style_class->draw_hline       = clearlooks_style_draw_hline;
+       style_class->draw_resize_grip = clearlooks_style_draw_resize_grip;
+       style_class->draw_tab         = clearlooks_style_draw_tab;
+       style_class->draw_arrow       = clearlooks_style_draw_arrow;
+       style_class->draw_layout      = clearlooks_style_draw_layout;
+       style_class->render_icon      = clearlooks_style_draw_render_icon;
+
+       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]);
+}
+
+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-newer/clearlooks_style.h b/libs/clearlooks-newer/clearlooks_style.h
new file mode 100644 (file)
index 0000000..78f3ca1
--- /dev/null
@@ -0,0 +1,70 @@
+/* Clearlooks Engine
+ * Copyright (C) 2005 Richard Stellingwerff.
+ * 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
+ * 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>
+
+#ifndef CLEARLOOKS_STYLE_H
+#define CLEARLOOKS_STYLE_H
+
+#include "animation.h"
+#include "clearlooks_types.h"
+
+typedef struct _ClearlooksStyle ClearlooksStyle;
+typedef struct _ClearlooksStyleClass ClearlooksStyleClass;
+
+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))
+#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))
+
+struct _ClearlooksStyle
+{
+       GtkStyle parent_instance;
+
+       ClearlooksColors colors;
+
+       ClearlooksStyles style;
+       
+       guint8   menubarstyle;
+       guint8   toolbarstyle;
+       GdkColor scrollbar_color;
+       gboolean colorize_scrollbar;
+       gboolean has_scrollbar_color;
+       gboolean animation;
+       gfloat   radius;
+};
+
+struct _ClearlooksStyleClass
+{
+       GtkStyleClass parent_class;
+
+       ClearlooksStyleFunctions style_functions[CL_NUM_STYLES];
+};
+
+GE_INTERNAL void clearlooks_style_register_type (GTypeModule *module);
+
+#endif /* CLEARLOOKS_STYLE_H */
diff --git a/libs/clearlooks-newer/clearlooks_theme_main.c b/libs/clearlooks-newer/clearlooks_theme_main.c
new file mode 100644 (file)
index 0000000..c042fdb
--- /dev/null
@@ -0,0 +1,23 @@
+#include <gmodule.h>
+#include <gtk/gtk.h>
+
+#include "clearlooks_style.h"
+#include "clearlooks_rc_style.h"
+
+GE_EXPORT void
+theme_init (GTypeModule *module)
+{
+  clearlooks_rc_style_register_type (module);
+  clearlooks_style_register_type (module);
+}
+
+GE_EXPORT void
+theme_exit (void)
+{
+}
+
+GE_EXPORT GtkRcStyle *
+theme_create_rc_style (void)
+{
+  return GTK_RC_STYLE (g_object_new (CLEARLOOKS_TYPE_RC_STYLE, NULL));  
+}
diff --git a/libs/clearlooks-newer/clearlooks_types.h b/libs/clearlooks-newer/clearlooks_types.h
new file mode 100644 (file)
index 0000000..7caf8a3
--- /dev/null
@@ -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-newer/config.h b/libs/clearlooks-newer/config.h
new file mode 100644 (file)
index 0000000..4326e37
--- /dev/null
@@ -0,0 +1,80 @@
+/* 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
+
+/* Gettext package */
+#define GETTEXT_PACKAGE "gtk-engines"
+
+/* Defines whether to compile with animation support */
+#define HAVE_ANIMATION 1
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#define HAVE_BIND_TEXTDOMAIN_CODESET 1
+
+/* Define to 1 if you have the `dcgettext' function. */
+#define HAVE_DCGETTEXT 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#define HAVE_GETTEXT 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#define HAVE_LC_MESSAGES 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Name of package */
+#define PACKAGE "gtk-engines"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "gtk-engines"
+
+/* Define to the full name and version of this package. */
+#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.12.2"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Version number of package */
+#define VERSION "2.12.2"
diff --git a/libs/clearlooks-newer/cpdll.sh b/libs/clearlooks-newer/cpdll.sh
new file mode 100755 (executable)
index 0000000..fb101d5
--- /dev/null
@@ -0,0 +1,2 @@
+mkdir engines
+cp libclearlooks.so engines
diff --git a/libs/clearlooks-newer/ge-support.h b/libs/clearlooks-newer/ge-support.h
new file mode 100644 (file)
index 0000000..e0a42b6
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef GE_SUPPORT_H
+#define GE_SUPPORT_H
+
+#include "general-support.h"
+#include "cairo-support.h"
+#include "widget-information.h"
+
+
+#endif /* GE_SUPPORT_H */
diff --git a/libs/clearlooks-newer/general-support.h b/libs/clearlooks-newer/general-support.h
new file mode 100644 (file)
index 0000000..25999e2
--- /dev/null
@@ -0,0 +1,39 @@
+
+#include <gmodule.h>
+#include <glib.h>
+
+/* macros to make sure that things are sane ... */
+
+#define CHECK_DETAIL(detail, value) ((detail) && (!strcmp(value, detail)))
+
+#define CHECK_ARGS                                     \
+  g_return_if_fail (window != NULL);                   \
+  g_return_if_fail (style != NULL);
+
+#define SANITIZE_SIZE                                  \
+  g_return_if_fail (width  >= -1);                     \
+  g_return_if_fail (height >= -1);                     \
+                                                        \
+  if ((width == -1) && (height == -1))                 \
+    gdk_drawable_get_size (window, &width, &height);   \
+  else if (width == -1)                                        \
+    gdk_drawable_get_size (window, &width, NULL);      \
+  else if (height == -1)                               \
+    gdk_drawable_get_size (window, NULL, &height);
+
+#define GE_EXPORT      G_MODULE_EXPORT
+#define GE_INTERNAL    G_GNUC_INTERNAL
+
+/* explicitly export with ggc, G_MODULE_EXPORT does not do this, this should
+ * make it possible to compile with -fvisibility=hidden */
+#ifdef G_HAVE_GNUC_VISIBILITY
+# undef GE_EXPORT
+# define GE_EXPORT     __attribute__((__visibility__("default")))
+#endif
+
+#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+# undef GE_EXPORT
+# undef GE_INTERNAL
+# define GE_EXPORT      __global
+# define GE_INTERNAL    __hidden
+#endif 
diff --git a/libs/clearlooks-newer/support.c b/libs/clearlooks-newer/support.c
new file mode 100644 (file)
index 0000000..6d4d8a2
--- /dev/null
@@ -0,0 +1,287 @@
+/* Clearlooks theme engine
+ * 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
+ * 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.
+ *
+ */
+
+#include "support.h"
+
+void clearlooks_treeview_get_header_index (GtkTreeView *tv, GtkWidget *header,
+                                    gint *column_index, gint *columns,
+                                    gboolean *resizable)
+{
+       GList *list, *list_start;
+       *column_index = *columns = 0;
+       list_start = 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)));
+
+       g_list_free (list_start);
+}
+
+void clearlooks_clist_get_header_index (GtkCList *clist, GtkWidget *button,
+                                 gint *column_index, gint *columns)
+{
+       int i;
+       *columns = clist->columns;
+       
+       for (i=0; i<*columns; i++)
+       {
+               if (clist->column[i].button == button)
+               {
+                       *column_index = i;
+                       break;
+               }
+       }
+}
+
+void
+clearlooks_get_parent_bg (const GtkWidget *widget, CairoColor *color)
+{
+       GtkStateType state_type;
+       const GtkWidget *parent;
+       GdkColor *gcolor;
+       
+       if (widget == NULL)
+               return;
+       
+       parent = widget->parent;
+       
+       while (parent && GTK_WIDGET_NO_WINDOW (parent) && !((GTK_IS_NOTEBOOK (parent)) || (GTK_IS_TOOLBAR (parent))))
+               parent = parent->parent;
+
+       if (parent == NULL)
+               return;
+       
+       state_type = GTK_WIDGET_STATE (parent);
+       
+       gcolor = &parent->style->bg[state_type];
+       
+       ge_gdk_color_to_cairo (gcolor, color);
+}
+
+ClearlooksStepper
+clearlooks_scrollbar_get_stepper (GtkWidget    *widget,
+                       GdkRectangle *stepper)
+{
+       ClearlooksStepper value = CL_STEPPER_UNKNOWN;
+       GdkRectangle tmp;
+       GdkRectangle check_rectangle;
+       GtkOrientation orientation;
+
+       if (!GE_IS_RANGE (widget))
+               return CL_STEPPER_UNKNOWN;
+
+       check_rectangle.x      = widget->allocation.x;
+       check_rectangle.y      = widget->allocation.y;
+       check_rectangle.width  = stepper->width;
+       check_rectangle.height = stepper->height;
+       
+       orientation = GTK_RANGE (widget)->orientation;
+       
+       if (widget->allocation.x == -1 && widget->allocation.y == -1)
+               return CL_STEPPER_UNKNOWN;
+               
+       if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
+               value = CL_STEPPER_A;
+
+       if (value == CL_STEPPER_UNKNOWN) /* Haven't found a match */
+       {
+               if (orientation == GTK_ORIENTATION_HORIZONTAL)
+                       check_rectangle.x = widget->allocation.x + stepper->width;
+               else
+                       check_rectangle.y = widget->allocation.y + stepper->height;
+               
+               if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
+                       value = CL_STEPPER_B;
+       }
+
+       if (value == CL_STEPPER_UNKNOWN) /* Still haven't found a match */
+       {
+               if (orientation == GTK_ORIENTATION_HORIZONTAL)
+                       check_rectangle.x = widget->allocation.x + widget->allocation.width - (stepper->width * 2);
+               else
+                       check_rectangle.y = widget->allocation.y + widget->allocation.height - (stepper->height * 2);
+               
+               if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
+                       value = CL_STEPPER_C;
+       }
+
+       if (value == CL_STEPPER_UNKNOWN) /* STILL haven't found a match */
+       {
+               if (orientation == GTK_ORIENTATION_HORIZONTAL)
+                       check_rectangle.x = widget->allocation.x + widget->allocation.width - stepper->width;
+               else
+                       check_rectangle.y = widget->allocation.y + widget->allocation.height - stepper->height;
+               
+               if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
+                       value = CL_STEPPER_D;
+       }
+       
+       return value;
+}
+
+ClearlooksStepper
+clearlooks_scrollbar_visible_steppers (GtkWidget *widget)
+{
+       ClearlooksStepper steppers = 0;
+       
+       if (!GE_IS_RANGE (widget))
+               return 0;
+       
+       if (GTK_RANGE (widget)->has_stepper_a)
+               steppers |= CL_STEPPER_A;
+       
+       if (GTK_RANGE (widget)->has_stepper_b)
+               steppers |= CL_STEPPER_B;
+
+       if (GTK_RANGE (widget)->has_stepper_c)
+               steppers |= CL_STEPPER_C;
+
+       if (GTK_RANGE (widget)->has_stepper_d)
+               steppers |= CL_STEPPER_D;
+
+       return steppers;
+}
+
+ClearlooksJunction
+clearlooks_scrollbar_get_junction (GtkWidget    *widget)
+{      
+       GtkAdjustment *adj;
+       ClearlooksJunction junction = CL_JUNCTION_NONE;
+       
+       if (!GE_IS_RANGE (widget))
+               return CL_JUNCTION_NONE;
+
+       adj = GTK_RANGE (widget)->adjustment;
+       
+       if (adj->value <= adj->lower &&
+               (GTK_RANGE (widget)->has_stepper_a || GTK_RANGE (widget)->has_stepper_b))
+       {
+               junction |= CL_JUNCTION_BEGIN;
+       }
+       
+       if (adj->value >= adj->upper - adj->page_size &&
+               (GTK_RANGE (widget)->has_stepper_c || GTK_RANGE (widget)->has_stepper_d))
+       {
+               junction |= CL_JUNCTION_END;
+       }
+       
+       return junction;
+}
+
+void
+clearlooks_set_toolbar_parameters (ToolbarParameters *toolbar, GtkWidget *widget, GdkWindow *window, gint x, gint y)
+{
+       toolbar->topmost = FALSE;
+
+       if (x == 0 && y == 0) {
+               if (widget && widget->allocation.x == 0 && widget->allocation.y == 0)
+               {
+                       if (widget->window == window && GE_IS_TOOLBAR (widget))
+                       {
+                               toolbar->topmost = TRUE;
+                       }
+               }
+       }
+}
+
+void
+clearlooks_get_notebook_tab_position (GtkWidget *widget,
+                                      gboolean  *start,
+                                      gboolean  *end)
+{
+       /* default value */
+       *start = TRUE;
+       *end = FALSE;
+
+       if (GE_IS_NOTEBOOK (widget)) {
+               gboolean found_tabs = FALSE;
+               gint i, n_pages;
+               GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+
+               /* got a notebook, so walk over all the tabs and decide based
+                * on that ...
+                * It works like this:
+                *   - If there is any visible tab that is expanded, set both.
+                *   - Set start/end if there is any visible tab that is at
+                *     the start/end.
+                *   - If one has the child_visibility set to false, arrows
+                *     are present; so none
+                * The heuristic falls over if there is a notebook that just
+                * happens to fill up all the available space. ie. All tabs
+                * are left aligned, but it does not require scrolling.
+                * (a more complex heuristic could calculate the tabs width
+                * and add them all up) */
+
+               n_pages = gtk_notebook_get_n_pages (notebook);
+               for (i = 0; i < n_pages; i++) {
+                       GtkWidget *tab_child;
+                       GtkWidget *tab_label;
+                       gboolean expand;
+                       GtkPackType pack_type;
+                                               
+                       tab_child = gtk_notebook_get_nth_page (notebook, i);
+
+                       /* Skip invisible tabs */
+                       tab_label = gtk_notebook_get_tab_label (notebook, tab_child);
+                       if (!tab_label || !GTK_WIDGET_VISIBLE (tab_label))
+                               continue;
+                       /* This is the same what the notebook does internally. */
+                       if (tab_label && !gtk_widget_get_child_visible (tab_label)) {
+                               /* One child is hidden because scroll arrows are present.
+                                * So both corners are rounded. */
+                               *start = FALSE;
+                               *end = FALSE;
+                               return;
+                       }
+
+                       gtk_notebook_query_tab_label_packing (notebook, tab_child,
+                                                             &expand,
+                                                             NULL, /* don't need fill */
+                                                             &pack_type);
+
+                       if (!found_tabs) {
+                               found_tabs = TRUE;
+                               *start = FALSE;
+                               *end = FALSE;
+                       }
+
+                       if (expand) {
+                               *start = TRUE;
+                               *end = TRUE;
+                       } else if (pack_type == GTK_PACK_START) {
+                               *start = TRUE;
+                       } else {
+                               *end = TRUE;
+                       }
+               }
+       }
+}
+
+
diff --git a/libs/clearlooks-newer/support.h b/libs/clearlooks-newer/support.h
new file mode 100644 (file)
index 0000000..23e33c5
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SUPPORT_H
+#define SUPPORT_H
+
+#include <gtk/gtk.h>
+#include <math.h>
+#include <string.h>
+
+#include "clearlooks_types.h"
+
+#define RADIO_SIZE 13
+#define CHECK_SIZE 13
+
+GE_INTERNAL void              clearlooks_treeview_get_header_index (GtkTreeView  *tv,
+                                                 GtkWidget    *header,
+                                                 gint         *column_index,
+                                                 gint         *columns,
+                                                 gboolean     *resizable);
+
+GE_INTERNAL void              clearlooks_clist_get_header_index    (GtkCList     *clist,
+                                                 GtkWidget    *button,
+                                                 gint         *column_index,
+                                                 gint         *columns);
+#ifdef DEVELOPMENT
+#warning clearlooks_get_parent_bg is a bad hack - find out why its needed, and figure out a better way.
+#endif
+
+GE_INTERNAL void              clearlooks_get_parent_bg      (const GtkWidget *widget,
+                                                 CairoColor      *color);
+
+GE_INTERNAL ClearlooksStepper clearlooks_scrollbar_get_stepper         (GtkWidget       *widget,
+                                                 GdkRectangle    *stepper);
+GE_INTERNAL ClearlooksStepper clearlooks_scrollbar_visible_steppers    (GtkWidget       *widget);
+GE_INTERNAL ClearlooksJunction clearlooks_scrollbar_get_junction       (GtkWidget    *widget);
+
+GE_INTERNAL void clearlooks_set_toolbar_parameters (ToolbarParameters *toolbar, GtkWidget *widget, GdkWindow *window, gint x, gint y);
+GE_INTERNAL void clearlooks_get_notebook_tab_position (GtkWidget *widget, gboolean *start, gboolean *end);
+
+#endif /* SUPPORT_H */
diff --git a/libs/clearlooks-newer/support.h.orig b/libs/clearlooks-newer/support.h.orig
new file mode 100644 (file)
index 0000000..a1430b4
--- /dev/null
@@ -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-newer/widget-information.c b/libs/clearlooks-newer/widget-information.c
new file mode 100644 (file)
index 0000000..cbeb00e
--- /dev/null
@@ -0,0 +1,312 @@
+#include <gtk/gtk.h>
+
+#include "general-support.h"
+#include "widget-information.h"
+#include <math.h>
+#include <string.h>
+
+/* Widget Type Lookups/Macros
+   
+   Based on/modified from functions in
+   Smooth-Engine.
+*/ 
+gboolean
+ge_object_is_a (const GObject * object, const gchar * type_name)
+{
+  gboolean result = FALSE;
+  if ((object))
+    {
+      GType tmp = g_type_from_name (type_name);
+
+      if (tmp)
+       result = g_type_check_instance_is_a ((GTypeInstance *) object, tmp);
+    }
+  return result;
+}
+gboolean
+ge_is_combo_box_entry (GtkWidget * widget)
+{
+  gboolean result = FALSE;
+  if ((widget) && (widget->parent))
+    {
+      if (GE_IS_COMBO_BOX_ENTRY (widget->parent))
+       result = TRUE;
+      else
+       result = ge_is_combo_box_entry (widget->parent);
+    }
+  return result;
+}
+static gboolean
+ge_combo_box_is_using_list (GtkWidget * widget)
+{
+  gboolean result = FALSE;
+  if (GE_IS_COMBO_BOX (widget))
+    {
+      gboolean *tmp = NULL;
+      gtk_widget_style_get (widget, "appears-as-list", &result, NULL);
+
+      if (tmp)
+       result = *tmp;
+    }
+  return result;
+}
+gboolean
+ge_is_combo_box (GtkWidget * widget, gboolean as_list)
+{
+  gboolean result = FALSE;
+  if ((widget) && (widget->parent))
+    {
+      if (GE_IS_COMBO_BOX (widget->parent))
+        {
+          if (as_list)
+            result = (ge_combo_box_is_using_list(widget->parent));
+          else
+            result = (!ge_combo_box_is_using_list(widget->parent));
+        }
+      else
+       result = ge_is_combo_box (widget->parent, as_list);
+    }
+  return result;
+}
+gboolean
+ge_is_combo (GtkWidget * widget)
+{
+  gboolean result = FALSE;
+  if ((widget) && (widget->parent))
+    {
+      if (GE_IS_COMBO (widget->parent))
+       result = TRUE;
+      else
+       result = ge_is_combo (widget->parent);
+    }
+  return result;
+}
+gboolean
+ge_is_in_combo_box (GtkWidget * widget)
+{
+  return ((ge_is_combo (widget) || ge_is_combo_box (widget, TRUE) || ge_is_combo_box_entry (widget)));
+}
+gboolean
+ge_is_toolbar_item (GtkWidget * widget)
+{
+  gboolean result = FALSE;
+  if ((widget) && (widget->parent)) {
+    if ((GE_IS_BONOBO_TOOLBAR (widget->parent))
+       || (GE_IS_BONOBO_DOCK_ITEM (widget->parent))
+       || (GE_IS_EGG_TOOLBAR (widget->parent))
+       || (GE_IS_TOOLBAR (widget->parent))
+       || (GE_IS_HANDLE_BOX (widget->parent)))
+      result = TRUE;
+    else
+      result = ge_is_toolbar_item (widget->parent);
+  }
+  return result;
+}
+gboolean
+ge_is_panel_widget_item (GtkWidget * widget)
+{
+  gboolean result = FALSE;
+  if ((widget) && (widget->parent))
+    {
+      if (GE_IS_PANEL_WIDGET (widget->parent))
+       result = TRUE;
+      else
+       result = ge_is_panel_widget_item (widget->parent);
+    }
+  return result;
+}
+gboolean 
+ge_is_bonobo_dock_item (GtkWidget * widget)
+{
+  gboolean result = FALSE;
+  if ((widget))
+    {
+      if (GE_IS_BONOBO_DOCK_ITEM(widget) || GE_IS_BONOBO_DOCK_ITEM (widget->parent))
+       result = TRUE;
+      else if (GE_IS_BOX(widget) || GE_IS_BOX(widget->parent))
+        {
+          GtkContainer *box = GE_IS_BOX(widget)?GTK_CONTAINER(widget):GTK_CONTAINER(widget->parent);
+          GList *children = NULL, *child = NULL;
+          children = gtk_container_get_children(box);
+              
+          for (child = g_list_first(children); child; child = g_list_next(child))
+            {
+             if (GE_IS_BONOBO_DOCK_ITEM_GRIP(child->data))
+               {
+                 result = TRUE;
+                 child = NULL;
+               }
+            }              
+         
+          if (children)   
+           g_list_free(children);
+       }
+    }
+  return result;
+}
+
+static GtkWidget *
+ge_find_combo_box_entry_widget (GtkWidget * widget)
+{
+  GtkWidget *result = NULL;
+
+  if (widget)
+    {
+      if (GE_IS_COMBO_BOX_ENTRY (widget))
+       result = widget;
+      else
+       result = ge_find_combo_box_entry_widget (widget->parent);
+    }
+
+  return result;
+}
+
+static GtkWidget *
+ge_find_combo_box_widget (GtkWidget * widget, gboolean as_list)
+{
+  GtkWidget *result = NULL;
+  if (widget)
+    {
+      if (GE_IS_COMBO_BOX (widget))
+        {
+          if (as_list)
+            result = (ge_combo_box_is_using_list(widget))?widget:NULL;
+          else
+            result = (!ge_combo_box_is_using_list(widget))?widget:NULL;
+        }
+      else
+       result = ge_find_combo_box_widget (widget->parent, as_list);
+    }
+  return result;
+}
+static GtkWidget *
+ge_find_combo_widget (GtkWidget * widget)
+{
+  GtkWidget *result = NULL;
+  if (widget)
+    {
+      if (GE_IS_COMBO (widget))
+       result = widget;
+      else
+       result = ge_find_combo_widget(widget->parent);
+    }
+  return result;
+}
+
+GtkWidget*
+ge_find_combo_box_widget_parent (GtkWidget * widget)
+{
+   GtkWidget *result = NULL;
+   
+   if (!result)
+     result = ge_find_combo_widget(widget);
+  
+   if (!result)
+     result = ge_find_combo_box_widget(widget, TRUE);
+
+   if (!result)
+     result = ge_find_combo_box_entry_widget(widget);
+
+  return result;
+}
+
+/***********************************************
+ * option_menu_get_props -
+ *  
+ *   Find Option Menu Size and Spacing
+ *
+ *   Taken from Smooth
+ ***********************************************/ 
+void
+ge_option_menu_get_props (GtkWidget * widget,
+                      GtkRequisition * indicator_size,
+                      GtkBorder * indicator_spacing)
+{
+  GtkRequisition default_size = { 9, 5 };
+  GtkBorder default_spacing = { 7, 5, 2, 2 };
+  GtkRequisition *tmp_size = NULL;
+  GtkBorder *tmp_spacing = NULL;
+  if ((widget) && GE_IS_OPTION_MENU(widget))
+    gtk_widget_style_get (widget,
+                         "indicator_size", &tmp_size,
+                         "indicator_spacing", &tmp_spacing, NULL);
+  if (tmp_size)
+    {
+      *indicator_size = *tmp_size;
+      gtk_requisition_free (tmp_size);
+    }
+  else
+    *indicator_size = default_size;
+  if (tmp_spacing)
+    {
+      *indicator_spacing = *tmp_spacing;
+      gtk_border_free (tmp_spacing);
+    }
+  else
+    *indicator_spacing = default_spacing;
+}
+
+void
+ge_button_get_default_border (GtkWidget *widget, 
+                              GtkBorder *border)
+{
+       GtkBorder default_border = {1, 1, 1, 1};
+       GtkBorder *tmp_border = NULL;
+       
+       if (widget && GE_IS_BUTTON (widget))
+               gtk_widget_style_get (widget, "default-border", &tmp_border, NULL);
+
+       if (tmp_border)
+       {
+               *border = *tmp_border;
+               gtk_border_free (tmp_border);
+       }
+       else
+       {
+               *border = default_border;
+       }
+}
+
+
+gboolean
+ge_widget_is_ltr (GtkWidget *widget)
+{
+       GtkTextDirection dir = GTK_TEXT_DIR_NONE;
+       
+       if (GE_IS_WIDGET (widget))
+               dir = gtk_widget_get_direction (widget);
+
+       if (dir == GTK_TEXT_DIR_NONE)
+               dir = gtk_widget_get_default_direction ();
+
+       if (dir == GTK_TEXT_DIR_RTL)
+               return FALSE;
+       else
+               return TRUE;
+}
diff --git a/libs/clearlooks-newer/widget-information.h b/libs/clearlooks-newer/widget-information.h
new file mode 100644 (file)
index 0000000..55da859
--- /dev/null
@@ -0,0 +1,99 @@
+
+/* 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_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_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))
+#define GE_IS_BONOBO_DOCK_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboDockItem"))
+#define GE_IS_BONOBO_DOCK_ITEM_GRIP(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboDockItemGrip"))
+#define GE_IS_BONOBO_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboUIToolbar"))
+#define GE_IS_EGG_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "Toolbar"))
+#define GE_IS_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkToolbar"))
+#define GE_IS_PANEL_WIDGET(object) ((object) && (ge_object_is_a ((GObject*)(object), "PanelWidget") || ge_object_is_a ((GObject*)(object), "PanelApplet")))
+
+#define GE_IS_COMBO_BOX_ENTRY(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkComboBoxEntry"))
+#define GE_IS_COMBO_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkComboBox"))
+#define GE_IS_COMBO(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCombo"))
+#define GE_IS_OPTION_MENU(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkOptionMenu"))
+#define GE_IS_TOGGLE_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkToggleButton"))
+#define GE_IS_CHECK_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCheckButton"))
+#define GE_IS_SPIN_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkSpinButton"))
+#define GE_IS_STATUSBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkStatusbar"))
+#define GE_IS_PROGRESS_BAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkProgressBar"))
+#define GE_IS_MENU_SHELL(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuShell"))
+#define GE_IS_MENU(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenu"))
+#define GE_IS_MENU_BAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuBar"))
+#define GE_IS_MENU_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuItem"))
+
+#define GE_IS_CHECK_MENU_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCheckMenuItem"))
+
+#define GE_IS_RANGE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkRange"))
+#define GE_IS_SCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkScrollbar"))
+#define GE_IS_VSCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVScrollbar"))
+#define GE_IS_HSCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHScrollbar"))
+#define GE_IS_SCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkScale"))
+#define GE_IS_VSCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVScale"))
+#define GE_IS_HSCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHScale"))
+  
+#define GE_IS_PANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkPaned"))
+#define GE_IS_VPANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVPaned"))
+#define GE_IS_HPANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHPaned"))
+#define GE_IS_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkBox"))
+#define GE_IS_VBOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVBox"))
+#define GE_IS_HBOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHBox"))
+
+#define GE_IS_CLIST(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCList"))
+#define GE_IS_TREE_VIEW(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkTreeView"))
+#define GE_IS_ENTRY(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkEntry"))
+#define GE_IS_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkButton"))
+#define GE_IS_FIXED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkFixed"))
+#define TOGGLE_BUTTON(object) (GE_IS_TOGGLE_BUTTON(object)?(GtkToggleButton *)object:NULL)
+#define GE_IS_NOTEBOOK(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkNotebook"))
+#define GE_IS_CELL_RENDERER_TOGGLE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCellRendererToggle"))
+
+#define GE_WIDGET_HAS_DEFAULT(object) ((object) && GE_IS_WIDGET(object) && GTK_WIDGET_HAS_DEFAULT(object))
+
+GE_INTERNAL gboolean ge_object_is_a (const GObject * object, const gchar * type_name);
+GE_INTERNAL gboolean ge_is_combo_box_entry (GtkWidget * widget);
+GE_INTERNAL gboolean ge_is_combo_box (GtkWidget * widget, gboolean as_list);
+GE_INTERNAL gboolean ge_is_combo (GtkWidget * widget);
+GE_INTERNAL gboolean ge_is_in_combo_box (GtkWidget * widget);
+  
+GE_INTERNAL gboolean ge_is_toolbar_item (GtkWidget * widget);
+  
+GE_INTERNAL gboolean ge_is_panel_widget_item (GtkWidget * widget);
+GE_INTERNAL gboolean ge_is_bonobo_dock_item (GtkWidget * widget);
+
+GE_INTERNAL GtkWidget *ge_find_combo_box_widget_parent (GtkWidget * widget);
+
+GE_INTERNAL void ge_option_menu_get_props (GtkWidget * widget, 
+                            GtkRequisition * indicator_size, 
+                            GtkBorder * indicator_spacing);
+
+GE_INTERNAL void ge_button_get_default_border (GtkWidget *widget, 
+                                               GtkBorder *border);
+
+GE_INTERNAL gboolean ge_widget_is_ltr (GtkWidget *widget);
+
diff --git a/libs/clearlooks-older/SConscript b/libs/clearlooks-older/SConscript
new file mode 100644 (file)
index 0000000..4feff6d
--- /dev/null
@@ -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 (file)
index 0000000..1e871bc
--- /dev/null
@@ -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 (file)
index 0000000..144be35
--- /dev/null
@@ -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 (file)
index 0000000..a8cbb37
--- /dev/null
@@ -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 (file)
index 0000000..1c5f2c4
--- /dev/null
@@ -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 (file)
index 0000000..bd8e0ca
--- /dev/null
@@ -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 (file)
index 0000000..074f160
--- /dev/null
@@ -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 (file)
index 0000000..1e07877
--- /dev/null
@@ -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 (file)
index 0000000..5356f91
--- /dev/null
@@ -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 (executable)
index 0000000..fb101d5
--- /dev/null
@@ -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 (file)
index 0000000..358c7f4
--- /dev/null
@@ -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 (file)
index 0000000..a1430b4
--- /dev/null
@@ -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/SConscript b/libs/clearlooks/SConscript
deleted file mode 100644 (file)
index df73046..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- python -*-
-
-import os.path
-import glob
-
-libclearlooks_files = [
-       'animation.c',
-       'cairo-support.c',
-    'clearlooks_draw.c',
-       'clearlooks_draw_glossy.c',
-       'clearlooks_draw_gummy.c',
-       'clearlooks_draw_inverted.c',
-       'clearlooks_rc_style.c',
-       'clearlooks_style.c',
-       'clearlooks_theme_main.c',
-       'support.c',
-       'widget-information.c'
-       ]
-
-Import ('env install_prefix')
-
-clearlooks = env.Clone()
-
-clearlooks.Replace(CCFLAGS = ' `pkg-config --cflags gtk+-2.0 cairo` ',
-                   LINKFLAGS = ' `pkg-config --libs gtk+-2.0 cairo` ')
-
-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))
-
-env.Alias('tarball', env.Distribute (env['DISTTREE'],
-                                     [ 'SConscript' ] +
-                                    libclearlooks_files +
-                                    glob.glob('*.h')
-                                    ))
diff --git a/libs/clearlooks/animation.c b/libs/clearlooks/animation.c
deleted file mode 100644 (file)
index 82af498..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/* Clearlooks theme engine
- *
- * Copyright (C) 2006 Kulyk Nazar <schamane@myeburg.net>
- * Copyright (C) 2006 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
- * 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.
- *
- */
-
-/* This code is responsible for the clearlooks animation support. The code
- * works by forcing a redraw on the animated widget.
- */
-
-#include "animation.h"
-
-#ifdef HAVE_ANIMATION
-#include <glib/gtimer.h>
-
-struct _AnimationInfo {
-       GTimer *timer;
-       
-       gdouble start_modifier;
-       gdouble stop_time;
-       GtkWidget *widget;
-};
-typedef struct _AnimationInfo AnimationInfo;
-
-struct _SignalInfo {
-       GtkWidget *widget;
-       gulong handler_id;
-};
-typedef struct _SignalInfo SignalInfo;
-
-static GSList     *connected_widgets  = NULL;
-static GHashTable *animated_widgets   = NULL;
-static int         animation_timer_id = 0;
-
-
-static gboolean animation_timeout_handler (gpointer data);
-
-/* This forces a redraw on a widget */
-static void
-force_widget_redraw (GtkWidget *widget)
-{
-       if (GE_IS_PROGRESS_BAR (widget))
-               gtk_widget_queue_resize (widget);
-       else
-               gtk_widget_queue_draw (widget);
-}
-
-/* ensures that the timer is running */
-static void
-start_timer ()
-{
-       if (animation_timer_id == 0)
-               animation_timer_id = g_timeout_add (ANIMATION_DELAY, animation_timeout_handler, NULL);
-}
-
-/* ensures that the timer is stopped */
-static void
-stop_timer ()
-{
-       if (animation_timer_id != 0)
-       {
-               g_source_remove(animation_timer_id);
-               animation_timer_id = 0;
-       }
-}
-
-
-/* destroys an AnimationInfo structure including the GTimer */
-static void
-animation_info_destroy (AnimationInfo *animation_info)
-{
-       g_timer_destroy (animation_info->timer);
-       g_free (animation_info);
-}
-
-
-/* This function does not unref the weak reference, because the object
- * is beeing destroyed currently. */
-static void
-on_animated_widget_destruction (gpointer data, GObject *object)
-{
-       /* steal the animation info from the hash table (destroying it would
-        * result in the weak reference to be unrefed, which does not work
-        * as the widget is already destroyed. */
-       g_hash_table_steal (animated_widgets, object);
-       animation_info_destroy ((AnimationInfo*) data);
-}
-
-/* This function also needs to unref the weak reference. */
-static void
-destroy_animation_info_and_weak_unref (gpointer data)
-{
-       AnimationInfo *animation_info = data;
-       
-       /* force a last redraw. This is so that if the animation is removed,
-        * the widget is left in a sane state. */
-       force_widget_redraw (animation_info->widget);
-       
-       g_object_weak_unref (G_OBJECT (animation_info->widget), on_animated_widget_destruction, data);
-       animation_info_destroy (animation_info);
-}
-
-/* Find and return a pointer to the data linked to this widget, if it exists */
-static AnimationInfo*
-lookup_animation_info (const GtkWidget *widget)
-{
-       if (animated_widgets)
-               return g_hash_table_lookup (animated_widgets, widget);
-       
-       return NULL;
-}
-
-/* Create all the relevant information for the animation, and insert it into the hash table. */
-static void
-add_animation (const GtkWidget *widget, gdouble stop_time)
-{
-       AnimationInfo *value;
-       
-       /* object already in the list, do not add it twice */
-       if (lookup_animation_info (widget))
-               return;
-       
-       if (animated_widgets == NULL)
-               animated_widgets = g_hash_table_new_full (g_direct_hash, g_direct_equal,
-                                                         NULL, destroy_animation_info_and_weak_unref);
-       
-       value = g_new(AnimationInfo, 1);
-       
-       value->widget = (GtkWidget*) widget;
-       
-       value->timer = g_timer_new ();
-       value->stop_time= stop_time;
-       value->start_modifier = 0.0;
-
-       g_object_weak_ref (G_OBJECT (widget), on_animated_widget_destruction, value);
-       g_hash_table_insert (animated_widgets, (GtkWidget*) widget, value);
-       
-       start_timer ();
-}
-
-/* update the animation information for each widget. This will also queue a redraw
- * and stop the animation if it is done. */
-static gboolean
-update_animation_info (gpointer key, gpointer value, gpointer user_data)
-{
-       AnimationInfo *animation_info = value;
-       GtkWidget *widget = key;
-       
-       g_assert ((widget != NULL) && (animation_info != NULL));
-       
-       /* remove the widget from the hash table if it is not drawable */
-       if (!GTK_WIDGET_DRAWABLE (widget))
-       {
-               return TRUE;
-       }
-       
-       if (GE_IS_PROGRESS_BAR (widget))
-       {
-               gfloat fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (widget));
-               
-               /* stop animation for filled/not filled progress bars */
-               if (fraction <= 0.0 || fraction >= 1.0)
-                       return TRUE;
-       }
-       
-       force_widget_redraw (widget);
-       
-       /* stop at stop_time */
-       if (animation_info->stop_time != 0 &&
-           g_timer_elapsed (animation_info->timer, NULL) > animation_info->stop_time)
-               return TRUE;
-       
-       return FALSE;
-}
-
-/* This gets called by the glib main loop every once in a while. */
-static gboolean
-animation_timeout_handler (gpointer data)
-{
-       /*g_print("** TICK **\n");*/
-       
-       /* enter threads as update_animation_info will use gtk/gdk. */
-       gdk_threads_enter ();
-       g_hash_table_foreach_remove (animated_widgets, update_animation_info, NULL);
-       /* leave threads again */
-       gdk_threads_leave ();
-       
-       if(g_hash_table_size(animated_widgets)==0)
-       {
-               stop_timer ();
-               return FALSE;
-       }
-       
-       return TRUE;
-}
-
-static void
-on_checkbox_toggle (GtkWidget *widget, gpointer data)
-{
-       AnimationInfo *animation_info = lookup_animation_info (widget);
-       
-       if (animation_info != NULL)
-       {
-               gfloat elapsed = g_timer_elapsed (animation_info->timer, NULL);
-               
-               animation_info->start_modifier = elapsed - animation_info->start_modifier;
-       }
-       else
-       {
-               add_animation (widget, CHECK_ANIMATION_TIME);
-       }
-}
-
-static void
-on_connected_widget_destruction (gpointer data, GObject *widget)
-{
-       connected_widgets = g_slist_remove (connected_widgets, data);
-       g_free (data);
-}
-
-static void
-disconnect_all_signals ()
-{
-       GSList * item = connected_widgets;
-       while (item != NULL)
-       {
-               SignalInfo *signal_info = (SignalInfo*) item->data;
-               
-               g_signal_handler_disconnect (signal_info->widget, signal_info->handler_id);
-               g_object_weak_unref (G_OBJECT (signal_info->widget), on_connected_widget_destruction, signal_info);
-               g_free (signal_info);
-               
-               item = g_slist_next (item);
-       }
-       
-       g_slist_free (connected_widgets);
-       connected_widgets = NULL;
-}
-
-/* helper function for clearlooks_animation_connect_checkbox */
-static gint
-find_signal_info (gconstpointer signal_info, gconstpointer widget)
-{
-       if (((SignalInfo*)signal_info)->widget == widget)
-               return 0;
-       else
-               return 1;
-}
-
-
-/* external interface */
-
-/* adds a progress bar */
-void
-clearlooks_animation_progressbar_add (GtkWidget *progressbar)
-{
-       gdouble fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progressbar));
-       
-       if (fraction < 1.0 && fraction > 0.0)
-               add_animation ((GtkWidget*) progressbar, 0.0);
-}
-
-/* hooks up the signals for check and radio buttons */
-void
-clearlooks_animation_connect_checkbox (GtkWidget *widget)
-{
-       if (GE_IS_CHECK_BUTTON (widget))
-       {
-               if (!g_slist_find_custom (connected_widgets, widget, find_signal_info))
-               {
-                       SignalInfo * signal_info = g_new (SignalInfo, 1);
-                       
-                       signal_info->widget = widget;
-                       signal_info->handler_id = g_signal_connect ((GObject*)widget, "toggled", G_CALLBACK (on_checkbox_toggle), NULL);
-                       
-                       connected_widgets = g_slist_append (connected_widgets, signal_info);
-                       g_object_weak_ref (G_OBJECT (widget), on_connected_widget_destruction, signal_info);
-               }
-       }
-}
-
-/* returns TRUE if the widget is animated, and FALSE otherwise */
-gboolean
-clearlooks_animation_is_animated (GtkWidget *widget)
-{
-       return lookup_animation_info (widget) != NULL ? TRUE : FALSE;
-}
-
-/* returns the elapsed time for the animation */
-gdouble
-clearlooks_animation_elapsed (gpointer data)
-{
-       AnimationInfo *animation_info = lookup_animation_info (data);
-       
-       if (animation_info)
-               return   g_timer_elapsed (animation_info->timer, NULL)
-                      - animation_info->start_modifier;
-       else
-               return 0.0;
-}
-
-/* cleans up all resources of the animation system */
-void
-clearlooks_animation_cleanup ()
-{
-       disconnect_all_signals ();
-       
-       if (animated_widgets != NULL)
-       {
-               g_hash_table_destroy (animated_widgets);
-               animated_widgets = NULL;
-       }
-       
-       stop_timer ();
-}
-#else /* !HAVE_ANIMATION */
-static void clearlooks_animation_dummy_function_so_wall_shuts_up_when_animations_is_disabled()
-{
-       clearlooks_animation_dummy_function_so_wall_shuts_up_when_animations_is_disabled();
-}
-#endif /* HAVE_ANIMATION */
diff --git a/libs/clearlooks/animation.h b/libs/clearlooks/animation.h
deleted file mode 100644 (file)
index b2059c2..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Clearlooks Engine
- *
- * 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.
- */
-
-#include <config.h>
-
-#ifdef HAVE_ANIMATION
-#include <gtk/gtk.h>
-#include <ge-support.h>
-
-#define CL_IS_PROGRESS_BAR(widget) GE_IS_PROGRESS_BAR(widget) && widget->allocation.x != -1 && widget->allocation.y != -1
-#define ANIMATION_DELAY 100
-#define CHECK_ANIMATION_TIME 0.5
-
-GE_INTERNAL void     clearlooks_animation_progressbar_add (GtkWidget *progressbar);
-GE_INTERNAL void     clearlooks_animation_connect_checkbox (GtkWidget *widget);
-GE_INTERNAL gboolean clearlooks_animation_is_animated (GtkWidget *widget);
-GE_INTERNAL gdouble  clearlooks_animation_elapsed (gpointer data);
-GE_INTERNAL void     clearlooks_animation_cleanup ();
-#endif /* HAVE_ANIMATION */
diff --git a/libs/clearlooks/cairo-support.c b/libs/clearlooks/cairo-support.c
deleted file mode 100644 (file)
index 450c41b..0000000
+++ /dev/null
@@ -1,859 +0,0 @@
-#include <math.h>
-#include "general-support.h"
-#include "cairo-support.h"
-
-/***********************************************
- * ge_hsb_from_color -
- *  
- *   Get HSB values from RGB values.
- *
- *   Modified from Smooth but originated in GTK+
- ***********************************************/
-void
-ge_hsb_from_color (const CairoColor *color, 
-                        gdouble *hue, 
-                        gdouble *saturation,
-                        gdouble *brightness) 
-{
-       gdouble min, max, delta;
-       gdouble red, green, blue;
-
-       red = color->r;
-       green = color->g;
-       blue = color->b;
-  
-       if (red > green)
-       {
-               max = MAX(red, blue);
-               min = MIN(green, blue);
-       }
-       else
-       {
-               max = MAX(green, blue);
-               min = MIN(red, blue);
-       }
-  
-       *brightness = (max + min) / 2;
-       
-       if (fabs(max - min) < 0.0001)
-       {
-               *hue = 0;
-               *saturation = 0;
-       }       
-       else
-       {
-               if (*brightness <= 0.5)
-                       *saturation = (max - min) / (max + min);
-               else
-                       *saturation = (max - min) / (2 - max - min);
-       
-               delta = max -min;
-               if (red == max)
-                       *hue = (green - blue) / delta;
-               else if (green == max)
-                       *hue = 2 + (blue - red) / delta;
-               else if (blue == max)
-                       *hue = 4 + (red - green) / delta;
-               *hue *= 60;
-               if (*hue < 0.0)
-                       *hue += 360;
-       }
-}
-/***********************************************
- * ge_color_from_hsb -
- *  
- *   Get RGB values from HSB values.
- *
- *   Modified from Smooth but originated in GTK+
- ***********************************************/
-#define MODULA(number, divisor) (((gint)number % divisor) + (number - (gint)number))
-void
-ge_color_from_hsb (gdouble hue, 
-                        gdouble saturation,
-                        gdouble brightness, 
-                        CairoColor *color)
-{
-       gint i;
-       gdouble hue_shift[3], color_shift[3];
-       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)
-                       color_shift[i] = m2;
-               else if (m3 < 240)
-                       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];      
-       color->a = 1.0; 
-}
-
-void
-ge_gdk_color_to_cairo (const GdkColor *c, CairoColor *cc)
-{
-       gdouble r, g, b;
-
-       g_return_if_fail (c && cc);
-
-       r = c->red / 65535.0;
-       g = c->green / 65535.0;
-       b = c->blue / 65535.0;
-
-       cc->r = r;
-       cc->g = g;
-       cc->b = b;
-       cc->a = 1.0;
-}
-
-void
-ge_cairo_color_to_gtk (const CairoColor *cc, GdkColor *c)
-{
-       gdouble r, g, b;
-
-       g_return_if_fail (c && cc);
-
-       r = cc->r * 65535.0;
-       g = cc->g * 65535.0;
-       b = cc->b * 65535.0;
-
-       c->red = r;
-       c->green = g;
-       c->blue = b;
-}
-
-void 
-ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube)
-{
-       int i;
-
-       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]);
-
-               ge_gdk_color_to_cairo (&style->dark[i], &cube->dark[i]);
-               ge_gdk_color_to_cairo (&style->light[i], &cube->light[i]);
-               ge_gdk_color_to_cairo (&style->mid[i], &cube->mid[i]);
-
-               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;
-
-       cube->white.r = cube->white.g = cube->white.b = 1;
-       cube->white.a = 1;
-}
-
-void
-ge_shade_color(const CairoColor *base, gdouble shade_ratio, CairoColor *composite)
-{
-       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; 
-}
-
-void
-ge_saturate_color (const CairoColor *base, gdouble saturate_level, CairoColor *composite)
-{
-       gdouble hue = 0;
-       gdouble saturation = 0;
-       gdouble brightness = 0;
-
-       g_return_if_fail (base && composite);
-
-       ge_hsb_from_color (base, &hue, &saturation, &brightness);
-
-       saturation = MIN(saturation*saturate_level, 1.0);
-       saturation = MAX(saturation, 0.0);
-
-       ge_color_from_hsb (hue, saturation, brightness, composite);
-       composite->a = base->a; 
-}
-
-void
-ge_mix_color (const CairoColor *color1, const CairoColor *color2,
-              gdouble mix_factor, CairoColor *composite)
-{
-       g_return_if_fail (color1 && color2 && composite);
-
-       composite->r = color1->r * (1-mix_factor) + color2->r * mix_factor;
-       composite->g = color1->g * (1-mix_factor) + color2->g * mix_factor;
-       composite->b = color1->b * (1-mix_factor) + color2->b * mix_factor;
-       composite->a = 1.0;
-}
-
-cairo_t * 
-ge_gdk_drawable_to_cairo (GdkDrawable  *window, GdkRectangle *area)
-{
-       cairo_t *cr;
-
-       g_return_val_if_fail (window != NULL, NULL);
-
-       cr = (cairo_t*) gdk_cairo_create (window);
-       cairo_set_line_width (cr, 1.0);
-       cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
-       cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
-
-       if (area)
-       {
-               cairo_rectangle (cr, area->x, area->y, area->width, area->height);
-               cairo_clip_preserve (cr);
-               cairo_new_path (cr);
-       }
-
-       return cr;
-}
-
-void 
-ge_cairo_set_color (cairo_t *cr, const CairoColor *color)
-{
-       g_return_if_fail (cr && color);
-
-       cairo_set_source_rgba (cr, color->r, color->g, color->b, color->a);     
-}
-
-void
-ge_cairo_set_gdk_color_with_alpha (cairo_t *cr, const GdkColor *color, gdouble alpha)
-{
-       g_return_if_fail (cr && color);
-
-       cairo_set_source_rgba (cr, color->red / 65535.0,
-                                  color->green / 65535.0,
-                                  color->blue / 65535.0,
-                                  alpha);
-}
-
-void 
-ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern, 
-                                       gfloat offset, 
-                                       const CairoColor *color)
-{
-       g_return_if_fail (pattern && color);
-
-       cairo_pattern_add_color_stop_rgba (pattern, offset, color->r, color->g, color->b, color->a);    
-}
-
-void
-ge_cairo_pattern_add_color_stop_shade (cairo_pattern_t *pattern, 
-                                       gdouble offset, 
-                                       const CairoColor *color, 
-                                       gdouble shade)
-{
-       CairoColor shaded;
-
-       g_return_if_fail (pattern && color && (shade >= 0) && (shade <= 3));
-
-       shaded = *color;
-
-       if (shade != 1)
-       {
-               ge_shade_color(color, shade, &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
- * is very small (or negative) it will instead just do a line_to.
- * ge_cairo_rounded_corner assumes clockwise drawing.
- */
-void
-ge_cairo_rounded_corner (cairo_t      *cr,
-                         double        x,
-                         double        y,
-                         double        radius,
-                         CairoCorners  corner)
-{
-       if (radius < 0.0001)
-       {
-               cairo_line_to (cr, x, y);
-       }
-       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;
-               }
-       }
-}
-
-void
-ge_cairo_rounded_rectangle (cairo_t *cr,
-                                 double x, double y, double w, double h,
-                                 double radius, CairoCorners corners)
-{
-       g_return_if_fail (cr != NULL);
-
-       if (radius < 0.0001 || corners == CR_CORNER_NONE)
-       {
-               cairo_rectangle (cr, x, y, w, h);
-               return;
-       }
-#ifdef DEVELOPMENT
-       if ((corners == CR_CORNER_ALL) && (radius > w / 2.0 || radius > h / 2.0))
-               g_warning ("Radius is too large for width/height in ge_rounded_rectangle.\n");
-       else if (radius > w || radius > h) /* This isn't perfect. Assumes that only one corner is set. */
-               g_warning ("Radius is too large for width/height in ge_rounded_rectangle.\n");
-#endif
-
-       if (corners & CR_CORNER_TOPLEFT)
-               cairo_move_to (cr, x+radius, y);
-       else
-               cairo_move_to (cr, x, y);
-       
-       if (corners & CR_CORNER_TOPRIGHT)
-               cairo_arc (cr, x+w-radius, y+radius, radius, G_PI * 1.5, G_PI * 2);
-       else
-               cairo_line_to (cr, x+w, y);
-       
-       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);
-       
-       if (corners & CR_CORNER_BOTTOMLEFT)
-               cairo_arc (cr, x+radius,   y+h-radius, radius, G_PI * 0.5, G_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);
-       else
-               cairo_line_to (cr, x, y);
-}
-
-
-/* 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.)
- */
-void
-ge_cairo_stroke_rectangle (cairo_t *cr, double x, double y, double w, double h)
-{
-       cairo_rectangle (cr, x, y, w, 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)
-{
-       gboolean solid_color;
-
-       g_return_if_fail (cr != NULL);
-       g_return_if_fail (tl != NULL);
-       g_return_if_fail (br != NULL);
-       
-
-       solid_color = (tl == br) || ((tl->r == br->r) && (tl->g == br->g) && (tl->b == br->b) && (tl->a == br->a));
-
-       topleft_overlap &= !solid_color;
-
-       cairo_save(cr);
-
-       cairo_set_line_width (cr, 1);
-
-       if (topleft_overlap)
-       {
-               ge_cairo_set_color(cr, br);     
-
-               cairo_move_to(cr, x + 0.5, y + height - 0.5);
-               cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
-               cairo_line_to(cr, x + width - 0.5, y + 0.5);
-               
-               cairo_stroke (cr);
-       }
-
-       ge_cairo_set_color(cr, tl);     
-
-       cairo_move_to(cr, x + 0.5, y + height - 0.5);
-       cairo_line_to(cr, x + 0.5, y + 0.5);
-       cairo_line_to(cr, x + width - 0.5, y + 0.5);
-
-       if (!topleft_overlap)
-       {
-               if (!solid_color)
-               {
-                       cairo_stroke(cr);
-                       ge_cairo_set_color(cr, br);     
-               }
-
-               cairo_move_to(cr, x + 0.5, y + height - 0.5);
-               cairo_line_to(cr, x + width - 0.5, y + height - 0.5);
-               cairo_line_to(cr, x + width - 0.5, y + 0.5);
-       }
-
-       cairo_stroke(cr);
-
-       cairo_restore(cr);
-}
-
-void ge_cairo_polygon (cairo_t *cr,
-                       const CairoColor *color,
-                       GdkPoint *points,
-                       gint npoints)
-{
-       int i = 0;
-
-       cairo_save(cr);
-
-       ge_cairo_set_color(cr, color);  
-       cairo_move_to(cr, points[0].x, points[0].y);
-
-       for (i = 1; i < npoints; i++)
-       {
-               if (!((points[i].x == points[i + 1].x) &&
-                   (points[i].y == points[i + 1].y))) 
-               {
-                       cairo_line_to(cr, points[i].x, points[i].y);
-               }
-       }
-       
-       if ((points[npoints-1].x != points[0].y) ||
-               (points[npoints-1].y != points[0].y))
-       {
-               cairo_line_to(cr, points[0].x, points[0].y);
-       }
-
-       cairo_fill(cr);
-
-       cairo_restore(cr);
-}
-
-void ge_cairo_line (cairo_t *cr,
-                    const CairoColor *color,
-                    gint x1,
-                    gint y1,
-                    gint x2,
-                    gint y2)
-{
-       cairo_save(cr);
-
-       ge_cairo_set_color(cr, color);  
-       cairo_set_line_width (cr, 1);
-
-       cairo_move_to(cr, x1 + 0.5, y1 + 0.5);
-       cairo_line_to(cr, x2 + 0.5, y2 + 0.5);
-
-       cairo_stroke(cr);
-
-       cairo_restore(cr);
-}
-
-void
-ge_cairo_mirror (cairo_t     *cr,
-                 CairoMirror  mirror,
-                 gint        *x,
-                 gint        *y,
-                 gint        *width,
-                 gint        *height)
-{
-       cairo_matrix_t matrix;
-       
-       cairo_matrix_init_identity (&matrix);
-       
-       cairo_translate (cr, *x, *y);
-       *x = 0;
-       *y = 0;
-       
-       if (mirror & CR_MIRROR_HORIZONTAL)
-       {
-               cairo_matrix_scale (&matrix, -1, 1);
-               *x = -*width;
-       }
-       if (mirror & CR_MIRROR_VERTICAL)
-       {
-               cairo_matrix_scale (&matrix, 1, -1);
-               *y = -*height;
-       }
-
-       cairo_transform (cr, &matrix);
-}
-
-void
-ge_cairo_exchange_axis (cairo_t  *cr,
-                        gint     *x,
-                        gint     *y,
-                        gint     *width,
-                        gint     *height)
-{
-       gint tmp;
-       cairo_matrix_t matrix;
-
-       cairo_translate (cr, *x, *y);
-       cairo_matrix_init (&matrix, 0, 1, 1, 0, 0, 0);
-
-       cairo_transform (cr, &matrix);
-       
-       /* swap width/height */
-       tmp = *width;
-       *x = 0;
-       *y = 0;
-       *width = *height;
-       *height = tmp;
-}
-
-
-/***********************************************
- * ge_cairo_pattern_fill -
- *  
- *   Fill an area with some pattern
- *   Scaling or tiling if needed
- ***********************************************/
-void 
-ge_cairo_pattern_fill(cairo_t *canvas,
-                      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;
-
-       if (pattern->scale != GE_DIRECTION_NONE)
-       {
-               gdouble scale_x = 1.0;
-               gdouble scale_y = 1.0;
-
-               if ((pattern->scale == GE_DIRECTION_VERTICAL) || (pattern->scale == GE_DIRECTION_BOTH))
-               {
-                       scale_x = 1.0/width;
-               }
-
-               if ((pattern->scale == GE_DIRECTION_HORIZONTAL) || (pattern->scale == GE_DIRECTION_BOTH))
-               {
-                       scale_y = 1.0/height;
-               }
-
-               cairo_matrix_scale(&current_matrix, scale_x, scale_y);
-       }
-
-       if (pattern->translate != GE_DIRECTION_NONE)
-       {
-               gdouble translate_x = 0;
-               gdouble translate_y = 0;
-
-               if ((pattern->translate == GE_DIRECTION_VERTICAL) || (pattern->translate == GE_DIRECTION_BOTH))
-               {
-                       translate_x = 0.0-x;
-               }
-
-               if ((pattern->translate == GE_DIRECTION_HORIZONTAL) || (pattern->translate == GE_DIRECTION_BOTH))
-               {
-                       translate_y = 0.0-y;
-               }
-
-               cairo_matrix_translate(&current_matrix, translate_x, translate_y);
-       }
-
-       cairo_pattern_set_matrix(pattern->handle, &current_matrix);
-
-       cairo_save(canvas);
-
-       cairo_set_source(canvas, pattern->handle);
-       cairo_set_operator(canvas, pattern->operator);
-       cairo_rectangle(canvas, x, y, width, height);
-
-       cairo_fill (canvas);
-
-       cairo_restore(canvas);
-
-       cairo_pattern_set_matrix(pattern->handle, &original_matrix);
-}
-
-/***********************************************
- * ge_cairo_color_pattern -
- *  
- *   Create A Solid Color Pattern
- ***********************************************/
-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)))
-               result->type = CAIRO_PATTERN_TYPE_SOLID;
-       #endif
-
-       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->operator = CAIRO_OPERATOR_SOURCE;
-       
-       return result;
-}
-
-/***********************************************
- * ge_cairo_pixbuf_pattern -
- *  
- *   Create A Tiled Pixbuf Pattern
- ***********************************************/
-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)))
-               result->type = CAIRO_PATTERN_TYPE_SURFACE;
-       #endif
-
-       result->scale = GE_DIRECTION_NONE;
-       result->translate = GE_DIRECTION_BOTH;
-
-       width = gdk_pixbuf_get_width(pixbuf);
-       height = gdk_pixbuf_get_height(pixbuf);
-       
-       surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
-
-       canvas = cairo_create(surface);
-
-       gdk_cairo_set_source_pixbuf (canvas, pixbuf, 0, 0);
-       cairo_rectangle (canvas, 0, 0, width, height);
-       cairo_fill (canvas);
-       cairo_destroy(canvas);
-
-       result->handle = cairo_pattern_create_for_surface (surface);
-       cairo_surface_destroy(surface);
-
-       cairo_pattern_set_extend (result->handle, CAIRO_EXTEND_REPEAT);
-
-       result->operator = CAIRO_OPERATOR_SOURCE;
-
-       return result;
-}
-
-/***********************************************
- * ge_cairo_pixmap_pattern -
- *  
- *   Create A Tiled Pixmap Pattern
- ***********************************************/
-CairoPattern*
-ge_cairo_pixmap_pattern(GdkPixmap *pixmap)
-{      
-       CairoPattern * result = NULL;
-
-       GdkPixbuf * pixbuf;
-       gint width, height;
-
-       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);
-
-       result = ge_cairo_pixbuf_pattern(pixbuf);
-       
-       g_object_unref (pixbuf);
-
-       return result;
-}
-
-/***********************************************
- * ge_cairo_linear_shade_gradient_pattern - 
- *  
- *   Create A Linear Shade Gradient Pattern
- *   Aka Smooth Shade Gradient, from/to gradient
- *   With End points defined as shades of the
- *   base color
- ***********************************************/
-CairoPattern *
-ge_cairo_linear_shade_gradient_pattern(CairoColor *base, 
-                                       gdouble shade1, 
-                                       gdouble shade2, 
-                                       gboolean vertical)
-{
-       CairoPattern * result = g_new0(CairoPattern, 1);
-       
-       #if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
-               result->type = CAIRO_PATTERN_TYPE_LINEAR;
-       #endif
-
-       if (vertical)
-       {
-               result->scale = GE_DIRECTION_VERTICAL;
-
-               result->handle = cairo_pattern_create_linear(0, 0, 1, 0);
-       }
-       else
-       {
-               result->scale = GE_DIRECTION_HORIZONTAL;
-
-               result->handle = cairo_pattern_create_linear(0, 0, 0, 1);
-       }
-
-       result->translate = GE_DIRECTION_BOTH;
-       result->operator = CAIRO_OPERATOR_SOURCE;
-
-       ge_cairo_pattern_add_color_stop_shade(result->handle, 0, base, shade1);
-       ge_cairo_pattern_add_color_stop_shade(result->handle, 1, base, shade2);
-
-       return result;
-}
-
-void
-ge_cairo_pattern_destroy(CairoPattern *pattern)
-{
-       if (pattern)
-       {
-               if (pattern->handle)
-                       cairo_pattern_destroy(pattern->handle);
-               
-               g_free(pattern);
-       }
-}
-
-/* 
- * 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.
- */
-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);
-}
diff --git a/libs/clearlooks/cairo-support.h b/libs/clearlooks/cairo-support.h
deleted file mode 100644 (file)
index 2abcb81..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Helpful functions when dealing with cairo in gtk engines */
-
-#include <gtk/gtk.h>
-#include <math.h>
-
-typedef struct
-{
-       gdouble r;
-       gdouble g;
-       gdouble b;
-       gdouble a;
-} CairoColor;
-
-typedef struct
-{
-       CairoColor bg[5];
-       CairoColor fg[5];
-
-       CairoColor dark[5];
-       CairoColor light[5];
-       CairoColor mid[5];
-
-       CairoColor base[5];
-       CairoColor text[5];
-       CairoColor text_aa[5];
-
-       CairoColor black;
-       CairoColor white;
-} CairoColorCube;
-
-typedef enum
-{
-       CR_CORNER_NONE        = 0,
-       CR_CORNER_TOPLEFT     = 1,
-       CR_CORNER_TOPRIGHT    = 2,
-       CR_CORNER_BOTTOMLEFT  = 4,
-       CR_CORNER_BOTTOMRIGHT = 8,
-       CR_CORNER_ALL         = 15
-} CairoCorners;
-
-typedef enum
-{
-       CR_MIRROR_NONE       = 0,
-       CR_MIRROR_HORIZONTAL = 1 << 0,
-       CR_MIRROR_VERTICAL   = 1 << 1
-} CairoMirror;
-
-/*****************************/
-/* Pattern Fills             */
-/*****************************/
-typedef enum {
-       GE_DIRECTION_VERTICAL,
-       GE_DIRECTION_HORIZONTAL,
-       GE_DIRECTION_BOTH,
-       GE_DIRECTION_NONE
-} GeDirection;
-
-#if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
-typedef enum _cairo_pattern_type {
-    CAIRO_PATTERN_TYPE_SOLID,
-    CAIRO_PATTERN_TYPE_SURFACE,
-    CAIRO_PATTERN_TYPE_LINEAR,
-    CAIRO_PATTERN_TYPE_RADIAL
-} cairo_pattern_type_t;
-
-#      define CAIRO_PATTERN_TYPE(pattern) pattern->type;
-#else
-#      define CAIRO_PATTERN_TYPE(pattern) cairo_pattern_get_type (pattern->handle);
-#endif
-
-typedef struct
-{
-#if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
-       cairo_pattern_type_t type;
-#endif
-       GeDirection scale;
-       GeDirection translate;
-
-       cairo_pattern_t *handle;
-       cairo_operator_t operator;
-} CairoPattern;
-
-GE_INTERNAL void ge_hsb_from_color (const CairoColor *color, gdouble *hue, gdouble *saturation, gdouble *brightness);
-GE_INTERNAL void ge_color_from_hsb (gdouble hue, gdouble saturation, gdouble brightness, CairoColor *color);
-
-GE_INTERNAL void ge_gdk_color_to_cairo (const GdkColor * gc, CairoColor * cc);
-GE_INTERNAL void ge_cairo_color_to_gtk (const CairoColor *cc, GdkColor *c);
-GE_INTERNAL void ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube);
-
-GE_INTERNAL void ge_shade_color(const CairoColor *base, gdouble shade_ratio, CairoColor *composite);
-GE_INTERNAL void ge_saturate_color (const CairoColor * base, gdouble saturate_level, CairoColor *composite);
-GE_INTERNAL void ge_mix_color (const CairoColor *color1, const CairoColor *color2, gdouble mix_factor, CairoColor *composite);
-
-GE_INTERNAL cairo_t * ge_gdk_drawable_to_cairo (GdkDrawable  *window, GdkRectangle *area);
-GE_INTERNAL void ge_cairo_set_color (cairo_t *cr, const CairoColor *color);
-GE_INTERNAL void ge_cairo_set_gdk_color_with_alpha (cairo_t *cr, const GdkColor *color, gdouble alpha);
-GE_INTERNAL void ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern, gfloat offset, const CairoColor *color);
-GE_INTERNAL void ge_cairo_pattern_add_color_stop_shade (cairo_pattern_t *pattern, gdouble offset, const CairoColor *color, gdouble shade);
-
-GE_INTERNAL void ge_cairo_rounded_corner (cairo_t *cr, double x, double y, double radius, CairoCorners corner);
-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);
-GE_INTERNAL void ge_cairo_polygon (cairo_t *cr, const CairoColor *color, GdkPoint *points, gint npoints);
-
-GE_INTERNAL void ge_cairo_mirror (cairo_t *cr, CairoMirror mirror, gint *x, gint *y, gint *width, gint *height);
-GE_INTERNAL void ge_cairo_exchange_axis (cairo_t *cr, gint *x, gint *y, gint *width, gint *height);
-
-GE_INTERNAL void ge_cairo_pattern_fill(cairo_t *canvas, CairoPattern *pattern, gint x, gint y, gint width, gint height);
-
-GE_INTERNAL CairoPattern *ge_cairo_color_pattern(CairoColor *base);
-GE_INTERNAL CairoPattern *ge_cairo_pixbuf_pattern(GdkPixbuf *pixbuf);
-GE_INTERNAL CairoPattern *ge_cairo_pixmap_pattern(GdkPixmap *pixmap);
-GE_INTERNAL CairoPattern *ge_cairo_linear_shade_gradient_pattern(CairoColor *base, gdouble shade1, gdouble shade2, gboolean vertical);
-GE_INTERNAL void ge_cairo_pattern_destroy(CairoPattern *pattern);
diff --git a/libs/clearlooks/clearlooks_draw.c b/libs/clearlooks/clearlooks_draw.c
deleted file mode 100644 (file)
index a6586ab..0000000
+++ /dev/null
@@ -1,2385 +0,0 @@
-/* Clearlooks theme engine
- * Copyright (C) 2006 Richard Stellingwerff
- * Copyright (C) 2006 Daniel Borgman
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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.
- *
- */
-
-#include "clearlooks_draw.h"
-#include "clearlooks_style.h"
-#include "clearlooks_types.h"
-
-#include "support.h"
-#include <ge-support.h>
-#include <math.h>
-
-#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,
-                                    const MenuBarParameters *menubar,
-                                    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,
-                       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, 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);
-
-       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_set_color (cr, &shadow);
-       cairo_stroke (cr);
-       
-       cairo_restore (cr);
-
-       /* shadow */
-       cairo_save (cr);
-
-       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);
-
-       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_set_color (cr, &highlight);
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_shadow (cairo_t *cr, const ClearlooksColors *colors, gfloat radius, int width, int height)
-{
-       CairoColor shadow;
-       cairo_save (cr);
-
-       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_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)
-{
-       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);
-
-       cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-
-       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, 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, 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_stroke          (cr);
-
-       cairo_restore (cr);
-}
-
-#ifdef DEVELOPMENT
-#warning seems to be very slow in scrollbar_stepper
-#endif
-
-static void
-clearlooks_draw_highlight_and_shade (cairo_t *cr, const ClearlooksColors *colors,
-                                     const ShadowParameters *params,
-                                     int width, int height, gdouble radius)
-{
-       CairoColor hilight;
-       CairoColor shadow;
-       uint8 corners = params->corners;
-       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;
-
-       cairo_save (cr);
-
-       /* Top/Left highlight */
-       if (corners & CR_CORNER_BOTTOMLEFT)
-               cairo_move_to (cr, x + 0.5, 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);
-
-       if (corners & CR_CORNER_TOPRIGHT)
-               cairo_line_to (cr, x+width-radius, y + 0.5);
-       else
-               cairo_line_to (cr, x+width, y + 0.5);
-
-       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);
-
-       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);
-}
-
-static void
-clearlooks_set_border_gradient (cairo_t *cr, const CairoColor *color, double hilight, int width, int height)
-{
-       cairo_pattern_t *pattern;
-
-       CairoColor bottom_shade;
-       ge_shade_color (color, hilight, &bottom_shade);
-
-       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);
-}
-
-static void
-clearlooks_draw_gripdots (cairo_t *cr, const ClearlooksColors *colors, int x, int y,
-                          int width, int height, int xr, int yr,
-                          float contrast)
-{
-       const CairoColor *dark = &colors->shade[4];
-       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 ( j = 0; j < yr; j++ )
-               {
-                       xoff = 3 * i;
-                       yoff = 3 * j;
-
-                       cairo_rectangle (cr, x_start + xoff, y_start + 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_set_source_rgba (cr, dark->r, dark->g, dark->b, 0.8+contrast);
-                       cairo_fill (cr);
-               }
-       }
-}
-
-static void
-clearlooks_draw_button (cairo_t *cr,
-                        const ClearlooksColors *colors,
-                        const WidgetParameters *params,
-                        int x, int y, int width, int height)
-{
-       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];
-
-       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);
-
-       cairo_save (cr);
-
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-
-       if (params->xthickness == 3 || params->ythickness == 3)
-       {
-               if (params->xthickness == 3)
-                       xoffset = 1;
-               if (params->ythickness == 3)
-                       yoffset = 1;
-       }
-
-       radius = MIN (radius, MIN ((width - 2.0 - xoffset * 2.0) / 2.0, (height - 2.0 - yoffset * 2) / 2.0));
-
-       if (params->xthickness == 3 || params->ythickness == 3)
-       {
-               params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, radius+1, params->corners);
-       }
-
-       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);
-
-               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_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);
-
-               pattern = cairo_pattern_create_linear (0, 0, 0, height);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.0);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.4, shadow.r, shadow.g, shadow.b, 0.0);
-               cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.2);
-               cairo_set_source (cr, pattern);
-               cairo_fill_preserve (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, 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, 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);
-       }
-
-       ge_cairo_inner_rounded_rectangle (cr, xoffset, yoffset, width-(xoffset*2), height-(yoffset*2), radius, params->corners);
-
-       if (params->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);
-               else
-               {
-                       ge_shade_color (&border_normal, 1.08, &border_normal);
-                       ge_cairo_set_color (cr, &border_normal);
-               }
-       }
-
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_entry (cairo_t *cr,
-                       const ClearlooksColors *colors,
-                       const WidgetParameters *params,
-                       int x, int y, int width, int height)
-{
-       const CairoColor *base = &colors->base[params->state_type];
-       CairoColor border = colors->shade[params->disabled ? 3 : 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_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);
-       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);
-
-       /* Draw the inner shadow */
-       if (params->focus)
-       {
-               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);
-       }
-       else
-       {
-               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_stroke (cr);
-       }
-
-       ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-2, height-2, 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);
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_spinbutton (cairo_t *cr,
-                            const ClearlooksColors *colors,
-                            const WidgetParameters *params,
-                            int x, int y, int width, int height)
-{
-       const CairoColor *border = &colors->shade[!params->disabled ? 5 : 3];
-       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;
-
-       cairo_translate (cr, x, y);
-
-       cairo_move_to (cr, params->xthickness + 0.5,       (height/2) + 0.5);
-       cairo_line_to (cr, width-params->xthickness - 0.5, (height/2) + 0.5);
-       ge_cairo_set_color (cr, border);
-       cairo_stroke (cr);
-
-       cairo_move_to (cr, params->xthickness + 0.5,       (height/2)+1.5);
-       cairo_line_to (cr, width-params->xthickness - 0.5, (height/2)+1.5);
-       ge_cairo_set_color (cr, &hilight);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_draw_spinbutton_down (cairo_t *cr,
-                                 const ClearlooksColors *colors,
-                                 const WidgetParameters *params,
-                                 int x, int y, int width, int height)
-{
-       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);
-
-       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);
-}
-
-static void
-clearlooks_scale_draw_gradient (cairo_t *cr,
-                                const CairoColor *c1,
-                                const CairoColor *c2,
-                                const CairoColor *c3,
-                                int x, int y, int width, int height,
-                                boolean horizontal)
-{
-       cairo_pattern_t *pattern;
-
-       pattern = cairo_pattern_create_linear (0.5, 0.5, horizontal ? 0.5 :  width + 1, horizontal ? height + 1: 0.5);
-       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_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);
-}
-
-#define TROUGH_SIZE 7
-static void
-clearlooks_draw_scale_trough (cairo_t *cr,
-                              const ClearlooksColors *colors,
-                              const WidgetParameters *params,
-                              const SliderParameters *slider,
-                              int x, int y, int width, int height)
-{
-       int     trough_width, trough_height;
-       double  translate_x, translate_y;
-
-       cairo_save (cr);
-
-       if (slider->horizontal)
-       {
-               trough_width  = width;
-               trough_height = TROUGH_SIZE;
-               
-               translate_x   = x;
-               translate_y   = y + (height/2) - (TROUGH_SIZE/2);
-       }
-       else
-       {
-               trough_width  = TROUGH_SIZE;
-               trough_height = height;
-               
-               translate_x   = x + (width/2) - (TROUGH_SIZE/2);
-               translate_y  = y;
-       }
-
-       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);
-       
-       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);
-       }
-       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);
-}
-
-static void
-clearlooks_draw_slider (cairo_t *cr,
-                        const ClearlooksColors *colors,
-                        const WidgetParameters *params,
-                        int x, int y, int width, int height)
-{
-       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_translate      (cr, x, y);
-
-       if (params->prelight)
-               border = colors->spot[2];
-
-       /* fill the widget */
-       ge_cairo_rounded_rectangle (cr, 1.0, 1.0, width-2, height-2, radius, params->corners);
-
-       /* Fake light */
-       if (!params->disabled)
-       {
-               const CairoColor *top = &colors->shade[0];
-               const CairoColor *bot = &colors->shade[2];
-
-               pattern = cairo_pattern_create_linear (0, 0, 0, height);
-               cairo_pattern_add_color_stop_rgb (pattern, 0.0,  top->r, top->g, top->b);
-               cairo_pattern_add_color_stop_rgb (pattern, 1.0,  bot->r, bot->g, bot->b);
-               cairo_set_source (cr, pattern);
-               cairo_fill (cr);
-               cairo_pattern_destroy (pattern);
-       }
-       else
-       {
-               ge_cairo_set_color (cr, fill);
-               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_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);
-
-       if (params->prelight)
-       {
-               CairoColor highlight;
-               ge_shade_color (spot, 1.3, &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
-       {
-               CairoColor hilight;
-               ge_shade_color (fill, 1.3, &hilight);
-               cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
-       }
-
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       cairo_restore (cr);
-
-       /* Draw the border */
-       ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
-
-       if (params->prelight || params->disabled)
-               ge_cairo_set_color (cr, &border);
-       else
-               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_set_line_width (cr, 1.0);
-               border.a = params->disabled ? 0.6 : 0.3;
-               ge_cairo_set_color (cr, &border);
-               cairo_stroke (cr);
-       }
-}
-
-static void
-clearlooks_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 - 1.0) / 2.0, (height - 1.0) / 2.0));
-
-       cairo_save (cr);
-       cairo_set_line_width (cr, 1.0);
-
-       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);
-       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);
-}
-
-static void
-clearlooks_draw_progressbar_trough (cairo_t *cr,
-                                    const ClearlooksColors *colors,
-                                    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));
-
-       cairo_save (cr);
-
-       cairo_set_line_width (cr, 1.0);
-
-       /* 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]);
-       cairo_fill (cr);
-
-       /* Draw border */
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width-1, height-1, radius, params->corners);
-       ge_cairo_set_color (cr, border);
-       cairo_stroke (cr);
-
-       /* clip the corners of the shadows */
-       ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
-       cairo_clip (cr);
-
-       ge_shade_color (border, 0.925, &shadow);
-
-       /* 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_set_source (cr, pattern);
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       /* 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_set_source (cr, pattern);
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_progressbar_fill (cairo_t *cr,
-                                  const ClearlooksColors *colors,
-                                  const WidgetParameters *params,
-                                  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;
-
-       cairo_pattern_t *pattern;
-       CairoColor       bg_shade;
-       CairoColor       border;
-       CairoColor       shadow;
-
-       radius = MAX (0, params->radius - params->xthickness);
-
-       cairo_save (cr);
-
-       if (!is_horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
-               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
-
-       /* Clamp the radius so that the _height_ fits ...  */
-       radius = MIN (radius, height / 2.0);
-
-       stroke_width = height;
-       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
-
-       cairo_translate (cr, x, y);
-
-       cairo_save (cr);
-       /* This is kind of nasty ... Clip twice from each side in case the length
-        * of the fill is smaller than twice the radius. */
-       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (cr);
-       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
-       cairo_clip (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);
-       cairo_paint (cr);
-
-       /* 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;
-       }
-
-       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_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       cairo_restore (cr); /* rounded clip region */
-
-       /* Draw the dark lines and the shadow */
-       cairo_save (cr);
-       /* Again, this weird clip area. */
-       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (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);
-
-       shadow.r = 0.0;
-       shadow.g = 0.0;
-       shadow.b = 0.0;
-       shadow.a = 0.1;
-
-       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, &shadow);
-               cairo_stroke (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, &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 */
-}
-
-static void
-clearlooks_draw_optionmenu (cairo_t *cr,
-                            const ClearlooksColors *colors,
-                            const WidgetParameters *params,
-                            const OptionMenuParameters *optionmenu,
-                            int x, int y, int width, int height)
-{
-       SeparatorParameters separator;
-       int offset = params->ythickness + 2;
-
-       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);
-}
-
-static void
-clearlooks_draw_menu_item_separator (cairo_t                   *cr,
-                                     const ClearlooksColors    *colors,
-                                     const WidgetParameters    *widget,
-                                     const SeparatorParameters *separator,
-                                     int x, int y, int width, int height)
-{
-       cairo_save (cr);
-       cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-       ge_cairo_set_color (cr, &colors->shade[5]);
-
-       if (separator->horizontal)
-               cairo_rectangle (cr, x, y, width, 1);
-       else
-               cairo_rectangle (cr, x, y, 1, height);
-
-       cairo_fill      (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_menubar0 (cairo_t *cr,
-                          const ClearlooksColors *colors,
-                          const WidgetParameters *params,
-                          const MenuBarParameters *menubar,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *dark = &colors->shade[3];
-
-       cairo_save (cr);
-
-       cairo_set_line_width (cr, 1);
-       cairo_translate (cr, x, y);
-
-       cairo_move_to (cr, 0, height-0.5);
-       cairo_line_to (cr, width, height-0.5);
-       ge_cairo_set_color (cr, dark);
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_menubar2 (cairo_t *cr,
-                          const ClearlooksColors *colors,
-                          const WidgetParameters *params,
-                          const MenuBarParameters *menubar,
-                          int x, int y, int width, int height)
-{
-       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,
-                                                       colors->bg[0].g,
-                                                       colors->bg[0].b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, lower.r,
-                                                       lower.g,
-                                                       lower.b);
-       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
-clearlooks_draw_menubar1 (cairo_t *cr,
-                          const ClearlooksColors *colors,
-                          const WidgetParameters *params,
-                          const MenuBarParameters *menubar,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *border = &colors->shade[3];
-
-       clearlooks_draw_menubar2 (cr, colors, params, menubar,
-                                 x, y, width, height);
-
-       ge_cairo_set_color (cr, border);
-       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-}
-
-
-static menubar_draw_proto clearlooks_menubar_draw[3] =
-{
-       clearlooks_draw_menubar0,
-       clearlooks_draw_menubar1,
-       clearlooks_draw_menubar2
-};
-
-static void
-clearlooks_draw_menubar (cairo_t *cr,
-                         const ClearlooksColors *colors,
-                         const WidgetParameters *params,
-                         const MenuBarParameters *menubar,
-                         int x, int y, int width, int height)
-{
-       if (menubar->style < 0 || menubar->style >= G_N_ELEMENTS (clearlooks_menubar_draw))
-               return;
-
-       clearlooks_menubar_draw[menubar->style](cr, colors, params, menubar,
-                                    x, y, width, height);
-}
-
-static void
-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);
-       }
-       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);
-       }
-       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);
-       }
-       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);
-       }
-}
-
-static void
-clearlooks_draw_frame            (cairo_t *cr,
-                                  const ClearlooksColors     *colors,
-                                  const WidgetParameters     *params,
-                                  const FrameParameters      *frame,
-                                  int x, int y, int width, int height)
-{
-       const CairoColor *border = frame->border;
-       const CairoColor *dark   = (CairoColor*)&colors->shade[4];
-       ClearlooksRectangle bevel_clip = {0, 0, 0, 0};
-       ClearlooksRectangle frame_clip = {0, 0, 0, 0};
-       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);
-
-       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);
-
-       /* save everything */
-       cairo_save (cr);
-       /* Set clip for the bevel */
-       if (frame->gap_x != -1)
-       {
-               /* Set clip for gap */
-               cairo_set_fill_rule  (cr, CAIRO_FILL_RULE_EVEN_ODD);
-               cairo_rectangle      (cr, 0, 0, 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);
-               else
-                       ge_cairo_inner_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
-               cairo_stroke (cr);
-       }
-       else if (frame->shadow != CL_SHADOW_NONE)
-       {
-               ShadowParameters shadow;
-               shadow.corners = params->corners;
-               shadow.shadow  = frame->shadow;
-               clearlooks_draw_highlight_and_shade (cr, colors, &shadow, width, height, radius);
-       }
-
-       /* restore the previous clip region */
-       cairo_restore    (cr);
-       cairo_save       (cr);
-       if (frame->gap_x != -1)
-       {
-               /* Set clip for gap */
-               cairo_set_fill_rule  (cr, CAIRO_FILL_RULE_EVEN_ODD);
-               cairo_rectangle      (cr, 0, 0, width, height);
-               cairo_rectangle      (cr, frame_clip.x, frame_clip.y, frame_clip.width, frame_clip.height);
-               cairo_clip           (cr);
-       }
-
-       /* Draw frame */
-       if (frame->shadow == CL_SHADOW_ETCHED_IN || frame->shadow == CL_SHADOW_ETCHED_OUT)
-       {
-               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);
-               else
-                       ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-1, height-1, radius, params->corners);
-       }
-       else
-       {
-               ge_cairo_set_color (cr, border);
-               ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
-       }
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_tab (cairo_t *cr,
-                     const ClearlooksColors *colors,
-                     const WidgetParameters *params,
-                     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;
-
-       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 */
-       cairo_set_line_width (cr, 1.0);
-       cairo_translate      (cr, x, y);
-
-
-       /* Make the tabs slightly bigger than they should be, to create a gap */
-       /* And calculate the strip size too, while you're at it */
-       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));
-
-               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)
-                       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,
-                                   radius, params->corners);
-
-       /* Draw fill */
-       ge_cairo_set_color (cr, fill);
-       cairo_fill   (cr);
-
-
-       ge_shade_color (fill, 1.3, &hilight);
-
-       /* Draw highlight */
-       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);
-
-               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_set_source (cr, pattern);
-               cairo_fill (cr);
-               cairo_pattern_destroy (pattern);
-       }
-       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);
-
-               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_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);
-
-       if (params->active)
-       {
-               ge_cairo_set_color (cr, border2);
-               cairo_stroke (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;
-               }
-
-               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, 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
-clearlooks_draw_separator (cairo_t *cr,
-                           const ClearlooksColors     *colors,
-                           const WidgetParameters     *widget,
-                           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);
-
-       cairo_save (cr);
-       cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-
-       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);
-       }
-       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_restore (cr);
-}
-
-static void
-clearlooks_draw_list_view_header (cairo_t *cr,
-                                  const ClearlooksColors          *colors,
-                                  const WidgetParameters          *params,
-                                  const ListViewHeaderParameters  *header,
-                                  int x, int y, int width, int height)
-{
-       const CairoColor *border = &colors->shade[4];
-       CairoColor hilight;
-
-       ge_shade_color (&colors->bg[params->state_type],
-                       params->style_constants->topleft_highlight_shade, &hilight);
-       hilight.a = params->style_constants->topleft_highlight_alpha;
-
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-
-       /* Draw highlight */
-       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 resize grip */
-       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);
-               else
-                       params->style_functions->draw_separator (cr, colors, params, &separator,
-                                                                1.5, 4.0, 2, height-8.0);
-       }
-}
-
-/* We can't draw transparent things here, since it will be called on the same
- * surface multiple times, when placed on a handlebox_bin or dockitem_bin */
-static void
-clearlooks_draw_toolbar (cairo_t *cr,
-                         const ClearlooksColors          *colors,
-                         const WidgetParameters          *widget,
-                         const ToolbarParameters         *toolbar,
-                         int x, int y, int width, int height)
-{
-       const CairoColor *fill  = &colors->bg[0];
-       const CairoColor *dark  = &colors->shade[3];
-       CairoColor light;
-       ge_shade_color (fill, 1.065, &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)
-       {
-               /* Draw highlight */
-               cairo_move_to       (cr, 0, 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-1, height-0.5);
-       ge_cairo_set_color  (cr, dark);
-       cairo_stroke        (cr);
-}
-
-static void
-clearlooks_draw_menuitem (cairo_t *cr,
-                          const ClearlooksColors          *colors,
-                          const WidgetParameters          *widget,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       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 - 1, widget->radius, widget->corners);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0,   fill->r, fill->g, fill->b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, fill_shade.r, fill_shade.g, fill_shade.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve  (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, &border);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_draw_menubaritem (cairo_t *cr,
-                          const ClearlooksColors          *colors,
-                          const WidgetParameters          *widget,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       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);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0,   fill->r, fill->g, fill->b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, fill_shade.r, fill_shade.g, fill_shade.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve  (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, &border);
-       cairo_stroke_preserve (cr);
-}
-
-static void
-clearlooks_draw_selected_cell (cairo_t                  *cr,
-                              const ClearlooksColors   *colors,
-                              const WidgetParameters   *params,
-                              int x, int y, int width, int height)
-{
-       CairoColor upper_color;
-       CairoColor lower_color;
-       cairo_pattern_t *pattern;
-       cairo_save (cr);
-
-       cairo_translate (cr, x, y);
-
-       if (params->focus)
-               upper_color = colors->base[params->state_type];
-       else
-               upper_color = colors->base[GTK_STATE_ACTIVE];
-
-       ge_shade_color(&upper_color, 0.92, &lower_color);
-
-       pattern = cairo_pattern_create_linear (0, 0, 0, height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.0, upper_color.r,
-                                                       upper_color.g,
-                                                       upper_color.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, lower_color.r,
-                                                       lower_color.g,
-                                                       lower_color.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_rectangle  (cr, 0, 0, width, height);
-       cairo_fill       (cr);
-
-       cairo_pattern_destroy (pattern);
-
-       cairo_restore (cr);
-}
-
-
-static void
-clearlooks_draw_scrollbar_trough (cairo_t *cr,
-                                  const ClearlooksColors           *colors,
-                                  const WidgetParameters           *widget,
-                                  const ScrollBarParameters        *scrollbar,
-                                  int x, int y, int width, int height)
-{
-       const CairoColor *bg     = &colors->shade[2];
-       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);
-
-       /* 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);
-       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_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);
-}
-
-static void
-clearlooks_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)
-{
-       CairoCorners corners = CR_CORNER_NONE;
-       CairoColor   border;
-       CairoColor   s1, s2, s3, s4;
-       cairo_pattern_t *pattern;
-       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);
-
-       if (scrollbar->horizontal)
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-               else if (stepper->stepper == CL_STEPPER_D)
-                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
-       }
-       else
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
-               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);
-       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_stroke (cr);
-}
-
-static void
-clearlooks_draw_scrollbar_slider (cairo_t *cr,
-                                   const ClearlooksColors          *colors,
-                                   const WidgetParameters          *widget,
-                                   const ScrollBarParameters       *scrollbar,
-                                   int x, int y, int width, int height)
-{
-       cairo_save (cr);
-
-       if (scrollbar->junction & CL_JUNCTION_BEGIN)
-       {
-               if (scrollbar->horizontal)
-               {
-                       x -= 1;
-                       width += 1;
-               }
-               else
-               {
-                       y -= 1;
-                       height += 1;
-               }
-       }
-       if (scrollbar->junction & CL_JUNCTION_END)
-       {
-               if (scrollbar->horizontal)
-                       width += 1;
-               else
-                       height += 1;
-       }
-
-       if (!scrollbar->horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       cairo_translate (cr, x, y);
-
-       if (scrollbar->has_color)
-       {
-               const CairoColor *border  = &colors->shade[7];
-               CairoColor  fill    = scrollbar->color;
-               CairoColor  hilight;
-               CairoColor  shade1, shade2, shade3;
-               cairo_pattern_t *pattern;
-
-               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, 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);
-       }
-       else
-       {
-               const CairoColor *dark  = &colors->shade[4];
-               const CairoColor *light = &colors->shade[0];
-               CairoColor border;
-               CairoColor s1, s2, s3, s4, s5;
-               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);
-
-               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.7, s3.r, s3.g, s3.b);
-               cairo_pattern_add_color_stop_rgb(pattern, 1.0, s4.r, s4.g, s4.b);
-
-               cairo_rectangle (cr, 1, 1, width-2, height-2);
-               cairo_set_source(cr, pattern);
-               cairo_fill(cr);
-               cairo_pattern_destroy(pattern);
-
-               clearlooks_set_border_gradient (cr, &border, 1.1, 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);
-               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;
-
-               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);
-                       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);
-                       ge_cairo_set_color (cr, light);
-                       cairo_stroke (cr);
-
-                       bar_x += 3;
-               }
-       }
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_statusbar (cairo_t *cr,
-                           const ClearlooksColors          *colors,
-                           const WidgetParameters          *widget,
-                           int x, int y, int width, int height)
-{
-       const CairoColor *dark = &colors->shade[3];
-       CairoColor hilight;
-
-       ge_shade_color (dark, 1.4, &hilight);
-
-       cairo_set_line_width  (cr, 1);
-       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);
-       cairo_stroke          (cr);
-
-       cairo_translate       (cr, 0, 1);
-       cairo_move_to         (cr, 0, 0);
-       cairo_line_to         (cr, width, 0);
-       ge_cairo_set_color    (cr, &hilight);
-       cairo_stroke          (cr);
-}
-
-static void
-clearlooks_draw_menu_frame (cairo_t *cr,
-                            const ClearlooksColors          *colors,
-                            const WidgetParameters          *widget,
-                            int x, int y, int width, int height)
-{
-       const CairoColor *border = &colors->shade[5];
-       cairo_translate      (cr, x, y);
-       cairo_set_line_width (cr, 1);
-
-       ge_cairo_set_color (cr, border);
-       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-}
-
-static void
-clearlooks_draw_tooltip (cairo_t *cr,
-                         const ClearlooksColors          *colors,
-                         const WidgetParameters          *widget,
-                         int x, int y, int width, int height)
-{
-       CairoColor border;
-
-       ge_shade_color (&colors->bg[widget->state_type], 0.6, &border);
-
-       cairo_save (cr);
-
-       cairo_translate      (cr, x, y);
-       cairo_set_line_width (cr, 1);
-
-       ge_cairo_set_color (cr, &colors->bg[widget->state_type]);
-       cairo_rectangle (cr, 0, 0, width, height);
-       cairo_fill (cr);
-
-       ge_cairo_set_color (cr, &border);
-       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_handle (cairo_t *cr,
-                        const ClearlooksColors          *colors,
-                        const WidgetParameters          *params,
-                        const HandleParameters          *handle,
-                        int x, int y, int width, int height)
-{
-       const CairoColor *fill  = &colors->bg[params->state_type];
-       int num_bars = 6; /* shut up gcc warnings */
-
-       cairo_save (cr);
-
-       switch (handle->type)
-       {
-               case CL_HANDLE_TOOLBAR:
-                       num_bars    = 6;
-               break;
-               case CL_HANDLE_SPLITTER:
-                       num_bars    = 16;
-               break;
-       }
-
-       if (params->prelight)
-       {
-               cairo_rectangle (cr, x, y, width, height);
-               ge_cairo_set_color (cr, fill);
-               cairo_fill (cr);
-       }
-
-       cairo_translate (cr, x, y);
-
-       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);
-       }
-       else
-       {
-               params->style_functions->draw_gripdots (cr, colors, 0, 0, width, height, 2, num_bars, 0.1);
-       }
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_resize_grip (cairo_t *cr,
-                             const ClearlooksColors          *colors,
-                             const WidgetParameters          *widget,
-                             const ResizeGripParameters      *grip,
-                             int x, int y, int width, int height)
-{
-       const CairoColor *dark   = &colors->shade[4];
-       CairoColor hilight;
-       int lx, ly;
-       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. */
-       /* dots = MIN (width - 2, height - 2) / 3; */
-       dots = 4;
-
-       cairo_save (cr);
-
-       switch (grip->edge)
-       {
-               case CL_WINDOW_EDGE_NORTH_EAST:
-                       x_down = 0;
-                       y_down = 0;
-                       cairo_translate (cr, x + width - 3*dots + 2, y + 1);
-               break;
-               case CL_WINDOW_EDGE_SOUTH_EAST:
-                       x_down = 0;
-                       y_down = 1;
-                       cairo_translate (cr, x + width - 3*dots + 2, y + height - 3*dots + 2);
-               break;
-               case CL_WINDOW_EDGE_SOUTH_WEST:
-                       x_down = 1;
-                       y_down = 1;
-                       cairo_translate (cr, x + 1, y + height - 3*dots + 2);
-               break;
-               case CL_WINDOW_EDGE_NORTH_WEST:
-                       x_down = 1;
-                       y_down = 0;
-                       cairo_translate (cr, x + 1, y + 1);
-               break;
-               default:
-                       /* Not implemented. */
-                       return;
-       }
-
-       for (lx = 0; lx < dots; lx++) /* horizontally */
-       {
-               for (ly = 0; ly <= lx; ly++) /* vertically */
-               {
-                       int mx, my;
-                       mx = x_down * dots + (1 - x_down * 2) * lx - x_down;
-                       my = y_down * dots + (1 - y_down * 2) * ly - y_down;
-
-                       ge_cairo_set_color (cr, &hilight);
-                       cairo_rectangle (cr, mx*3-1, my*3-1, 2, 2);
-                       cairo_fill (cr);
-
-                       ge_cairo_set_color (cr, dark);
-                       cairo_rectangle (cr, mx*3-1, my*3-1, 1, 1);
-                       cairo_fill (cr);
-               }
-       }
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_draw_radiobutton (cairo_t *cr,
-                             const ClearlooksColors  *colors,
-                             const WidgetParameters  *widget,
-                             const CheckboxParameters *checkbox,
-                             int x, int y, int width, int height)
-{
-       const CairoColor *border;
-       const CairoColor *dot;
-       CairoColor shadow;
-       CairoColor highlight;
-       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;
-
-       if (widget->disabled)
-       {
-               border = &colors->shade[5];
-               dot    = &colors->shade[6];
-       }
-       else
-       {
-               border = &colors->shade[6];
-               dot    = &colors->text[0];
-       }
-
-       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);
-       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_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);
-
-       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_move_to (cr, ceil (cx - radius/3.0), ceil (cy));
-                       cairo_line_to (cr, ceil (cx + radius/3.0), ceil (cy));
-
-                       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);
-                       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_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
-                       cairo_fill (cr);
-               }
-       }
-}
-
-static void
-clearlooks_draw_checkbox (cairo_t *cr,
-                          const ClearlooksColors  *colors,
-                          const WidgetParameters  *widget,
-                          const CheckboxParameters *checkbox,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *border;
-       const CairoColor *dot;
-       gboolean inconsistent = FALSE;
-       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
-
-       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
-       draw_bullet |= inconsistent;
-
-       if (widget->disabled)
-       {
-               border = &colors->shade[5];
-               dot    = &colors->shade[6];
-       }
-       else
-       {
-               border = &colors->shade[6];
-               dot    = &colors->text[GTK_STATE_NORMAL];
-       }
-
-       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);
-
-               /* 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);
-       }
-       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);
-       }
-
-       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) /* Inconsistent */
-               {
-                       cairo_set_line_width (cr, 2.0);
-                       cairo_move_to (cr, 3, height*0.5);
-                       cairo_line_to (cr, width-3, height*0.5);
-               }
-               else
-               {
-                       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);
-       }
-}
-
-static void
-clearlooks_draw_normal_arrow (cairo_t *cr, const CairoColor *color,
-                              double x, double y, double width, double height)
-{
-       double arrow_width;
-       double arrow_height;
-       double line_width_2;
-
-       cairo_save (cr);
-
-       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);
-       cairo_line_to (cr, -arrow_width / 2.0 + line_width_2, 0);
-       /* cairo_line_to (cr, 0, arrow_height - line_width_2); */
-       cairo_arc_negative (cr, 0, arrow_height - 2*line_width_2 - 2*line_width_2 * sqrt(2), 2*line_width_2, G_PI_2 + G_PI_4, G_PI_4);
-       cairo_line_to (cr, arrow_width / 2.0 - line_width_2, 0);
-       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);
-}
-
-static void
-clearlooks_draw_combo_arrow (cairo_t *cr, const CairoColor *color,
-                             double x, double y, double width, double height)
-{
-       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);
-}
-
-static void
-_clearlooks_draw_arrow (cairo_t *cr, const CairoColor *color,
-                        ClearlooksDirection dir, ClearlooksArrowType type,
-                        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)
-               rotate = G_PI*0.5;
-       else if (dir == CL_DIRECTION_UP)
-               rotate = G_PI;
-       else if (dir == CL_DIRECTION_DOWN)
-               rotate = 0;
-       else
-               return;
-
-       if (type == CL_ARROW_NORMAL)
-       {
-               cairo_translate (cr, x, y);
-               cairo_rotate (cr, -rotate);
-               clearlooks_draw_normal_arrow (cr, color, 0, 0, width, height);
-       }
-       else if (type == CL_ARROW_COMBO)
-       {
-               cairo_translate (cr, x, y);
-               clearlooks_draw_combo_arrow (cr, color, 0, 0, width, height);
-       }
-}
-
-static void
-clearlooks_draw_arrow (cairo_t *cr,
-                       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],
-                                       arrow->direction, arrow->type,
-                                       tx+0.5, ty+0.5, width, height);
-       }
-
-       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)
-{
-       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_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;
-}
diff --git a/libs/clearlooks/clearlooks_draw.h b/libs/clearlooks/clearlooks_draw.h
deleted file mode 100644 (file)
index 71d3b4a..0000000
+++ /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_draw_glossy.c b/libs/clearlooks/clearlooks_draw_glossy.c
deleted file mode 100644 (file)
index 752b31b..0000000
+++ /dev/null
@@ -1,1466 +0,0 @@
-/* Clearlooks Glossy style
- * Copyright (C) 2006 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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 Andrea Cimitan <andrea.cimitan@gmail.com>
- *        and Benjamin Berg <benjamin@sipsolutions.net>
- * Based on code by Richard Stellingwerff <remenic@gmail.com>
- *              and Daniel Borgmann <daniel.borgmann@gmail.com>
- * from the ubuntulooks engine.
- */
-
-#include "clearlooks_draw.h"
-#include "clearlooks_style.h"
-#include "clearlooks_types.h"
-
-#include "support.h"
-#include <ge-support.h>
-
-#include <cairo.h>
-
-
-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)
-{
-       CairoColor a, b, c, d;
-       cairo_pattern_t *pt;
-
-       ge_shade_color (color, disabled? 1.06 : 1.16, &a);
-       ge_shade_color (color, disabled? 1.02 : 1.08, &b);
-       ge_shade_color (color, disabled? 0.98 : 1.00, &c);
-       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_set_source (cr, pt);
-       ge_cairo_rounded_rectangle (cr, x, y, width, height, radius, corners);
-       cairo_fill (cr);
-       
-       cairo_pattern_destroy (pt);
-}
-
-static void
-clearlooks_set_mixed_color (cairo_t          *cr, 
-                            const CairoColor *color1, 
-                            const CairoColor *color2, 
-                            gdouble mix_factor)
-{
-       CairoColor composite;
-
-       ge_mix_color (color1, color2, mix_factor, &composite);
-       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 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, 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);
-
-       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_set_color (cr, &shadow);
-       cairo_stroke (cr);
-       
-       cairo_restore (cr);
-
-       /* shadow */
-       cairo_save (cr);
-
-       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);
-
-       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_set_color (cr, &highlight);
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_glossy_draw_light_inset (cairo_t          *cr, 
-                                    const CairoColor *bg_color, 
-                                    double x, double y, double w, double h, 
-                                    double radius, uint8 corners)
-{
-       CairoColor shadow;
-       CairoColor highlight;
-
-       /* not really sure of shading ratios... we will think */
-       ge_shade_color (bg_color, 0.95, &shadow);
-       ge_shade_color (bg_color, 1.05, &highlight);
-
-       /* highlight */
-       cairo_move_to (cr, x + w + (radius * -0.2928932188), y - (radius * -0.2928932188)); /* 0.2928932... 1-sqrt(2)/2 gives middle of curve */
-
-       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);
-
-       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);
-
-       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);
-
-       /* shadow */
-       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);
-       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);
-       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);
-       else
-               cairo_line_to (cr, x + w, y);
-
-       ge_cairo_set_color (cr, &shadow);
-       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,
-                                            const ShadowParameters *params,
-                                            int width, int height, gdouble radius)
-{
-       CairoColor shadow;
-       CairoColor highlight;
-       uint8 corners = params->corners;
-       double x = 1.0;
-       double y = 1.0;
-
-       /* not really sure of shading ratios... we will think */
-       ge_shade_color (bg_color, 0.8, &shadow);
-       ge_shade_color (bg_color, 1.2, &highlight);
-       
-       cairo_save (cr);
-       
-       /* Top/Left highlight */
-       if (corners & CR_CORNER_BOTTOMLEFT)
-               cairo_move_to (cr, x, y+height-radius);
-       else
-               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);
-       else
-               cairo_line_to (cr, x+width, y);
-       
-       if (params->shadow & CL_SHADOW_OUT)
-               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 */
-       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)
-               cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.5);
-       else
-               cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
-       
-       cairo_stroke (cr);
-       
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_glossy_draw_button (cairo_t *cr,
-                               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];
-       CairoColor border_normal   = colors->shade[6];
-       CairoColor border_disabled = colors->shade[4];
-       double radius;
-
-       cairo_pattern_t *pattern;
-       
-       cairo_save (cr);
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-
-       /* Shadows and shadow */
-       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) */
-               if (!params->active && (params->prelight || params->enable_shadow))
-               {
-                       /* shadow becomes a shadow to have 3d prelight buttons :) */
-                       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_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);
-                       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);
-                       cairo_stroke (cr);
-               }
-               else
-               {
-                       if (!(params->disabled))
-                               params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, 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_draw_glossy_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)
-       {
-               CairoColor shadow;
-               ge_shade_color (&fill, 0.92, &shadow);
-
-               cairo_save (cr);
-
-               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);
-       
-               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+1, yoffset+4);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
-               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);
-               
-               cairo_rectangle (cr, xoffset+1, yoffset+1, 3, height-(yoffset*2)-2);
-       
-               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+4, yoffset+1);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
-               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);
-
-               cairo_restore (cr);
-       }
-       
-       /* Default button highlight */
-       if (params->is_default && !params->active && !params->disabled)
-       {
-               const CairoColor *shadow = &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);
-               cairo_stroke (cr);
-
-               shadow = &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);
-               cairo_stroke (cr);
-               
-               hh--;
-
-               shadow = &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);
-               cairo_stroke (cr);
-       }
-       
-       /* Border */
-       if (params->is_default || (params->prelight && params->enable_shadow))
-               border_normal = colors->spot[2];
-               /* ge_mix_color (&border_normal, &colors->spot[2], 0.5, &border_normal); */
-       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);
-       cairo_stroke (cr);
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_glossy_draw_progressbar_trough (cairo_t *cr,
-                                    const ClearlooksColors *colors,
-                                    const WidgetParameters *params,
-                                    int x, int y, int width, int height)
-{
-       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);
-       
-       /* 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]);
-       cairo_fill (cr);
-
-       /* Draw border */
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width-1, height-1, radius, params->corners);
-       clearlooks_set_mixed_color (cr, border, &colors->shade[2], 0.3);
-       cairo_stroke (cr);
-
-       /* clip the corners of the shadows */
-       ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
-       cairo_clip (cr);
-
-       ge_shade_color (border, 0.92, &shadow);
-
-       /* 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.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);
-
-       /* 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.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);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_glossy_draw_progressbar_fill (cairo_t *cr,
-                                  const ClearlooksColors *colors,
-                                  const WidgetParameters *params,
-                                  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;
-
-       cairo_pattern_t *pattern;
-       CairoColor       a;
-       CairoColor       b;
-       CairoColor       e;
-       CairoColor       border;
-       CairoColor       shadow;
-
-       radius = MAX (0, params->radius - params->xthickness);
-
-       cairo_save (cr);
-
-       if (!is_horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
-               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
-
-       /* Clamp the radius so that the _height_ fits ...  */
-       radius = MIN (radius, height / 2.0);
-
-       stroke_width = height*2;
-       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
-       
-       cairo_translate (cr, x, y);
-
-       cairo_save (cr);
-       /* This is kind of nasty ... Clip twice from each side in case the length
-        * of the fill is smaller than twice the radius. */
-       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (cr);
-       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
-       cairo_clip (cr);
-
-       /* Draw the background gradient */
-       ge_shade_color (&colors->spot[1], 1.16, &a);
-       ge_shade_color (&colors->spot[1], 1.08, &b);
-       ge_shade_color (&colors->spot[1], 1.08, &e);
-       pattern = cairo_pattern_create_linear (0, 0, 0, height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.0, a.r, a.g, a.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.5, b.r, b.g, b.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.5, colors->spot[1].r, colors->spot[1].g, colors->spot[1].b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, e.r, e.g, e.b);
-       cairo_set_source (cr, pattern);
-       cairo_paint (cr);
-       cairo_pattern_destroy (pattern);
-
-       /* 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;
-       }
-       
-       cairo_set_source_rgba (cr, colors->spot[2].r,
-                                  colors->spot[2].g,
-                                  colors->spot[2].b,
-                                  0.15);
-       
-       cairo_fill (cr);
-       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.3);
-
-       /* 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. */
-       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (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;
-       ge_shade_color (&colors->shade[6], 0.92, &shadow);
-       shadow.a = 0.2;
-
-       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);
-               ge_cairo_set_color (cr, &shadow);
-               cairo_stroke (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);
-       }
-       
-       cairo_restore (cr);
-
-       cairo_restore (cr); /* rotation, mirroring */
-}
-
-static void
-clearlooks_glossy_scale_draw_gradient (cairo_t *cr,
-                                const CairoColor *c1,
-                                const CairoColor *c2,
-                                const CairoColor *c3,
-                                int x, int y, int width, int height,
-                                boolean horizontal)
-{
-       cairo_pattern_t *pattern;
-
-       pattern = cairo_pattern_create_linear (0.5, 0.5, horizontal ? 0.5 :  width + 1, horizontal ? height + 1 : 0.5);
-       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_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);
-}
-
-#define TROUGH_SIZE 7
-static void
-clearlooks_glossy_draw_scale_trough (cairo_t *cr,
-                              const ClearlooksColors *colors,
-                              const WidgetParameters *params,
-                              const SliderParameters *slider,
-                              int x, int y, int width, int height)
-{
-       int     trough_width, trough_height;
-       double  translate_x, translate_y;
-
-       cairo_save (cr);
-
-       if (slider->horizontal)
-       {
-               trough_width  = width;
-               trough_height = TROUGH_SIZE;
-               
-               translate_x   = x;
-               translate_y   = y + (height/2) - (TROUGH_SIZE/2);
-       }
-       else
-       {
-               trough_width  = TROUGH_SIZE;
-               trough_height = height;
-               
-               translate_x   = x + (width/2) - (TROUGH_SIZE/2);
-               translate_y  = y;
-       }
-
-       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);
-       
-       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,
-                                                   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,
-                                                   slider->horizontal);
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_glossy_draw_tab (cairo_t *cr,
-                            const ClearlooksColors *colors,
-                            const WidgetParameters *params,
-                            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;
-       CairoColor           hilight;
-
-       cairo_pattern_t     *pattern;
-       
-       double               radius;
-       double               strip_size;
-       double               length;
-
-       radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
-
-       /* Set clip */
-       cairo_rectangle      (cr, x, y, width, height);
-       cairo_clip           (cr);
-       cairo_new_path       (cr);
-
-       /* Translate and set line width */
-       cairo_set_line_width (cr, 1.0);
-       cairo_translate      (cr, x+0.5, y+0.5);
-
-
-       /* Make the tabs slightly bigger than they should be, to create a gap */
-       /* And calculate the strip size too, while you're at it */
-       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)
-                       cairo_translate (cr, 0.0, -3.0); /* gap at the other side */
-       }
-       else
-       {
-               width += 3.0;
-               length = width;
-               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, 0, width-1, height-1,
-                                   radius, params->corners);
-       
-       /* Draw fill */
-       ge_cairo_set_color (cr, fill);
-       cairo_fill   (cr);
-
-       ge_shade_color (fill, 1.3, &hilight);
-
-       /* Draw highlight */
-       if (!params->active)
-       {
-               ShadowParameters shadow;
-               
-               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);
-       }
-
-       if (params->active)
-       {
-               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;
-               }
-
-               ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
-               
-               ge_shade_color (fill, 1.06, &shadow);
-               ge_shade_color (fill, 1.18, &hilight);
-               ge_shade_color (fill, 1.12, &f1);
-               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, 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);
-               cairo_set_source (cr, pattern);
-               cairo_fill (cr);
-               cairo_pattern_destroy (pattern);
-       }
-       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;
-               }
-       
-               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.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);
-               cairo_pattern_destroy (pattern);
-       }
-
-       ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
-       
-       if (params->active)
-       {
-               ge_cairo_set_color (cr, border);
-               cairo_stroke (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;
-               }
-               
-               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);
-               cairo_set_source (cr, pattern);
-               cairo_stroke (cr);
-               cairo_pattern_destroy (pattern);
-       }
-}
-
-static void
-clearlooks_glossy_draw_slider (cairo_t *cr,
-                        const ClearlooksColors *colors,
-                        const WidgetParameters *params,
-                        int x, int y, int width, int height)
-{
-       const CairoColor *border  = &colors->shade[7];
-       CairoColor  fill;
-       CairoColor  hilight;
-       CairoColor  a, b, c, d;
-       cairo_pattern_t *pattern;
-
-       cairo_set_line_width (cr, 1.0); 
-       cairo_translate      (cr, x, y);
-
-       ge_shade_color (&colors->bg[params->state_type], 1.0, &fill);
-       if (params->prelight)
-               ge_shade_color (&fill, 1.1, &fill);
-
-       ge_shade_color (&fill, 1.25, &hilight);
-       ge_shade_color (&fill, 1.16, &a);
-       ge_shade_color (&fill, 1.08, &b);
-       ge_shade_color (&fill, 1.0,  &c);
-       ge_shade_color (&fill, 1.08, &d);
-
-       pattern = cairo_pattern_create_linear (1, 1, 1, height-2);
-       cairo_pattern_add_color_stop_rgb (pattern, 0,   a.r, a.g, a.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.5, b.r, b.g, b.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.5, c.r, c.g, c.b); 
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, d.r, d.g, d.b);
-       cairo_rectangle (cr, 1, 1, width-2, height-2);
-       cairo_set_source (cr, pattern);
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       clearlooks_set_mixed_color (cr, border, &fill, 0.2);
-       if (params->prelight)
-               ge_cairo_set_color (cr, &colors->spot[2]);
-       ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, 2.5, params->corners);
-       cairo_stroke (cr);
-
-       cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
-       ge_cairo_rounded_rectangle (cr, 1.5, 1.5, width-3, height-3, 2.0, params->corners);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_glossy_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 - 1.0) / 2.0, (height - 1.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);
-       params->style_functions->draw_shadow (cr, colors, radius, width, height);
-       params->style_functions->draw_slider (cr, colors, params, 1, 1, width-2, height-2);
-}
-
-static void
-clearlooks_glossy_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)
-{
-       CairoCorners corners = CR_CORNER_NONE;
-       const CairoColor *border = &colors->shade[7];
-       CairoColor  fill, s1, s2, s4;
-       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)
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-               else if (stepper->stepper == CL_STEPPER_D)
-                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
-       }
-       else
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
-               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);
-                               
-       fill = colors->bg[widget->state_type];
-       ge_shade_color(&fill, 1.16, &s1);
-       ge_shade_color(&fill, 1.08, &s2);
-       ge_shade_color(&fill, 1.08, &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.5,  fill.r, fill.g, fill.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);
-       
-       ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, 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);
-       
-       shadow.shadow  = CL_SHADOW_OUT;
-       shadow.corners = corners;
-}
-
-static void
-clearlooks_glossy_draw_scrollbar_slider (cairo_t *cr,
-                                   const ClearlooksColors          *colors,
-                                   const WidgetParameters          *widget,
-                                   const ScrollBarParameters       *scrollbar,
-                                   int x, int y, int width, int height)
-{
-       const CairoColor *border  = &colors->shade[7];
-       CairoColor  fill  = scrollbar->color;
-       CairoColor  hilight;
-       CairoColor  shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-
-       if (scrollbar->junction & CL_JUNCTION_BEGIN)
-       {
-               if (scrollbar->horizontal)
-               {
-                       x -= 1;
-                       width += 1;
-               }
-               else
-               {
-                       y -= 1;
-                       height += 1;
-               }
-       }
-       if (scrollbar->junction & CL_JUNCTION_END)
-       {
-               if (scrollbar->horizontal)
-                       width += 1;
-               else
-                       height += 1;
-       }
-       
-       if (!scrollbar->horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       cairo_translate (cr, x, y);
-
-       if (widget->prelight)
-               ge_shade_color (&fill, 1.1, &fill);
-               
-       cairo_set_line_width (cr, 1);
-       
-       ge_shade_color (&fill, 1.25, &hilight);
-       ge_shade_color (&fill, 1.16, &shade1);
-       ge_shade_color (&fill, 1.08, &shade2);
-       ge_shade_color (&fill, 1.08, &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,   shade3.r, shade3.g, shade3.b);
-       cairo_rectangle (cr, 1, 1, width-2, height-2);
-       cairo_set_source (cr, pattern);
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-       
-       if (scrollbar->has_color) 
-       {
-               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);
-       }
-
-       clearlooks_set_mixed_color (cr, border, &fill, scrollbar->has_color? 0.4 : 0.2);
-       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-}
-
-static void
-clearlooks_glossy_draw_list_view_header (cairo_t *cr,
-                                  const ClearlooksColors          *colors,
-                                  const WidgetParameters          *params,
-                                  const ListViewHeaderParameters  *header,
-                                  int x, int y, int width, int height)
-{
-/*
-       CairoColor *border = !params->prelight? (CairoColor*)&colors->shade[4] : (CairoColor*)&colors->spot[1];
-*/
-       const CairoColor *border = &colors->shade[4];
-       const CairoColor *fill   = &colors->bg[params->state_type];
-       CairoColor hilight;
-       CairoColor shade1, shade2, shade3;
-
-       cairo_pattern_t *pattern;
-
-       ge_shade_color (fill, 1.2, &hilight);
-       ge_shade_color (fill, 1.08, &shade1);
-       ge_shade_color (fill, 1.04, &shade2);
-       ge_shade_color (fill, 1.04, &shade3);
-
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-
-       /* Draw the fill */
-       pattern = cairo_pattern_create_linear (0, 0, 0, height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.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-1.0/height, shade3.r, shade3.g, shade3.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0-1.0/height, border->r, border->g, border->b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, border->r, border->g, border->b);
-
-       cairo_set_source (cr, pattern);
-       cairo_rectangle (cr, 0, 0, width, height);
-       cairo_fill (cr);
-
-       cairo_pattern_destroy (pattern);
-       
-       /* Draw highlight */
-       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);
-       
-       cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
-       cairo_stroke (cr);
-       
-       /* Draw resize grip */
-       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);
-               else
-                       params->style_functions->draw_separator (cr, colors, params, &separator,
-                                                                1.5, 4.0, 2, height-8.0);
-       }
-}
-
-static void 
-clearlooks_glossy_draw_toolbar (cairo_t *cr,
-                         const ClearlooksColors          *colors,
-                         const WidgetParameters          *widget,
-                         const ToolbarParameters         *toolbar,
-                         int x, int y, int width, int height)
-{
-       const CairoColor *fill  = &colors->bg[GTK_STATE_NORMAL];
-       const CairoColor *dark  = &colors->shade[3];
-       CairoColor light;
-       ge_shade_color (fill, 1.1, &light);
-       
-       cairo_set_line_width (cr, 1.0);
-       cairo_translate (cr, x, y);
-       
-       if (toolbar->style == 1) /* Enable Extra features */
-       { 
-               cairo_pattern_t *pattern;
-               CairoColor shade1, shade2, shade3;
-               
-               ge_shade_color (fill, 1.08, &shade1);
-               ge_shade_color (fill, 1.04, &shade2);
-               ge_shade_color (fill, 1.04, &shade3);
-
-               /* Draw the fill */
-               pattern = cairo_pattern_create_linear (0, 0, 0, height);
-               cairo_pattern_add_color_stop_rgb (pattern, 0.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_rectangle (cr, 0, 0, width, height);
-               cairo_fill (cr);
-
-               cairo_pattern_destroy (pattern);
-       }
-       else /* Flat */
-       { 
-               ge_cairo_set_color (cr, fill);
-               cairo_paint (cr);
-
-               if (!toolbar->topmost) 
-               {
-                       /* Draw highlight */
-                       cairo_move_to       (cr, 0, 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-1, height-0.5);
-       ge_cairo_set_color  (cr, dark);
-       cairo_stroke        (cr);
-}
-
-static void
-clearlooks_glossy_draw_menuitem (cairo_t                   *cr,
-                                 const ClearlooksColors    *colors,
-                                 const WidgetParameters    *params,
-                                 int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       const CairoColor *border = &colors->spot[2];
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-
-       ge_shade_color (fill, 1.16, &shade1);
-       ge_shade_color (fill, 1.08, &shade2);
-       ge_shade_color (fill, 1.08, &shade3);
-       cairo_set_line_width (cr, 1.0);
-
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       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,   shade3.r, shade3.g, shade3.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve  (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, border);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_glossy_draw_menubaritem (cairo_t                   *cr,
-                                    const ClearlooksColors    *colors,
-                                    const WidgetParameters    *params,
-                                    int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       const CairoColor *border = &colors->spot[2];
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-
-       ge_shade_color (fill, 1.16, &shade1);
-       ge_shade_color (fill, 1.08, &shade2);
-       ge_shade_color (fill, 1.08, &shade3);
-       cairo_set_line_width (cr, 1.0);
-
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       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,   shade3.r, shade3.g, shade3.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve  (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, border);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_glossy_draw_selected_cell (cairo_t                  *cr,
-                                     const ClearlooksColors   *colors,
-                                     const WidgetParameters   *params,
-                                     int x, int y, int width, int height)
-{
-       CairoColor color;
-
-       if (params->focus)
-               color = colors->base[params->state_type];
-       else
-               color = colors->base[GTK_STATE_ACTIVE];
-
-       clearlooks_draw_glossy_gradient (cr, x, y, width, height, &color, params->disabled, 0.0, CR_CORNER_NONE);
-}
-
-
-static void
-clearlooks_glossy_draw_radiobutton (cairo_t *cr,
-                             const ClearlooksColors  *colors,
-                             const WidgetParameters  *widget,
-                             const CheckboxParameters *checkbox,
-                             int x, int y, int width, int height)
-{
-       const CairoColor *border;
-       const CairoColor *dot;
-       CairoColor shadow;
-       CairoColor highlight;
-       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;
-
-       if (widget->disabled)
-       {
-               border = &colors->shade[5];
-               dot    = &colors->shade[6];
-       }
-       else
-       {
-               if (widget->prelight)
-                       border = &colors->spot[2];
-               else
-                       border = &colors->shade[6];
-               dot    = &colors->text[0];
-       }
-
-       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);
-       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_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);
-       
-       if (!widget->disabled)
-       {
-               if (widget->prelight)
-                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
-               else            
-                       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_move_to (cr, ceil (cx - radius/3.0), ceil (cy));
-                       cairo_line_to (cr, ceil (cx + radius/3.0), ceil (cy));
-
-                       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);
-                       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_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
-                       cairo_fill (cr);
-               }
-       }
-}
-
-static void
-clearlooks_glossy_draw_checkbox (cairo_t *cr,
-                          const ClearlooksColors  *colors,
-                          const WidgetParameters  *widget,
-                          const CheckboxParameters *checkbox,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *border;
-       const CairoColor *dot; 
-       gboolean inconsistent = FALSE;
-       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
-
-       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
-       draw_bullet |= inconsistent;
-       
-       if (widget->disabled)
-       {
-               border = &colors->shade[5];
-               dot    = &colors->shade[6];
-       }
-       else
-       {
-               if (widget->prelight)
-                       border = &colors->spot[2];
-               else            
-                       border = &colors->shade[6];
-               dot    = &colors->text[GTK_STATE_NORMAL];
-       }
-
-       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, (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);
-       }
-       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);
-       }
-       
-       if (!widget->disabled)
-       {
-               if (widget->prelight)
-                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
-               else
-                       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) /* Inconsistent */
-               {
-                       cairo_set_line_width (cr, 2.0);
-                       cairo_move_to (cr, 3, height*0.5);
-                       cairo_line_to (cr, width-3, height*0.5);
-               }
-               else
-               {
-                       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);
-       }
-}
-
-void
-clearlooks_register_style_glossy (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants)
-{
-       functions->draw_inset              = clearlooks_glossy_draw_inset;
-       functions->draw_button             = clearlooks_glossy_draw_button;
-       functions->draw_progressbar_trough = clearlooks_glossy_draw_progressbar_trough;
-       functions->draw_progressbar_fill   = clearlooks_glossy_draw_progressbar_fill;
-       functions->draw_scale_trough       = clearlooks_glossy_draw_scale_trough;
-       functions->draw_tab                = clearlooks_glossy_draw_tab;
-       functions->draw_slider             = clearlooks_glossy_draw_slider;
-       functions->draw_slider_button      = clearlooks_glossy_draw_slider_button;
-       functions->draw_scrollbar_stepper  = clearlooks_glossy_draw_scrollbar_stepper;
-       functions->draw_scrollbar_slider   = clearlooks_glossy_draw_scrollbar_slider;
-       functions->draw_list_view_header   = clearlooks_glossy_draw_list_view_header;
-       functions->draw_toolbar            = clearlooks_glossy_draw_toolbar;
-       functions->draw_menuitem           = clearlooks_glossy_draw_menuitem;
-       functions->draw_menubaritem        = clearlooks_glossy_draw_menubaritem;
-       functions->draw_selected_cell      = clearlooks_glossy_draw_selected_cell;
-       functions->draw_checkbox           = clearlooks_glossy_draw_checkbox;
-       functions->draw_radiobutton        = clearlooks_glossy_draw_radiobutton;
-}
diff --git a/libs/clearlooks/clearlooks_draw_gummy.c b/libs/clearlooks/clearlooks_draw_gummy.c
deleted file mode 100644 (file)
index ccbd7d9..0000000
+++ /dev/null
@@ -1,1708 +0,0 @@
-/* Clearlooks Gummy style
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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 Andrea Cimitan <andrea.cimitan@gmail.com>
- */
-
-#include "clearlooks_draw.h"
-#include "clearlooks_style.h"
-#include "clearlooks_types.h"
-
-#include "support.h"
-#include <ge-support.h>
-
-#include <cairo.h>
-
-/* Normal shadings */
-#define SHADE_TOP 1.08
-#define SHADE_CENTER_TOP 1.02
-#define SHADE_BOTTOM 0.94
-
-/* Listview */
-#define LISTVIEW_SHADE_TOP 1.06
-#define LISTVIEW_SHADE_CENTER_TOP 1.02
-#define LISTVIEW_SHADE_BOTTOM 0.96
-
-/* Toolbar */
-#define TOOLBAR_SHADE_TOP 1.04
-#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,
-                                const CairoColor *color,
-                                gboolean disabled, gboolean radius, CairoCorners corners)
-{
-       CairoColor fill;
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pt;
-
-       ge_shade_color (color, disabled? 1.04 : SHADE_TOP, &shade1);
-       ge_shade_color (color, disabled? 1.01 : SHADE_CENTER_TOP, &shade2);
-       ge_shade_color (color, disabled? 0.99 : 1.0, &fill);
-       ge_shade_color (color, disabled? 0.96 : SHADE_BOTTOM, &shade3);
-
-       pt = cairo_pattern_create_linear (x, y, x, y+height);
-       cairo_pattern_add_color_stop_rgb (pt, 0.0, shade1.r, shade1.g, shade1.b);
-       cairo_pattern_add_color_stop_rgb (pt, 0.5, shade2.r, shade2.g, shade2.b);
-       cairo_pattern_add_color_stop_rgb (pt, 0.5, fill.r, fill.g, fill.b);
-       cairo_pattern_add_color_stop_rgb (pt, 1.0, shade3.r, shade3.g, shade3.b);
-
-       cairo_set_source (cr, pt);
-       ge_cairo_rounded_rectangle (cr, x, y, width, height, radius, corners);
-       cairo_fill (cr);
-
-       cairo_pattern_destroy (pt);
-}
-
-static void
-clearlooks_set_mixed_color (cairo_t          *cr,
-                            const CairoColor *color1,
-                            const CairoColor *color2,
-                            gdouble mix_factor)
-{
-       CairoColor composite;
-
-       ge_mix_color (color1, color2, mix_factor, &composite);
-       ge_cairo_set_color (cr, &composite);
-}
-
-static void
-clearlooks_gummy_draw_highlight_and_shade (cairo_t                *cr,
-                                           const CairoColor       *bg_color,
-                                           const ShadowParameters *params,
-                                           int width, int height, gdouble radius)
-{
-       CairoColor shadow;
-       CairoColor highlight;
-       uint8 corners = params->corners;
-       double x = 1.0;
-       double y = 1.0;
-
-       /* not really sure of shading ratios... we will think */
-       ge_shade_color (bg_color, 0.8, &shadow);
-       ge_shade_color (bg_color, 1.2, &highlight);
-
-       cairo_save (cr);
-
-       /* Top/Left highlight */
-       if (corners & CR_CORNER_BOTTOMLEFT)
-               cairo_move_to (cr, x, y+height-radius);
-       else
-               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);
-       else
-               cairo_line_to (cr, x+width, y);
-
-       if (params->shadow & CL_SHADOW_OUT)
-               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 */
-       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)
-               cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.5);
-       else
-               cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
-
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_gummy_draw_button (cairo_t                *cr,
-                              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];
-       CairoColor border_normal   = colors->shade[6];
-       CairoColor border_disabled = colors->shade[4];
-       double radius;
-
-       cairo_pattern_t *pattern;
-
-       cairo_save (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;
-
-       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)
-               {
-                       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_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_shade_color (&params->parentbg, 0.93, &shadow);
-                       ge_cairo_set_color (cr, &shadow);
-                       cairo_stroke (cr);
-               }
-
-               if (params->is_default)
-               {
-                       CairoColor shadow = colors->spot[1];
-
-                       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);
-                       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);
-       }
-
-       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)
-       {
-               CairoColor shadow;
-               ge_shade_color (&fill, 0.92, &shadow);
-
-               cairo_save (cr);
-
-               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);
-
-               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+1, yoffset+4);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
-               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);
-
-               cairo_rectangle (cr, xoffset+1, yoffset+1, 3, height-(yoffset*2)-2);
-
-               pattern = cairo_pattern_create_linear (xoffset+1, yoffset+1, xoffset+4, yoffset+1);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.58);
-               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);
-
-               cairo_restore (cr);
-       }
-
-       /* Border */
-       if (params->is_default) /* || (params->prelight && params->enable_shadow)) */
-               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);
-       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_restore (cr);
-}
-
-static void
-clearlooks_gummy_draw_entry (cairo_t                *cr,
-                             const ClearlooksColors *colors,
-                             const WidgetParameters *params,
-                             int x, int y, int width, int height)
-{
-       const CairoColor *base = &colors->base[params->state_type];
-       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_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);
-       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);
-
-       /* 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);
-       }
-       else
-       {
-               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_stroke (cr);
-       }
-
-       ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
-       ge_cairo_set_color (cr, &border);
-       cairo_stroke (cr);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_gummy_draw_progressbar_trough (cairo_t                *cr,
-                                          const ClearlooksColors *colors,
-                                          const WidgetParameters *params,
-                                          int x, int y, int width, int height)
-{
-       const CairoColor *border = &colors->shade[7];
-       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);
-
-       /* 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]);
-       cairo_fill (cr);
-
-       /* Draw border */
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width-1, height-1, radius, params->corners);
-       clearlooks_set_mixed_color (cr, border, &colors->shade[2], 0.3);
-       cairo_stroke (cr);
-
-       /* clip the corners of the shadows */
-       ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
-       cairo_clip (cr);
-
-       ge_shade_color (border, 0.92, &shadow);
-
-       /* 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.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);
-
-       /* 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.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);
-
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_gummy_draw_progressbar_fill (cairo_t                     *cr,
-                                        const ClearlooksColors      *colors,
-                                        const WidgetParameters      *params,
-                                        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;
-
-       cairo_pattern_t *pattern;
-       CairoColor       shade1, shade2, shade3;
-       CairoColor       border;
-       CairoColor       shadow;
-
-       radius = MAX (0, params->radius - params->xthickness);
-
-       cairo_save (cr);
-
-       if (!is_horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
-               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
-
-       /* Clamp the radius so that the _height_ fits ... */
-       radius = MIN (radius, height / 2.0);
-
-       stroke_width = height*2;
-       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
-
-       cairo_translate (cr, x, y);
-
-       cairo_save (cr);
-       /* This is kind of nasty ... Clip twice from each side in case the length
-        * of the fill is smaller than twice the radius. */
-       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (cr);
-       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
-       cairo_clip (cr);
-
-       /* Draw the background gradient */
-       ge_shade_color (&colors->spot[1], SHADE_TOP, &shade1);
-       ge_shade_color (&colors->spot[1], SHADE_CENTER_TOP, &shade2);
-       ge_shade_color (&colors->spot[1], SHADE_BOTTOM, &shade3);
-       pattern = cairo_pattern_create_linear (0, 0, 0, height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.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, colors->spot[1].r, colors->spot[1].g, colors->spot[1].b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade3.r, shade3.g, shade3.b);
-       cairo_set_source (cr, pattern);
-       cairo_paint (cr);
-       cairo_pattern_destroy (pattern);
-
-       /* 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;
-       }
-
-       cairo_set_source_rgba (cr, colors->spot[2].r,
-                                  colors->spot[2].g,
-                                  colors->spot[2].b,
-                                  0.15);
-
-       cairo_fill (cr);
-       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.2);
-
-       /* 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. */
-       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (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.6;
-       ge_shade_color (&colors->shade[7], 0.92, &shadow);
-       shadow.a = 0.2;
-
-       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);
-               ge_cairo_set_color (cr, &shadow);
-               cairo_stroke (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);
-       }
-
-       cairo_restore (cr);
-
-       cairo_restore (cr); /* rotation, mirroring */
-}
-
-static void
-clearlooks_gummy_scale_draw_gradient (cairo_t          *cr,
-                                      const CairoColor *fill,
-                                      const CairoColor *border,
-                                      int x, int y, int width, int height,
-                                      gboolean horizontal, gboolean in)
-{
-       cairo_pattern_t *pattern;
-
-       CairoColor f1, f2;
-
-       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);
-       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_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);
-}
-
-#define TROUGH_SIZE 7
-static void
-clearlooks_gummy_draw_scale_trough (cairo_t                *cr,
-                                    const ClearlooksColors *colors,
-                                    const WidgetParameters *params,
-                                    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);
-
-       if (slider->horizontal)
-       {
-               trough_width  = width;
-               trough_height = TROUGH_SIZE;
-
-               translate_x   = x;
-               translate_y   = y + (height/2) - (TROUGH_SIZE/2);
-       }
-       else
-       {
-               trough_width  = TROUGH_SIZE;
-               trough_height = height;
-
-               translate_x   = x + (width/2) - (TROUGH_SIZE/2);
-               translate_y   = y;
-       }
-
-       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);
-
-       if (!slider->lower && !slider->fill_level)
-       {
-               ge_shade_color (&params->parentbg, 0.896, &fill);
-               border = colors->shade[6];
-               in = TRUE;
-       }
-       else if (!slider->fill_level)
-       {
-               fill = colors->spot[1];
-               border = colors->spot[2];
-               in = 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
-clearlooks_gummy_draw_tab (cairo_t                *cr,
-                           const ClearlooksColors *colors,
-                           const WidgetParameters *params,
-                           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;
-
-       double            radius;
-       double            stripe_size = 2.0;
-       double            stripe_fill_size;
-       double            stripe_border_pos;
-
-       gboolean horizontal = FALSE;
-
-       radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
-
-       /* Set clip */
-       cairo_rectangle      (cr, x, y, width, height);
-       cairo_clip           (cr);
-       cairo_new_path       (cr);
-
-       /* Translate and set line width */
-       cairo_set_line_width (cr, 1.0);
-       cairo_translate      (cr, x+0.5, y+0.5);
-
-       /* Make the tabs slightly bigger than they should be, to create a gap */
-       /* 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;
-
-               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));
-
-               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, 0, width-1, height-1,
-                                   radius, params->corners);
-
-       /* Draw fill */
-       ge_cairo_set_color (cr, fill);
-       cairo_fill  (cr);
-
-       /* Draw highlight */
-       if (!params->active)
-       {
-               ShadowParameters shadow;
-
-               shadow.shadow  = CL_SHADOW_OUT;
-               shadow.corners = params->corners;
-
-               clearlooks_gummy_draw_highlight_and_shade (cr, &colors->bg[0], &shadow,
-                                                          width, height, radius);
-       }
-
-       if (params->active)
-       {
-               CairoColor hilight;
-               CairoColor shade1, shade2, shade3;
-
-               ge_shade_color (fill, 1.15, &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_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;
-               }
-
-               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.8, fill->r, fill->g, fill->b, 0.0);
-               cairo_set_source (cr, pattern);
-               cairo_fill (cr);
-               cairo_pattern_destroy (pattern);
-       }
-
-       ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
-
-       if (params->active)
-       {
-               ge_cairo_set_color (cr, border);
-               cairo_stroke (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;
-               }
-
-               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);
-               cairo_set_source (cr, pattern);
-               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
-clearlooks_gummy_draw_separator (cairo_t                   *cr,
-                                 const ClearlooksColors    *colors,
-                                 const WidgetParameters    *widget,
-                                 const SeparatorParameters *separator,
-                                 int x, int y, int width, int height)
-{
-       CairoColor color = colors->shade[3];
-       CairoColor hilight;
-       ge_shade_color (&color, 1.3, &hilight);
-
-       cairo_save (cr);
-       cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-
-       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);
-       }
-       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_restore (cr);
-}
-
-static void
-clearlooks_gummy_draw_slider (cairo_t                *cr,
-                              const ClearlooksColors *colors,
-                              const WidgetParameters *params,
-                              int x, int y, int width, int height)
-{
-       const CairoColor *border = &colors->shade[7];
-       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_translate      (cr, x, y);
-
-       ge_shade_color (&colors->bg[params->state_type], 1.0, &fill);
-       if (params->prelight)
-               ge_shade_color (&fill, 1.04, &fill);
-
-       ge_shade_color (&fill, SHADE_TOP, &shade1);
-       ge_shade_color (&fill, SHADE_CENTER_TOP, &shade2);
-       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_rectangle (cr, 1, 1, width-2, height-2);
-       cairo_set_source (cr, pattern);
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       clearlooks_set_mixed_color (cr, border, &fill, 0.2);
-       if (params->prelight)
-               ge_cairo_set_color (cr, &colors->spot[2]);
-       ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, 2.5, params->corners);
-       cairo_stroke (cr);
-
-       /* Handle */
-       shift_x = (width%2 == 0 ? 1 : 0);
-       bar_x = width/2-3+shift_x;
-       cairo_translate (cr, 0.5, 0.5);
-       ge_cairo_set_color (cr, border);
-       for (i=0; i<3-shift_x; i++)
-       {
-               cairo_move_to (cr, bar_x, 4);
-               cairo_line_to (cr, bar_x, height-5);
-               bar_x += 3;
-       }
-       cairo_stroke (cr);
-
-       params->style_functions->draw_top_left_highlight (cr, &fill, params, 1, 1, width-2, height-2, 2.0, params->corners);
-}
-
-static void
-clearlooks_gummy_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 - 1.0) / 2.0, (height - 1.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);
-
-       params->style_functions->draw_shadow (cr, colors, radius, width, height);
-       params->style_functions->draw_slider (cr, colors, params, 1, 1, width-2, height-2);
-}
-
-static void
-clearlooks_gummy_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)
-{
-       CairoCorners corners = CR_CORNER_NONE;
-       const CairoColor *border = &colors->shade[scrollbar->has_color ? 7 : 6];
-       CairoColor fill;
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-       double radius = MIN (widget->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
-
-       if (scrollbar->horizontal)
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-               else if (stepper->stepper == CL_STEPPER_D)
-                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
-       }
-       else
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
-               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);
-
-       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);
-       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);
-
-       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);
-}
-
-static void
-clearlooks_gummy_draw_scrollbar_slider (cairo_t                   *cr,
-                                        const ClearlooksColors    *colors,
-                                        const WidgetParameters    *widget,
-                                        const ScrollBarParameters *scrollbar,
-                                        int x, int y, int width, int height)
-{
-       CairoColor fill = scrollbar->color;
-       CairoColor border, handles;
-       CairoColor hilight;
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-       int bar_x, i;
-
-       gdouble hue_scroll, brightness_scroll, saturation_scroll;
-       gdouble hue_bg, brightness_bg, saturation_bg;
-
-       ge_hsb_from_color (&fill, &hue_scroll, &saturation_scroll, &brightness_scroll);
-       ge_hsb_from_color (&colors->bg[0], &hue_bg, &saturation_bg, &brightness_bg);
-
-       /* Set the right color for border and handles */
-       if ((fabs(saturation_scroll - saturation_bg) < 0.30) &&
-           (fabs(brightness_scroll - brightness_bg) < 0.20))
-               ge_shade_color (&fill, 0.475, &border);
-       else
-               ge_shade_color (&fill, 0.575, &border);
-       /* The following lines increase contrast when the HUE is between 25 and 195, */
-       /* fixing a LOT of colorschemes! */
-       if (scrollbar->has_color && (hue_scroll < 195) && (hue_scroll > 25))
-               ge_shade_color (&border, 0.85, &border);
-
-       handles = border;
-       ge_mix_color (&border, &fill, scrollbar->has_color? 0.3 : 0.2, &border);
-
-       if (scrollbar->junction & CL_JUNCTION_BEGIN)
-       {
-               if (scrollbar->horizontal)
-               {
-                       x -= 1;
-                       width += 1;
-               }
-               else
-               {
-                       y -= 1;
-                       height += 1;
-               }
-       }
-       if (scrollbar->junction & CL_JUNCTION_END)
-       {
-               if (scrollbar->horizontal)
-                       width += 1;
-               else
-                       height += 1;
-       }
-
-       if (!scrollbar->horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       cairo_translate (cr, x, y);
-
-       if (widget->prelight)
-               ge_shade_color (&fill, 1.04, &fill);
-
-       cairo_set_line_width (cr, 1);
-
-       ge_shade_color (&fill, widget->style_constants->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);
-
-       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,   shade3.r, shade3.g, shade3.b);
-       cairo_rectangle (cr, 1, 1, width-2, height-2);
-       cairo_set_source (cr, pattern);
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       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);
-       }
-       else
-       {
-               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);
-       }
-
-       ge_cairo_set_color (cr, &border);
-       ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-
-       /* Handle */
-       bar_x = width/2 - 4;
-       cairo_translate(cr, 0.5, 0.5);
-       ge_cairo_set_color (cr, &handles);
-       for (i=0; i<3; i++)
-       {
-               cairo_move_to (cr, bar_x, 5);
-               cairo_line_to (cr, bar_x, height-6);
-               bar_x += 3;
-       }
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_gummy_draw_list_view_header (cairo_t                        *cr,
-                                        const ClearlooksColors         *colors,
-                                        const WidgetParameters         *params,
-                                        const ListViewHeaderParameters *header,
-                                        int x, int y, int width, int height)
-{
-/*
-       CairoColor *border = !params->prelight? (CairoColor*)&colors->shade[4] : (CairoColor*)&colors->spot[1];
-*/
-       const CairoColor *border = &colors->shade[4];
-       const CairoColor *fill   = &colors->bg[params->state_type];
-       CairoColor hilight;
-       CairoColor shade1, shade2, shade3;
-
-       cairo_pattern_t *pattern;
-
-       ge_shade_color (fill, 1.11, &hilight);
-       ge_shade_color (fill, LISTVIEW_SHADE_TOP, &shade1);
-       ge_shade_color (fill, LISTVIEW_SHADE_CENTER_TOP, &shade2);
-       ge_shade_color (fill, LISTVIEW_SHADE_BOTTOM, &shade3);
-
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-
-       /* Draw the fill */
-       pattern = cairo_pattern_create_linear (0, 0, 0, height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.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-1.0/height, shade3.r, shade3.g, shade3.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0-1.0/height, border->r, border->g, border->b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, border->r, border->g, border->b);
-
-       cairo_set_source (cr, pattern);
-       cairo_rectangle (cr, 0, 0, width, height);
-       cairo_fill (cr);
-
-       cairo_pattern_destroy (pattern);
-
-       /* Draw highlight */
-       if (header->order & CL_ORDER_FIRST)
-       {
-               cairo_move_to (cr, 0.5, height-1.5);
-               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 resize grip */
-       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);
-               else
-                       params->style_functions->draw_separator (cr, colors, params, &separator,
-                                                                1.5, 4.0, 2, height-8.0);
-       }
-}
-
-static void
-clearlooks_gummy_draw_toolbar (cairo_t                 *cr,
-                               const ClearlooksColors  *colors,
-                               const WidgetParameters  *widget,
-                               const ToolbarParameters *toolbar,
-                               int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->bg[GTK_STATE_NORMAL];
-       const CairoColor *dark = &colors->shade[3];
-       CairoColor light;
-       ge_shade_color (fill, toolbar->style == 1 ? 1.1 : 1.05, &light);
-
-       cairo_set_line_width (cr, 1.0);
-       cairo_translate (cr, x, y);
-
-       if (toolbar->style == 1) /* Enable Extra features */
-       {
-               cairo_pattern_t *pattern;
-               CairoColor shade1, shade2, shade3;
-
-               ge_shade_color (fill, TOOLBAR_SHADE_TOP, &shade1);
-               ge_shade_color (fill, TOOLBAR_SHADE_CENTER_TOP, &shade2);
-               ge_shade_color (fill, TOOLBAR_SHADE_BOTTOM, &shade3);
-
-               /* Draw the fill */
-               pattern = cairo_pattern_create_linear (0, 0, 0, height);
-               cairo_pattern_add_color_stop_rgb (pattern, 0.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_rectangle (cr, 0, 0, width, height);
-               cairo_fill (cr);
-
-               cairo_pattern_destroy (pattern);
-       }
-       else /* Flat */
-       {
-               ge_cairo_set_color (cr, fill);
-               cairo_paint (cr);
-       }
-
-       if (!toolbar->topmost)
-       {
-               /* Draw highlight */
-               cairo_move_to       (cr, 0, 0.5);
-               cairo_line_to       (cr, width-0.5, 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);
-       ge_cairo_set_color  (cr, dark);
-       cairo_stroke        (cr);
-}
-
-static void
-clearlooks_gummy_draw_menuitem (cairo_t                *cr,
-                                const ClearlooksColors *colors,
-                                const WidgetParameters *params,
-                                int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       const CairoColor *border = &colors->spot[2];
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-
-       ge_shade_color (fill, SHADE_TOP, &shade1);
-       ge_shade_color (fill, SHADE_CENTER_TOP, &shade2);
-       ge_shade_color (fill, SHADE_BOTTOM, &shade3);
-       cairo_set_line_width (cr, 1.0);
-
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       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,   shade3.r, shade3.g, shade3.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, border);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_gummy_draw_menubaritem (cairo_t                *cr,
-                                   const ClearlooksColors *colors,
-                                   const WidgetParameters *params,
-                                   int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       const CairoColor *border = &colors->spot[2];
-       CairoColor shade1, shade2, shade3;
-       cairo_pattern_t *pattern;
-
-       ge_shade_color (fill, SHADE_TOP, &shade1);
-       ge_shade_color (fill, SHADE_CENTER_TOP, &shade2);
-       ge_shade_color (fill, SHADE_BOTTOM, &shade3);
-       cairo_set_line_width (cr, 1.0);
-
-       ge_cairo_rounded_rectangle (cr, x+0.5, y+0.5, width - 1, height - 1, params->radius, params->corners);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       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,   shade3.r, shade3.g, shade3.b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, border);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_gummy_draw_selected_cell (cairo_t                *cr,
-                                    const ClearlooksColors *colors,
-                                    const WidgetParameters *params,
-                                    int x, int y, int width, int height)
-{
-       CairoColor color;
-
-       if (params->focus)
-               color = colors->base[params->state_type];
-       else
-               color = colors->base[GTK_STATE_ACTIVE];
-
-       clearlooks_draw_gummy_gradient (cr, x, y, width, height, &color, params->disabled, 0.0, CR_CORNER_NONE);
-}
-
-static void
-clearlooks_gummy_draw_statusbar (cairo_t                *cr,
-                                 const ClearlooksColors *colors,
-                                 const WidgetParameters *widget,
-                                 int x, int y, int width, int height)
-{
-       const CairoColor *dark = &colors->shade[3];
-       CairoColor hilight;
-
-       ge_shade_color (dark, 1.3, &hilight);
-
-       cairo_set_line_width  (cr, 1);
-       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);
-       cairo_stroke          (cr);
-
-       cairo_translate       (cr, 0, 1);
-       cairo_move_to         (cr, 0, 0);
-       cairo_line_to         (cr, width, 0);
-       ge_cairo_set_color    (cr, &hilight);
-       cairo_stroke          (cr);
-}
-
-static void
-clearlooks_gummy_draw_radiobutton (cairo_t                  *cr,
-                                   const ClearlooksColors   *colors,
-                                   const WidgetParameters   *widget,
-                                   const CheckboxParameters *checkbox,
-                                   int x, int y, int width, int height)
-{
-       const CairoColor *border;
-       const CairoColor *dot;
-       CairoColor shadow;
-       CairoColor highlight;
-       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;
-
-       if (widget->disabled)
-       {
-               border = &colors->shade[5];
-               dot    = &colors->shade[6];
-       }
-       else
-       {
-               if (widget->prelight)
-                       border = &colors->spot[2];
-               else
-                       border = &colors->shade[6];
-               dot    = &colors->text[0];
-       }
-
-       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);
-       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_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);
-
-       if (!widget->disabled)
-       {
-               if (widget->prelight)
-                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
-               else
-                       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_move_to (cr, ceil (cx - radius/3.0), ceil (cy));
-                       cairo_line_to (cr, ceil (cx + radius/3.0), ceil (cy));
-
-                       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);
-                       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_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
-                       cairo_fill (cr);
-               }
-       }
-}
-
-static void
-clearlooks_gummy_draw_checkbox (cairo_t                  *cr,
-                                const ClearlooksColors   *colors,
-                                const WidgetParameters   *widget,
-                                const CheckboxParameters *checkbox,
-                                int x, int y, int width, int height)
-{
-       const CairoColor *border;
-       const CairoColor *dot;
-       gboolean inconsistent = FALSE;
-       gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
-
-       inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
-       draw_bullet |= inconsistent;
-
-       if (widget->disabled)
-       {
-               border = &colors->shade[5];
-               dot    = &colors->shade[6];
-       }
-       else
-       {
-               if (widget->prelight)
-                       border = &colors->spot[2];
-               else
-                       border = &colors->shade[6];
-               dot    = &colors->text[GTK_STATE_NORMAL];
-       }
-
-       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, (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);
-       }
-       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);
-       }
-
-       if (!widget->disabled)
-       {
-               if (widget->prelight)
-                       clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
-               else
-                       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) /* Inconsistent */
-               {
-                       cairo_set_line_width (cr, 2.0);
-                       cairo_move_to (cr, 3, height*0.5);
-                       cairo_line_to (cr, width-3, height*0.5);
-               }
-               else
-               {
-                       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);
-       }
-}
-
-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)
-{
-       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;
-}
diff --git a/libs/clearlooks/clearlooks_draw_inverted.c b/libs/clearlooks/clearlooks_draw_inverted.c
deleted file mode 100644 (file)
index 1bfff6d..0000000
+++ /dev/null
@@ -1,993 +0,0 @@
-/* Clearlooks Inverted style
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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 Andrea Cimitan <andrea.cimitan@gmail.com>
- */
-
-#include "clearlooks_draw.h"
-#include "clearlooks_style.h"
-#include "clearlooks_types.h"
-
-#include "support.h"
-#include <ge-support.h>
-
-#include <cairo.h>
-
-
-static void
-clearlooks_set_border_gradient (cairo_t *cr, const CairoColor *color, double hilight, int width, int height)
-{
-       cairo_pattern_t *pattern;
-
-       CairoColor bottom_shade;
-       ge_shade_color (color, hilight, &bottom_shade);
-
-       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);
-}
-
-static void
-clearlooks_inverted_draw_button (cairo_t *cr,
-                        const ClearlooksColors *colors,
-                        const WidgetParameters *params,
-                        int x, int y, int width, int height)
-{
-       double xoffset = 0, yoffset = 0;
-       double radius = params->radius;
-       const CairoColor *fill = &colors->bg[params->state_type];       
-       const CairoColor *border_disabled = &colors->shade[4];
-       CairoColor border_normal;
-       CairoColor shadow;
-
-       ge_shade_color(&colors->shade[6], 1.05, &border_normal);
-       ge_shade_color (&border_normal, 0.925, &shadow);
-       
-       cairo_save (cr);
-       
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-
-       if (params->xthickness == 3 || params->ythickness == 3)
-       {
-               if (params->xthickness == 3)
-                       xoffset = 1;
-               if (params->ythickness == 3)
-                       yoffset = 1;
-       }
-
-       radius = MIN (radius, MIN ((width - 2.0 - xoffset * 2.0) / 2.0, (height - 2.0 - yoffset * 2) / 2.0));
-
-       if (params->xthickness == 3 || params->ythickness == 3)
-       {
-               params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, radius+1, params->corners);
-       }               
-       
-       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, bottom_shade;
-               ge_shade_color (fill, 0.95, &top_shade);                
-               ge_shade_color (fill, 1.05, &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, 1.0, bottom_shade.r, bottom_shade.g, bottom_shade.b);
-               cairo_set_source (cr, pattern);
-               cairo_fill (cr);
-               cairo_pattern_destroy (pattern);
-       }
-       else
-       {
-               cairo_pattern_t *pattern;
-               
-               ge_cairo_set_color (cr, fill);
-               cairo_fill_preserve (cr);
-
-               pattern = cairo_pattern_create_linear (0, 0, 0, height);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.0);
-               cairo_pattern_add_color_stop_rgba (pattern, 0.4, shadow.r, shadow.g, shadow.b, 0.0);
-               cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.2);
-               cairo_set_source (cr, pattern);
-               cairo_fill_preserve (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.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.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)
-       {
-               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_set_color (cr, d);
-               ge_cairo_stroke_rectangle (cr, 3.5, 3.5, width-7, height-7);
-       }
-       
-       if (params->disabled)
-                       ge_cairo_set_color (cr, border_disabled);
-       else
-               if (!params->active)
-                       clearlooks_set_border_gradient (cr, &border_normal, 1.32, 0, height); 
-               else
-                       ge_cairo_set_color (cr, &border_normal);
-       
-       ge_cairo_rounded_rectangle (cr, xoffset + 0.5, yoffset + 0.5,
-                                  width-(xoffset*2)-1, height-(yoffset*2)-1,
-                                  radius, params->corners);
-       cairo_stroke (cr);
-       
-       /* Draw the "shadow" */
-       if (!params->active)
-       {
-               /* 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_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);
-       }
-       cairo_restore (cr);
-}
-
-static void
-clearlooks_inverted_draw_progressbar_fill (cairo_t *cr,
-                                  const ClearlooksColors *colors,
-                                  const WidgetParameters *params,
-                                  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;
-
-       cairo_pattern_t *pattern;
-       CairoColor       bg_shade;
-       CairoColor       border;
-       CairoColor       shadow;
-       CairoColor       top_shade;
-
-       radius = MAX (0, params->radius - params->xthickness);
-
-       cairo_save (cr);
-
-       if (!is_horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       if ((progressbar->orientation == CL_ORIENTATION_RIGHT_TO_LEFT) || (progressbar->orientation == CL_ORIENTATION_BOTTOM_TO_TOP))
-               ge_cairo_mirror (cr, CR_MIRROR_HORIZONTAL, &x, &y, &width, &height);
-
-       /* Clamp the radius so that the _height_ fits ...  */
-       radius = MIN (radius, height / 2.0);
-
-       stroke_width = height*2;
-       x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
-       
-       cairo_translate (cr, x, y);
-
-       cairo_save (cr);
-       /* This is kind of nasty ... Clip twice from each side in case the length
-        * of the fill is smaller than twice the radius. */
-       ge_cairo_rounded_rectangle (cr, 0, 0, width + radius, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (cr);
-       ge_cairo_rounded_rectangle (cr, -radius, 0, width + radius, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
-       cairo_clip (cr);
-
-               
-       ge_shade_color (&colors->spot[1], 1.05, &top_shade);
-
-       /* Draw the background gradient */
-       ge_shade_color (&colors->spot[1], 0.925, &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.5, top_shade.r, top_shade.g, top_shade.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)
-       {
-               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;
-       }
-       
-       cairo_set_source_rgba (cr, colors->spot[2].r,
-                                  colors->spot[2].g,
-                                  colors->spot[2].b,
-                                  0.15);
-       
-       cairo_fill (cr);
-       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. */
-       ge_cairo_rounded_rectangle (cr, -1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
-       cairo_clip (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;
-       shadow.a = 0.1;
-
-       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);
-               ge_cairo_set_color (cr, &shadow);
-               cairo_stroke (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);
-       }
-       
-       cairo_restore (cr);
-
-       cairo_restore (cr); /* rotation, mirroring */
-}
-
-static void
-clearlooks_inverted_draw_menuitem (cairo_t *cr,
-                          const ClearlooksColors          *colors,
-                          const WidgetParameters          *widget,
-                          int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->spot[1];
-       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 - 1, widget->radius, widget->corners);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0, fill_shade.r, fill_shade.g, fill_shade.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0,   fill->r, fill->g, fill->b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve  (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, &border);
-       cairo_stroke (cr);
-}
-
-static void
-clearlooks_inverted_draw_menubaritem (cairo_t *cr,
-                          const ClearlooksColors          *colors,
-                          const WidgetParameters          *widget,
-                          int x, int y, int width, int height)
-{
-       CairoColor *fill = (CairoColor*)&colors->spot[1];
-       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);
-
-       pattern = cairo_pattern_create_linear (x, y, x, y + height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0, fill_shade.r, fill_shade.g, fill_shade.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0,   fill->r, fill->g, fill->b);
-
-       cairo_set_source (cr, pattern);
-       cairo_fill_preserve  (cr);
-       cairo_pattern_destroy (pattern);
-
-       ge_cairo_set_color (cr, &border);
-       cairo_stroke_preserve (cr);
-}
-
-static void
-clearlooks_inverted_draw_tab (cairo_t *cr,
-                     const ClearlooksColors *colors,
-                     const WidgetParameters *params,
-                     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;
-       CairoColor           shadow;
-
-       cairo_pattern_t     *pattern;
-       
-       double               radius;
-       double               strip_size;
-       double               length;
-
-       radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
-
-       /* Set clip */
-       cairo_rectangle      (cr, x, y, width, height);
-       cairo_clip           (cr);
-       cairo_new_path       (cr);
-
-       /* Translate and set line width */      
-       cairo_set_line_width (cr, 1.0);
-       cairo_translate      (cr, x+0.5, y+0.5);
-
-
-       /* Make the tabs slightly bigger than they should be, to create a gap */
-       /* And calculate the strip size too, while you're at it */
-       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)
-                       cairo_translate (cr, 0.0, -3.0); /* gap at the other side */
-       }
-       else
-       {
-               width += 3.0;
-               length = width;
-               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, 0, width-1, height-1,
-                                   radius, params->corners);
-       
-       /* Draw fill */
-       ge_cairo_set_color (cr, fill);
-       cairo_fill   (cr);
-
-       ge_shade_color (fill, 1.3, &hilight);
-
-       /* Draw highlight */
-       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)
-       {
-               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;
-               }
-
-               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/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);
-       }
-       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;
-               }
-       
-               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, 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.0);
-               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_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
-       
-       if (params->active)
-       {
-               ge_cairo_set_color (cr, border2);       
-               cairo_stroke (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;
-               }
-               
-               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);
-               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);
-       }
-}
-
-static void
-clearlooks_inverted_draw_slider (cairo_t *cr,
-                        const ClearlooksColors *colors,
-                        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];
-       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_translate      (cr, x, y);
-
-       if (params->disabled)
-               border = &colors->shade[4];
-       else if (params->prelight)
-               border = &colors->spot[2];
-       else
-               border = &colors->shade[6];
-
-       /* fill the widget */
-       cairo_rectangle (cr, 1.0, 1.0, width-2, height-2);
-
-       /* Fake light */
-       if (!params->disabled)
-       {
-               const CairoColor *top = &colors->shade[2];
-               const CairoColor *bot = &colors->shade[0];
-
-               pattern = cairo_pattern_create_linear (0, 0, 0, height);
-               cairo_pattern_add_color_stop_rgb (pattern, 0.0,  top->r, top->g, top->b);
-               cairo_pattern_add_color_stop_rgb (pattern, 1.0,  bot->r, bot->g, bot->b);
-               cairo_set_source (cr, pattern);
-               cairo_fill (cr);
-               cairo_pattern_destroy (pattern);
-       }
-       else
-       {
-               ge_cairo_set_color (cr, fill);
-               cairo_rectangle    (cr, 1.0, 1.0, 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_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 (0.5, 0.5, 0.5, 0.5+height);
-
-       if (params->prelight)
-       {
-               CairoColor highlight;
-               ge_shade_color (spot, 1.5, &highlight);
-               cairo_pattern_add_color_stop_rgb (pattern, 0.0, spot->r, spot->g, spot->b);
-               cairo_pattern_add_color_stop_rgb (pattern, 1.0, highlight.r, highlight.g, highlight.b);
-               cairo_set_source (cr, pattern);
-       }
-       else {
-               CairoColor hilight; 
-               ge_shade_color (fill, 1.5, &hilight);
-               cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
-       }
-
-       cairo_fill (cr);
-       cairo_pattern_destroy (pattern);
-
-       cairo_restore (cr);
-
-       /* Draw the border */
-       ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
-       if (params->prelight || params->disabled)
-               ge_cairo_set_color (cr, border);
-       else
-               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_set_line_width (cr, 1.0);
-               cairo_set_source_rgba (cr, border->r,
-                                          border->g,
-                                          border->b,
-                                          0.3);
-               cairo_stroke (cr);
-       }
-}
-
-static void
-clearlooks_inverted_draw_list_view_header (cairo_t *cr,
-                                  const ClearlooksColors          *colors,
-                                  const WidgetParameters          *params,
-                                  const ListViewHeaderParameters  *header,
-                                  int x, int y, int width, int height)
-{
-       const CairoColor *fill = &colors->bg[params->state_type];
-       const CairoColor *border = &colors->shade[4];
-       cairo_pattern_t *pattern;
-       CairoColor hilight_header;
-       CairoColor hilight;
-       CairoColor shadow;
-
-       ge_shade_color (border, 1.5, &hilight);
-       ge_shade_color (fill, 1.05, &hilight_header);   
-       ge_shade_color (fill, 0.95, &shadow);   
-
-       cairo_translate (cr, x, y);
-       cairo_set_line_width (cr, 1.0);
-       
-       /* Draw highlight */
-       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, 0, 0.0, height-1.0);
-       cairo_pattern_add_color_stop_rgb     (pattern, 0.0, shadow.r, shadow.g, shadow.b);
-       cairo_pattern_add_color_stop_rgb     (pattern, 1.0, hilight_header.r, hilight_header.g, hilight_header.b);
-
-       cairo_rectangle       (cr, 0, 1, width, height-2);
-       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)
-       {
-               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);
-               else
-                       params->style_functions->draw_separator (cr, colors, params, &separator,
-                                                                1.5, 4.0, 2, height-8.0);
-       }
-}
-
-
-static void
-clearlooks_inverted_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)
-{
-       CairoCorners corners = CR_CORNER_NONE;
-       CairoColor border;
-       CairoColor s1, s2, s3;
-       cairo_pattern_t *pattern;
-       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);
-
-       if (scrollbar->horizontal)
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-               else if (stepper->stepper == CL_STEPPER_D)
-                       corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
-       }
-       else
-       {
-               if (stepper->stepper == CL_STEPPER_A)
-                       corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
-               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);
-                               
-       s1 = colors->bg[widget->state_type];
-       ge_shade_color(&s1, 0.95, &s2); 
-       ge_shade_color(&s1, 1.05, &s3); 
-       
-       cairo_pattern_add_color_stop_rgb(pattern, 0,    s2.r, s2.g, s2.b);
-       cairo_pattern_add_color_stop_rgb(pattern, 1.0,  s3.r, s3.g, s3.b);
-       cairo_set_source (cr, pattern);
-       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);
-
-       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);
-}
-
-static void
-clearlooks_inverted_draw_scrollbar_slider (cairo_t *cr,
-                                   const ClearlooksColors          *colors,
-                                   const WidgetParameters          *widget,
-                                   const ScrollBarParameters       *scrollbar,
-                                   int x, int y, int width, int height)
-{
-       if (scrollbar->junction & CL_JUNCTION_BEGIN)
-       {
-               if (scrollbar->horizontal)
-               {
-                       x -= 1;
-                       width += 1;
-               }
-               else
-               {
-                       y -= 1;
-                       height += 1;
-               }
-       }
-       if (scrollbar->junction & CL_JUNCTION_END)
-       {
-               if (scrollbar->horizontal)
-                       width += 1;
-               else
-                       height += 1;
-       }
-       
-       if (!scrollbar->horizontal)
-               ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
-
-       cairo_translate (cr, x, y);     
-
-       if (scrollbar->has_color)
-       {
-               const CairoColor *border = &colors->shade[8];
-               CairoColor  fill    = scrollbar->color;
-               CairoColor  hilight;
-               CairoColor  shade1, shade2, shade3;
-               cairo_pattern_t *pattern;
-                               
-               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,    fill.r,  fill.g,  fill.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,  shade2.r, shade2.g, shade2.b); 
-               cairo_pattern_add_color_stop_rgb (pattern, 1.0,  shade1.r, shade1.g, shade1.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);
-       }
-       else
-       {
-               CairoColor border;
-               CairoColor s1, s2, s3;
-               cairo_pattern_t *pattern;
-               int bar_x, i;
-               
-               const CairoColor *dark  = &colors->shade[4];
-               const CairoColor *light = &colors->shade[0];            
-
-               ge_shade_color(&colors->shade[6], 1.05, &border);
-
-               pattern = cairo_pattern_create_linear(1, 1, 1, height-1);
-
-               s1 = colors->bg[widget->state_type];
-               ge_shade_color(&s1, 0.95, &s2); 
-               ge_shade_color(&s1, 1.05, &s3); 
-
-               cairo_pattern_add_color_stop_rgb(pattern, 0,    s2.r, s2.g, s2.b);
-               cairo_pattern_add_color_stop_rgb(pattern, 1.0,  s3.r, s3.g, s3.b);
-
-               cairo_rectangle (cr, 1, 1, width-2, height-2);
-               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, 0, widget->corners);
-
-               clearlooks_set_border_gradient (cr, &border, 1.2, 0, height);
-               ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-               
-               /* draw handles */
-               cairo_set_line_width (cr, 1);
-               
-               bar_x = width/2 - 4;
-               cairo_translate(cr, 0.5, 0.5);
-               for (i=0; i<3; i++)
-               {
-                       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, 4);
-                       cairo_line_to (cr, bar_x+1, height-5);
-                       ge_cairo_set_color (cr, light);
-                       cairo_stroke (cr);
-                       
-                       bar_x += 3;
-               }
-       }
-}
-
-static void
-clearlooks_inverted_draw_selected_cell (cairo_t                  *cr,
-                              const ClearlooksColors   *colors,
-                              const WidgetParameters   *params,
-                              int x, int y, int width, int height)
-{
-       CairoColor upper_color;
-       CairoColor lower_color;
-       CairoColor border;
-       cairo_pattern_t *pattern;
-       cairo_save (cr);
-       
-       cairo_translate (cr, x, y);
-
-       if (params->focus)
-               upper_color = colors->base[params->state_type];
-       else
-               upper_color = colors->base[GTK_STATE_ACTIVE];
-
-       ge_shade_color(&upper_color, 0.9, &lower_color);
-
-       pattern = cairo_pattern_create_linear (0, 0, 0, height);
-       cairo_pattern_add_color_stop_rgb (pattern, 0.0, lower_color.r,
-                                                       lower_color.g,
-                                                       lower_color.b);
-       cairo_pattern_add_color_stop_rgb (pattern, 1.0, upper_color.r,
-                                                       upper_color.g,
-                                                       upper_color.b);
-
-
-       cairo_set_source (cr, pattern);
-       cairo_rectangle  (cr, 0, 0, width, height);
-       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);
-}
-
-void
-clearlooks_register_style_inverted (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants)
-{
-       functions->draw_button            = clearlooks_inverted_draw_button;
-       functions->draw_slider            = clearlooks_inverted_draw_slider;
-       functions->draw_progressbar_fill  = clearlooks_inverted_draw_progressbar_fill;
-       functions->draw_menuitem          = clearlooks_inverted_draw_menuitem;
-       functions->draw_menubaritem       = clearlooks_inverted_draw_menubaritem;
-       functions->draw_tab               = clearlooks_inverted_draw_tab;
-       functions->draw_list_view_header  = clearlooks_inverted_draw_list_view_header;
-       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/clearlooks_rc_style.c
deleted file mode 100644 (file)
index 14d4052..0000000
+++ /dev/null
@@ -1,482 +0,0 @@
-/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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>
- * 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"
-
-#ifdef HAVE_ANIMATION
-static void      clearlooks_rc_style_finalize     (GObject                *object);
-#endif
-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);
-
-enum
-{
-       TOKEN_FOCUSCOLOR = G_TOKEN_LAST + 1,
-       TOKEN_SCROLLBARCOLOR,
-       TOKEN_COLORIZESCROLLBAR,
-       TOKEN_CONTRAST,
-       TOKEN_SUNKENMENU,
-       TOKEN_PROGRESSBARSTYLE,
-       TOKEN_RELIEFSTYLE,
-       TOKEN_MENUBARSTYLE,
-       TOKEN_TOOLBARSTYLE,
-       TOKEN_MENUITEMSTYLE,
-       TOKEN_LISTVIEWITEMSTYLE,
-       TOKEN_ANIMATION,
-       TOKEN_STYLE,
-       TOKEN_RADIUS,
-       TOKEN_HINT,
-
-       TOKEN_CLASSIC,
-       TOKEN_GLOSSY,
-       TOKEN_INVERTED,
-       TOKEN_GUMMY,
-
-       TOKEN_TRUE,
-       TOKEN_FALSE,
-
-       TOKEN_LAST
-};
-
-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 (module);
-}
-
-static void
-clearlooks_rc_style_init (ClearlooksRcStyle *clearlooks_rc)
-{
-       clearlooks_rc->style = CL_STYLE_CLASSIC;
-
-       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
-static void
-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);
-}
-#endif
-
-
-static void
-clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass)
-{
-       GtkRcStyleClass *rc_style_class = GTK_RC_STYLE_CLASS (klass);
-#ifdef HAVE_ANIMATION
-       GObjectClass    *g_object_class = G_OBJECT_CLASS (klass);
-#endif
-
-       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;
-
-#ifdef HAVE_ANIMATION
-       g_object_class->finalize = clearlooks_rc_style_finalize;
-#endif
-}
-
-static void
-clearlooks_rc_style_class_finalize (ClearlooksRcStyleClass *klass)
-{
-}
-
-static guint
-clearlooks_gtk2_rc_parse_boolean (GtkSettings *settings,
-                                  GScanner     *scanner,
-                                  gboolean *retval)
-{
-       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 == TOKEN_TRUE)
-          *retval = TRUE;
-       else if (token == TOKEN_FALSE)
-          *retval = FALSE;
-       else
-          return TOKEN_TRUE;
-
-       return G_TOKEN_NONE;
-}
-
-static guint
-clearlooks_gtk2_rc_parse_color(GtkSettings  *settings,
-                               GScanner     *scanner,
-                               GtkRcStyle   *style,
-                               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_full (scanner, style, color);
-}
-
-static guint
-clearlooks_gtk2_rc_parse_double (GtkSettings  *settings,
-                                 GScanner     *scanner,
-                                 gdouble      *val)
-{
-       guint token;
-
-       /* Skip 'blah' */
-       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;
-
-       *val = scanner->value.v_float;
-
-       return G_TOKEN_NONE;
-}
-
-static guint
-clearlooks_gtk2_rc_parse_int (GtkSettings  *settings,
-                              GScanner     *scanner,
-                              guint8       *progressbarstyle)
-{
-       guint token;
-
-       /* Skip option name */
-       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
-clearlooks_gtk2_rc_parse_style (GtkSettings      *settings,
-                                GScanner         *scanner,
-                                ClearlooksStyles *style)
-{
-       guint token;
-
-       g_assert (CL_NUM_STYLES == CL_STYLE_GUMMY + 1); /* so that people don't forget ;-) */
-
-       /* Skip 'style' */
-       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);
-
-       switch (token)
-       {
-               case TOKEN_CLASSIC:
-                  *style = CL_STYLE_CLASSIC;
-                  break;
-               case TOKEN_GLOSSY:
-                  *style = CL_STYLE_GLOSSY;
-                  break;
-               case TOKEN_INVERTED:
-                  *style = CL_STYLE_INVERTED;
-                  break;
-               case TOKEN_GUMMY:
-                  *style = CL_STYLE_GUMMY;
-                  break;
-               default:
-                  return TOKEN_CLASSIC;
-       }
-
-       return G_TOKEN_NONE;
-}
-
-static guint
-clearlooks_gtk2_rc_parse_dummy (GtkSettings      *settings,
-                                GScanner         *scanner,
-                                gchar            *name)
-{
-       guint token;
-
-       /* Skip option */
-       token = g_scanner_get_next_token (scanner);
-
-       /* print a warning. Isn't there a way to get the string from the scanner? */
-       g_scanner_warn (scanner, "Clearlooks configuration option \"%s\" is not supported and will be ignored.", name);
-
-       /* equal sign */
-       token = g_scanner_get_next_token (scanner);
-       if (token != G_TOKEN_EQUAL_SIGN)
-          return G_TOKEN_EQUAL_SIGN;
-
-       /* eat whatever comes next */
-       token = g_scanner_get_next_token (scanner);
-
-       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;
-
-       /* 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, 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');
-       }
-
-       /* 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_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);
-                               clearlooks_style->flags |= CL_FLAG_SCROLLBAR_COLOR;
-                               break;
-                       case TOKEN_COLORIZESCROLLBAR:
-                               token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->colorize_scrollbar);
-                               clearlooks_style->flags |= CL_FLAG_COLORIZE_SCROLLBAR;
-                               break;
-                       case TOKEN_CONTRAST:
-                               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;
-                               break;
-                       case TOKEN_TOOLBARSTYLE:
-                               token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->toolbarstyle);
-                               clearlooks_style->flags |= CL_FLAG_TOOLBARSTYLE;
-                               break;
-                       case TOKEN_ANIMATION:
-                               token = clearlooks_gtk2_rc_parse_boolean (settings, scanner, &clearlooks_style->animation);
-                               clearlooks_style->flags |= CL_FLAG_ANIMATION;
-                               break;
-                       case TOKEN_STYLE:
-                               token = clearlooks_gtk2_rc_parse_style (settings, scanner, &clearlooks_style->style);
-                               clearlooks_style->flags |= CL_FLAG_STYLE;
-                               break;
-                       case TOKEN_RADIUS:
-                               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:
-                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "sunkenmenu");
-                               break;
-                       case TOKEN_PROGRESSBARSTYLE:
-                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "progressbarstyle");
-                               break;
-                       case TOKEN_MENUITEMSTYLE:
-                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "menuitemstyle");
-                               break;
-                       case TOKEN_LISTVIEWITEMSTYLE:
-                               token = clearlooks_gtk2_rc_parse_dummy (settings, scanner, "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;
-       ClearlooksRcFlags flags;
-
-       GTK_RC_STYLE_CLASS (clearlooks_rc_style_parent_class)->merge (dest, src);
-
-       if (!CLEARLOOKS_IS_RC_STYLE (src))
-               return;
-
-       src_w = CLEARLOOKS_RC_STYLE (src);
-       dest_w = CLEARLOOKS_RC_STYLE (dest);
-
-       flags = (~dest_w->flags) & src_w->flags;
-
-       if (flags & CL_FLAG_STYLE)
-               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)
-               dest_w->colorize_scrollbar = src_w->colorize_scrollbar;
-       if (flags & CL_FLAG_ANIMATION)
-               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;
-}
-
-
-/* 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/clearlooks_rc_style.h b/libs/clearlooks/clearlooks_rc_style.h
deleted file mode 100644 (file)
index e48143b..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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>
- * Modified by Kulyk Nazar <schamane@myeburg.net>
- */
-
-#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 ())
-#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))
-
-/* 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
-} ClearlooksRcFlags;
-
-
-struct _ClearlooksRcStyle
-{
-       GtkRcStyle parent_instance;
-
-       ClearlooksRcFlags flags;
-
-       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;
-};
-
-GE_INTERNAL void  clearlooks_rc_style_register_types (GTypeModule *module);
-GE_INTERNAL GType clearlooks_rc_style_get_type       (void);
-
-#endif /* CLEARLOOKS_RC_STYLE_H */
diff --git a/libs/clearlooks/clearlooks_style.c b/libs/clearlooks/clearlooks_style.c
deleted file mode 100644 (file)
index 4a7a75e..0000000
+++ /dev/null
@@ -1,1826 +0,0 @@
-/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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.
- *
- */
-
-#include <gtk/gtk.h>
-#include <cairo.h>
-#include <math.h>
-#include <string.h>
-
-#include <ge-support.h>
-#include "clearlooks_style.h"
-#include "clearlooks_rc_style.h"
-#include "clearlooks_draw.h"
-#include "support.h"
-
-/* #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, \
-                     GtkStateType    state_type, \
-                     GtkShadowType   shadow_type, \
-                     GdkRectangle   *area, \
-                     GtkWidget      *widget, \
-                     const gchar    *detail, \
-                     gint            x, \
-                     gint            y, \
-                     gint            width, \
-                     gint            height
-
-#ifdef HAVE_ANIMATION
-#include "animation.h"
-#endif
-
-#define STYLE_FUNCTION(function) (CLEARLOOKS_STYLE_GET_CLASS (style)->style_functions[CLEARLOOKS_STYLE (style)->style].function)
-
-G_DEFINE_DYNAMIC_TYPE (ClearlooksStyle, clearlooks_style, GTK_TYPE_STYLE)
-
-static void
-clearlooks_set_widget_parameters (const GtkWidget      *widget,
-                                  const GtkStyle       *style,
-                                  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;
-
-       /* 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
-        * the background color of a notebook. */
-       params->parentbg = CLEARLOOKS_STYLE (style)->colors.bg[state_type];
-       clearlooks_get_parent_bg (widget, &params->parentbg);
-}
-
-static void
-clearlooks_style_draw_flat_box (DRAW_ARGS)
-{
-       if (detail &&
-           state_type == GTK_STATE_SELECTED && (
-           !strncmp ("cell_even", detail, 9) ||
-           !strncmp ("cell_odd", detail, 8)))
-       {
-               WidgetParameters params;
-               ClearlooksStyle  *clearlooks_style;
-               ClearlooksColors *colors;
-               cairo_t          *cr;
-
-               CHECK_ARGS
-               SANITIZE_SIZE
-
-               clearlooks_style = CLEARLOOKS_STYLE (style);
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-               colors = &clearlooks_style->colors;
-               cr = ge_gdk_drawable_to_cairo (window, area);
-
-               /* XXX: We could expose the side details by setting params->corners accordingly
-                *      or adding another option. */
-               STYLE_FUNCTION (draw_selected_cell) (cr, colors, &params, x, y, width, height);
-
-               cairo_destroy (cr);
-       }
-       else if (DETAIL ("tooltip"))
-       {
-               WidgetParameters params;
-               ClearlooksStyle  *clearlooks_style;
-               ClearlooksColors *colors;
-               cairo_t          *cr;
-
-               CHECK_ARGS
-               SANITIZE_SIZE
-
-               clearlooks_style = CLEARLOOKS_STYLE (style);
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-               colors = &clearlooks_style->colors;
-               cr = ge_gdk_drawable_to_cairo (window, area);
-
-               STYLE_FUNCTION (draw_tooltip) (cr, colors, &params, x, y, width, height);
-
-               cairo_destroy (cr);
-       }
-       else if ((CLEARLOOKS_STYLE (style)->style == CL_STYLE_GLOSSY || CLEARLOOKS_STYLE (style)->style == CL_STYLE_GUMMY) &&
-                ((DETAIL("checkbutton") || DETAIL("radiobutton")) && state_type == GTK_STATE_PRELIGHT))
-       {
-               /* XXX: Don't draw any check/radiobutton bg in GLOSSY or GUMMY mode. */
-       }
-       else
-       {
-               GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_flat_box (style, window, state_type,
-                                                       shadow_type,
-                                                       area, widget, detail,
-                                                       x, y, width, height);
-       }
-}
-
-static void
-clearlooks_style_draw_shadow (DRAW_ARGS)
-{
-       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       cairo_t          *cr     = ge_gdk_drawable_to_cairo (window, area);
-
-       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)))
-       {
-               WidgetParameters 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);
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
-               if (CHECK_HINT (GE_HINT_COMBOBOX_ENTRY) || CHECK_HINT (GE_HINT_SPINBUTTON))
-               {
-                       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);
-       }
-       else if (DETAIL ("frame") && CHECK_HINT (GE_HINT_STATUSBAR))
-       {
-               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);
-       }
-       else if (DETAIL ("frame") || DETAIL ("calendar"))
-       {
-               WidgetParameters params;
-               FrameParameters  frame;
-               frame.shadow  = shadow_type;
-               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);
-       }
-       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];
-
-               cairo_rectangle (cr, x+0.5, y+0.5, width-1, height-1);
-               ge_cairo_set_color (cr, &border);
-               cairo_set_line_width (cr, 1);
-               cairo_stroke (cr);
-       }
-       else
-       {
-               WidgetParameters params;
-               FrameParameters frame;
-
-               frame.shadow = shadow_type;
-               frame.gap_x  = -1;
-               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
-clearlooks_style_draw_box_gap (DRAW_ARGS,
-                               GtkPositionType gap_side,
-                               gint            gap_x,
-                               gint            gap_width)
-{
-       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       cairo_t          *cr;
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       cr = ge_gdk_drawable_to_cairo (window, area);
-
-       if (DETAIL ("notebook"))
-       {
-               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)
-               {
-                       case GTK_POS_TOP:
-                               if (ge_widget_is_ltr (widget))
-                               {
-                                       if (start)
-                                               params.corners ^= CR_CORNER_TOPLEFT;
-                                       if (end)
-                                               params.corners ^= CR_CORNER_TOPRIGHT;
-                               }
-                               else
-                               {
-                                       if (start)
-                                               params.corners ^= CR_CORNER_TOPRIGHT;
-                                       if (end)
-                                               params.corners ^= CR_CORNER_TOPLEFT;
-                               }
-                       break;
-                       case GTK_POS_BOTTOM:
-                               if (ge_widget_is_ltr (widget))
-                               {
-                                       if (start)
-                                               params.corners ^= CR_CORNER_BOTTOMLEFT;
-                                       if (end)
-                                               params.corners ^= CR_CORNER_BOTTOMRIGHT;
-                               }
-                               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);
-       }
-       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);
-       }
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_extension (DRAW_ARGS, GtkPositionType gap_side)
-{
-       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       cairo_t          *cr;
-
-       CHECK_ARGS
-       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;
-                               break;
-                       case CL_GAP_RIGHT:
-                               params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-                               break;
-               }
-
-               /* 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);
-       }
-       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);
-       }
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_handle (DRAW_ARGS, GtkOrientation orientation)
-{
-       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       cairo_t          *cr;
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       cr = ge_gdk_drawable_to_cairo (window, area);
-
-       if (DETAIL ("handlebox"))
-       {
-               WidgetParameters params;
-               HandleParameters handle;
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-               handle.type = CL_HANDLE_TOOLBAR;
-               handle.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
-
-               STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
-                                            x, y, width, height);
-       }
-       else if (DETAIL ("paned"))
-       {
-               WidgetParameters params;
-               HandleParameters handle;
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-               handle.type = CL_HANDLE_SPLITTER;
-               handle.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
-
-               STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
-                                            x, y, width, height);
-       }
-       else
-       {
-               WidgetParameters params;
-               HandleParameters handle;
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-               handle.type = CL_HANDLE_TOOLBAR;
-               handle.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
-
-               STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
-                                            x, y, width, height);
-       }
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_box (DRAW_ARGS)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       const ClearlooksColors *colors;
-       cairo_t *cr;
-
-       cr     = ge_gdk_drawable_to_cairo (window, area);
-       colors = &clearlooks_style->colors;
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       if (DETAIL ("menubar"))
-       {
-               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);
-       }
-       else if (DETAIL ("button") && CHECK_HINT (GE_HINT_TREEVIEW_HEADER))
-       {
-               WidgetParameters params;
-               ListViewHeaderParameters header;
-
-               gint columns, column_index;
-               gboolean resizable = TRUE;
-
-               /* XXX: This makes unknown treeview header "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);
-               }
-               else if (GE_IS_CLIST (widget->parent))
-               {
-                       clearlooks_clist_get_header_index (GTK_CLIST(widget->parent),
-                                                          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;
-
-               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);
-       }
-       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 (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)
-                       {
-                               if (params.ltr)
-                                       x--;
-                               width++;
-                       }
-               }
-               else
-               {
-                       params.corners = CR_CORNER_ALL;
-                       if (clearlooks_style->reliefstyle != 0)
-                               params.enable_shadow = TRUE;
-               }
-
-               STYLE_FUNCTION(draw_button) (cr, &clearlooks_style->colors, &params,
-                                            x, y, width, height);
-       }
-       else if (DETAIL ("spinbutton_up") || DETAIL ("spinbutton_down"))
-       {
-               if (state_type == GTK_STATE_ACTIVE)
-               {
-                       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;
-                               if (params.ltr)
-                                       params.corners = CR_CORNER_TOPRIGHT;
-                               else
-                                       params.corners = CR_CORNER_TOPLEFT;
-                       }
-                       else
-                       {
-                               if (params.ltr)
-                                       params.corners = CR_CORNER_BOTTOMRIGHT;
-                               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);
-       }
-       else if (detail && g_str_has_prefix (detail, "trough") && CHECK_HINT (GE_HINT_SCALE))
-       {
-               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;
-
-               STYLE_FUNCTION(draw_scale_trough) (cr, &clearlooks_style->colors,
-                                                  &params, &slider,
-                                                  x, y, width, height);
-       }
-       else if (DETAIL ("trough") && CHECK_HINT (GE_HINT_PROGRESSBAR))
-       {
-               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);
-       }
-       else if (DETAIL ("trough") && CHECK_HINT (GE_HINT_SCROLLBAR))
-       {
-               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;
-
-               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 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;
-                               }
-                       }
-               }
-
-               STYLE_FUNCTION(draw_scrollbar_trough) (cr, colors, &params, &scrollbar,
-                                                      x, y, width, height);
-       }
-       else if (DETAIL ("bar"))
-       {
-               WidgetParameters      params;
-               ProgressBarParameters progressbar;
-               gdouble               elapsed = 0.0;
-
-#ifdef HAVE_ANIMATION
-               if(clearlooks_style->animation && CL_IS_PROGRESS_BAR (widget))
-               {
-                       gboolean activity_mode = GTK_PROGRESS (widget)->activity_mode;
-
-                       if (!activity_mode)
-                               clearlooks_animation_progressbar_add ((gpointer)widget);
-               }
-
-               elapsed = clearlooks_animation_elapsed (widget);
-#endif
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
-               if (widget && GE_IS_PROGRESS_BAR (widget))
-               {
-                       progressbar.orientation = gtk_progress_bar_get_orientation (GTK_PROGRESS_BAR (widget));
-                       progressbar.value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(widget));
-                       progressbar.pulsing = GTK_PROGRESS (widget)->activity_mode;
-               }
-               else
-               {
-                       progressbar.orientation = CL_ORIENTATION_LEFT_TO_RIGHT;
-                       progressbar.value = 0;
-                       progressbar.pulsing = FALSE;
-               }
-
-               if (!params.ltr)
-               {
-                       if (progressbar.orientation == GTK_PROGRESS_LEFT_TO_RIGHT)
-                               progressbar.orientation = GTK_PROGRESS_RIGHT_TO_LEFT;
-                       else if (progressbar.orientation == GTK_PROGRESS_RIGHT_TO_LEFT)
-                               progressbar.orientation = GTK_PROGRESS_LEFT_TO_RIGHT;
-               }
-
-               /* Following is a hack to have a larger clip area, the one passed in
-                * does not allow for the shadow. */
-               if (area)
-               {
-                       GdkRectangle tmp = *area;
-                       if (!progressbar.pulsing)
-                       {
-                               switch (progressbar.orientation)
-                               {
-                                       case GTK_PROGRESS_RIGHT_TO_LEFT:
-                                               tmp.x -= 1;
-                                       case GTK_PROGRESS_LEFT_TO_RIGHT:
-                                               tmp.width += 1;
-                                               break;
-                                       case GTK_PROGRESS_BOTTOM_TO_TOP:
-                                               tmp.y -= 1;
-                                       case GTK_PROGRESS_TOP_TO_BOTTOM:
-                                               tmp.height += 1;
-                                               break;
-                               }
-                       }
-                       else
-                       {
-                               if (progressbar.orientation == GTK_PROGRESS_RIGHT_TO_LEFT ||
-                                   progressbar.orientation == GTK_PROGRESS_LEFT_TO_RIGHT)
-                               {
-                                       tmp.x -= 1;
-                                       tmp.width += 2;
-                               }
-                               else
-                               {
-                                       tmp.y -= 1;
-                                       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);
-       }
-       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;
-
-               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);
-       }
-       else if (DETAIL ("menuitem"))
-       {
-               WidgetParameters params;
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
-               if (CHECK_HINT (GE_HINT_MENUBAR))
-               {
-                       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);
-               }
-       }
-       else if (DETAIL ("hscrollbar") || DETAIL ("vscrollbar")) /* This can't be "stepper" for scrollbars ... */
-       {
-               WidgetParameters    params;
-               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)
-                       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);
-       }
-       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)
-                       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;
-               /* Draw a normal separator, we just use this because it gives more control
-                * over sizing (currently). */
-
-               /* This isn't nice ... but it seems like the best cleanest way to me right now.
-                * It will get slightly nicer in the future hopefully. */
-               if (GE_IS_MENU_ITEM (widget))
-                       new_detail = "menuitem";
-
-               if (DETAIL ("hseparator"))
-               {
-                       gtk_paint_hline (style, window, state_type, area, widget, new_detail,
-                                        x, x + width - 1, y + height/2);
-               }
-               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);
-       }
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_slider (DRAW_ARGS, GtkOrientation orientation)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       const ClearlooksColors *colors;
-       cairo_t *cr;
-
-       cr     = ge_gdk_drawable_to_cairo (window, area);
-       colors = &clearlooks_style->colors;
-
-       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);
-       }
-       else if (DETAIL ("slider"))
-       {
-               WidgetParameters    params;
-               ScrollBarParameters scrollbar;
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-               params.corners = CR_CORNER_NONE;
-
-               scrollbar.has_color  = FALSE;
-               scrollbar.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
-               scrollbar.junction   = clearlooks_scrollbar_get_junction (widget);
-
-               if (clearlooks_style->colorize_scrollbar)
-               {
-                       scrollbar.color = colors->spot[1];
-                       scrollbar.has_color = TRUE;
-               }
-
-               /* Set scrollbar color */
-               if (clearlooks_style->has_scrollbar_color)
-               {
-                       ge_gdk_color_to_cairo (&clearlooks_style->scrollbar_color, &scrollbar.color);
-                       scrollbar.has_color = TRUE;
-               }
-
-               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);
-       }
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_option (DRAW_ARGS)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       const ClearlooksColors *colors;
-       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);
-}
-
-static void
-clearlooks_style_draw_check (DRAW_ARGS)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       WidgetParameters params;
-       CheckboxParameters checkbox;
-       cairo_t *cr;
-
-       CHECK_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);
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_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);
-       const ClearlooksColors *colors;
-       SeparatorParameters separator = { FALSE };
-       cairo_t *cr;
-
-       CHECK_ARGS
-
-       colors = &clearlooks_style->colors;
-
-       cr = ge_gdk_drawable_to_cairo (window, area);
-
-       /* There is no such thing as a vertical menu separator
-        * (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);
-}
-
-static void
-clearlooks_style_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);
-       const ClearlooksColors *colors;
-       cairo_t *cr;
-       SeparatorParameters separator;
-
-       CHECK_ARGS
-
-       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);
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_shadow_gap (DRAW_ARGS,
-                                  GtkPositionType gap_side,
-                                  gint            gap_x,
-                                  gint            gap_width)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       const ClearlooksColors *colors;
-       cairo_t *cr;
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       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);
-       }
-       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);
-       }
-
-       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)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       cairo_t *cr;
-       WidgetParameters params;
-       ResizeGripParameters grip;
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       grip.edge = (ClearlooksWindowEdge)edge;
-
-       g_return_if_fail (window != NULL);
-
-       cr = ge_gdk_drawable_to_cairo (window, area);
-
-       clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
-       STYLE_FUNCTION(draw_resize_grip) (cr, colors, &params, &grip,
-                                         x, y, width, height);
-
-       cairo_destroy (cr);
-}
-
-static void
-clearlooks_style_draw_tab (DRAW_ARGS)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       WidgetParameters params;
-       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;
-
-       STYLE_FUNCTION(draw_arrow) (cr, colors, &params, &arrow, x, y, width, height);
-
-       cairo_destroy (cr);
-}
-
-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)
-{
-       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       WidgetParameters params;
-       ArrowParameters  arrow;
-       cairo_t *cr = ge_gdk_drawable_to_cairo (window, area);
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       if (arrow_type == GTK_ARROW_NONE)
-       {
-               cairo_destroy (cr);
-               return;
-       }
-
-       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))
-       {
-               if (params.ltr)
-                       x += 1;
-               else
-                       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)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-
-       GTK_STYLE_CLASS (clearlooks_style_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->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);
-
-       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;
-}
-
-static void
-clearlooks_style_realize (GtkStyle * style)
-{
-       ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-       double shades[] = {1.15, 0.95, 0.896, 0.82, 0.7, 0.665, 0.475, 0.45, 0.4};
-       CairoColor spot_color;
-       CairoColor bg_normal;
-       double contrast;
-       int i;
-
-       GTK_STYLE_CLASS (clearlooks_style_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_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]);
-
-       for (i=0; i<5; i++)
-       {
-               ge_gdk_color_to_cairo (&style->fg[i], &clearlooks_style->colors.fg[i]);
-               ge_gdk_color_to_cairo (&style->bg[i], &clearlooks_style->colors.bg[i]);
-               ge_gdk_color_to_cairo (&style->base[i], &clearlooks_style->colors.base[i]);
-               ge_gdk_color_to_cairo (&style->text[i], &clearlooks_style->colors.text[i]);
-       }
-}
-
-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)
-{
-       ClearlooksStyle  *clearlooks_style = CLEARLOOKS_STYLE (style);
-       ClearlooksColors *colors = &clearlooks_style->colors;
-       WidgetParameters params;
-       FocusParameters focus;
-       guint8* dash_list;
-
-       cairo_t *cr;
-
-       CHECK_ARGS
-       SANITIZE_SIZE
-
-       cr = gdk_cairo_create (window);
-
-       clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
-       /* Corners */
-       params.corners = CR_CORNER_ALL;
-       if (CHECK_HINT (GE_HINT_COMBOBOX_ENTRY))
-       {
-               if (params.ltr)
-                       params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
-               else
-                       params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-
-               if (params.xthickness > 2)
-               {
-                       if (params.ltr)
-                               x--;
-                       width++;
-               }
-       }
-
-       focus.has_color = FALSE;
-       focus.interior = FALSE;
-       focus.line_width = 1;
-       focus.padding = 1;
-       dash_list = NULL;
-
-       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;
-       else
-               focus.dash_list = (guint8*) g_strdup ("\1\1");
-
-       /* 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);
-
-                       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"))
-       {
-               /* 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;
-
-               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"))
-               {
-                       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;
-               }
-
-       }
-       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 */
-       }
-
-       /* 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];
-
-       STYLE_FUNCTION(draw_focus) (cr, colors, &params, &focus, x, y, width, height);
-
-       g_free (focus.dash_list);
-
-       cairo_destroy (cr);
-}
-
-static void
-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);
-}
-
-static void
-clearlooks_style_unrealize (GtkStyle * style)
-{
-       GTK_STYLE_CLASS (clearlooks_style_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 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)
-{
-       GdkGC *gc;
-
-       g_return_if_fail (GTK_IS_STYLE (style));
-       g_return_if_fail (window != NULL);
-
-       gc = use_text ? style->text_gc[state_type] : style->fg_gc[state_type];
-
-       if (area)
-               gdk_gc_set_clip_rectangle (gc, area);
-
-       if (state_type == GTK_STATE_INSENSITIVE)
-       {
-               ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-               ClearlooksColors *colors = &clearlooks_style->colors;
-
-               WidgetParameters params;
-               GdkColor etched;
-               CairoColor temp;
-
-               clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
-               if (GTK_WIDGET_NO_WINDOW (widget))
-                       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);
-
-               gdk_draw_layout_with_colors (window, gc, x + 1, y + 1, layout, &etched, NULL);
-               gdk_draw_layout (window, gc, x, y, layout);
-       }
-       else
-               gdk_draw_layout (window, gc, x, y, layout);
-
-       if (area)
-               gdk_gc_set_clip_rectangle (gc, NULL);
-}
-
-static GdkPixbuf *
-clearlooks_style_draw_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);
-                       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;
-}
-
-void
-clearlooks_style_register_types (GTypeModule *module)
-{
-  clearlooks_style_register_type (module);
-}
-
-static void
-clearlooks_style_init (ClearlooksStyle * style)
-{
-}
-
-static void
-clearlooks_style_class_init (ClearlooksStyleClass * klass)
-{
-       GtkStyleClass *style_class = GTK_STYLE_CLASS (klass);
-
-       style_class->copy             = clearlooks_style_copy;
-       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_handle      = clearlooks_style_draw_handle;
-       style_class->draw_slider      = clearlooks_style_draw_slider;
-       style_class->draw_shadow_gap  = clearlooks_style_draw_shadow_gap;
-       style_class->draw_focus       = clearlooks_style_draw_focus;
-       style_class->draw_box         = clearlooks_style_draw_box;
-       style_class->draw_shadow      = clearlooks_style_draw_shadow;
-       style_class->draw_box_gap     = clearlooks_style_draw_box_gap;
-       style_class->draw_extension   = clearlooks_style_draw_extension;
-       style_class->draw_option      = clearlooks_style_draw_option;
-       style_class->draw_check       = clearlooks_style_draw_check;
-       style_class->draw_flat_box    = clearlooks_style_draw_flat_box;
-       style_class->draw_vline       = clearlooks_style_draw_vline;
-       style_class->draw_hline       = clearlooks_style_draw_hline;
-       style_class->draw_resize_grip = clearlooks_style_draw_resize_grip;
-       style_class->draw_tab         = clearlooks_style_draw_tab;
-       style_class->draw_arrow       = clearlooks_style_draw_arrow;
-       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]);
-}
-
-static void
-clearlooks_style_class_finalize (ClearlooksStyleClass *klass)
-{
-}
diff --git a/libs/clearlooks/clearlooks_style.h b/libs/clearlooks/clearlooks_style.h
deleted file mode 100644 (file)
index d524df5..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff.
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
- *
- * 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>
-
-#ifndef CLEARLOOKS_STYLE_H
-#define CLEARLOOKS_STYLE_H
-
-#include "animation.h"
-#include "clearlooks_types.h"
-
-typedef struct _ClearlooksStyle ClearlooksStyle;
-typedef struct _ClearlooksStyleClass ClearlooksStyleClass;
-
-#define CLEARLOOKS_TYPE_STYLE              (clearlooks_style_get_type ())
-#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))
-
-struct _ClearlooksStyle
-{
-       GtkStyle parent_instance;
-
-       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;
-       gboolean animation;
-       gfloat   radius;
-};
-
-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);
-
-#endif /* CLEARLOOKS_STYLE_H */
diff --git a/libs/clearlooks/clearlooks_theme_main.c b/libs/clearlooks/clearlooks_theme_main.c
deleted file mode 100644 (file)
index b68cfe4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <gmodule.h>
-#include <gtk/gtk.h>
-
-#include "clearlooks_style.h"
-#include "clearlooks_rc_style.h"
-
-GE_EXPORT void
-theme_init (GTypeModule *module)
-{
-  clearlooks_rc_style_register_types (module);
-  clearlooks_style_register_types (module);
-}
-
-GE_EXPORT void
-theme_exit (void)
-{
-}
-
-GE_EXPORT GtkRcStyle *
-theme_create_rc_style (void)
-{
-  return GTK_RC_STYLE (g_object_new (CLEARLOOKS_TYPE_RC_STYLE, NULL));  
-}
diff --git a/libs/clearlooks/clearlooks_types.h b/libs/clearlooks/clearlooks_types.h
deleted file mode 100644 (file)
index 5d5757f..0000000
+++ /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/clearlooks/config.h b/libs/clearlooks/config.h
deleted file mode 100644 (file)
index cfafc01..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* engines/support/config.h.  Generated from config.h.in by configure.  */
-/* engines/support/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"
-
-/* Defines whether to compile with animation support */
-#define HAVE_ANIMATION 1
-
-/* Define to 1 if you have the `bind_textdomain_codeset' function. */
-#define HAVE_BIND_TEXTDOMAIN_CODESET 1
-
-/* Define to 1 if you have the `dcgettext' function. */
-#define HAVE_DCGETTEXT 1
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#define HAVE_GETTEXT 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define if your <locale.h> file defines LC_MESSAGES. */
-#define HAVE_LC_MESSAGES 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* 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"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "gtk-engines"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "gtk-engines 2.16.0"
-
-/* 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 to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-#define VERSION "2.16.0"
diff --git a/libs/clearlooks/cpdll.sh b/libs/clearlooks/cpdll.sh
deleted file mode 100755 (executable)
index fb101d5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdir engines
-cp libclearlooks.so engines
diff --git a/libs/clearlooks/ge-support.h b/libs/clearlooks/ge-support.h
deleted file mode 100644 (file)
index bce9ced..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef GE_SUPPORT_H
-#define GE_SUPPORT_H
-
-#include "general-support.h"
-#include "cairo-support.h"
-#include "widget-information.h"
-
-#endif /* GE_SUPPORT_H */
diff --git a/libs/clearlooks/general-support.h b/libs/clearlooks/general-support.h
deleted file mode 100644 (file)
index 4d31946..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef __GENERAL_SUPPORT_H
-#define __GENERAL_SUPPORT_H
-
-#include <gmodule.h>
-#include <glib.h>
-
-/* macros to make sure that things are sane ... */
-
-#define CHECK_DETAIL(detail, value) ((detail) && (!strcmp(value, detail)))
-
-#define CHECK_ARGS                                     \
-  g_return_if_fail (window != NULL);                   \
-  g_return_if_fail (style != NULL);
-
-#define SANITIZE_SIZE                                  \
-  g_return_if_fail (width  >= -1);                     \
-  g_return_if_fail (height >= -1);                     \
-                                                        \
-  if ((width == -1) && (height == -1))                 \
-    gdk_drawable_get_size (window, &width, &height);   \
-  else if (width == -1)                                        \
-    gdk_drawable_get_size (window, &width, NULL);      \
-  else if (height == -1)                               \
-    gdk_drawable_get_size (window, NULL, &height);
-
-#define GE_EXPORT      G_MODULE_EXPORT
-#define GE_INTERNAL    G_GNUC_INTERNAL
-
-/* explicitly export with ggc, G_MODULE_EXPORT does not do this, this should
- * make it possible to compile with -fvisibility=hidden */
-#ifdef G_HAVE_GNUC_VISIBILITY
-# undef GE_EXPORT
-# define GE_EXPORT     __attribute__((__visibility__("default")))
-#endif
-
-#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-# undef GE_EXPORT
-# undef GE_INTERNAL
-# define GE_EXPORT      __global
-# define GE_INTERNAL    __hidden
-#endif 
-
-#endif /* __GENERAL_SUPPORT_H */
diff --git a/libs/clearlooks/support.c b/libs/clearlooks/support.c
deleted file mode 100644 (file)
index ec35ef7..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/* Clearlooks theme engine
- * 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
- * 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.
- *
- */
-
-#include "support.h"
-
-void clearlooks_treeview_get_header_index (GtkTreeView *tv, GtkWidget *header,
-                                    gint *column_index, gint *columns,
-                                    gboolean *resizable)
-{
-       GList *list, *list_start;
-       *column_index = *columns = 0;
-       list_start = 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)));
-
-       g_list_free (list_start);
-}
-
-void clearlooks_clist_get_header_index (GtkCList *clist, GtkWidget *button,
-                                 gint *column_index, gint *columns)
-{
-       int i;
-       *columns = clist->columns;
-       
-       for (i=0; i<*columns; i++)
-       {
-               if (clist->column[i].button == button)
-               {
-                       *column_index = i;
-                       break;
-               }
-       }
-}
-
-void
-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;
-       }
-
-       if (parent == NULL)
-               return;
-       
-       state_type = GTK_WIDGET_STATE (parent);
-       
-       gcolor = &parent->style->bg[state_type];
-       
-       ge_gdk_color_to_cairo (gcolor, color);
-}
-
-ClearlooksStepper
-clearlooks_scrollbar_get_stepper (GtkWidget    *widget,
-                       GdkRectangle *stepper)
-{
-       ClearlooksStepper value = CL_STEPPER_UNKNOWN;
-       GdkRectangle tmp;
-       GdkRectangle check_rectangle;
-       GtkOrientation orientation;
-
-       if (!GE_IS_RANGE (widget))
-               return CL_STEPPER_UNKNOWN;
-
-       check_rectangle.x      = widget->allocation.x;
-       check_rectangle.y      = widget->allocation.y;
-       check_rectangle.width  = stepper->width;
-       check_rectangle.height = stepper->height;
-       
-       orientation = GTK_RANGE (widget)->orientation;
-       
-       if (widget->allocation.x == -1 && widget->allocation.y == -1)
-               return CL_STEPPER_UNKNOWN;
-               
-       if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
-               value = CL_STEPPER_A;
-
-       if (value == CL_STEPPER_UNKNOWN) /* Haven't found a match */
-       {
-               if (orientation == GTK_ORIENTATION_HORIZONTAL)
-                       check_rectangle.x = widget->allocation.x + stepper->width;
-               else
-                       check_rectangle.y = widget->allocation.y + stepper->height;
-               
-               if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
-                       value = CL_STEPPER_B;
-       }
-
-       if (value == CL_STEPPER_UNKNOWN) /* Still haven't found a match */
-       {
-               if (orientation == GTK_ORIENTATION_HORIZONTAL)
-                       check_rectangle.x = widget->allocation.x + widget->allocation.width - (stepper->width * 2);
-               else
-                       check_rectangle.y = widget->allocation.y + widget->allocation.height - (stepper->height * 2);
-               
-               if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
-                       value = CL_STEPPER_C;
-       }
-
-       if (value == CL_STEPPER_UNKNOWN) /* STILL haven't found a match */
-       {
-               if (orientation == GTK_ORIENTATION_HORIZONTAL)
-                       check_rectangle.x = widget->allocation.x + widget->allocation.width - stepper->width;
-               else
-                       check_rectangle.y = widget->allocation.y + widget->allocation.height - stepper->height;
-               
-               if (gdk_rectangle_intersect (stepper, &check_rectangle, &tmp))
-                       value = CL_STEPPER_D;
-       }
-       
-       return value;
-}
-
-ClearlooksStepper
-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;
-       
-       if (GTK_RANGE (widget)->has_stepper_a)
-               steppers |= CL_STEPPER_A;
-       
-       if (GTK_RANGE (widget)->has_stepper_b)
-               steppers |= CL_STEPPER_B;
-
-       if (GTK_RANGE (widget)->has_stepper_c)
-               steppers |= CL_STEPPER_C;
-
-       if (GTK_RANGE (widget)->has_stepper_d)
-               steppers |= CL_STEPPER_D;
-
-       return steppers;
-}
-
-ClearlooksJunction
-clearlooks_scrollbar_get_junction (GtkWidget    *widget)
-{      
-       GtkAdjustment *adj;
-       ClearlooksJunction junction = CL_JUNCTION_NONE;
-       
-       if (!GE_IS_RANGE (widget))
-               return CL_JUNCTION_NONE;
-
-       adj = GTK_RANGE (widget)->adjustment;
-       
-       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;
-       }
-       
-       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;
-       }
-       
-       return junction;
-}
-
-void
-clearlooks_set_toolbar_parameters (ToolbarParameters *toolbar,
-                                   GtkWidget *widget,
-                                   GdkWindow *window,
-                                   gint x, gint y)
-{
-       toolbar->topmost = FALSE;
-
-       if (x == 0 && y == 0) {
-               if (widget && widget->allocation.x == 0 && widget->allocation.y == 0)
-               {
-                       if (widget->window == window && GE_IS_TOOLBAR (widget))
-                       {
-                               toolbar->topmost = TRUE;
-                       }
-               }
-       }
-}
-
-void
-clearlooks_get_notebook_tab_position (GtkWidget *widget,
-                                      gboolean  *start,
-                                      gboolean  *end)
-{
-       /* default value */
-       *start = TRUE;
-       *end = FALSE;
-
-       if (GE_IS_NOTEBOOK (widget)) {
-               gboolean found_tabs = FALSE;
-               gint i, n_pages;
-               GtkNotebook *notebook = GTK_NOTEBOOK (widget);
-
-               /* got a notebook, so walk over all the tabs and decide based
-                * on that ...
-                * It works like this:
-                *   - If there is any visible tab that is expanded, set both.
-                *   - Set start/end if there is any visible tab that is at
-                *     the start/end.
-                *   - If one has the child_visibility set to false, arrows
-                *     are present; so none
-                * The heuristic falls over if there is a notebook that just
-                * happens to fill up all the available space. ie. All tabs
-                * are left aligned, but it does not require scrolling.
-                * (a more complex heuristic could calculate the tabs width
-                * and add them all up) */
-
-               n_pages = gtk_notebook_get_n_pages (notebook);
-               for (i = 0; i < n_pages; i++) {
-                       GtkWidget *tab_child;
-                       GtkWidget *tab_label;
-                       gboolean expand;
-                       GtkPackType pack_type;
-                                               
-                       tab_child = gtk_notebook_get_nth_page (notebook, i);
-
-                       /* Skip invisible tabs */
-                       tab_label = gtk_notebook_get_tab_label (notebook, tab_child);
-                       if (!tab_label || !GTK_WIDGET_VISIBLE (tab_label))
-                               continue;
-                       /* This is the same what the notebook does internally. */
-                       if (tab_label && !gtk_widget_get_child_visible (tab_label)) {
-                               /* One child is hidden because scroll arrows are present.
-                                * So both corners are rounded. */
-                               *start = FALSE;
-                               *end = FALSE;
-                               return;
-                       }
-
-                       gtk_notebook_query_tab_label_packing (notebook, tab_child,
-                                                             &expand,
-                                                             NULL, /* don't need fill */
-                                                             &pack_type);
-
-                       if (!found_tabs) {
-                               found_tabs = TRUE;
-                               *start = FALSE;
-                               *end = FALSE;
-                       }
-
-                       if (expand) {
-                               *start = TRUE;
-                               *end = TRUE;
-                       } else if (pack_type == GTK_PACK_START) {
-                               *start = TRUE;
-                       } else {
-                               *end = TRUE;
-                       }
-               }
-       }
-}
-
-
diff --git a/libs/clearlooks/support.h b/libs/clearlooks/support.h
deleted file mode 100644 (file)
index 23e33c5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SUPPORT_H
-#define SUPPORT_H
-
-#include <gtk/gtk.h>
-#include <math.h>
-#include <string.h>
-
-#include "clearlooks_types.h"
-
-#define RADIO_SIZE 13
-#define CHECK_SIZE 13
-
-GE_INTERNAL void              clearlooks_treeview_get_header_index (GtkTreeView  *tv,
-                                                 GtkWidget    *header,
-                                                 gint         *column_index,
-                                                 gint         *columns,
-                                                 gboolean     *resizable);
-
-GE_INTERNAL void              clearlooks_clist_get_header_index    (GtkCList     *clist,
-                                                 GtkWidget    *button,
-                                                 gint         *column_index,
-                                                 gint         *columns);
-#ifdef DEVELOPMENT
-#warning clearlooks_get_parent_bg is a bad hack - find out why its needed, and figure out a better way.
-#endif
-
-GE_INTERNAL void              clearlooks_get_parent_bg      (const GtkWidget *widget,
-                                                 CairoColor      *color);
-
-GE_INTERNAL ClearlooksStepper clearlooks_scrollbar_get_stepper         (GtkWidget       *widget,
-                                                 GdkRectangle    *stepper);
-GE_INTERNAL ClearlooksStepper clearlooks_scrollbar_visible_steppers    (GtkWidget       *widget);
-GE_INTERNAL ClearlooksJunction clearlooks_scrollbar_get_junction       (GtkWidget    *widget);
-
-GE_INTERNAL void clearlooks_set_toolbar_parameters (ToolbarParameters *toolbar, GtkWidget *widget, GdkWindow *window, gint x, gint y);
-GE_INTERNAL void clearlooks_get_notebook_tab_position (GtkWidget *widget, gboolean *start, gboolean *end);
-
-#endif /* SUPPORT_H */
diff --git a/libs/clearlooks/widget-information.c b/libs/clearlooks/widget-information.c
deleted file mode 100644 (file)
index 8972d7a..0000000
+++ /dev/null
@@ -1,487 +0,0 @@
-#include <gtk/gtk.h>
-
-#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
-   Smooth-Engine.
-*/ 
-gboolean
-ge_object_is_a (const GObject * object, const gchar * type_name)
-{
-  gboolean result = FALSE;
-  if ((object))
-    {
-      GType tmp = g_type_from_name (type_name);
-
-      if (tmp)
-       result = g_type_check_instance_is_a ((GTypeInstance *) object, tmp);
-    }
-  return result;
-}
-gboolean
-ge_is_combo_box_entry (GtkWidget * widget)
-{
-  gboolean result = FALSE;
-  if ((widget) && (widget->parent))
-    {
-      if (GE_IS_COMBO_BOX_ENTRY (widget->parent))
-       result = TRUE;
-      else
-       result = ge_is_combo_box_entry (widget->parent);
-    }
-  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);
-  return result;
-}
-gboolean
-ge_is_combo_box (GtkWidget * widget, gboolean as_list)
-{
-  gboolean result = FALSE;
-  if ((widget) && (widget->parent))
-    {
-      if (GE_IS_COMBO_BOX (widget->parent))
-        {
-          if (as_list)
-            result = (ge_combo_box_is_using_list(widget->parent));
-          else
-            result = (!ge_combo_box_is_using_list(widget->parent));
-        }
-      else
-       result = ge_is_combo_box (widget->parent, as_list);
-    }
-  return result;
-}
-gboolean
-ge_is_combo (GtkWidget * widget)
-{
-  gboolean result = FALSE;
-  if ((widget) && (widget->parent))
-    {
-      if (GE_IS_COMBO (widget->parent))
-       result = TRUE;
-      else
-       result = ge_is_combo (widget->parent);
-    }
-  return result;
-}
-gboolean
-ge_is_in_combo_box (GtkWidget * widget)
-{
-  return ((ge_is_combo (widget) || ge_is_combo_box (widget, TRUE) || ge_is_combo_box_entry (widget)));
-}
-gboolean
-ge_is_toolbar_item (GtkWidget * widget)
-{
-  gboolean result = FALSE;
-  if ((widget) && (widget->parent)) {
-    if ((GE_IS_BONOBO_TOOLBAR (widget->parent))
-       || (GE_IS_BONOBO_DOCK_ITEM (widget->parent))
-       || (GE_IS_EGG_TOOLBAR (widget->parent))
-       || (GE_IS_TOOLBAR (widget->parent))
-       || (GE_IS_HANDLE_BOX (widget->parent)))
-      result = TRUE;
-    else
-      result = ge_is_toolbar_item (widget->parent);
-  }
-  return result;
-}
-gboolean
-ge_is_panel_widget_item (GtkWidget * widget)
-{
-  gboolean result = FALSE;
-  if ((widget) && (widget->parent))
-    {
-      if (GE_IS_PANEL_WIDGET (widget->parent))
-       result = TRUE;
-      else
-       result = ge_is_panel_widget_item (widget->parent);
-    }
-  return result;
-}
-gboolean 
-ge_is_bonobo_dock_item (GtkWidget * widget)
-{
-  gboolean result = FALSE;
-  if ((widget))
-    {
-      if (GE_IS_BONOBO_DOCK_ITEM(widget) || GE_IS_BONOBO_DOCK_ITEM (widget->parent))
-       result = TRUE;
-      else if (GE_IS_BOX(widget) || GE_IS_BOX(widget->parent))
-        {
-          GtkContainer *box = GE_IS_BOX(widget)?GTK_CONTAINER(widget):GTK_CONTAINER(widget->parent);
-          GList *children = NULL, *child = NULL;
-          children = gtk_container_get_children(box);
-              
-          for (child = g_list_first(children); child; child = g_list_next(child))
-            {
-             if (GE_IS_BONOBO_DOCK_ITEM_GRIP(child->data))
-               {
-                 result = TRUE;
-                 child = NULL;
-               }
-            }              
-         
-          if (children)   
-           g_list_free(children);
-       }
-    }
-  return result;
-}
-
-static GtkWidget *
-ge_find_combo_box_entry_widget (GtkWidget * widget)
-{
-  GtkWidget *result = NULL;
-
-  if (widget)
-    {
-      if (GE_IS_COMBO_BOX_ENTRY (widget))
-       result = widget;
-      else
-       result = ge_find_combo_box_entry_widget (widget->parent);
-    }
-
-  return result;
-}
-
-static GtkWidget *
-ge_find_combo_box_widget (GtkWidget * widget, gboolean as_list)
-{
-  GtkWidget *result = NULL;
-  if (widget)
-    {
-      if (GE_IS_COMBO_BOX (widget))
-        {
-          if (as_list)
-            result = (ge_combo_box_is_using_list(widget))?widget:NULL;
-          else
-            result = (!ge_combo_box_is_using_list(widget))?widget:NULL;
-        }
-      else
-       result = ge_find_combo_box_widget (widget->parent, as_list);
-    }
-  return result;
-}
-static GtkWidget *
-ge_find_combo_widget (GtkWidget * widget)
-{
-  GtkWidget *result = NULL;
-  if (widget)
-    {
-      if (GE_IS_COMBO (widget))
-       result = widget;
-      else
-       result = ge_find_combo_widget(widget->parent);
-    }
-  return result;
-}
-
-GtkWidget*
-ge_find_combo_box_widget_parent (GtkWidget * widget)
-{
-   GtkWidget *result = NULL;
-   
-   if (!result)
-     result = ge_find_combo_widget(widget);
-  
-   if (!result)
-     result = ge_find_combo_box_widget(widget, TRUE);
-
-   if (!result)
-     result = ge_find_combo_box_entry_widget(widget);
-
-  return result;
-}
-
-/***********************************************
- * option_menu_get_props -
- *  
- *   Find Option Menu Size and Spacing
- *
- *   Taken from Smooth
- ***********************************************/ 
-void
-ge_option_menu_get_props (GtkWidget * widget,
-                          GtkRequisition * indicator_size,
-                          GtkBorder * indicator_spacing)
-{
-  GtkRequisition default_size = { 9, 5 };
-  GtkBorder default_spacing = { 7, 5, 2, 2 };
-  GtkRequisition *tmp_size = NULL;
-  GtkBorder *tmp_spacing = NULL;
-  if ((widget) && GE_IS_OPTION_MENU(widget))
-    gtk_widget_style_get (widget,
-                         "indicator_size", &tmp_size,
-                         "indicator_spacing", &tmp_spacing, NULL);
-  if (tmp_size)
-    {
-      *indicator_size = *tmp_size;
-      gtk_requisition_free (tmp_size);
-    }
-  else
-    *indicator_size = default_size;
-  if (tmp_spacing)
-    {
-      *indicator_spacing = *tmp_spacing;
-      gtk_border_free (tmp_spacing);
-    }
-  else
-    *indicator_spacing = default_spacing;
-}
-
-void
-ge_button_get_default_border (GtkWidget *widget, 
-                              GtkBorder *border)
-{
-       GtkBorder default_border = {1, 1, 1, 1};
-       GtkBorder *tmp_border = NULL;
-       
-       if (widget && GE_IS_BUTTON (widget))
-               gtk_widget_style_get (widget, "default-border", &tmp_border, NULL);
-
-       if (tmp_border)
-       {
-               *border = *tmp_border;
-               gtk_border_free (tmp_border);
-       }
-       else
-       {
-               *border = default_border;
-       }
-}
-
-gboolean
-ge_widget_is_ltr (GtkWidget *widget)
-{
-       GtkTextDirection dir = GTK_TEXT_DIR_NONE;
-       
-       if (GE_IS_WIDGET (widget))
-               dir = gtk_widget_get_direction (widget);
-
-       if (dir == GTK_TEXT_DIR_NONE)
-               dir = gtk_widget_get_default_direction ();
-
-       if (dir == GTK_TEXT_DIR_RTL)
-               return FALSE;
-       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/widget-information.h
deleted file mode 100644 (file)
index 7b9b2ab..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-
-#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_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_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))
-#define GE_IS_BONOBO_DOCK_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboDockItem"))
-#define GE_IS_BONOBO_DOCK_ITEM_GRIP(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboDockItemGrip"))
-#define GE_IS_BONOBO_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "BonoboUIToolbar"))
-#define GE_IS_EGG_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "Toolbar"))
-#define GE_IS_TOOLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkToolbar"))
-#define GE_IS_PANEL_WIDGET(object) ((object) && (ge_object_is_a ((GObject*)(object), "PanelWidget") || ge_object_is_a ((GObject*)(object), "PanelApplet")))
-
-#define GE_IS_COMBO_BOX_ENTRY(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkComboBoxEntry"))
-#define GE_IS_COMBO_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkComboBox"))
-#define GE_IS_COMBO(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCombo"))
-#define GE_IS_OPTION_MENU(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkOptionMenu"))
-#define GE_IS_TOGGLE_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkToggleButton"))
-#define GE_IS_CHECK_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCheckButton"))
-#define GE_IS_SPIN_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkSpinButton"))
-#define GE_IS_STATUSBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkStatusbar"))
-#define GE_IS_PROGRESS_BAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkProgressBar"))
-#define GE_IS_MENU_SHELL(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuShell"))
-#define GE_IS_MENU(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenu"))
-#define GE_IS_MENU_BAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuBar"))
-#define GE_IS_MENU_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkMenuItem"))
-
-#define GE_IS_CHECK_MENU_ITEM(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCheckMenuItem"))
-
-#define GE_IS_RANGE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkRange"))
-#define GE_IS_SCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkScrollbar"))
-#define GE_IS_VSCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVScrollbar"))
-#define GE_IS_HSCROLLBAR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHScrollbar"))
-#define GE_IS_SCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkScale"))
-#define GE_IS_VSCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVScale"))
-#define GE_IS_HSCALE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHScale"))
-  
-#define GE_IS_PANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkPaned"))
-#define GE_IS_VPANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVPaned"))
-#define GE_IS_HPANED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHPaned"))
-#define GE_IS_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkBox"))
-#define GE_IS_VBOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVBox"))
-#define GE_IS_HBOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHBox"))
-
-#define GE_IS_CLIST(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCList"))
-#define GE_IS_TREE_VIEW(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkTreeView"))
-#define GE_IS_ENTRY(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkEntry"))
-#define GE_IS_BUTTON(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkButton"))
-#define GE_IS_FIXED(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkFixed"))
-#define TOGGLE_BUTTON(object) (GE_IS_TOGGLE_BUTTON(object)?(GtkToggleButton *)object:NULL)
-#define GE_IS_NOTEBOOK(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkNotebook"))
-#define GE_IS_CELL_RENDERER_TOGGLE(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkCellRendererToggle"))
-
-#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);
-GE_INTERNAL gboolean ge_is_combo_box (GtkWidget * widget, gboolean as_list);
-GE_INTERNAL gboolean ge_is_combo (GtkWidget * widget);
-GE_INTERNAL gboolean ge_is_in_combo_box (GtkWidget * widget);
-  
-GE_INTERNAL gboolean ge_is_toolbar_item (GtkWidget * widget);
-  
-GE_INTERNAL gboolean ge_is_panel_widget_item (GtkWidget * widget);
-GE_INTERNAL gboolean ge_is_bonobo_dock_item (GtkWidget * widget);
-
-GE_INTERNAL GtkWidget *ge_find_combo_box_widget_parent (GtkWidget * widget);
-
-GE_INTERNAL void ge_option_menu_get_props (GtkWidget * widget, 
-                            GtkRequisition * indicator_size, 
-                            GtkBorder * indicator_spacing);
-
-GE_INTERNAL void ge_button_get_default_border (GtkWidget *widget, 
-                                               GtkBorder *border);
-
-GE_INTERNAL gboolean ge_widget_is_ltr (GtkWidget *widget);
-
-GE_INTERNAL guint ge_rc_parse_hint (GScanner *scanner, GQuark *quark);
-
-#endif /* WIDGET_INFORMATION_H */
index 2c2e69f6b68e8b712ed1be9f50fdb57def0c1554..0695dd32814b03f64e4b0d8030d7786d1b8e98b6 100644 (file)
@@ -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);
index 4ca23b024088ec7f9eb0337e38848d366f13d97e..e15a3524db726174f5872350defc0ada12d54449 100644 (file)
@@ -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 {
 
index fbc5ea90ef1604b665e0f00d73246c2dacf00082..085e500f219f8600d2cb45e4d1315dc52ce4c676 100644 (file)
@@ -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
index 22ac517672903a06a5a9da17380014b0c842c026..89f34134358e6a63d5272e008ed8927507b9735a 100644 (file)
@@ -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;
index 5e80892b98a7c3e0d083e434b9e612fd91d3f6f3..737a6ddd03441b95ddf8a90933e7b84e69f0edc0 100644 (file)
@@ -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*);
index 0b150eefe119b1dbd6a264cfb39ea26377ae4059..2d586d0317dce697f429484fa23a55794604fc98 100644 (file)
@@ -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 {
index 92bde5541e510f778650dbe3b22502950601ec10..be3bfe4113fbdedfb01f11d4829ab88ce8bae541 100644 (file)
@@ -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);
@@ -78,6 +79,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)
 {
@@ -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;
 }
 
index 1c2a98bfa3a14cf81dda6fd81bc36d53a5b63d3c..fc69099d0efc72b5a52583565b2be5b9d0468667 100644 (file)
@@ -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);
        }
index 14020a6f359f5b3e118ffbd216d77fa12080b031..9eacfc0cc3156feae824e4a17406b68fbd6381c3 100644 (file)
@@ -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) {
index f612b4707af1fe0c5cf2075b05308fe424b08213..89d74b1b3142fff8572da78e212b20a3950a46e7 100644 (file)
@@ -18,8 +18,6 @@
     $Id$
 */
 
-#include <cstring>
-#include <string>
 #include <cstring>
 #include <cstdlib>
 #include <midi++/types.h>
index 8a358c318370b50c168ec6a028cac06fb63d44de..14c9d4379309803a36ff8b6e94654f5d0042260b 100644 (file)
@@ -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()) {
index 423e833d2ca17bcec3f57f2b09f59339ea90eaa9..4cbcd2769464ca4a4027143cf8370d581ad324dc 100644 (file)
@@ -24,7 +24,7 @@
 #include <cstring>
 #include <cstdlib>
 #include <unistd.h>
-#include <string>
+#include <cstring>
 #include <iostream>
 #include <iterator>
 
index 13f52219290b0f8d653cd9b85ce6ad0a07f6f626..9d62c7354c44d1687c32a6fc874f156be9e028af 100644 (file)
     $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;
index 011534a6626bfb8815b634173e01bd49e84bacc7..2b64c460306ddd12548a76603a20f3f1870c9de9 100644 (file)
@@ -20,7 +20,6 @@
 #include <pbd/command.h>
 #include <pbd/xml++.h>
 
-
 XMLNode &Command::get_state()
 {
        XMLNode *node = new XMLNode ("Command");
index 97f19e1fe5d66d2c317241aee17e4a6c88270022..8e5b9ceb07681a192f93b3a8d8d3622d9b01c33e 100644 (file)
@@ -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));
 }
 
index a66485bc0da179157104b2fb8e248e254db3d05c..3fac531591ec95520842f49c1356ff8f06f8e02f 100644 (file)
@@ -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;
        
index fdc7527dc6495c04397ea67e9797fa3fc63e265c..660e5875d52f0ab97456531a920e30ad54d072b0 100644 (file)
@@ -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 ()
index 9fa6ba4ce4023d9ceefd707b1c7f9bbe7386e112..dd91e0a2b1694745626236c03cd60753f7224238 100644 (file)
@@ -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__ */
index 2e53ff65f5d52efce89b9ca036c2729688fa3a18..90adad62508a896d2bc41a7f2bbfa230fbdababb 100644 (file)
@@ -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) {
 
index 8f1716d09f45e0fe517d2b64eecb2c90b726b7c0..cf1f6f3470531497d0308ea3dea2aa6da2d96068 100644 (file)
@@ -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;
 
index 3408f2c0b79b35578b27e979115f662678da8252..c63f988af32ceca1556ebae8a8e3f31d07974303 100644 (file)
@@ -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)
 {
index f04b4d94313d770cf078eb4ab4bf8d4acdbf3592..5365a98146212be9e46c7ef41480f2b78246ba92 100644 (file)
     $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 */
 }
index 71d579480589e050d59ee253ee539d7e9b637b3e..b88e002374f4bf2b19ca04b838d75795838e2daf 100644 (file)
@@ -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 ) 
 {
index 708373e3bc590239189ec6d19bf8ca59b582f37c..1c9ee83833e96f3621e7a3435c55757106369c12 100644 (file)
@@ -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--;
        }
index c874a05de530c4799106da7d4cfbf094e327c5ba..5b413273ea82aba3b39a2730a0540d6c33ad26a6 100644 (file)
@@ -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 ();
index 502cea581fafd3b71a0e0e16b0534adda439ed7c..f7886e078f7579c5a9d522264e76cb2b559d855f 100644 (file)
@@ -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;
+               }
        }
 }
 
index 0ff7fbd9d49f118e6f0f60610b5503a1f7513474..735a2c88bd7b26b06538f350e9a5dbacff402032 100644 (file)
@@ -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
index cf72c35678f43175c445050fe0aad68913aca31d..cd95551f7021e6a8aa37065a482bb997ea573a7e 100644 (file)
@@ -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?
index 94f85bdc56935898824ecb0c2393fc218d7a410b..726cb60d49335083b3ddd45bf7a39e63fd92c962 100644 (file)
@@ -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 (file)
index 0000000..c530445
--- /dev/null
@@ -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 (file)
index 0000000..0ef301d
--- /dev/null
@@ -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 (file)
index 0000000..af3bbc3
--- /dev/null
@@ -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 (file)
index 0000000..a6680ed
--- /dev/null
@@ -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 */
+
index 63cbfecfd14ee2edad582f4d3867682220206690..ff02b87b752fb91f7cf1118b8fd70484b63c1b53 100644 (file)
@@ -38,6 +38,9 @@
 #include <cstdlib>
 #include "PluginAdapter.h"
 
+#include <cstdlib>
+#include <cstring>
+
 //#define DEBUG_PLUGIN_ADAPTER 1
 
 
index 334c11103c565e91eda4a57fd2a4ba1c7883a81c..4729a6223cdc26768f2f41f4981a7ba40bad86cb 100644 (file)
@@ -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 (file)
index 0000000..013e456
--- /dev/null
@@ -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 (file)
index 0000000..417107c
Binary files /dev/null and b/tools/osx_packaging/Ardour2-SAE.icns differ
diff --git a/tools/osx_packaging/InfoPlist.strings.in b/tools/osx_packaging/InfoPlist.strings.in
new file mode 100644 (file)
index 0000000..1ee76ac
--- /dev/null
@@ -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 (executable)
index 0000000..e53b107
Binary files /dev/null and b/tools/osx_packaging/sae_ladspa/caps.so differ
diff --git a/tools/osx_packaging/sae_ladspa/cmt.so b/tools/osx_packaging/sae_ladspa/cmt.so
new file mode 100755 (executable)
index 0000000..e834f65
Binary files /dev/null and b/tools/osx_packaging/sae_ladspa/cmt.so 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 (executable)
index 0000000..159f36d
Binary files /dev/null and b/tools/osx_packaging/sae_ladspa/fast_lookahead_limiter_1913.so 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 (executable)
index 0000000..0aea909
Binary files /dev/null and b/tools/osx_packaging/sae_ladspa/gverb_1216.so 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 (executable)
index 0000000..514bd9b
Binary files /dev/null and b/tools/osx_packaging/sae_ladspa/single_para_1203.so 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 (executable)
index 0000000..c32e5ee
Binary files /dev/null and b/tools/osx_packaging/sae_ladspa/tap_pitch.so differ
diff --git a/tools/osx_packaging/startup_script b/tools/osx_packaging/startup_script
new file mode 100644 (file)
index 0000000..c7b9b5a
--- /dev/null
@@ -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" "$*"
index c6a390f480c27d86f93a4f693f05d2f2cf989f08..eadc5369857f9130e16f122916dc11ec7d8d475a 100755 (executable)
@@ -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;
index 3123d0cb1f2d2b479570707dc2e55c640495b72d..54fb8eb60d3902b39d4dc31247e16250cfcc41ce 100755 (executable)
@@ -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;