Timeline: establish wiring with the timeline DisplayManager
This commit is contained in:
parent
9292da84f2
commit
bd13df2308
6 changed files with 141 additions and 20 deletions
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include "stage/gtk-base.hpp"
|
||||
#include "stage/timeline/body-canvas-widget.hpp"
|
||||
#include "stage/timeline/display-manager.hpp"
|
||||
#include "stage/timeline/track-profile.hpp"
|
||||
#include "stage/timeline/track-body.hpp"
|
||||
|
||||
|
|
@ -42,16 +43,19 @@
|
|||
|
||||
//#include <algorithm>
|
||||
//#include <vector>
|
||||
#include <utility>
|
||||
|
||||
|
||||
|
||||
//using util::_Fmt;
|
||||
//using util::contains;
|
||||
//using Gtk::Widget;
|
||||
using Gdk::Rectangle;
|
||||
//using sigc::mem_fun;
|
||||
//using sigc::ptr_fun;
|
||||
//using std::cout;
|
||||
//using std::endl;
|
||||
using std::move;
|
||||
|
||||
|
||||
namespace stage {
|
||||
|
|
@ -64,7 +68,8 @@ namespace timeline {
|
|||
class TrackGroundingRenderer
|
||||
: public ProfileInterpreter
|
||||
{
|
||||
CairoC cox;
|
||||
CairoC cox_;
|
||||
PixSpan display_;
|
||||
|
||||
|
||||
/** paint the top of the track body area
|
||||
|
|
@ -125,18 +130,23 @@ namespace timeline {
|
|||
|
||||
|
||||
public:
|
||||
TrackGroundingRenderer (CairoC currentDrawContext)
|
||||
: cox{currentDrawContext}
|
||||
TrackGroundingRenderer (CairoC currentDrawContext, PixSpan toShow)
|
||||
: cox_{currentDrawContext}
|
||||
, display_{move (toShow)}
|
||||
{ }
|
||||
|
||||
virtual ~TrackGroundingRenderer() { }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
TimelineCanvas::TimelineCanvas()
|
||||
TimelineCanvas::TimelineCanvas (DisplayManager& displayManager)
|
||||
: Gtk::Layout{}
|
||||
, layout_{displayManager}
|
||||
, rootBody_{nullptr}
|
||||
, profile_{}
|
||||
{ }
|
||||
|
||||
|
||||
|
|
@ -144,9 +154,9 @@ namespace timeline {
|
|||
BodyCanvasWidget::~BodyCanvasWidget() { }
|
||||
|
||||
|
||||
BodyCanvasWidget::BodyCanvasWidget ()
|
||||
BodyCanvasWidget::BodyCanvasWidget (DisplayManager& displayManager)
|
||||
: Gtk::ScrolledWindow{}
|
||||
, canvas_{}
|
||||
, canvas_{displayManager}
|
||||
{
|
||||
this->set_shadow_type(Gtk::SHADOW_IN);
|
||||
this->set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC); // always need a horizontal scrollbar
|
||||
|
|
@ -251,7 +261,7 @@ namespace timeline {
|
|||
if (not profile_)
|
||||
rootBody_->establishTrackSpace (profile_);
|
||||
|
||||
TrackGroundingRenderer renderer{cox};
|
||||
TrackGroundingRenderer renderer{cox, layout_.getPixSpan()};
|
||||
profile_.performWith (renderer);
|
||||
}
|
||||
/////////////////////////////////////////////TICKET #1039 : placeholder drawing
|
||||
|
|
|
|||
|
|
@ -70,17 +70,20 @@
|
|||
namespace stage {
|
||||
namespace timeline {
|
||||
|
||||
class DisplayManager;
|
||||
class TrackBody;
|
||||
|
||||
|
||||
class TimelineCanvas
|
||||
: public Gtk::Layout
|
||||
{
|
||||
DisplayManager& layout_;
|
||||
|
||||
public:
|
||||
TrackBody* rootBody_;
|
||||
TrackProfile profile_;
|
||||
|
||||
TimelineCanvas();
|
||||
TimelineCanvas (DisplayManager&);
|
||||
|
||||
private:
|
||||
virtual bool on_draw (Cairo::RefPtr<Cairo::Context> const&) override;
|
||||
|
|
@ -102,7 +105,7 @@ namespace timeline {
|
|||
TimelineCanvas canvas_;
|
||||
|
||||
public:
|
||||
BodyCanvasWidget();
|
||||
BodyCanvasWidget (DisplayManager&);
|
||||
~BodyCanvasWidget();
|
||||
|
||||
/** @internal Initially install the contents corresponding to the root track fork */
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
#include "lib/error.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
|
||||
//#include "lib/util.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
//#include <memory>
|
||||
//#include <vector>
|
||||
|
|
@ -68,9 +68,29 @@
|
|||
namespace stage {
|
||||
namespace timeline {
|
||||
|
||||
using util::max;
|
||||
|
||||
// class TrackHeadWidget;
|
||||
|
||||
|
||||
/** @todo quick-n-dirty hack. Should consider the Range TR (C++20) */
|
||||
struct PixSpan
|
||||
{
|
||||
int b = 0;
|
||||
int e = 0;
|
||||
|
||||
PixSpan() { }
|
||||
PixSpan(int begin, int end)
|
||||
: b{begin}, e{max (begin,end)}
|
||||
{ }
|
||||
|
||||
bool
|
||||
empty() const
|
||||
{
|
||||
return e <= b;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Interface used by the widgets to translate themselves into screen layout.
|
||||
* @todo WIP-WIP as of 11/2018
|
||||
|
|
@ -84,6 +104,8 @@ namespace timeline {
|
|||
public:
|
||||
virtual ~DisplayManager(); ///< this is an interface
|
||||
|
||||
/** the overall horizontal pixel span to cover by this timeline */
|
||||
virtual PixSpan getPixSpan() =0;
|
||||
|
||||
private:/* ===== Internals ===== */
|
||||
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ namespace timeline {
|
|||
|
||||
TimelineLayout::TimelineLayout (Gtk::Paned& topLevelContainer)
|
||||
: paneSplitPosition_{topLevelContainer.property_position()}
|
||||
, bodyCanvas_{}
|
||||
, headerPane_{bodyCanvas_.get_vadjustment()} // wire the header pane (Gtk::Viewport) to follow the body vertical scroll movement
|
||||
, bodyCanvas_{*this} // inject (as interface DisplayManager)
|
||||
, headerPane_{bodyCanvas_.get_vadjustment()} // wire the header pane (Gtk::Viewport) to follow the body vertical scroll movement
|
||||
{
|
||||
topLevelContainer.add1 (headerPane_);
|
||||
topLevelContainer.add2 (bodyCanvas_);
|
||||
|
|
@ -86,7 +86,17 @@ namespace timeline {
|
|||
bodyCanvas_.installForkRoot (body);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ==== Interface: LayoutManager===== */
|
||||
|
||||
PixSpan
|
||||
TimelineLayout::getPixSpan()
|
||||
{
|
||||
////////////////////////////////////////////////////////TICKET 1019 : need a "ZoomWindow" here to manage the visible area
|
||||
////////////////////////////////////////////////////////TICKET 1039 : "somehow" wire with the TimelineController to find out the covered span
|
||||
return PixSpan {0, 2048}; ////////////////Lalala Lalü
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -115,6 +115,7 @@ namespace timeline {
|
|||
BodyCanvasWidget bodyCanvas_;
|
||||
HeaderPaneWidget headerPane_;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////TICKET 1019 : need a "ZoomWindow" here to manage the visible area
|
||||
|
||||
public:
|
||||
TimelineLayout (Gtk::Paned&);
|
||||
|
|
@ -125,6 +126,8 @@ namespace timeline {
|
|||
|
||||
protected:/* ==== Interface: LayoutManager===== */
|
||||
|
||||
PixSpan getPixSpan() override;
|
||||
|
||||
private:/* ===== Internals ===== */
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -19111,6 +19111,30 @@
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1480639473324" ID="ID_191170582" MODIFIED="1518487921082" TEXT="eval pass"/>
|
||||
<node CREATED="1555022703032" ID="ID_13722484" MODIFIED="1555022709661" TEXT="Verdrahtung">
|
||||
<node CREATED="1555022710839" ID="ID_1166296639" MODIFIED="1555022758423" TEXT="muß in alle Nutzer injiziert werden"/>
|
||||
<node CREATED="1555022761189" ID="ID_640769952" MODIFIED="1555022811382" TEXT="wie? geht wohl nur direkte Referenz">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
es ist hier kein by-Name-Zugriff,
|
||||
</p>
|
||||
<p>
|
||||
weil ein Layout-Manager immer nur im Bereich eines TimelineWidget relevant ist
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1555023446038" ID="ID_858959830" MODIFIED="1555023448646" TEXT="clients">
|
||||
<node CREATED="1555023449597" ID="ID_1228634821" MODIFIED="1555023475298" TEXT="TimelineCanvas">
|
||||
<node CREATED="1555023483241" ID="ID_753460169" MODIFIED="1555023494947" TEXT="zum Feststellen des zu zeichnenden Bereiches"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1480694550601" ID="ID_1306244096" MODIFIED="1538940563330" TEXT="Track-Presenter">
|
||||
<linktarget COLOR="#fec680" DESTINATION="ID_1306244096" ENDARROW="Default" ENDINCLINATION="-1077;-98;" ID="Arrow_ID_951723874" SOURCE="ID_1570849604" STARTARROW="None" STARTINCLINATION="407;0;"/>
|
||||
|
|
@ -19461,8 +19485,8 @@
|
|||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1554996492819" ID="ID_1391546845" MODIFIED="1554996595043" TEXT="Konfig laut systematischem Modell">
|
||||
<arrowlink COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-136;-11;" ID="Arrow_ID_1858329997" STARTARROW="None" STARTINCLINATION="-747;0;"/>
|
||||
<node CREATED="1554996492819" ID="ID_1391546845" MODIFIED="1555020047700" TEXT="Konfig laut systematischem Modell">
|
||||
<arrowlink COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-612;-125;" ID="Arrow_ID_1858329997" STARTARROW="None" STARTINCLINATION="-747;0;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -19531,6 +19555,20 @@
|
|||
<icon BUILTIN="broken-line"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554995834875" ID="ID_1119649795" MODIFIED="1554995856751" TEXT="Zusammenspiel mit Expand/Collapse">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1555020163776" ID="ID_1470546162" MODIFIED="1555020172977" TEXT="collapsed == Scope durch Ruler ersetzt"/>
|
||||
<node CREATED="1555020175102" ID="ID_1798602" MODIFIED="1555020201810">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<i>das </i>ist ein reiner (pesistent) presentation state
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1554995841966" ID="ID_1443277448" MODIFIED="1554995854985" TEXT="genaue Rolle der Session??">
|
||||
<icon BUILTIN="help"/>
|
||||
|
|
@ -19621,7 +19659,7 @@
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862804070" ID="ID_430268635" MODIFIED="1541865190835" TEXT="Display-Manager == Abstraktion">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862816104" FOLDED="true" ID="ID_1545586243" MODIFIED="1554475739966" TEXT="lokal injiziert beim Aufbau">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862816104" FOLDED="true" ID="ID_1545586243" MODIFIED="1555021961047" TEXT="lokal injiziert beim Aufbau">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1554475687257" ID="ID_908192712" MODIFIED="1554475728633" TEXT="das heißt: separates Thema">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -19633,9 +19671,19 @@
|
|||
</node>
|
||||
<node CREATED="1541862265474" ID="ID_1967442368" MODIFIED="1541862271660" TEXT="Grundfunktion: translate window"/>
|
||||
<node CREATED="1541862852155" ID="ID_1628726016" MODIFIED="1541862855014" TEXT="Anfragen">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862862450" ID="ID_1333221051" MODIFIED="1541862900766" TEXT="was ist meine Postion und Extension?">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1541862862450" ID="ID_1333221051" MODIFIED="1555021921487" TEXT="was ist meine Position und Extension?">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1555024009413" ID="ID_1600874732" MODIFIED="1555024044058" TEXT="welches Pixel-Window muß dargestellt werden">
|
||||
<linktarget COLOR="#3d4476" DESTINATION="ID_1600874732" ENDARROW="Default" ENDINCLINATION="561;0;" ID="Arrow_ID_1463649935" SOURCE="ID_1781062229" STARTARROW="None" STARTINCLINATION="550;27;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1555027076942" HGAP="38" ID="ID_479062556" MODIFIED="1555027099088" TEXT="wie bekomme ich das heraus?" VSHIFT="39">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1555027102243" HGAP="40" ID="ID_855793949" MODIFIED="1555027111855" TEXT="Idee" VSHIFT="5">
|
||||
<node CREATED="1555027114837" ID="ID_727253754" MODIFIED="1555027124236" TEXT="den TimelineController fragen..?"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1541861495569" ID="ID_1828075998" MODIFIED="1541861767263" TEXT="Thema: ZoomWindow">
|
||||
|
|
@ -19658,6 +19706,28 @@
|
|||
<node COLOR="#435e98" CREATED="1542383689152" ID="ID_1534655843" MODIFIED="1554476058485" TEXT="wird der on_draw() mitgegeben">
|
||||
<arrowlink COLOR="#5e86ca" DESTINATION="ID_577859258" ENDARROW="Default" ENDINCLINATION="-1325;0;" ID="Arrow_ID_1966515866" STARTARROW="None" STARTINCLINATION="-1797;81;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1555021726291" ID="ID_529262560" MODIFIED="1555021754334" TEXT="Entnehmen und Aufbereiten">
|
||||
<node CREATED="1555021755898" ID="ID_968519712" MODIFIED="1555021763596" TEXT="Cairo liefert double-Koordinaten"/>
|
||||
<node CREATED="1555021772375" ID="ID_860582416" MODIFIED="1555021779306" TEXT="gdk_cairo_get_clip_rectangle() als Vorlage"/>
|
||||
</node>
|
||||
<node CREATED="1555021797428" ID="ID_1566025774" MODIFIED="1555021808494" TEXT="Problem: Fallback">
|
||||
<node CREATED="1555021809578" ID="ID_1964178964" MODIFIED="1555021844764" TEXT="was wenn die Clip-Region nicht gesetzt ist?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
wir können nicht von 0 bis MAXINT zeichnen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1555023959073" ID="ID_118083348" MODIFIED="1555023989547" TEXT="auf Pixel-Window zurückfallen">
|
||||
<arrowlink COLOR="#677e9a" DESTINATION="ID_1781062229" ENDARROW="Default" ENDINCLINATION="230;6;" ID="Arrow_ID_733563643" STARTARROW="None" STARTINCLINATION="296;77;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1542383722599" ID="ID_1927110373" MODIFIED="1542383731623" TEXT="Optimierungs-Potential">
|
||||
<node CREATED="1542383737043" ID="ID_1858424140" MODIFIED="1542383739795" TEXT="später">
|
||||
|
|
@ -19675,7 +19745,10 @@
|
|||
</node>
|
||||
<node CREATED="1542383915849" ID="ID_557373288" MODIFIED="1544125773986" TEXT="relevantTimeWindow">
|
||||
<linktarget COLOR="#6f83c4" DESTINATION="ID_557373288" ENDARROW="Default" ENDINCLINATION="84;-18;" ID="Arrow_ID_391816329" SOURCE="ID_892953664" STARTARROW="None" STARTINCLINATION="-125;2;"/>
|
||||
<node CREATED="1542384024260" ID="ID_1781062229" MODIFIED="1542384036230" TEXT="festgelegt im DisplayManager"/>
|
||||
<node CREATED="1542384024260" ID="ID_1781062229" MODIFIED="1555024050531" TEXT="festgelegt im DisplayManager">
|
||||
<arrowlink COLOR="#3d4476" DESTINATION="ID_1600874732" ENDARROW="Default" ENDINCLINATION="561;0;" ID="Arrow_ID_1463649935" STARTARROW="None" STARTINCLINATION="550;27;"/>
|
||||
<linktarget COLOR="#677e9a" DESTINATION="ID_1781062229" ENDARROW="Default" ENDINCLINATION="230;6;" ID="Arrow_ID_733563643" SOURCE="ID_118083348" STARTARROW="None" STARTINCLINATION="296;77;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -22037,8 +22110,8 @@
|
|||
<node CREATED="1538957049292" ID="ID_98299428" MODIFIED="1538957077700" TEXT="if typeID = "Marker""/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1544840312839" ID="ID_433238862" MODIFIED="1554996595043" TEXT="Ruler">
|
||||
<linktarget COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-136;-11;" ID="Arrow_ID_1858329997" SOURCE="ID_1391546845" STARTARROW="None" STARTINCLINATION="-747;0;"/>
|
||||
<node CREATED="1544840312839" ID="ID_433238862" MODIFIED="1555020047701" TEXT="Ruler">
|
||||
<linktarget COLOR="#3e63c5" DESTINATION="ID_433238862" ENDARROW="Default" ENDINCLINATION="-612;-125;" ID="Arrow_ID_1858329997" SOURCE="ID_1391546845" STARTARROW="None" STARTINCLINATION="-747;0;"/>
|
||||
<node CREATED="1544840455429" ID="ID_1283986005" MODIFIED="1544840465760" TEXT=""timecode" = formatID"/>
|
||||
<node CREATED="1544840496225" ID="ID_230755841" MODIFIED="1544840613171" TEXT=""contentFormat" = formatID (none|pivot|frames|wave|synopsis)"/>
|
||||
<node CREATED="1544840634822" ID="ID_1138129422" MODIFIED="1544840643904" TEXT="Sequence{Marker.kind}">
|
||||
|
|
|
|||
Loading…
Reference in a new issue