13
0
Commit Graph

390 Commits

Author SHA1 Message Date
79b9a044b8 add event-insensitivity to the list of conditions that causes a container to NOT add its children to the list of items-at-point 2014-06-30 16:31:31 -04:00
4eb565e0a9 verbose cursor text is always outlined 2014-06-30 10:39:41 -04:00
5974f4730b allow Canvas::Text to have outline drawn in a contrasting color (based on actual color) 2014-06-30 10:39:26 -04:00
471570705d move contrasting_text_color() into ArdourCanvas 2014-06-30 10:38:45 -04:00
33339090c3 invisible items/containers should not add their children to "items-at-point" 2014-06-30 08:32:26 -04:00
cf075743e4 additional DEBUG_TRACE message for canvas current item selection 2014-06-30 08:32:26 -04:00
cef26a4e1e Change some declarations from 'struct' to 'class' (and vice-versa) 2014-06-29 13:56:41 +01:00
22ce7c0762 Add (newly introduced) sources to our MSVC projects 2014-06-28 11:56:19 +01:00
ef78ad0d83 Remove (no longer needed) sources from our MSVC projects 2014-06-28 11:48:08 +01:00
c2dcd7eacd slightly increase size of a Canvas::PolyItem, to avoid left-over pixels when dragging (as well as other general incorrectness 2014-06-27 10:30:09 -04:00
a0cb2f95f0 if CANVAS_DEBUG is defined, then the env variable CANVAS_HARLEQUIN_DEBUGGING will turn on drawing the expose areas for canvas render debugging 2014-06-27 10:27:04 -04:00
6cc673f0a6 in Canvas::window_to_canvas(), if either x or y coordinate is less than zero, search for the scroll group on the relevant edge.
If we don't do this then we find no scroll group covering the event coordinate, and the translation for scroll fails to be applied
2014-06-27 10:19:21 -04:00
3accf1d2af new API for TrackingText and similar items 2014-06-26 15:10:24 -04:00
ae4c4c8f90 add tracking_text.cc to canvas wscript 2014-06-26 15:10:24 -04:00
f5d62b1486 new TrackingText canvas item, to resolve conceptual issues with the Editor::VerboseCursor 2014-06-26 15:10:24 -04:00
cd12698b9c Rename PBD::find_file_in_search_path to just PBD::find_file
saves a bit of typing and not necessary if you look at how it is used.
2014-06-25 12:40:10 -04:00
663f9827f9 last piece of scroll-wheel checkin, oops 2014-06-24 10:46:53 -05:00
2cc25a9d79 add scroll wheel handler to canvas 2014-06-24 10:33:28 -05:00
199ac89d40 return of the zero line 2014-06-23 15:24:08 -04:00
a743e68a0c revert drawing of rectified waves back to previous approach since it (might be) slightly more efficient and is simpler to understand; add comments 2014-06-23 15:12:30 -04:00
437099fff9 completely rethink waveform rendering (again)
There are 3 possible components to draw at each x-axis position: the waveform "line", the zero line and an outline/clip indicator.
We have to decide which of the 3 to draw at each position, pixel by pixel. This makes the rendering less efficient but it is
the only way I can see to do this correctly.
2014-06-23 14:57:55 -04:00
71c417948e fix logic error that meant one side of the waveform outline is not drawn; draw zero line before outline, for better effects with low amplitude waves 2014-06-23 10:06:59 -04:00
6a5d805b38 more canvas refactoring.
Remove Canvas::Layout, use Canvas::Container for the same purpose, move child-rendering into Item::render_children() so that it
could theoretically be used by any derived type.
2014-06-22 11:41:05 -04:00
f0933bf005 add missing new files for canvas redesign 2014-06-22 09:53:14 -04:00
99f9b3456a explicitly qualify cast to ArdourCanvas::Container so that it works.
I assume that gcc is failing to complain about ambiguity with Gtk::Container even though there should
really be no ambiguity
2014-06-22 09:29:16 -04:00
a8bd6ecc4f refactor Canvas so that all Items have children; add Container abstract base class; rename Group as "Layout" and retain only drawing semantics 2014-06-21 11:43:42 -04:00
c1045881dd if we're not going to notify parents of bbox changes while an item is hidden, we need to remind it when the item is hidden or shown 2014-06-18 21:02:30 -04:00
36a34dc1a4 Merge branch 'canvas_tweaks' of https://github.com/nmains/ardour into cairocanvas 2014-06-18 11:20:10 -04:00
becf857f48 a whole slew of changes related to centralizing and rationalizing cursor management.
Debugging output left in place to help address the reports that will come in as people test this more
2014-06-18 10:24:59 -04:00
nick_m
0bd17ed2e4 Canvas tweaks.
* Only queue a draw for changed items that are set visible and in-window.
2014-06-19 00:06:32 +10:00
47efeb9f21 Merge branch 'cache_fixes' of https://github.com/nmains/ardour into cairocanvas 2014-06-17 11:35:13 -04:00
93bc93b6f6 a set of 3 fixes that cure Canvas::Text leaving dirty pixels when being dragged. or might not - testing is non-deterministic, which is alarming 2014-06-17 11:34:54 -04:00
f98e0a0707 use a different approach for indicating expose rects (from robin gareus). #ifdef'd out by default 2014-06-17 11:34:54 -04:00
nick_m
b31608f64e Cache entries are now region colour aware. 2014-06-18 00:16:51 +10:00
8050712503 comment correction regarding Canvas::visible_area() 2014-06-15 12:18:47 -04:00
dae45f1d75 initialize _scroll_parent in Canvas::item 2014-06-15 12:17:12 -04:00
69af017315 initialize uninitialized variable 2014-06-15 13:24:40 +02:00
55d51d38ce Add newly introduced sources to our MSVC projects 2014-06-15 09:56:49 +01:00
e59210c402 Remove no longer needed sources from MSVC projects 2014-06-15 09:55:34 +01:00
590882f3c8 change Canvas heirarchy and constructors
Items no longer need a parent group (they require a Canvas pointer instead), so all constructors have been rationalized
and have two variants, one with a parent and one with a canvas.

All Items now inherit from Fill and Outline, to banish diagonal inheritance and virtual base classes and all that.

There were zero changes to the Ardour GUI arising from these changes.
2014-06-12 14:53:44 -04:00
23d7893910 remove drag handle canvas object - it was just a stupid unfinished experiment 2014-06-12 10:40:43 -04:00
87a6f633a1 derive ArdourCanvas::Ruler from Rectangle 2014-06-12 10:35:16 -04:00
e1825361b5 remove hard-coded colors 2014-06-12 01:07:58 -04:00
143f9509ea many fixes and improvements for a now-working ArdourCanvas::Ruler item 2014-06-11 23:54:28 -04:00
f5fc4a6b09 add ruler.cc to canvas wscript 2014-06-11 23:54:28 -04:00
2cab65062d add Ruler to Canvas fwd.h 2014-06-11 23:54:28 -04:00
5ee4f41925 add initial (untested) implementation of canvas ruler item 2014-06-11 23:54:28 -04:00
7a3a66db72 fix Canvas::LineSet implementation to support horizontal and vertical linesets 2014-06-09 15:39:19 -04:00
f0c18abf55 remove global canvas scroll offset, to provide no-scroll-parent == no-scroll behaviour 2014-06-09 08:39:48 -04:00
b86e1204ec fix borked logic controlling whether/when to draw clip/outline pixels/lines in waveviews 2014-06-08 13:13:44 -04:00
c22e96522d Merge branch 'waveview_caching_for_upstream' of https://github.com/nmains/ardour into cairocanvas 2014-06-08 13:01:47 -04:00
nick_m
e495577f98 Use global clip level from prefs. Restore clip colour, \ 2014-06-09 02:50:14 +10:00
5e281d3b44 when delivering enter/leave events to canvas items, ensure that the event coordinates are in canvas space, not window space
This fixes a variety of borkage in the canvas at present
2014-06-08 11:26:32 -04:00
153befa92c add Item::canvas_origin() for convenience 2014-06-08 11:26:32 -04:00
nick_m
7a05dde39d Use a dumb cache for waveview ImageSurfaces. This halves the size of the
previous one, but usually ends up using three of them at the current
CACHE_HIGH_WATER setting.
Should result in a smaller memory footprint for sessions with
multiple copies of nearby audio segments (electronic style).
The downside is the larger memory footprint for linear recording
sessions if CACHE_HIGH_WATER > 1 (1 giving a max of two
half - sized cache entries per audio stream).
2014-06-08 01:47:38 +10:00
b54a2713a1 When rendering a Canvas::Rectangle take its _position into account, even though in general this is always (0,0) within its parent 2014-06-06 08:33:13 -04:00
792fe016e7 clip rendering of ScrollGroup to just the part of the canvas covered by the scroll group.
This stops tracks from appearing to scroll up under the rulers, among other things.
2014-06-05 18:18:28 -04:00
ef9bf58359 fix problems with expose/redraws from canvas where requested area goes way outside the integer range allowed by GTK/GDK 2014-06-05 14:42:46 -04:00
8c79f70eef remove debugging output 2014-06-05 12:04:42 -04:00
1d354f746a basic, initial structure for canvas widget item 2014-06-05 12:04:42 -04:00
236926e7ca Add newly introduced sources to MSVC project
(scroll_group stuff)
2014-06-04 13:50:06 +01:00
8fa81c1436 merge onecanvas and cairocanvas branches, and manually resolve conflicts, including rounding in item_to_window() methods 2014-06-03 16:37:53 -04:00
e0533e9dd7 more profound changes to canvas scrolling, in particular find appropriate ScrollGroup for Canvas::{window,canvas}_to_{canvas,window}() 2014-06-03 16:13:12 -04:00
d4989ed9ce fix missing leftover Canvas::pick_current_item() which was confusing button release event coordinates 2014-06-03 16:12:00 -04:00
073df89c4d use window-based coordinates when picking current item so that we get per-item (per-scroll-group,really) computation of position and coverage. 2014-06-03 16:12:00 -04:00
54a56cd3c6 various changes to get independent scrolling to work better in canvas. mostly tweaks relating to how scroll offsets are used during rendering.
Event handling offsets still require work.
2014-06-03 16:12:00 -04:00
f17b84ad10 clean up ArdourCanvas::Arrow implementation to remove unshown polygon/head 2014-06-03 16:11:24 -04:00
bf7b35388b rationalize and centralize computation of positional offset and scroll offset for canvas items 2014-06-03 16:11:24 -04:00
22e7252729 inline ScrollGroup::canvas_position() for no particular reason 2014-06-03 16:10:27 -04:00
c9f890bd7c avoid recursing through the entire canvas when scrolling - only scroll explicitly identified ScrollGroups 2014-06-03 16:10:27 -04:00
6019f06bdf different approach to independent scrolling, involving ArdourCanvas::ScrollGroup
The idea now is that a scroll group item can be added to the canvas which will causes its children to scroll in either or both
directions (horizontal or vertical). There are few complications: the position() of the ScrollGroup is ambiguous depending
on whether you want it with scroll taken into account or not, so Item::canvas_position() was added, which defaults to
the same value as Item::position() but is overridden by ScrollGroup to return the position independent of scrolling. This
method is used when translating between item/canvas/window coordinate systems.

Note that the basic idea is that we MOVE the scroll group when a scroll happens. This mirrors what happens in the GnomeCanvas,
where Nick Mainsbridge came up with a great idea that allowed unification of the time bar and track canvases.
2014-06-03 16:10:27 -04:00
97109672c7 initial redesign of canvas scrolling to facilitate independent x- and y-axis scrolling of specific groups within the canvas.
This commit should cause no change in behaviour, but contains all the code and changes necessary
for the next step
2014-06-03 16:09:06 -04:00
ab60429efc test possible 'flickering' with nvidia 2014-05-31 18:22:34 +02:00
2342b7d611 don't allow waveform to bleed into TimeAxisViewItem frame border 2014-05-31 14:06:10 +02:00
161a3258ee Add newly introduced sources to MSVC project
(xfade_curve stuff)
2014-05-30 12:52:03 +01:00
33412421f6 Rearrange some #includes to keep MSVC happy 2014-05-30 12:50:49 +01:00
fed5599baa smooth visual curve drawing 2014-05-30 03:04:02 +02:00
202d926916 smoothen rendering of x-fades 2014-05-29 07:48:43 +02:00
604abffeb5 fix prev commit 2014-05-29 05:30:13 +02:00
86e7d86089 renice x-fade rendering w/cairo-antialiasing 2014-05-29 05:06:02 +02:00
30f204b90e Canvas: new x-fade drawing, two curve widget 2014-05-29 03:09:57 +02:00
034f3dafd7 Revert "cairo sub-surface prototype & example
This reverts commit c57fcde78c.
and also     commit f1f8f89fcb.
2014-05-28 19:13:25 +02:00
f1f8f89fcb exercise subsurface rendering for x-fade curves 2014-05-28 17:38:42 +02:00
c57fcde78c cairo sub-surface prototype - intermediate flattened group renderer. 2014-05-28 17:38:42 +02:00
c03b658531 Curve: anti-aliasing.
use cairo for anti-aliasing, and ignore explicit Catmull-Rom
points for that fall on the same x-cordinate.
2014-05-27 19:36:10 +02:00
99c953514b implement Curve in/outside fill 2014-05-27 16:37:01 +02:00
432611113d directly apply waveform clip-level changes 2014-05-27 16:37:01 +02:00
bf4819ab0e "We brake for nobody." oh wait. - fixes Rectified Waveform view. 2014-05-26 22:45:42 +02:00
bdb342123f fix prev commit, window-offset for x-fade drawing 2014-05-26 18:22:21 +02:00
791c668756 fix x-fade drawing
Catmull-Rom curve samples are not equally spaced on the x-axis.
Furthermore, Curve::map_value() is not needed, cairo line_to
already interpolates.
2014-05-26 17:02:21 +02:00
e99c8960c0 first pass at tightening up waveform drawing algorithm to generally round down when dealing with fractional pixels 2014-05-07 10:35:50 -04:00
1b989a93c2 remove redundant os.path.join() calls when specifying install path as bld.env['LIBDIR'] 2014-04-28 21:18:02 -04:00
058986f77b finish unfinished work at basing all install paths on the program name 2014-04-28 21:11:08 -04:00
077a194430 Add the main VC project files for building Ardour3 with Microsoft Visual Studio
Note that there's no 'VS Solution' file at present and some targets haven't been built yet (e.g. 'fst')
2014-04-08 09:49:35 +01:00
9df3157dfc big rework of scrolling, horizontal part considered almost 100% done.
Many more changes than I would typically like in a single commit, but this was all very intertwined.
Vertical scrolling using track-stepping still to follow.
2014-03-20 13:29:45 -04:00
c2946ee00f don't queue redraws when various canvas item properties are "reset" to the same value, plus supporting functions 2014-03-11 07:36:09 -04:00
032f394b2a tiny red dots, be gone (expand poly_item bounding box by correct (?) amount) 2014-03-10 11:10:38 -04:00
ec0be1310f missing iterator advance 2014-03-10 11:10:38 -04:00
52c8b6d66a stupid hack to fix rectangle damage noise 2014-03-09 11:39:57 -04:00
6d3bd4e53c use fill transparency detection to avoid rendering transparent (invisible) rectangle fill area 2014-03-07 12:29:26 -05:00
12ef19d90a if a Fill object is given a zero-alpha (transparent) color, note that 2014-03-07 12:28:52 -05:00
52cfbb45e1 alter ArdourCanvas::Rect::expand() to not clamp to all-positive values because we now definitely have items that have negative coordinates.
This could have drastic consequences but I think the all-positive was a hack to fix a problem that was solved separately by means currently unknown.
2014-03-07 11:26:27 -05:00
621887cfaa slightly optimize bounding box computation for ArdourCanvas::PolyItem by avoiding inner conditional 2014-03-07 11:24:51 -05:00
e5802bdbea move an assert to cover only cases where it is needed 2014-03-07 11:23:22 -05:00
2a6fc5af74 tweak Polygon::render() to work whether or not fill or outline are unset 2014-03-06 23:15:59 -05:00
a08c0ea1da manually revert change to canvas expose handling in fee026c5ef
Breaking out the rectangles implies a z-axis ordering of drawing,because the rect drawn last will implicitly be "on top".
But redraw areas are not submitted with any z-axis information, and so drawing like this breaks canvas layering. It
would be more efficient to draw the rects separately, but we don't have any ordering information and so we cannot do it
correctly.
2014-03-05 13:12:18 -05:00
58a30da03d use a centripetal catmull-rom curve to smooth ArdourCanvas::Curve
See http://en.wikipedia.org/wiki/Centripetal_Catmull-Rom to understand the benefits of this.
2014-03-05 11:38:30 -05:00
e6849e9c7e "correct" curve drawing (no artifacts during redraw)
Interpolation errors still need addressing.
2014-03-04 21:58:17 -05:00
c29d392b0c tentative intermediate state for ArdourCanvas::Curve 2014-03-04 21:58:17 -05:00
dde4d3bbc3 only queue an item redraw from Item::show() or Item::Hide() if the call changes the visibility status of the item (i.e. make no-ops really be no-ops) 2014-03-04 21:58:17 -05:00
fee026c5ef break down GdkEventExpose into distinct rectangles for canvas expose rather than drawing the entire region as a single rect 2014-03-04 21:58:16 -05:00
912f07b919 mingw build fixes (tested with i686-w64-mingw32 on linux-x86_64) 2014-03-04 15:25:58 +01:00
e6c3cece64 remove recently added conflation of mingw64 and msvc with respect to symbol export 2014-03-02 14:59:08 -05:00
560c667ea9 fix compilation of libcanvas so that when built as a shared lib (the default), -DLIBCANVAS_DLL_EXPORTS=1 is not lost 2014-03-01 16:52:08 -05:00
19395ac258 when mingw is mingw64, it appears that we need to use __declspec() and not __attribute__((visibility)) for export control 2014-03-01 15:16:39 -05:00
e60933650e remove debug messages, for now 2014-02-28 17:17:00 -05:00
435c3ad47f change implementation of ArdourCanvas::Curve to use GIMP-inspired ideas.
Presmooth with quadratic bezier, then interpolate when rendering. Not finished yet
2014-02-28 17:00:25 -05:00
007e6bb15b remove unneeded extra methods in ArdourCanvas::Curve 2014-02-27 09:22:36 -05:00
0cbf8f7dea fix canvas enter/leave bug when point is over a group/ignore-event item and we fail to send a leave event to the previous item 2014-02-25 16:08:36 -05:00
f9a3e7f8bb add DEBUG::CanvasEnterLeave to allow runtime toggling of canvas enter/leave events 2014-02-25 16:07:51 -05:00
737aae908a tweak canvas rect drawing to correctly place bottom edge of rectangle inside the bounds (cairo works in mysterious ways) 2014-02-25 12:02:50 -05:00
e2f18ea658 allow per-line configurability of the threshold used to determine if a PolyLine covers a given coordination 2014-02-20 12:53:08 -05:00
14b2d0b549 fix error in canvas PolyLine::covers(), so that the mouse can actually enter/leave such items 2014-02-19 23:42:01 -05:00
05d7947795 make stateful image canvas item actually compile 2014-02-17 16:05:52 -05:00
eb3c14db25 new canvas item to allow image-based GUI construction 2014-02-17 15:28:18 -05:00
172a4a853d fix up problems with patch change flgs not changing height correctly 2014-02-14 12:06:44 -05:00
1df483d3db since we now expand rectangles to the right always, adjust the bounding box computation 2014-02-14 09:49:16 -05:00
1a9076c0ba remove debug message 2014-02-13 18:18:53 -05:00
08b86fda5c fix up some issues with precise placement of ArdourCanvas::Rectangle frame/outline 2014-02-13 18:18:19 -05:00
79d2a686ff make Item::set_position() do nothing if the position doesn't change 2014-02-13 18:18:19 -05:00
f889f391a1 Guard some Debug output so that it only appears when applicable ('Item::name' is only available when CANVAS_DEBUG is defined) 2014-02-13 14:12:36 +00:00
f5499d206a slight code tidy for Line::render() ... don't use 0.5 pixel adjustment if the line width > 1.0 2014-02-12 15:26:53 -05:00
e247103a7e fix up major thinko's in ArdourCanvas::Group's handling of deletion (both its own, and child items) 2014-02-12 15:15:27 -05:00
6876906d9d fix major thinko in ArdourCanvas::Group::clear() 2014-02-11 22:49:39 -05:00
a329a44cc1 when delivering canvas events, if an item is grabbed, use it in preference to Canvas::_current_item, but still propagate to its ancestors if left unhandled 2014-02-11 22:49:10 -05:00
cc2aca44fb fix text placement in ArdourCanvas::Flag 2014-02-11 12:40:44 -05:00
bb05ae05a8 remove unused _wave_color member from waveview canvas item; use outline color for edge dots of waveforms instead of hardcoding black 2014-01-26 16:02:38 -05:00
3c5a870289 a better, more general fix for the previous Canvas::item_going_away() issue. There is no need to repick the current item if the item going away is NOT the current item 2014-01-20 10:59:44 -05:00
2691209050 When removing an item which is event-insensitive, there is no need to repick the current item, since it can never have been used as the current item.
This fixes crashes associated with ghost notes in midi regions.
2014-01-20 10:53:58 -05:00
620e1e6677 add event type string function to canvas (since it does not use gtkmm2ext) 2014-01-16 10:52:34 -05:00
fbe94f4470 pixel-align canvas PolyItems with single-pixel outlines, for crispness 2014-01-13 09:39:50 -05:00
5062a00c7d move -fvisibility=hidden to the top of the source tree, and remove its internal use; use libtimecode as a shared lib again 2014-01-12 15:40:47 -05:00
22c303d8f6 final (?) tweaks to rectangle rendering 2014-01-10 14:36:05 -05:00
9df593d823 clamp expose (queue_redraw()) requests to visible window area, some extra debugging details 2014-01-10 14:35:36 -05:00
02e6d14e23 make no-zero-line be the default for wave views (still shown for normal audio region views 2014-01-10 12:08:58 -05:00
6d4c0baad3 fix up thinko in recent raise_to_top/lower_to_bottom optimization 2014-01-10 11:54:05 -05:00
70c4a5e2d6 slightly expand CanvasRender debug output 2014-01-10 11:02:34 -05:00
ffdf3ed017 don't go through ::deliver_enter_leave() unnecessarily 2014-01-10 11:02:05 -05:00
5cd35de56b prevent Rect::expand() from generating negative coordinates where there were none before 2014-01-08 18:20:19 -05:00
cf293d0593 tweak rectangle bounding box computation 2014-01-08 10:42:14 -05:00