DisplayEvaluation: get corrdinated vertical size roughly to work
Now basically the header labels are aligned with the start of the corresponding body area. However, there still seems to be some minor glitch hidden somewhere, and the labels seem to be off by one pixel per track. Also the allocated canvas size is to small after first evaluation, but somehow gets corrected whenever the window is resized.
This commit is contained in:
parent
8f572fc122
commit
ab718ed6aa
6 changed files with 111 additions and 39 deletions
|
|
@ -79,8 +79,12 @@ namespace timeline {
|
|||
* thus we create a disabled Adjustment for this parameter.
|
||||
*/
|
||||
PatchbayWidget::PatchbayWidget (PAdjustment const& vScroll)
|
||||
: Gtk::Viewport{Gtk::Adjustment::create (0,0,0,0,0,0), vScroll}
|
||||
{ }
|
||||
: Gtk::ScrolledWindow{Gtk::Adjustment::create (0,0,0,0,0,0), vScroll}
|
||||
{
|
||||
set_shadow_type (Gtk::SHADOW_NONE);
|
||||
set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_EXTERNAL); // horizontal extension is fixed, using the track body vertical scrollbar
|
||||
property_expand() = true; // dynamically grab additional space
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ namespace timeline {
|
|||
* @todo WIP-WIP as of 4/2019
|
||||
*/
|
||||
class PatchbayWidget
|
||||
: public Gtk::Viewport
|
||||
: public Gtk::ScrolledWindow
|
||||
{
|
||||
public:
|
||||
PatchbayWidget (PAdjustment const& vScroll);
|
||||
|
|
|
|||
|
|
@ -69,6 +69,10 @@ namespace timeline {
|
|||
, treeTODO_{"↳"}
|
||||
, childCnt_{0}
|
||||
{
|
||||
nameTODO_.set_xalign(0);
|
||||
nameTODO_.set_yalign(0);
|
||||
treeTODO_.set_xalign(0);
|
||||
treeTODO_.set_yalign(0.5);
|
||||
this->attach (nameTODO_, 0,0, 2,1);
|
||||
this->attach (treeTODO_, 0,1, 1,1);
|
||||
|
||||
|
|
@ -82,15 +86,24 @@ namespace timeline {
|
|||
nameTODO_.set_label (trackName);
|
||||
}
|
||||
|
||||
uint
|
||||
TrackHeadWidget::getHeightAt (int left, int top) const
|
||||
{
|
||||
auto* cell = this->get_child_at(left,top);
|
||||
if (cell == nullptr) return 0;
|
||||
int actual = cell->get_height();
|
||||
int minimal=0, natural=0;
|
||||
cell->get_preferred_height(minimal, natural);
|
||||
return max (0, max (actual, natural));
|
||||
}
|
||||
|
||||
uint
|
||||
TrackHeadWidget::calcContentHeight() const
|
||||
{
|
||||
if (childCnt_ == 0) return calcOverallHeight();
|
||||
|
||||
auto* chld1 = this->get_child_at(0,0);
|
||||
auto* chld2 = this->get_child_at(1,0);
|
||||
int h1 = chld1? chld1->get_height() :0;
|
||||
int h2 = chld2? chld2->get_height() :0;
|
||||
int h1 = getHeightAt (0,0);
|
||||
int h2 = getHeightAt (1,0);
|
||||
|
||||
return max (0, max (h1,h2));
|
||||
}
|
||||
|
|
@ -98,7 +111,15 @@ namespace timeline {
|
|||
uint
|
||||
TrackHeadWidget::calcOverallHeight() const
|
||||
{
|
||||
return this->get_height();
|
||||
uint heightSum = 0;
|
||||
for (uint line=0; line <= max(1u, childCnt_); ++line)
|
||||
{
|
||||
int h1 = getHeightAt (0,line);
|
||||
int h2 = getHeightAt (1,line);
|
||||
|
||||
heightSum += max (0, max (h1,h2));
|
||||
}
|
||||
return heightSum;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -114,10 +135,8 @@ namespace timeline {
|
|||
TrackHeadWidget::increaseContentHeight(uint delta)
|
||||
{
|
||||
auto* cell = this->get_child_at(1,0);
|
||||
if (not cell)
|
||||
cell = this->get_child_at(0,0);
|
||||
REQUIRE (cell);
|
||||
int h = cell->get_height();
|
||||
uint h = getHeightAt (1,0);
|
||||
cell->set_size_request (-1, h+delta);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -104,6 +104,9 @@ namespace timeline {
|
|||
|
||||
/** Discard all nested sub track display widgets. */
|
||||
void clearFork();
|
||||
|
||||
/** get the height allocated at cell(x,y) */
|
||||
uint getHeightAt (int left, int top) const;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ namespace timeline {
|
|||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1201 : test/code... remove this
|
||||
}
|
||||
|
||||
void relinkContents (DisplayEvaluation&);
|
||||
void relinkContents ();
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -319,26 +319,19 @@ namespace timeline {
|
|||
TrackPresenter::establishLayout (DisplayEvaluation& displayEvaluation)
|
||||
{
|
||||
if (displayEvaluation.isCollectPhase())
|
||||
display_.establishExtension (clips_, markers_);
|
||||
{
|
||||
display_.establishExtension (clips_, markers_);
|
||||
for (auto& subTrack: subFork_)
|
||||
subTrack->establishLayout (displayEvaluation);
|
||||
}
|
||||
else
|
||||
relinkContents (displayEvaluation);
|
||||
for (auto& subTrack: subFork_)
|
||||
subTrack->establishLayout (displayEvaluation);
|
||||
}
|
||||
|
||||
/** second pass of the DisplayEvaluation:
|
||||
* reassemble content to match adjusted layout
|
||||
* @todo 2/2021 WIP-WIP initial draft; many aspects still unclear
|
||||
*/
|
||||
inline void
|
||||
TrackPresenter::relinkContents (DisplayEvaluation& displayEvaluation)
|
||||
{
|
||||
for (auto& clip: clips_)
|
||||
clip->relink();
|
||||
for (auto& mark: markers_)
|
||||
mark->relink();
|
||||
// re-sync and match the header / body display
|
||||
display_.sync_and_balance (displayEvaluation);
|
||||
{ // recursion first, so all sub-Tracks are already balanced
|
||||
for (auto& subTrack: subFork_)
|
||||
subTrack->establishLayout (displayEvaluation);
|
||||
this->relinkContents();
|
||||
// re-sync and match the header / body display
|
||||
display_.sync_and_balance (displayEvaluation);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -363,6 +356,20 @@ namespace timeline {
|
|||
this->head_.accommodateContentHeight (maxVSize);
|
||||
}
|
||||
|
||||
/** second pass of the DisplayEvaluation:
|
||||
* reassemble content to match adjusted layout
|
||||
* @todo 2/2021 WIP-WIP initial draft; many aspects still unclear
|
||||
*/
|
||||
inline void
|
||||
TrackPresenter::relinkContents ()
|
||||
{
|
||||
for (auto& clip: clips_)
|
||||
clip->relink();
|
||||
for (auto& mark: markers_)
|
||||
mark->relink();
|
||||
}
|
||||
|
||||
|
||||
/** re-flow and adjust after the global layout has been established
|
||||
* At this point we can assume that both header and body are updated
|
||||
* and have valid extensions within their perimeter. But the coordination
|
||||
|
|
|
|||
|
|
@ -21947,10 +21947,10 @@
|
|||
</node>
|
||||
<node CREATED="1583010359364" ID="ID_1532117771" MODIFIED="1583010378225" TEXT=""danach" auf jedem Canvas die Platz-Ermittlung auslösen"/>
|
||||
<node CREATED="1583010386420" ID="ID_719664576" MODIFIED="1583010408429" TEXT="Gesamtresultat mit Ist-Zustand vergleichen"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1583010590180" ID="ID_253184113" MODIFIED="1583677738518" TEXT="Header-Ausgleich">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1583010590180" ID="ID_253184113" MODIFIED="1612742654585" TEXT="Header-Ausgleich">
|
||||
<arrowlink COLOR="#8b71ae" DESTINATION="ID_1925515175" ENDARROW="Default" ENDINCLINATION="259;-76;" ID="Arrow_ID_44202222" STARTARROW="None" STARTINCLINATION="-426;50;"/>
|
||||
<linktarget COLOR="#af5182" DESTINATION="ID_253184113" ENDARROW="Default" ENDINCLINATION="47;-31;" ID="Arrow_ID_116043165" SOURCE="ID_91413726" STARTARROW="None" STARTINCLINATION="-838;0;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1611534925644" ID="ID_1754764132" MODIFIED="1611534940798" TEXT="#1211 coordinate track extension">
|
||||
<linktarget COLOR="#4b98e2" DESTINATION="ID_1754764132" ENDARROW="Default" ENDINCLINATION="-2912;207;" ID="Arrow_ID_468901844" SOURCE="ID_1506262956" STARTARROW="None" STARTINCLINATION="698;66;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -22082,9 +22082,9 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1611787674741" ID="ID_1709866969" MODIFIED="1611788022804" TEXT="Canvas-Koordinaten nachführen">
|
||||
<node COLOR="#338800" CREATED="1611787674741" ID="ID_1709866969" MODIFIED="1612742632732" TEXT="Canvas-Koordinaten nachführen">
|
||||
<linktarget COLOR="#675b85" DESTINATION="ID_1709866969" ENDARROW="Default" ENDINCLINATION="684;566;" ID="Arrow_ID_541728210" SOURCE="ID_791476178" STARTARROW="None" STARTINCLINATION="-1876;104;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1611915466838" ID="ID_355225110" MODIFIED="1611915483757" TEXT="Problem: Storage der Koordinaten">
|
||||
<node CREATED="1611915485454" ID="ID_1653031142" MODIFIED="1611915494045" TEXT="welche Form?">
|
||||
<node CREATED="1611915495602" ID="ID_269674665" MODIFIED="1611915511620" TEXT="logische Koordinaten">
|
||||
|
|
@ -22143,10 +22143,10 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1611915390832" ID="ID_1488484275" MODIFIED="1612031224261" TEXT="Clips müssen partizipieren">
|
||||
<node COLOR="#338800" CREATED="1611915390832" ID="ID_1488484275" MODIFIED="1612742624778" TEXT="Clips müssen partizipieren">
|
||||
<linktarget COLOR="#e33b64" DESTINATION="ID_1488484275" ENDARROW="Default" ENDINCLINATION="-14;-84;" ID="Arrow_ID_1820616086" SOURCE="ID_1829463115" STARTARROW="None" STARTINCLINATION="-70;14;"/>
|
||||
<linktarget COLOR="#5c849c" DESTINATION="ID_1488484275" ENDARROW="Default" ENDINCLINATION="-838;79;" ID="Arrow_ID_1236233773" SOURCE="ID_1248959265" STARTARROW="None" STARTINCLINATION="612;56;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1611916037617" ID="ID_1961599171" MODIFIED="1611916053240" TEXT="weil die Layout-Koordinaten erneut aufgebaut werden müssen"/>
|
||||
<node CREATED="1611916054695" ID="ID_178492743" MODIFIED="1611916077488" TEXT="und nur die logischen Koordinaten gespeichert sein sollten, und zwar im Clip"/>
|
||||
<node CREATED="1611921176093" ID="ID_1185756571" MODIFIED="1611921186371" TEXT="Entscheidung: Art der Einbindung">
|
||||
|
|
@ -22485,8 +22485,47 @@
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1612030849154" ID="ID_242090895" MODIFIED="1612030858673" TEXT="verbleibende Probleme">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1612726745183" ID="ID_1213054592" MODIFIED="1612726758921" TEXT="Header-Ausglieich funktioniert (noch) nicht">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node COLOR="#338800" CREATED="1612726745183" ID="ID_1213054592" MODIFIED="1612742170046" TEXT="Header-Ausglieich funktioniert (noch) nicht">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1612742259238" ID="ID_607718286" MODIFIED="1612742418037" TEXT="wichtig: die desired_height verwenden (→size-request)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...nachdem erstmals ein size-request gesetzt wurde, hat sich die tatsächliche Höhe des Widget noch nicht verändert (das wird erst mit dem nachfolgenden resize-event vollzogen). Aber der size-request spiegelt sich sofort in der desired_height wieder. Wir müssen also die Ermittlung der "aktuellen" Höhe <i>darauf</i> aufbauen, damit die schon vorgenommenen Anpassungen nicht nochmal im Delta landen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1612742186077" ID="ID_1081995188" MODIFIED="1612742421843" TEXT="Weiterer Fehler war die Auswertungs-Reihenfolge">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
<node CREATED="1612742199694" ID="ID_354715180" MODIFIED="1612742247324" TEXT="der 2.Pass muß rückwärts aufsteigen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
damit die Höhen für die Kind-Tracks bereits gesetzt sind, wenn die Gesamthöhe des Parent-Track betrachtet wird
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1612742429043" ID="ID_1739285791" MODIFIED="1612742461497" TEXT="die scroll-Höhe / Canvas-Höhe stimmt nicht">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1612742467558" ID="ID_929888474" MODIFIED="1612742484264" TEXT="und zwar fehlt genau die zusätzliche Höhe der schließenden Slope"/>
|
||||
<node CREATED="1612742484972" ID="ID_1291566735" MODIFIED="1612742498974" TEXT="nachdem man aber das Fenster einmal resized hat, stimmt es wieder"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1612742527238" ID="ID_1543056669" MODIFIED="1612742537453" TEXT="die Header-Starts rutschen minimal nach oben">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1612742538724" ID="ID_1839437599" MODIFIED="1612742544871" TEXT="ein off-by-one?"/>
|
||||
<node CREATED="1612742545690" ID="ID_1735908408" MODIFIED="1612742563442" TEXT="sieht so aus, als würden uns pro Zeile nur wenige Pixel fehlen"/>
|
||||
<node CREATED="1612742574675" ID="ID_20715943" MODIFIED="1612742616893" TEXT="d.h. der TrackBody ist minimal Größer, als die Höhe, die wir als Delta anwenden"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1612030881439" ID="ID_306268306" MODIFIED="1612030903673" TEXT="nach dem DisplayEvaluationPass: Zustand nicht vollständig realisiert">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue