ardour.git
6 years agoNO-OP: whitespace
Robin Gareus [Sat, 24 Feb 2018 12:54:15 +0000 (13:54 +0100)]
NO-OP: whitespace

- remove trailing whitespace
- remove space after opening brackets and before closing brackets
- add space around operators
- do not use '//' for multi-line comments, do not use "//" on line-start
  to comment-out code breaking indenting (-Wmisleading-indent)
- do add a single space after comment-start /*{SPACE}... or //{SPACE}...
- reserve duplicate whitespace "  " for alignment, remove other duplicate
  whitespace
- use established "TODO" and "XXX" (highlighted keywords)
- remove equal-sign series "====" (those indicate merge conflicts)

6 years agoFix/amend a23a8ebcad7.
Robin Gareus [Sat, 24 Feb 2018 11:55:48 +0000 (12:55 +0100)]
Fix/amend a23a8ebcad7.

Updated condition to check for transport_rolling to include preroll and
count-in (speed is != 0 during pre-roll and count-in, but transport is not
actually rolling).

6 years agoTell the user why Insert/Remove Time failed, rather than fail silently.
Ben Loftis [Fri, 23 Feb 2018 20:37:32 +0000 (14:37 -0600)]
Tell the user why Insert/Remove Time failed, rather than fail silently.

6 years agoUse transport_stopped() instead of speed check.
Ben Loftis [Fri, 23 Feb 2018 19:59:46 +0000 (13:59 -0600)]
Use transport_stopped() instead of speed check.

6 years agocatch (incorrect) inclusion of non-MIDI related automation parameters in MidiSource...
Paul Davis [Fri, 23 Feb 2018 19:56:58 +0000 (14:56 -0500)]
catch (incorrect) inclusion of non-MIDI related automation parameters in MidiSource XML nodes

6 years agoDo not interpolate playhead when stopped.
Ben Loftis [Fri, 23 Feb 2018 19:48:29 +0000 (13:48 -0600)]
Do not interpolate playhead when stopped.
This fixes a bug where, for a few seconds after transport stops, the users zoom+panning would get hijacked by the follow_playhead behavior, because the playhead was still "hunting".

6 years agoRevert afedd2 and associated commits (method to generate initial tag file)
Ben Loftis [Fri, 23 Feb 2018 14:49:14 +0000 (08:49 -0600)]
Revert afedd2 and associated commits (method to generate initial tag file)

6 years agoStart versioning Mixbus keybindings files.
Ben Loftis [Fri, 23 Feb 2018 14:34:59 +0000 (08:34 -0600)]
Start versioning Mixbus keybindings files.

6 years agoAccommodate recently removed source(s) in our MSVC project (gtk2_ardour)
John Emmas [Thu, 22 Feb 2018 11:24:43 +0000 (11:24 +0000)]
Accommodate recently removed source(s) in our MSVC project (gtk2_ardour)

6 years agofix compilation on windows with VST support
Len Ovens [Thu, 22 Feb 2018 05:05:53 +0000 (21:05 -0800)]
fix compilation on windows with VST support

6 years agoOSC: fix compiler warning and catch possible errors
Len Ovens [Thu, 22 Feb 2018 03:24:18 +0000 (19:24 -0800)]
OSC: fix compiler warning and catch possible errors

6 years agofix compilation on linux with LXVST support
Paul Davis [Thu, 22 Feb 2018 04:20:53 +0000 (23:20 -0500)]
fix compilation on linux with LXVST support

6 years agoMethod to generate an initial tag file:
Ben Loftis [Thu, 22 Feb 2018 00:04:45 +0000 (18:04 -0600)]
Method to generate an initial tag file:
rm config/plugin_tags
touch config/init_plugin_tags

6 years agoOSC: Add session name change
Len Ovens [Tue, 20 Feb 2018 23:48:54 +0000 (15:48 -0800)]
OSC: Add session name change

6 years agouser-friendly hack/heuristic: if they edit a BBT non-duration clock to say zero beats...
Paul Davis [Tue, 20 Feb 2018 22:19:43 +0000 (17:19 -0500)]
user-friendly hack/heuristic: if they edit a BBT non-duration clock to say zero beats, act as if they had used 1

6 years agoRe-add fixed-color DSP-load indicator background
Robin Gareus [Tue, 20 Feb 2018 11:53:21 +0000 (12:53 +0100)]
Re-add fixed-color DSP-load indicator background

6 years agoRemove ArdourGauges -- since they're no longer actual Gauge widgets
Robin Gareus [Tue, 20 Feb 2018 11:22:11 +0000 (12:22 +0100)]
Remove ArdourGauges -- since they're no longer actual Gauge widgets

The Gauges devolved into Labels with dedicated formatting and UI-config
colors. Prevent ArdourButton to happen all over over again...

6 years agoUse standard Labels again.
Robin Gareus [Tue, 20 Feb 2018 11:15:29 +0000 (12:15 +0100)]
Use standard Labels again.

Since the Gauges become little more than text with colored background,
prepare their removal. If color is wanted, use named widget-style.

6 years agoKeep track of unacknowledged log-level (error-indicator)
Robin Gareus [Tue, 20 Feb 2018 10:06:37 +0000 (11:06 +0100)]
Keep track of unacknowledged log-level (error-indicator)

This code was incorrectly removed in 97fb3a5557b5.

6 years agoReplace missing widget-name that got lost.
Ben Loftis [Mon, 19 Feb 2018 15:50:30 +0000 (09:50 -0600)]
Replace missing widget-name that got lost.

6 years agoPrevent mixer-add buttons from getting focus.
Ben Loftis [Mon, 19 Feb 2018 14:15:18 +0000 (08:15 -0600)]
Prevent mixer-add buttons from getting focus.

6 years agoAdd drop-shadow decorators to menu bar and transport toolbar.
Ben Loftis [Mon, 19 Feb 2018 14:05:55 +0000 (08:05 -0600)]
Add drop-shadow decorators to menu bar and transport toolbar.
 Allow status bar to fill available width.

6 years agoAdd flag for corners, where top+left shadows are both required.
Ben Loftis [Mon, 19 Feb 2018 14:01:27 +0000 (08:01 -0600)]
Add flag for corners, where top+left shadows are both required.

6 years agoRemove unused widget.
Ben Loftis [Sun, 18 Feb 2018 18:39:35 +0000 (12:39 -0600)]
Remove unused widget.

6 years agoAccommodate newly added/renamed source(s) in our MSVC project (gtk2_ardour)
John Emmas [Mon, 19 Feb 2018 11:16:49 +0000 (11:16 +0000)]
Accommodate newly added/renamed source(s) in our MSVC project (gtk2_ardour)

6 years agoOSC: allow setting of marker name
Len Ovens [Sun, 18 Feb 2018 17:15:35 +0000 (09:15 -0800)]
OSC: allow setting of marker name

6 years agoOSC: select comment should feedback when comment changed
Len Ovens [Sat, 17 Feb 2018 15:26:23 +0000 (07:26 -0800)]
OSC: select comment should feedback when comment changed

6 years agoOSC: Allow surface to change route comment.
Len Ovens [Sat, 17 Feb 2018 15:11:20 +0000 (07:11 -0800)]
OSC: Allow surface to change route comment.

6 years agoDrop-shadow spacer; for theming.
Ben Loftis [Sun, 18 Feb 2018 04:25:39 +0000 (22:25 -0600)]
Drop-shadow spacer;  for theming.

6 years agoFix long-standing bug in spacer expose+render.
Ben Loftis [Sat, 17 Feb 2018 22:46:04 +0000 (16:46 -0600)]
Fix long-standing bug in spacer expose+render.

6 years agoTweak the text of 2 snap options.
Ben Loftis [Sat, 17 Feb 2018 18:18:53 +0000 (12:18 -0600)]
Tweak the text of 2 snap options.

6 years agoAvoid disk-buffer error on startup. (again)
Ben Loftis [Sat, 17 Feb 2018 18:14:56 +0000 (12:14 -0600)]
Avoid disk-buffer error on startup.  (again)

6 years agoRevert some theme tweaks. Left-justify gauge text.
Ben Loftis [Fri, 16 Feb 2018 22:50:49 +0000 (16:50 -0600)]
Revert some theme tweaks.  Left-justify gauge text.

6 years agoAvoid error message on startup.
Ben Loftis [Fri, 16 Feb 2018 23:16:04 +0000 (17:16 -0600)]
Avoid error message on startup.

6 years agoShuffle order of items in status bar; change behavior per oofus on irc.
Ben Loftis [Fri, 16 Feb 2018 21:09:28 +0000 (15:09 -0600)]
Shuffle order of items in status bar; change behavior per oofus on irc.
 ( note: this essentially reverts ed459a )

6 years agoTweak packing to line-up button edges with transport toolbar.
Ben Loftis [Fri, 16 Feb 2018 20:48:26 +0000 (14:48 -0600)]
Tweak packing to line-up button edges with transport toolbar.

6 years agoMaybe gauges should only be colored when there is something to report: WARN or CRIT.
Ben Loftis [Fri, 16 Feb 2018 15:43:05 +0000 (09:43 -0600)]
Maybe gauges should only be colored when there is something to report: WARN or CRIT.

6 years agoConsistently use Gauge to avoid the overloaded term Indicator.
Ben Loftis [Fri, 16 Feb 2018 15:35:44 +0000 (09:35 -0600)]
Consistently use Gauge to avoid the overloaded term Indicator.

6 years agoRemove unused status labels. (using gauges instead)
Ben Loftis [Fri, 16 Feb 2018 15:19:45 +0000 (09:19 -0600)]
Remove unused status labels.  (using gauges instead)

6 years agoAdd Disk IO gauge.
Ben Loftis [Fri, 16 Feb 2018 15:03:57 +0000 (09:03 -0600)]
Add Disk IO gauge.

6 years agoReverse the drawing of DSP indicator to match other displays.
Ben Loftis [Fri, 16 Feb 2018 14:34:32 +0000 (08:34 -0600)]
Reverse the drawing of DSP indicator to match other displays.
 (note: this gets reverted in 76b7d1)

6 years agoMove cpu and disk gauges into the status bar at top.
Ben Loftis [Thu, 15 Feb 2018 23:31:37 +0000 (17:31 -0600)]
Move cpu and disk gauges into the status bar at top.

6 years agoGTKOSX is not a valid check. Use __APPLE__
Ben Loftis [Thu, 15 Feb 2018 22:32:37 +0000 (16:32 -0600)]
GTKOSX is not a valid check.  Use __APPLE__

6 years agoFix a few warnings
Ben Loftis [Thu, 15 Feb 2018 22:06:19 +0000 (16:06 -0600)]
Fix a few warnings

6 years agoMacOS: Move status info to top, just like win+linux. (but no menu up there of course.)
Ben Loftis [Wed, 14 Feb 2018 21:42:36 +0000 (15:42 -0600)]
MacOS: Move status info to top, just like win+linux.  (but no menu up there of course.)

6 years agoRemove display_message(); No more scary log message popups on osx.
Ben Loftis [Wed, 14 Feb 2018 21:32:43 +0000 (15:32 -0600)]
Remove display_message(); No more scary log message popups on osx.

6 years agoOSC: Select should be able to rename as well.
Len Ovens [Sat, 17 Feb 2018 06:54:16 +0000 (22:54 -0800)]
OSC: Select should be able to rename as well.

6 years agoOSC: added group join, switch, remove function
Len Ovens [Fri, 16 Feb 2018 21:08:09 +0000 (13:08 -0800)]
OSC: added group join, switch, remove function

6 years agonoop OSC: path strings should not get tranlated
Len Ovens [Tue, 6 Feb 2018 20:01:06 +0000 (12:01 -0800)]
noop OSC: path strings should not get tranlated

6 years agoOSC: Add /group/list so surface can get a list of groups
Len Ovens [Tue, 6 Feb 2018 16:47:12 +0000 (08:47 -0800)]
OSC: Add /group/list so surface can get a list of groups

6 years agoWhen building with MSVC, allow for the fact that Mixbus and Ardour can be using diffe...
John Emmas [Thu, 15 Feb 2018 09:03:32 +0000 (09:03 +0000)]
When building with MSVC, allow for the fact that Mixbus and Ardour can be using different versions of the SESSION_FILE format

6 years agoAuto-monitor == Cue for MIDI tracks.
Ben Loftis [Thu, 15 Feb 2018 00:04:57 +0000 (18:04 -0600)]
Auto-monitor == Cue for MIDI tracks.

6 years agoShrink the peak_display button to avoid blowing-up the vertical spacing of the toolbar.
Ben Loftis [Wed, 14 Feb 2018 22:14:23 +0000 (16:14 -0600)]
Shrink the peak_display button to avoid blowing-up the vertical spacing of the toolbar.

6 years agoReturn a value for blinking.
Ben Loftis [Wed, 14 Feb 2018 21:46:49 +0000 (15:46 -0600)]
Return a value for blinking.

6 years agoIf the gauges arent clickable, perhaps they look best with hard edges, matching the...
Ben Loftis [Wed, 14 Feb 2018 21:05:49 +0000 (15:05 -0600)]
If the gauges arent clickable, perhaps they look best with hard edges, matching the master-bus meters in the toolbar.

6 years agoRe-pack the master meters (in the toolbar) so the editor_meter_peak_display button...
Ben Loftis [Wed, 14 Feb 2018 20:47:00 +0000 (14:47 -0600)]
Re-pack the master meters (in the toolbar) so the editor_meter_peak_display button is more clickable.

6 years agoRe-pack dsp_load_indicator next to feedback_indicator et al.
Ben Loftis [Wed, 14 Feb 2018 18:55:48 +0000 (12:55 -0600)]
Re-pack dsp_load_indicator next to feedback_indicator et al.

6 years agoBlink disk+dsp gauges on major errors ( disk out of space or xrun-while-recording )
Ben Loftis [Wed, 14 Feb 2018 16:26:23 +0000 (10:26 -0600)]
Blink disk+dsp gauges on major errors ( disk out of space or xrun-while-recording )

6 years agoRevert TRIANGLE_WIDTH for mac. Must be a pango/cairo issue on mac.
Ben Loftis [Wed, 14 Feb 2018 14:15:45 +0000 (08:15 -0600)]
Revert TRIANGLE_WIDTH for mac.  Must be a pango/cairo issue on mac.

6 years agoDefault snap-to-grid TRUE
Ben Loftis [Wed, 14 Feb 2018 14:12:45 +0000 (08:12 -0600)]
Default snap-to-grid TRUE

6 years agoAccommodate the change from libtimecode to libtemporal
John Emmas [Wed, 14 Feb 2018 10:02:11 +0000 (10:02 +0000)]
Accommodate the change from libtimecode to libtemporal

6 years agoCOMBO_TRIANGLE_WIDTH should be an odd value.
Ben Loftis [Tue, 13 Feb 2018 14:17:46 +0000 (08:17 -0600)]
COMBO_TRIANGLE_WIDTH should be an odd value.

6 years agoDont delete&create add_vca_buton every time the vca list is updated.
Ben Loftis [Tue, 13 Feb 2018 14:13:52 +0000 (08:13 -0600)]
Dont delete&create add_vca_buton every time the vca list is updated.

6 years agoAccommodate newly introduced source(s) in our MSVC project (gtk2_ardour)
John Emmas [Tue, 13 Feb 2018 10:46:54 +0000 (10:46 +0000)]
Accommodate newly introduced source(s) in our MSVC project (gtk2_ardour)

6 years agoFix mixer left/right scroll, snap to strip boundary.
Robin Gareus [Tue, 13 Feb 2018 10:18:03 +0000 (11:18 +0100)]
Fix mixer left/right scroll, snap to strip boundary.

Ignore add-button (packed at end, start of list) when iterating
over strip_packer.children.

6 years agoRemove cruft
Robin Gareus [Tue, 13 Feb 2018 10:15:00 +0000 (11:15 +0100)]
Remove cruft

6 years agoUsers struggle with Pane Dividers. Make them larger, and set a min-size on the mixer...
Ben Loftis [Mon, 12 Feb 2018 22:16:09 +0000 (16:16 -0600)]
Users struggle with Pane Dividers.  Make them larger, and set a min-size on the mixer list pane.

6 years ago...and also for VCA strips.
Ben Loftis [Mon, 12 Feb 2018 21:50:35 +0000 (15:50 -0600)]
...and also for VCA strips.

6 years agoRemove track-adder button from the mixer-list, and add an obvious one at end of strips.
Ben Loftis [Mon, 12 Feb 2018 21:29:19 +0000 (15:29 -0600)]
Remove track-adder button from the mixer-list, and add an obvious one at end of strips.

6 years agofix definition of Temporal::Beats::max()
Paul Davis [Mon, 12 Feb 2018 12:04:47 +0000 (07:04 -0500)]
fix definition of Temporal::Beats::max()

Ticks can exceed PPQN, but if beats are already INT32_MAX, ::normalize() will not work correctly

6 years agoRe-pack Editor Toolbar:
Ben Loftis [Mon, 12 Feb 2018 17:42:21 +0000 (11:42 -0600)]
Re-pack Editor Toolbar:
Move zoom tools to right of toolbar.
Tweak numeric (mode) keybindings to more closely match the order they appear in the UI.
Add some new default keybindings.

6 years agoTimecode instead of SMPTE.
Ben Loftis [Mon, 12 Feb 2018 15:15:26 +0000 (09:15 -0600)]
Timecode instead of SMPTE.

6 years agoTweak combo-box sizing to match actual triangle size. Tweak size of grid_type_selector.
Ben Loftis [Mon, 12 Feb 2018 15:13:39 +0000 (09:13 -0600)]
Tweak combo-box sizing to match actual triangle size.  Tweak size of grid_type_selector.

6 years agoFix potential crash in snap_to_grid (grid-mark list is empty).
Ben Loftis [Sun, 11 Feb 2018 18:05:23 +0000 (12:05 -0600)]
Fix potential crash in snap_to_grid (grid-mark list is empty).

6 years agoSoloSelection: gui part.
Ben Loftis [Sun, 11 Feb 2018 15:39:45 +0000 (09:39 -0600)]
SoloSelection: gui part.

6 years agoSoloSelection: libardour part.
Ben Loftis [Sun, 11 Feb 2018 15:39:36 +0000 (09:39 -0600)]
SoloSelection: libardour part.

6 years agoResolve a few -Wunused-variable warnings in US2400.
Ben Loftis [Sun, 11 Feb 2018 00:12:16 +0000 (18:12 -0600)]
Resolve a few -Wunused-variable warnings in US2400.

6 years agoiCon device tweaks: faster timecode display refresh rate. Submitted by Michal Barhon.
Ben Loftis [Sun, 11 Feb 2018 00:07:05 +0000 (18:07 -0600)]
iCon device tweaks: faster timecode display refresh rate. Submitted by Michal Barhon.

6 years agoAdd qex + qcon mcp device file (expander on left). Submitted by Michal Barhon.
Ben Loftis [Sun, 11 Feb 2018 00:01:27 +0000 (18:01 -0600)]
Add qex + qcon mcp device file (expander on left). Submitted by Michal Barhon.

6 years agoResolve -Wreorder in qcon code.
Ben Loftis [Sat, 10 Feb 2018 23:59:37 +0000 (17:59 -0600)]
Resolve -Wreorder in qcon code.

6 years agoCopy+Paste thinko: use passed-in variable instead of member variable. Maybe fix...
Ben Loftis [Sat, 10 Feb 2018 15:06:46 +0000 (09:06 -0600)]
Copy+Paste thinko: use passed-in variable instead of member variable.  Maybe fix potential crash.

6 years agoCairo-fix cursor lines so they align perfectly with Rulers, Grids, and region edges.
Ben Loftis [Sat, 10 Feb 2018 13:51:28 +0000 (07:51 -0600)]
Cairo-fix cursor lines so they align perfectly with Rulers, Grids, and region edges.

6 years agoRemove unused code.
Ben Loftis [Fri, 9 Feb 2018 19:44:49 +0000 (13:44 -0600)]
Remove unused code.

6 years agoFix potential crash with EditAtSelectedMarker, when no marker is selected.
Ben Loftis [Fri, 9 Feb 2018 19:43:20 +0000 (13:43 -0600)]
Fix potential crash with EditAtSelectedMarker, when no marker is selected.

6 years agonew_grid: Add grid_lines.cc
Ben Loftis [Fri, 9 Feb 2018 17:21:40 +0000 (11:21 -0600)]
new_grid:  Add grid_lines.cc

6 years agonew_grid: Rewrite of Snap and Grid. (squashed commit)
Ben Loftis [Fri, 9 Feb 2018 15:59:39 +0000 (09:59 -0600)]
new_grid:  Rewrite of Snap and Grid. (squashed commit)
Separate Snap from Grid.  Lots of naming changes.
Multiple simultaneous snap options allowed. Grid is one of the possible Snap options.
Grid uses the same data as the rulers.  Replace complicated tempo_lines with simple grid_lines.
The Grid is zoom-scale-sensitive along with the rulers.  If you are zoomed out, grid becomes coarser.

6 years agonew_grid: MidiRegionView::motion should propagate thru RegionView, so snapped_cursor...
Ben Loftis [Wed, 7 Feb 2018 01:49:32 +0000 (19:49 -0600)]
new_grid: MidiRegionView::motion should propagate thru RegionView, so snapped_cursor is updated.  This probably fixes other bugs as well.

6 years agonew_snap: Snapped Cursor ( squashed commit )
Ben Loftis [Fri, 9 Feb 2018 14:21:45 +0000 (08:21 -0600)]
new_snap:  Snapped Cursor ( squashed commit )
Snapped Cursor is a line that follows the edit point, and indicates where the operation will occur.
This replaces and extends the line that appears with the Cut tool.
New associated preferences:  snap_threshold and show_snap_cursor.

6 years agoOSC: clean up jog mode, simplify feedback
Len Ovens [Mon, 5 Feb 2018 18:39:58 +0000 (10:39 -0800)]
OSC: clean up jog mode, simplify feedback

6 years agoMSVC only allows static class members to be initialised in the class declaration
John Emmas [Sat, 3 Feb 2018 14:58:45 +0000 (14:58 +0000)]
MSVC only allows static class members to be initialised in the class declaration

6 years agoMake sure that 'libardour-config,h' only gets #included when building with waf (as...
John Emmas [Sat, 3 Feb 2018 13:55:37 +0000 (13:55 +0000)]
Make sure that 'libardour-config,h' only gets #included when building with waf (as it only gets generated when building with waf)

When building with MSVC this was getting #included in a few places which had the effect of making my session files get generated in a very old format.

6 years agoFurther defer changes of plugin Tags+Status, and consolidate code to call PluginListC...
Ben Loftis [Sat, 3 Feb 2018 01:25:01 +0000 (19:25 -0600)]
Further defer changes of plugin Tags+Status, and consolidate code to call PluginListChanged only once.

6 years agoFixes for the iCON Qcon mcp device - LED rings. Submitted by Michal Barhon : mbarhon...
Ben Loftis [Fri, 2 Feb 2018 15:26:17 +0000 (09:26 -0600)]
Fixes for the iCON Qcon mcp device - LED rings.  Submitted by Michal Barhon : mbarhon@seznam.cz

6 years agoOSC: jog mode and jog mode name should be sent at refresh
Len Ovens [Fri, 2 Feb 2018 06:03:04 +0000 (22:03 -0800)]
OSC: jog mode and jog mode name should be sent at refresh

6 years agoSupport for the iCON Qcon mcp device - sysex strings. Submitted by Michal Barhon.
Ben Loftis [Thu, 1 Feb 2018 20:39:17 +0000 (14:39 -0600)]
Support for the iCON Qcon mcp device - sysex strings.  Submitted by Michal Barhon.

6 years agoUpdated mcp files for iCON Qcon controller.
Ben Loftis [Thu, 1 Feb 2018 20:32:48 +0000 (14:32 -0600)]
Updated mcp files for iCON Qcon controller.

6 years agoAdd a script to jump to a named marker
Robin Gareus [Thu, 1 Feb 2018 01:18:40 +0000 (02:18 +0100)]
Add a script to jump to a named marker

6 years agoOSC: Add group name feedback to strips
Len Ovens [Wed, 31 Jan 2018 19:47:03 +0000 (11:47 -0800)]
OSC: Add group name feedback to strips

6 years agoCreate M-Audio_Axiom_AIR_Mini_32.map
Shawn Doherty [Wed, 31 Jan 2018 15:34:19 +0000 (10:34 -0500)]
Create M-Audio_Axiom_AIR_Mini_32.map

List CC events for transport controls and knobs. List Note events for Trigger Pads. Map transport controls and knobs.

6 years agoRevert "Clean up help-text, use multi-line single labels"
Robin Gareus [Wed, 31 Jan 2018 14:21:00 +0000 (15:21 +0100)]
Revert "Clean up help-text, use multi-line single labels"

This reverts commit 17cdc8114c0efa568f4a2f6f5eefb43c747f3b0c.

Using table row-pacing between labels provides a nicer layout
(less vertical blank space)