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:
Fischlurch 2021-02-08 01:09:16 +01:00
parent 8f572fc122
commit ab718ed6aa
6 changed files with 111 additions and 39 deletions

View file

@ -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

View file

@ -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);

View file

@ -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);
}

View file

@ -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;
};

View file

@ -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

View file

@ -21947,10 +21947,10 @@
</node>
<node CREATED="1583010359364" ID="ID_1532117771" MODIFIED="1583010378225" TEXT="&quot;danach&quot; auf jedem Canvas die Platz-Ermittlung ausl&#xf6;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&#xfc;hren">
<node COLOR="#338800" CREATED="1611787674741" ID="ID_1709866969" MODIFIED="1612742632732" TEXT="Canvas-Koordinaten nachf&#xfc;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&#xfc;ssen partizipieren">
<node COLOR="#338800" CREATED="1611915390832" ID="ID_1488484275" MODIFIED="1612742624778" TEXT="Clips m&#xfc;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&#xfc;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 (&#x2192;size-request)">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
...nachdem erstmals ein size-request gesetzt wurde, hat sich die tats&#228;chliche H&#246;he des Widget noch nicht ver&#228;ndert (das wird erst mit dem nachfolgenden resize-event vollzogen). Aber der size-request spiegelt sich sofort in der desired_height wieder. Wir m&#252;ssen also die Ermittlung der &quot;aktuellen&quot; H&#246;he <i>darauf</i>&#160;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&#xdf; r&#xfc;ckw&#xe4;rts aufsteigen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
damit die H&#246;hen f&#252;r die Kind-Tracks bereits gesetzt sind, wenn die Gesamth&#246;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&#xf6;he / Canvas-H&#xf6;he stimmt nicht">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1612742467558" ID="ID_929888474" MODIFIED="1612742484264" TEXT="und zwar fehlt genau die zus&#xe4;tzliche H&#xf6;he der schlie&#xdf;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&#xfc;rden uns pro Zeile nur wenige Pixel fehlen"/>
<node CREATED="1612742574675" ID="ID_20715943" MODIFIED="1612742616893" TEXT="d.h. der TrackBody ist minimal Gr&#xf6;&#xdf;er, als die H&#xf6;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&#xe4;ndig realisiert">
<icon BUILTIN="messagebox_warning"/>