13
0
Commit Graph

837 Commits

Author SHA1 Message Date
9095057675 canvas: call Item::bounding_box() to recompute bounding box when needed
Since 74fe396cc5 compute_bounding_box() by itself does not do the entire computation, so we
must call into Item::bounding_box() to get the result with children added also
2021-08-13 12:51:37 -06:00
c0425ba70f canvas: items should not add child bboxes in their ::compute_bounding_box() method, Item::bounding_box() does that 2021-08-13 12:51:37 -06:00
ad6afbe68a canvas: use Item::bb_clean() to mark _bounding_box_dirty false 2021-08-13 12:51:36 -06:00
5b123441f4 canvas; change operator<<() for Rect to show BIG instead of gigantic 64 bit numbers 2021-08-13 12:51:36 -06:00
ddcd004350 canvas: only reset _bounding_box_dirty in the parent if the child's bbox did change 2021-08-13 12:51:36 -06:00
c1fa1e1a29 canvas: when an item's position is set, its bounding box has changed 2021-08-13 12:51:36 -06:00
f5753dcd07 missing member initialization 2021-08-13 12:51:36 -06:00
7066db16bd remove dangling method from rebase issues 2021-08-13 12:51:36 -06:00
14621f3634 add missing Box::set_homogenous() method 2021-08-13 12:51:36 -06:00
5153124664 change (GUI) Marker objects to accept any Canvas::Item as parent, and use this to draw BBT position markers in the BBT ruler 2021-08-13 12:51:34 -06:00
749a49c278 incorporating new tempo map API 2021-08-13 12:51:29 -06:00
82bad0725a libcanvas: reapply LineSet::add_line -> add_coord change after rebase conflicts with master 2021-08-13 12:51:27 -06:00
54de7c70ee Canvas: print item colors in hex when debugging 2021-08-13 12:51:27 -06:00
86a31e34ba Canvas: fix recursive calling of Item::size_allocate()
ConstraintPacker is the one Item-derivative that should NOT call Item::size_allocate_children()
because it just did the size computation for its children and called their
::constrained() method, which in turns calls size_allocate() with the correct size
2021-08-13 12:51:27 -06:00
dbe37d2752 Canvas: make possible even more debugging of constraint packing 2021-08-13 12:51:27 -06:00
f118b3ab53 Canvas: remove dangling cairo path in Arc or ConstraintPacker if fill was requested but not outline 2021-08-13 12:51:27 -06:00
1d96bad59f Canvas: remove cBox (API fully merged into ConstraintPacker) 2021-08-13 12:51:27 -06:00
1b66890547 Canvas: continuing move of cBox functionality into ConstraintPacker 2021-08-13 12:51:27 -06:00
4e82279ce4 Canvas: next step of merging cBox and ConstraintPacker 2021-08-13 12:51:27 -06:00
af60c50990 first steps in merging cBox into constraint packer 2021-08-13 12:51:27 -06:00
860d43697c Canvas: propagate ::size_allocate() down the item tree
This previously wasn't done because of fear that it would affect the traditional fixed-sized canvas,
but only items that _layout_sensitive (i.e. are packed into a constraint packer directly) will
actually do anything in ::size_allocate().

Possibly might want to relax this to cover items that have a constraint packer between them
and a root group.
2021-08-13 12:51:27 -06:00
28f85747ca Canvas: fix behavior of Rectangle when used in a constraint packer
::size_allocate() sets the _position *and* the "self" rect appropriately
2021-08-13 12:51:27 -06:00
3c2bd05750 Canvas: remove debug output 2021-08-13 12:51:27 -06:00
fa2885d2d6 Canvas: do not fill containers by default (added during constraint packing work; badly affects the regular canvas) 2021-08-13 12:51:27 -06:00
9909917976 Canvas: remove unnecessary and conflicting enum 2021-08-13 12:51:27 -06:00
2e4d228f54 manual fixes for constraint-packer -> newbbgui merge 2021-08-13 12:51:27 -06:00
93d2f6f433 remove debug output 2021-08-13 12:51:27 -06:00
b18aaf0c7c Rectangle border/sizing behaves like CSS border-box 2021-08-13 12:51:27 -06:00
27919fec61 items should not round their bounding box when requesting a redraw 2021-08-13 12:51:27 -06:00
9c071cd6ef Canvas::queue_draw_item_area() now expands the passed-in rect appropriately
This means that a request to (re)draw the Rect (0.5,0.5,9.5,9.5)
will actually generate an expose event for (0,0,10,10)

Note: the above rects are of the form (x0,y0,x1,y1)
2021-08-13 12:51:27 -06:00
35a9bcc409 add Rectangle::size_request() which returns actual rectangle size, not bounding box 2021-08-13 12:51:26 -06:00
12b4807bc9 add a very (very) basic resize/layout design to the canvas
Items call ::queue_resize(), which sets a flag in the canvas; at next idle, we call
Canvas::layout() which walks the item tree and recursively calls layout (depth first)
on all items needing a resize.

Only Container types implement layout, and so far only Box
2021-08-13 12:51:26 -06:00
03e32a22d0 make Item::add() virtual 2021-08-13 12:51:26 -06:00
9869b0266b add support for rounded corners to Canvas::Rectangle 2021-08-13 12:51:26 -06:00
4f671a0950 make ArdourCanvas::Rectangle render its children
it is common to want to pack things inside a rectangle, so make it work
2021-08-13 12:51:26 -06:00
8fb67e15ea steps in the evolution of beatbox 2021-08-13 12:51:26 -06:00
91de7ba60b do not double-translate Canvas::Rectangle by _position; item_to_window() already includes it by calling item_to_canvas() 2021-08-13 12:51:26 -06:00
aca1db2d06 add step_button to wscript 2021-08-13 12:51:26 -06:00
e35e5ff3e5 step button for Canvas (used by BeatBox GUI) 2021-08-13 12:51:26 -06:00
ff6fe51d76 Canvas: improve implementation/design of ConstraintPacker::preferred_size() 2021-08-13 12:51:26 -06:00
502a9e80dc Canvas: add a nice new syntax for constraint packing 2021-08-13 12:51:26 -06:00
d6745f043c Canvas: clean up Constraint expressions to avoid compiler warnings 2021-08-13 12:51:26 -06:00
aa62460081 Canvas: re-use Solver as much as possible, with possible (but not substantive) speedup; remove debug output 2021-08-13 12:51:26 -06:00
815eb82882 Canvas: partially improve/fix cBox rendering 2021-08-13 12:51:26 -06:00
2598bdef2c Canvas: mark constraint-layout containers as layout-sensitive (like their children) 2021-08-13 12:51:26 -06:00
f5d67e6520 Canvas: temporary easy way to get debug output from Canvas::render() in a test program 2021-08-13 12:51:26 -06:00
427998e2d2 Canvas: cleanup first constraint test 2021-08-13 12:51:26 -06:00
be481ec266 Canvas: fix fill/outline area for a cBox 2021-08-13 12:51:26 -06:00
0823a6328b Canvas: third constraint test 2021-08-13 12:51:26 -06:00
a349d7e49b remove debug output 2021-08-13 12:51:26 -06:00
94b44ceb52 Canvas: add second constraint tester 2021-08-13 12:51:26 -06:00
0d5725a63b Canvas; fix rectangle rendering geometry 2021-08-13 12:51:26 -06:00
04d00da461 Canvas: fix text rendering geometry 2021-08-13 12:51:26 -06:00
7153544b52 Canvas: many changes to cBox implementation 2021-08-13 12:51:26 -06:00
d37202585f Canvas: root group should not fill or outline itself 2021-08-13 12:51:26 -06:00
2e993c6f86 Canvas: tweak test script runner 2021-08-13 12:51:26 -06:00
61742ededf Canvas: change behavior of Item::preferred_size() for items without an intrinsic size 2021-08-13 12:51:26 -06:00
ea96798ee9 Canvas: tweak debug output for canvas rendering 2021-08-13 12:51:26 -06:00
0434f00a47 remove debug output 2021-08-13 12:51:26 -06:00
711c1520b5 Revert "towards a very different constraint layout tester"
This reverts commit 7f65ffe57685304f59bb336c9701c3a9d5cdc1a7.
2021-08-13 12:51:26 -06:00
11931f5ffb towards a very different constraint layout tester 2021-08-13 12:51:26 -06:00
f0a0104087 Canvas: add shell scrip to run cnnstraint_test 2021-08-13 12:51:26 -06:00
504d8fdab3 Canvas: size request using preferred_size() callstack 2021-08-13 12:51:26 -06:00
5650d4f5bb Canvas: container supports option to do fill & outline 2021-08-13 12:51:26 -06:00
55deb1261a Canvas: use whomami() not earlier debug_name() API 2021-08-13 12:51:26 -06:00
811a893583 Canvas: some tidying in layout test app 2021-08-13 12:51:26 -06:00
240cb7b98f Canvas: make Rectangle work with layouts 2021-08-13 12:51:26 -06:00
e0c58a2736 Canvas: add aliases to Canvas::Rect for comprehension 2021-08-13 12:51:26 -06:00
2423994029 Canvas: add aliases to Canvas::Rect for comprehension 2021-08-13 12:51:26 -06:00
f47deb717c Canvas: add layout-related methods and members to Item 2021-08-13 12:51:25 -06:00
6d89d3afef Canvas: add Item::whoami() for debugging output 2021-08-13 12:51:25 -06:00
f17160ee0e Canvas: modify Arc to work with layout 2021-08-13 12:51:25 -06:00
ad39faeb3e Canvas: alter RootGroup to work with layout 2021-08-13 12:51:25 -06:00
baea368223 Canvas: initiate size allocation process from GTK-level size allocate event 2021-08-13 12:51:25 -06:00
84afcb62c4 Canvas: child_changed() API fix for Box 2021-08-13 12:51:25 -06:00
fc9840f2a9 Canvas: change API of Item::child_changed() to include bool indicate bounding_box change 2021-08-13 12:51:25 -06:00
d6fa458f3b Canvas: Text item should take position into account when rendering 2021-08-13 12:51:25 -06:00
1baa8d68c7 Canvas: reindent Kiwi code, and provide operator<<(ostream&) for several objects 2021-08-13 12:51:25 -06:00
ba3515e619 NOOP: remove whitespace 2021-08-13 12:51:25 -06:00
b1a6982064 Canvas::Arc obey fill/outline conditionals 2021-08-13 12:51:25 -06:00
a3039d3895 add/update constraint packing containers, test code 2021-08-13 12:51:25 -06:00
606866ea00 add small dev/test utility for working on constraint packer 2021-08-13 12:51:25 -06:00
1c3e743d2a Canvas: continued work on constraint packer 2021-08-13 12:51:25 -06:00
01137cbbf3 Canvas: change container-related methods in Item to be virtual 2021-08-13 12:51:25 -06:00
b90332b439 Canvas: change LineSet::add() to ::add_line()
Preparation for virtualization of Item::add()
2021-08-13 12:51:25 -06:00
539e1a1f1b stub constraint-based packer for canvas 2021-08-13 12:51:25 -06:00
5957e14259
Remove unused #include<> (2/2)
PBD::stacktrace() is not used nor needed by default.
It should be used sparingly.
2021-05-05 17:57:16 +02:00
d04713c0ab
Add missing class to canvas forward declarations 2021-02-14 00:54:17 +01:00
20029ec7e6 canvas/ruler: provide option for a second font to be used for "major" marks 2021-01-03 16:50:18 -07:00
8a14a7a00b
Fix tracking-text offset
If position along a given axis is not tracked, then the
offset was applied repeatedly to the current position.
This caused the coordinate to run away.
2020-12-30 03:26:00 +01:00
d741f01ad0
NO-OP: whitespace 2020-12-30 03:25:57 +01:00
ce8846d13f
Fix polygon redrawing -- #8148
Polygons used PolyLine::render() to render the path.
However since 7bb8ca1e76, the PolyLine path is constrained
(for automation lanes), and closed shaped polygons were not
always completely redrawn.
2020-07-09 02:10:28 +02:00
247bd4d3d9
NO-OP: whitespace 2020-04-10 18:32:18 +02:00
ede0fd3ddf
Remove hardcoded 2^15 cairo-boundary, prefer window-area 2020-04-10 18:28:26 +02:00
2177462b73
NO-OP: consistent function and variable naming 2020-04-10 18:06:42 +02:00
bc4de874dc
NO-OP: whitespace 2020-04-10 18:06:42 +02:00
9bbedcb781
Remove unused function
Cairo::curve_to renders cubic Bézier splines, those are not
generally useful in a DAW context.

Canvas::Curve implements centripetal catmull-rom spline drawing
which can be used for fades and automation interpolation.
2020-04-10 18:06:42 +02:00
7bb8ca1e76
Interpolate poly-line with view-point #6481 2020-04-10 18:06:41 +02:00
6cc1e5e75d
NO-OP: whitespace 2020-04-10 18:06:39 +02:00
f744b5fc12 change velocity bar inside notes to extend to edges of note
Having the velocity bar inset from note causes distracting space at beginning of note
when viewing a MIDI note that is zoomed out
2020-03-26 10:12:54 -06:00
4151ec1907 remove accumulated debug output 2020-03-25 15:12:30 -06:00
dbcf7dd666 more playhead-drag/click locate debugging 2020-03-25 13:50:23 -06:00
André Nusser
0a1ed004f2
Remove unused forward declaration. 2020-02-24 23:01:15 +01:00
06b2eb1c27
Explicitly use OSX
Previously this was inherited via PBD.

On MacOS/X,  this adds
  "-undefined dynamic_lookup -flat_namespace"
and various "-framework .." options to linkflags

Without this flag, .dylibs fail to link usually because
of missing `-lintl` (Undefined symbols: "_libintl_dgettext")

On other systems this is a NO-OP:
CFLAGS_OSX, CXXFLAGS_OSX and LINKFLAGS_OSX
are only set on the darwin platform.
2020-01-25 04:07:41 +01:00
bca825e515
NO-OP: whitespace 2020-01-14 00:52:24 +01:00
John Emmas
45dd6a8ed3 Add a missing semicolon 2020-01-05 10:29:35 +00:00
0b266a54f0
Return of image-surface backed canvas (windows graphics performance)
This partially reverts 2edbda2526.

Using cairo-groups increases performance on MacOS, and retains
retina-resolution.
However it adds a performance regression for MS Windows graphics
rendering. cairo-groups use a "similar" surface, not an image surface.
Empirically this adds significant overhead compared to rendering
using the CPU and using bitblt.
2020-01-04 00:30:07 +01:00
2edbda2526
Replace explicit image-surface with cairo pattern/group
For MacOS/X this is equivalent, rendering happens using a
CGBitmapContext + image-surface. Windows and Linux needs profiling
for respective equivalent surfaces.
2019-12-27 19:35:02 +01:00
c3ab63a2ea
Allow for per-widget image-surface backing
This is an intermediate commit, before replacing image surfaces with
cairo pattern groups.

The eventual goal is to reduce flickering and/or use
CPU + bitblt for specific widgets instead of cairo
graphics-cards accel.

This also removes excessive calls to getenv() for every rendering
operation.
2019-12-27 19:34:56 +01:00
ecc2597870
Fix remaining doxygen warnings (!) 2019-09-30 21:03:29 +02:00
bfec73b8c3
NO-OP: whitespace, indent 2019-09-30 21:03:20 +02:00
5ec5bc4523 goodbye USE_TRACKS_CODE_FEATURES and is_tracks_build 2019-09-25 12:16:13 -06:00
cec5ce8f45
Update canvas/UI lib GPL boilerplate and (C) from git log 2019-08-03 15:53:17 +02:00
46f0b75e12
Undo more incorrect sample/frame replacements 2019-04-08 04:10:04 +02:00
c83ba53399
Remove ancient, unmaintained xcode project files 2019-02-28 18:12:44 +01:00
Andreas Müller
d2aa57af3b Prevent excessive meter redraws for inactive meters at zero II
Same as be826f3635

Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
2018-10-17 22:35:29 +02:00
8ed33f1bc7 remove use of hardcoded -fPIC compiler flag, and use compiler flag dict instead 2018-10-14 22:06:11 -04:00
cf652331ad Adapt our remaining MSVC projects for 'boost::atomic' (in case it later gets extended to the other libs)
Stage 3 of 3
2018-09-30 09:19:28 +01:00
79f01bc889 Initial changes needed for building Mixbus (with MSVC) as version 5
(Mixbus itself will probably need extra changes)
2018-09-10 07:14:59 +01:00
8664768efa make velocity bars thinner (from alex mitchell) 2018-07-08 07:12:12 -04:00
ab6525a24f Accommodate newly introduced source(s) in our MSVC project (cairocanvas) 2018-07-05 08:22:44 +01:00
bf2f4bd28a method for setting whether or not to show velocity bars 2018-07-03 15:39:08 -04:00
c190581552 fix rectangle computation, and re-use alex' color computation 2018-07-03 12:39:56 -04:00
21582828b7 add a guess at appropriate color management for note velocity display
I think that HSV::opposite() is probably too strong here. HSV::darker() might be better. Experimentation needed.
2018-07-03 11:43:42 -04:00
644a05f60b use new Canvas::Note object for (sustained) note display 2018-07-03 11:21:53 -04:00
ed24e01658 initial implementation of a more specialized canvas item for (sustained) notes 2018-07-03 11:21:25 -04:00
5102d8fae1 minor code optimization for Rectangle::render() 2018-07-03 09:22:32 -04:00
b9c9777b9a When building with MSVC, allow for the fact that Mixbus and Ardour can be using different versions of the SESSION_FILE format 2018-02-15 09:03:32 +00:00
6f019faaa0 Accommodate the change from libtimecode to libtemporal 2018-02-14 10:02:11 +00:00
30b087ab3d globally change all use of "frame" to refer to audio into "sample".
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode
and video in order to keep the legible
2017-09-18 12:39:17 -04:00
36046cccc1 add basic data members and methods for adding an explicit size allocation for Canvas::Item 2017-09-18 11:40:52 -04:00
951404475c MSVC changes needed to implement the new 'waveview' library 2017-07-19 08:20:18 +01:00
9a0a2a29b5 Fix NSGLView invalidation 2017-07-18 21:34:03 +02:00
beb73edf55 Purify libcanvas, remove libardour dependency
A canvas is just a canvas. Move WaveView into its own library.
2017-07-17 21:06:04 +02:00
601c317d70 Clean up library inheritance (colors.h, utils.h)
make libwidget independent of libcanvas.
Confine basics to pbd and gtkmm2ext.
2017-07-17 21:06:04 +02:00
33d30fdf57 Accommodate newly introduced source(s) in our MSVC project (cairocanvas) 2017-06-29 10:10:26 +01:00
d3510b5606 fix OSX builds (llmath compat) 2017-06-28 03:03:05 +02:00
a1cd4f8dfe Fix friend declaration in WaveView code for non-c++11 builds 2017-06-26 17:04:18 +10:00
6e91ee071c Reimplementation of large parts of the WaveView class
The drawing itself should be unchanged but much of the rest of the
implementation has changed. The WaveViewThreads and WaveViewDrawingThread
classes were added and allow multiple drawing threads.

The Item::prepare_for_render interface is implemented by WaveView to enable
queuing draw requests for the drawing threads to process as soon as the state
change occurs during Editor::visual_changer, which often means the images will
be finished by the time they are needed in WaveView::render. This can
significantly reduce total render time and also flickering caused by images not
being ready for display.

If the drawing thread/s cannot finish the request by the time it is required in
WaveView::render then cancel it and draw the WaveViewImage in the GUI thread if
it is likely it can be completed in the current render pass/frame.  This change
also helps reduce the flickering caused by images not being ready with threaded
rendering, but with several drawing threads, drawing in the GUI thread may not
often occur (unless explicitly requested).

Allow unfinished images to be returned from the cache in
WaveView::prepare_for_render so that new draw requests aren't queued for
duplicate images. This reduces the amount of drawing for instance in
compositions where there are many instances of the same sample/waveform
displayed on the canvas as only a single image should be drawn.

Use a random width within a certain range for
WaveView::optimal_image_width_samples so that image drawing is less likely to
occur at the same time (which will cause a spike in render/draw time and
increase the chance of flickering waveforms).

Move implementations of the private WaveView classes into wave_view_private.h
and wave_view_private.cc source files.

Incorporate a fix for limiting the waveview image size to the cairo image size
limit.

Should hopefully Resolve: #6478
2017-06-26 08:40:47 +10:00
4ddf97f5a2 Add Canvas::get_microseconds_since_render_start() method
Initial use is for the WaveView class to determine whether on not to draw the
waveform in the GUI thread.
2017-06-26 08:40:47 +10:00
ab13e87ec2 Add Canvas::get_last_render_start_timestamp method 2017-06-26 08:40:47 +10:00
8538ba35fe Only call Gtk::Widget::queue_draw_area in canvas when item and visible area intersect
Refactor GtkCanvas::request_redraw to use Rect::intersection
2017-06-26 08:40:47 +10:00
c4e31fc322 Add an optional ArdourCanvas::Item::prepare_for_render interface
Called when an item has requested a redraw and intersects with visible
canvas area.

Also add Canvas::prepare_for_render that will call Item::prepare_for_render for
items visible on the canvas.
2017-06-26 08:40:47 +10:00
dac25b8db9 Add PreRender signal to the canvas
Emitted by the canvas immediately before rendering.
2017-06-26 08:40:47 +10:00
9618b6dcbb Whitespace fixes in canvas.h 2017-06-26 08:40:47 +10:00
90f169881f Remove unused ArdourCanvas::HSV constructor
Using stringstream for this is not locale independant. If this constructor is
needed at a later stage it should be reimplemented.
2017-06-22 10:48:38 +10:00
1170bd9043 Remove LocaleGuards from SVAModifier and HSV classes
float <=> string conversion now done using PBD::to_string/string_to so
LocaleGuards are no longer needed.
2017-06-22 10:48:38 +10:00
0e4ddcf506 Fix out-of-bounds waveform image rendering.
With large sample-rates and high-zoom-level the minimal request-size
or at least 1/10sed can exceed the max image size supported by cairo.
e.g. @192kSPS;  100ms = 19200 samples.
 * 1 sample/pixel, * 2 (left/right) = 38400px > 2^15px.
2017-05-14 20:37:58 +02:00
926a064744 Use PBD::to_string from pbd/string_convert.h in WaveView debug code 2017-04-19 09:37:01 +10:00
7085d7305d Use locale independent string conversion functions in SVAModifier class 2017-04-19 09:36:55 +10:00