13
0

Fix a couple of crashes with empty matrices. Some small optimisations.

Correctly handle descenders on text when plotting labels.  Minor layout
improvements.  Add some drawings of what's going on in the port matrix
so that I don't keep losing them.


git-svn-id: svn://localhost/ardour2/branches/3.0@6319 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2009-12-07 00:41:50 +00:00
parent b9876aa1d0
commit 1a44701643
12 changed files with 1926 additions and 53 deletions

View File

@ -0,0 +1,341 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="cairo-text.svg">
<defs
id="defs4">
<marker
style="overflow:visible"
id="DistanceEnd"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3657">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
d="M 0,0 L -2,0"
id="path2316" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 L -13,4 L -9,0 -13,-4 L 0,0 z "
id="path2312" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 L 0,40"
id="path2314" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceStart"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
d="M 0,0 L 2,0"
id="path2306" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z "
id="path2302" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 L 0,40"
id="path2304" />
</g>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mend"
style="overflow:visible;">
<path
id="path3610"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
transform="scale(0.4) rotate(180) translate(10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Mstart"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mstart"
style="overflow:visible">
<path
id="path3607"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
transform="scale(0.4) translate(10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Lstart"
style="overflow:visible">
<path
id="path3601"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
transform="scale(0.8) translate(12.5,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lstart"
style="overflow:visible">
<path
id="path3619"
style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) translate(1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2Lend"
style="overflow:visible;">
<path
id="path3622"
style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(1.1) rotate(180) translate(1,0)" />
</marker>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective5912"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
inkscape:stockid="Arrow1Mstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mstart-8"
style="overflow:visible">
<path
id="path3607-1"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(0.4,0,0,0.4,4,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.5053356"
inkscape:cx="303.3357"
inkscape:cy="553.63926"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="950"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:object-paths="true" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:56px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="171"
y="383.36218"
id="text2816"><tspan
sodipodi:role="line"
id="tspan2818"
x="171"
y="383.36218">ABCjpq</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="147"
y="546.36218"
id="text2820"><tspan
sodipodi:role="line"
id="tspan2822"
x="147"
y="546.36218" /></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 76,321.36218 0,155"
id="path2824"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="61"
y="394.36218"
id="text4046"><tspan
sodipodi:role="line"
id="tspan4048"
x="61"
y="394.36218">y</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 161,383.77138 353.81569,0"
id="path4050"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 165,341.36218 351.1443,0"
id="path4073"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 171.92252,279.65032 0,147.02663"
id="path4075"
sodipodi:nodetypes="cc" />
<g
id="g5899"
transform="translate(-3.28813,-2.6572148)">
<path
id="path4077"
d="m 175.21065,387.68906 c 7.0385,12.06709 19.57033,19.13349 32.41162,23.4867"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart)" />
<text
id="text4661"
y="413.99414"
x="209.03148"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="413.99414"
x="209.03148"
id="tspan4663"
sodipodi:role="line">origin</tspan></text>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 158.76998,394.73507 354.48534,0"
id="path4665"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#DistanceEnd);marker-start:url(#DistanceStart)"
d="m 397.86441,341.36218 0,42.4092"
id="path4667"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="401.62228"
y="365.6116"
id="text5053"><tspan
sodipodi:role="line"
id="tspan5055"
x="401.62228"
y="365.6116">y_bearing</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd)"
d="m 479.62728,394.73507 0,-53.37289"
id="path5466"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="484.94171"
y="370.12225"
id="text5872"><tspan
sodipodi:role="line"
id="tspan5874"
x="484.94171"
y="370.12225">height</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="-290.94196"
y="603.53894"
id="text5876"
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"><tspan
sodipodi:role="line"
id="tspan5878"
x="-290.94196"
y="603.53894">ABCjpq</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 221.26042,632.27254 361.61216,491.9208"
id="path5880" />
<g
transform="translate(46.04977,244.58348)"
id="g5899-8">
<path
id="path4077-9"
d="m 175.21065,387.68906 c 7.0385,12.06709 19.57033,19.13349 32.41162,23.4867"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart)" />
<text
id="text4661-2"
y="413.99414"
x="209.03148"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="413.99414"
x="209.03148"
id="tspan4663-9"
sodipodi:role="line">origin</tspan></text>
</g>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="330.15894"
y="597.97845"
id="text5941"><tspan
sodipodi:role="line"
id="tspan5943"
x="330.15894"
y="597.97845">cairo_rotate (c, - M_PI / 4);</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,801 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="top_column_bundle_name.svg">
<defs
id="defs4">
<marker
style="overflow:visible"
id="DistanceEnd"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
d="M 0,0 L -2,0"
id="path2316" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 L -13,4 L -9,0 -13,-4 L 0,0 z "
id="path2312" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 L 0,40"
id="path2314" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceStart"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
d="M 0,0 L 2,0"
id="path2306" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z "
id="path2302" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 L 0,40"
id="path2304" />
</g>
</marker>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective4298"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective4322"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-0"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-0">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-1" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-3" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-3" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-0"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-0">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-0" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-2" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-2" />
</g>
</marker>
<inkscape:perspective
id="perspective4381"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-01">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-4" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-4" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-32" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-5"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-1">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-3" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-26" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-0" />
</g>
</marker>
<inkscape:perspective
id="perspective5494"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-9-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-01-2">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-4-3" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-4-5" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-32-4" />
</g>
</marker>
<inkscape:perspective
id="perspective5537"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-6"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-1">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-8" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-5" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-9" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-6"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-6">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-1" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-7" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-5" />
</g>
</marker>
<inkscape:perspective
id="perspective5597"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-2"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-09">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-7" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-7" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-5" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-4"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-4">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-6" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-5" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-6" />
</g>
</marker>
<inkscape:perspective
id="perspective5654"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5865"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-1"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-3">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-89" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-58" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-91" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-7">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-36" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-56" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-4" />
</g>
</marker>
<inkscape:perspective
id="perspective5926"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-9">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-5" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-9" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-7" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-2"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-14">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-7" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-1" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-3" />
</g>
</marker>
<inkscape:perspective
id="perspective3600"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-16"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-19">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-49" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-96" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-94" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-20"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-2">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-368" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-9" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-28" />
</g>
</marker>
<inkscape:perspective
id="perspective3655"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-08"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-5">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-43" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-94" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-6" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-23"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-8">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-62" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-70" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-7" />
</g>
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.0901219"
inkscape:cx="245.59522"
inkscape:cy="493.24267"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-global="true"
inkscape:snap-bbox="false"
inkscape:object-paths="true"
inkscape:window-width="1280"
inkscape:window-height="1000"
inkscape:window-x="1280"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-midpoints="false"
inkscape:snap-grids="false"
inkscape:snap-to-guides="true"
inkscape:snap-intersection-paths="true">
<sodipodi:guide
orientation="0,1"
position="-139,507"
id="guide2818" />
<sodipodi:guide
orientation="0,1"
position="-54,736"
id="guide2820" />
<sodipodi:guide
orientation="1,0"
position="107.84461,521.24893"
id="guide2855" />
<sodipodi:guide
orientation="1,0"
position="346.19377,502.36563"
id="guide2857" />
<sodipodi:guide
orientation="0,1"
position="287.77314,553.84911"
id="guide4369" />
<sodipodi:guide
orientation="1,0"
position="187.50484,410.61756"
id="guide5523" />
<sodipodi:guide
orientation="1,0"
position="299.44648,566.15686"
id="guide5581" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 407.04788,247.31233 29.29042,625.07176 266.23358,624.64489 524,367.36218 407,247.26318"
id="path2822"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="78.769989"
y="297.07095"
id="text2845"><tspan
sodipodi:role="line"
id="tspan2847"
x="78.769989"
y="297.07095">Bundle name (top)</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="125.84303"
y="541.49957"
id="text2849"><tspan
sodipodi:role="line"
id="tspan2851"
x="125.84303"
y="541.49957">ϑ</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 346.16456,545.1478 227.68908,426.67232"
id="path2853" />
<path
style="color:#000000;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 260.29818,437.3373 73.37226,73.37227"
id="path4312"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="305.09753"
y="472.22052"
id="text4365"><tspan
sodipodi:role="line"
id="tspan4367"
x="305.09753"
y="472.22052">h</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart);color:#000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 187.98488,624.78586 0,-125.82998"
id="path4424-8"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="176.02385"
y="570.7243"
id="text5525"><tspan
sodipodi:role="line"
id="tspan5527"
x="176.02385"
y="570.7243">y</tspan></text>
<g
id="g3320"
transform="translate(-81.151712,83.200997)">
<path
sodipodi:nodetypes="cc"
id="path2859"
d="m 107.84461,560.19866 238.34916,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd)" />
<text
id="text4284"
y="574.17139"
x="227.0192"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="574.17139"
x="227.0192"
id="tspan4286"
sodipodi:role="line">g</tspan></text>
<path
sodipodi:nodetypes="cc"
id="path2859-5"
d="M 107.84461,612.92703 380.59819,611.2876"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd)" />
<text
id="text5583"
y="625.0675"
x="207.78781"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="625.0675"
x="207.78781"
id="tspan5585"
sodipodi:role="line">x</tspan></text>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;color:#000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 272.01521,382.34589 390.51575,500.84643"
id="path5587"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="336.24664"
y="433.05533"
id="text5640"><tspan
sodipodi:role="line"
id="tspan5642"
x="336.24664"
y="433.05533">p</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 299.88553,498.86877 0,46.49341"
id="path5644"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:6.80813789px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="301.71027"
y="511.74252"
id="text2849-9"><tspan
sodipodi:role="line"
id="tspan2851-1"
x="301.71027"
y="511.74252">ϑ</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 304.9025,493.43771 -21.18965,21.18965"
id="path5908" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="312.51556"
y="508.66382"
id="text5912"><tspan
sodipodi:role="line"
id="tspan5914"
x="312.51556"
y="508.66382">d</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;color:#000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 369.3182,522.04398 325.0167,477.74249"
id="path5916" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="349.19827"
y="494.13678"
id="text5969"><tspan
sodipodi:role="line"
id="tspan5971"
x="349.19827"
y="494.13678">q</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="78.266083"
y="313.79965"
id="text2934"><tspan
sodipodi:role="line"
id="tspan2936"
x="78.266083"
y="313.79965">Port name (bottom)</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 109,545.36218 29.29042,625.07176"
id="path3336"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 266.23358,624.64489 147.97513,506.38644"
id="path3346"
sodipodi:nodetypes="cc" />
<path
style="color:#000000;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 121.77859,480.20163 80.28097,-79.92214"
id="path3348"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="149.53252"
y="437.99329"
id="text3643"><tspan
sodipodi:role="line"
id="tspan3645"
x="149.53252"
y="437.99329">f</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,670 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.47pre4 r22446"
sodipodi:docname="top_column_port_name.svg">
<defs
id="defs4">
<marker
style="overflow:visible"
id="DistanceEnd"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
d="M 0,0 L -2,0"
id="path2316" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 L -13,4 L -9,0 -13,-4 L 0,0 z "
id="path2312" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 L 0,40"
id="path2314" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceStart"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
d="M 0,0 L 2,0"
id="path2306" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z "
id="path2302" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 L 0,40"
id="path2304" />
</g>
</marker>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective4298"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective4322"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-0"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-0">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-1" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-3" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-3" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-0"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-0">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-0" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-2" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-2" />
</g>
</marker>
<inkscape:perspective
id="perspective4381"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-01">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-4" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-4" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-32" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-5"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-1">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-3" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-26" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-0" />
</g>
</marker>
<inkscape:perspective
id="perspective5494"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-9-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-01-2">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-4-3" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-4-5" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-32-4" />
</g>
</marker>
<inkscape:perspective
id="perspective5537"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-6"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-1">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-8" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-5" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-9" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-6"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-6">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-1" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-7" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-5" />
</g>
</marker>
<inkscape:perspective
id="perspective5597"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-2"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-09">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-7" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-7" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-5" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-4"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-4">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-6" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-5" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-6" />
</g>
</marker>
<inkscape:perspective
id="perspective5654"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5865"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-1"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-3">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-89" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-58" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-91" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-7">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-36" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-56" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-4" />
</g>
</marker>
<inkscape:perspective
id="perspective5926"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<marker
style="overflow:visible"
id="DistanceStart-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceStart">
<g
id="g2300-9">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 2,0"
id="path2306-5" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 13,4 9,0 13,-4 0,0 z"
id="path2302-9" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2304-7" />
</g>
</marker>
<marker
style="overflow:visible"
id="DistanceEnd-2"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="DistanceEnd">
<g
id="g3692-14">
<path
style="fill:none;stroke:#ffffff;stroke-width:1.14999998;stroke-linecap:square"
d="M 0,0 -2,0"
id="path2316-7" />
<path
style="fill:#000000;fill-rule:evenodd;stroke:none"
d="M 0,0 -13,4 -9,0 -13,-4 0,0 z"
id="path2312-1" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
d="M 0,-4 0,40"
id="path2314-3" />
</g>
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.4398746"
inkscape:cx="254.50013"
inkscape:cy="579.45775"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-global="true"
inkscape:snap-bbox="false"
inkscape:object-paths="true"
inkscape:window-width="1280"
inkscape:window-height="1000"
inkscape:window-x="1280"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-midpoints="false"
inkscape:snap-grids="false"
inkscape:snap-to-guides="true">
<sodipodi:guide
orientation="0,1"
position="-139,507"
id="guide2818" />
<sodipodi:guide
orientation="0,1"
position="-54,736"
id="guide2820" />
<sodipodi:guide
orientation="1,0"
position="107.84461,521.24893"
id="guide2855" />
<sodipodi:guide
orientation="1,0"
position="346.19377,502.36563"
id="guide2857" />
<sodipodi:guide
orientation="0,1"
position="287.77314,553.84911"
id="guide4369" />
<sodipodi:guide
orientation="1,0"
position="187.50484,410.61756"
id="guide5523" />
<sodipodi:guide
orientation="1,0"
position="299.44648,566.15686"
id="guide5581" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 407.04788,247.31233 109,545.36218 l 237,0 178,-178 -117,-120.099"
id="path2822"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="77.130562"
y="369.20581"
id="text2845"><tspan
sodipodi:role="line"
id="tspan2847"
x="77.130562"
y="369.20581">Column name (top)</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="125.84303"
y="541.49957"
id="text2849"><tspan
sodipodi:role="line"
id="tspan2851"
x="125.84303"
y="541.49957">ϑ</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 346.16456,545.1478 227.68908,426.67232"
id="path2853" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd)"
d="m 107.84461,560.19866 238.34916,0"
id="path2859"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="227.0192"
y="574.17139"
id="text4284"><tspan
sodipodi:role="line"
id="tspan4286"
x="227.0192"
y="574.17139">g</tspan></text>
<path
style="color:#000000;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 260.29818,437.3373 73.37226,73.37227"
id="path4312"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="305.09753"
y="472.22052"
id="text4365"><tspan
sodipodi:role="line"
id="tspan4367"
x="305.09753"
y="472.22052">h</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart-9)"
d="m 187.50484,498.50303 0,-29.29762"
id="path4424"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart-9)"
d="m 187.98488,545.36218 0,34.70643"
id="path4424-8"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="184.34961"
y="522.88019"
id="text5525"><tspan
sodipodi:role="line"
id="tspan5527"
x="184.34961"
y="522.88019">y</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd)"
d="m 107.84461,612.92703 191.60187,0"
id="path2859-5"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="207.78781"
y="625.0675"
id="text5583"><tspan
sodipodi:role="line"
id="tspan5585"
x="207.78781"
y="625.0675">x</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;color:#000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 272.01521,382.34589 390.51575,500.84643"
id="path5587"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="336.24664"
y="433.05533"
id="text5640"><tspan
sodipodi:role="line"
id="tspan5642"
x="336.24664"
y="433.05533">p</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 299.88553,498.86877 0,46.49341"
id="path5644"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:6.80813789px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="301.71027"
y="511.74252"
id="text2849-9"><tspan
sodipodi:role="line"
id="tspan2851-1"
x="301.71027"
y="511.74252">ϑ</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 304.9025,493.43771 -21.18965,21.18965"
id="path5908" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="312.51556"
y="508.66382"
id="text5912"><tspan
sodipodi:role="line"
id="tspan5914"
x="312.51556"
y="508.66382">d</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;color:#000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:url(#DistanceStart);marker-end:url(#DistanceEnd);visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 369.3182,522.04398 325.0167,477.74249"
id="path5916" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="349.19827"
y="494.13678"
id="text5969"><tspan
sodipodi:role="line"
id="tspan5971"
x="349.19827"
y="494.13678">q</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="76.626656"
y="385.11478"
id="text3316"><tspan
sodipodi:role="line"
id="tspan3318"
x="76.626656"
y="385.11478">Bundle name (bottom)</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1669,3 +1669,4 @@ widget "*OddPortGroups" style:highest "odd_port_groups"
widget "*EvenPortGroups" style:highest "even_port_groups" widget "*EvenPortGroups" style:highest "even_port_groups"
widget "*MidiListView*" style:highest "white_tree_view" widget "*MidiListView*" style:highest "white_tree_view"
widget "*ProcessorSelector*" style:highest "processor_list_display" widget "*ProcessorSelector*" style:highest "processor_list_display"
widget "*PortMatrixLabel*" style:highest "small_text"

View File

@ -60,33 +60,41 @@ PortMatrix::PortMatrix (Window* parent, Session* session, DataType type)
_ignore_notebook_page_selected (false) _ignore_notebook_page_selected (false)
{ {
_body = new PortMatrixBody (this); _body = new PortMatrixBody (this);
_body->DimensionsChanged.connect (mem_fun (*this, &PortMatrix::body_dimensions_changed));
_vbox.pack_start (_vnotebook); _vbox.pack_start (_vspacer, false, false);
_vbox.pack_start (_vlabel); _vbox.pack_start (_vnotebook, false, false);
_hbox.pack_start (_hnotebook); _vbox.pack_start (_vlabel, true, true);
_hbox.pack_start (_hlabel); _hbox.pack_start (_hspacer, false, false);
_hbox.pack_start (_hnotebook, false, false);
_hbox.pack_start (_hlabel, true, true);
_vnotebook.signal_switch_page().connect (mem_fun (*this, &PortMatrix::v_page_selected)); _vnotebook.signal_switch_page().connect (mem_fun (*this, &PortMatrix::v_page_selected));
_vnotebook.property_tab_border() = 4; _vnotebook.property_tab_border() = 4;
_vnotebook.set_name (X_("PortMatrixLabel"));
_hnotebook.signal_switch_page().connect (mem_fun (*this, &PortMatrix::h_page_selected)); _hnotebook.signal_switch_page().connect (mem_fun (*this, &PortMatrix::h_page_selected));
_hnotebook.property_tab_border() = 4; _hnotebook.property_tab_border() = 4;
_hnotebook.set_name (X_("PortMatrixLabel"));
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
_ports[i].set_type (type); _ports[i].set_type (type);
} }
_vlabel.set_use_markup (); _vlabel.set_use_markup ();
_vlabel.set_alignment (0.5, 0); _vlabel.set_alignment (1, 1);
_vlabel.set_padding (4, 16); _vlabel.set_padding (4, 16);
_vlabel.set_name (X_("PortMatrixLabel"));
_hlabel.set_use_markup (); _hlabel.set_use_markup ();
_hlabel.set_alignment (0, 0.5); _hlabel.set_alignment (1, 0.5);
_hlabel.set_padding (16, 4); _hlabel.set_padding (16, 4);
_hlabel.set_name (X_("PortMatrixLabel"));
_body->show (); _body->show ();
_vbox.show (); _vbox.show ();
_hbox.show (); _hbox.show ();
_vlabel.show (); _vlabel.show ();
_hlabel.show (); _hlabel.show ();
_hspacer.show ();
} }
PortMatrix::~PortMatrix () PortMatrix::~PortMatrix ()
@ -106,7 +114,6 @@ void
PortMatrix::init () PortMatrix::init ()
{ {
select_arrangement (); select_arrangement ();
setup_notebooks ();
if (!_ports[0].empty()) { if (!_ports[0].empty()) {
_visible_ports[0] = *_ports[0].begin(); _visible_ports[0] = *_ports[0].begin();
@ -674,15 +681,15 @@ PortMatrix::setup_notebooks ()
} }
if (_hnotebook.get_n_pages() <= 1) { if (_hnotebook.get_n_pages() <= 1) {
_hnotebook.hide (); _hbox.hide ();
} else { } else {
_hnotebook.show (); _vbox.show ();
} }
if (_vnotebook.get_n_pages() <= 1) { if (_vnotebook.get_n_pages() <= 1) {
_vnotebook.hide (); _vbox.hide ();
} else { } else {
_vnotebook.show (); _vbox.show ();
} }
} }
@ -751,3 +758,16 @@ PortMatrix::session_going_away ()
{ {
_session = 0; _session = 0;
} }
void
PortMatrix::body_dimensions_changed ()
{
_hspacer.set_size_request (_body->column_labels_border_x (), -1);
if (_arrangement == TOP_TO_RIGHT) {
_vspacer.set_size_request (-1, _body->column_labels_height ());
_vspacer.show ();
} else {
_vspacer.hide ();
}
}

View File

@ -179,6 +179,7 @@ private:
void v_page_selected (GtkNotebookPage *, guint); void v_page_selected (GtkNotebookPage *, guint);
void h_page_selected (GtkNotebookPage *, guint); void h_page_selected (GtkNotebookPage *, guint);
void route_processors_changed (ARDOUR::RouteProcessorChange); void route_processors_changed (ARDOUR::RouteProcessorChange);
void body_dimensions_changed ();
void session_going_away (); void session_going_away ();
Gtk::Window* _parent; Gtk::Window* _parent;
@ -196,6 +197,8 @@ private:
Gtk::Label _hlabel; Gtk::Label _hlabel;
Gtk::VBox _vbox; Gtk::VBox _vbox;
Gtk::HBox _hbox; Gtk::HBox _hbox;
Gtk::Label _hspacer;
Gtk::Label _vspacer;
Gtk::Menu* _menu; Gtk::Menu* _menu;
Arrangement _arrangement; Arrangement _arrangement;
int _row_index; int _row_index;

View File

@ -34,6 +34,8 @@ PortMatrixBody::PortMatrixBody (PortMatrix* p)
_alloc_height (0), _alloc_height (0),
_xoffset (0), _xoffset (0),
_yoffset (0), _yoffset (0),
_column_labels_border_x (0),
_column_labels_height (0),
_ignore_component_size_changed (false) _ignore_component_size_changed (false)
{ {
_column_labels = new PortMatrixColumnLabels (p, this); _column_labels = new PortMatrixColumnLabels (p, this);
@ -58,7 +60,10 @@ PortMatrixBody::~PortMatrixBody ()
bool bool
PortMatrixBody::on_expose_event (GdkEventExpose* event) PortMatrixBody::on_expose_event (GdkEventExpose* event)
{ {
if (_matrix->visible_columns()->bundles().empty() || _matrix->visible_rows()->bundles().empty()) { if (
_matrix->visible_columns() == 0 || _matrix->visible_rows() == 0 ||
_matrix->visible_columns()->bundles().empty() || _matrix->visible_rows()->bundles().empty()
) {
/* nothing to connect */ /* nothing to connect */
@ -171,7 +176,7 @@ PortMatrixBody::compute_rectangles ()
{ {
/* full sizes of components */ /* full sizes of components */
pair<uint32_t, uint32_t> const col = _column_labels->dimensions (); pair<uint32_t, uint32_t> const col = _column_labels->dimensions ();
uint32_t col_overhang = _column_labels->overhang (); uint32_t const col_overhang = _column_labels->overhang ();
pair<uint32_t, uint32_t> const row = _row_labels->dimensions (); pair<uint32_t, uint32_t> const row = _row_labels->dimensions ();
pair<uint32_t, uint32_t> const grid = _grid->dimensions (); pair<uint32_t, uint32_t> const grid = _grid->dimensions ();
@ -182,6 +187,7 @@ PortMatrixBody::compute_rectangles ()
if (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT) { if (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT) {
col_rect.set_x (0); col_rect.set_x (0);
_column_labels_border_x = col_overhang;
col_rect.set_y (0); col_rect.set_y (0);
grid_rect.set_x (0); grid_rect.set_x (0);
@ -222,13 +228,17 @@ PortMatrixBody::compute_rectangles ()
col_rect.set_width (grid_rect.get_width () + col_overhang); col_rect.set_width (grid_rect.get_width () + col_overhang);
col_rect.set_x (row_rect.get_width() + grid_rect.get_width() - col_rect.get_width()); col_rect.set_x (row_rect.get_width() + grid_rect.get_width() - col_rect.get_width());
_column_labels_border_x = col_rect.get_x () >= 0 ? col_rect.get_x () : 0;
col_rect.set_y (row_rect.get_height()); col_rect.set_y (row_rect.get_height());
} }
_column_labels_height = col_rect.get_height ();
_row_labels->set_parent_rectangle (row_rect); _row_labels->set_parent_rectangle (row_rect);
_column_labels->set_parent_rectangle (col_rect); _column_labels->set_parent_rectangle (col_rect);
_grid->set_parent_rectangle (grid_rect); _grid->set_parent_rectangle (grid_rect);
DimensionsChanged (); /* EMIT SIGNAL */
} }
void void
@ -243,7 +253,7 @@ PortMatrixBody::setup ()
/* Connect to bundles so that we find out when their names change */ /* Connect to bundles so that we find out when their names change */
PortGroup::BundleList r = _matrix->rows()->bundles (); PortGroup::BundleList r = _matrix->visible_rows()->bundles ();
for (PortGroup::BundleList::iterator i = r.begin(); i != r.end(); ++i) { for (PortGroup::BundleList::iterator i = r.begin(); i != r.end(); ++i) {
_bundle_connections.push_back ( _bundle_connections.push_back (
@ -252,7 +262,7 @@ PortMatrixBody::setup ()
} }
PortGroup::BundleList c = _matrix->columns()->bundles (); PortGroup::BundleList c = _matrix->visible_columns()->bundles ();
for (PortGroup::BundleList::iterator i = c.begin(); i != c.end(); ++i) { for (PortGroup::BundleList::iterator i = c.begin(); i != c.end(); ++i) {
_bundle_connections.push_back ( _bundle_connections.push_back (
i->bundle->Changed.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrixBody::rebuild_and_draw_column_labels))) i->bundle->Changed.connect (sigc::hide (sigc::mem_fun (*this, &PortMatrixBody::rebuild_and_draw_column_labels)))
@ -295,6 +305,7 @@ PortMatrixBody::alloc_scroll_height ()
return _grid->parent_rectangle().get_height(); return _grid->parent_rectangle().get_height();
} }
/** Set x offset (for scrolling) */
void void
PortMatrixBody::set_xoffset (uint32_t xo) PortMatrixBody::set_xoffset (uint32_t xo)
{ {
@ -302,6 +313,7 @@ PortMatrixBody::set_xoffset (uint32_t xo)
queue_draw (); queue_draw ();
} }
/** Set y offset (for scrolling) */
void void
PortMatrixBody::set_yoffset (uint32_t yo) PortMatrixBody::set_yoffset (uint32_t yo)
{ {
@ -494,3 +506,16 @@ PortMatrixBody::max_size () const
return make_pair (std::max (row.first, _column_labels->overhang()) + grid.first, col.second + grid.second); return make_pair (std::max (row.first, _column_labels->overhang()) + grid.first, col.second + grid.second);
} }
/** @return x position at which the column labels meet the border of the matrix */
uint32_t
PortMatrixBody::column_labels_border_x () const
{
return _column_labels_border_x;
}
uint32_t
PortMatrixBody::column_labels_height () const
{
return _column_labels_height;
}

View File

@ -67,6 +67,11 @@ public:
void component_size_changed (); void component_size_changed ();
std::pair<uint32_t, uint32_t> max_size () const; std::pair<uint32_t, uint32_t> max_size () const;
uint32_t column_labels_border_x () const;
uint32_t column_labels_height () const;
sigc::signal<void> DimensionsChanged;
protected: protected:
bool on_expose_event (GdkEventExpose *); bool on_expose_event (GdkEventExpose *);
void on_size_request (Gtk::Requisition *); void on_size_request (Gtk::Requisition *);
@ -91,11 +96,10 @@ private:
uint32_t _alloc_width; ///< allocated width uint32_t _alloc_width; ///< allocated width
uint32_t _alloc_height; ///< allocated height uint32_t _alloc_height; ///< allocated height
Gdk::Rectangle _column_labels_rect;
Gdk::Rectangle _row_labels_rect;
Gdk::Rectangle _grid_rect;
uint32_t _xoffset; uint32_t _xoffset;
uint32_t _yoffset; uint32_t _yoffset;
uint32_t _column_labels_border_x;
uint32_t _column_labels_height;
std::list<PortMatrixNode> _mouseover; std::list<PortMatrixNode> _mouseover;
bool _ignore_component_size_changed; bool _ignore_component_size_changed;

View File

@ -45,10 +45,6 @@ PortMatrixColumnLabels::compute_dimensions ()
_longest_bundle_name = 0; _longest_bundle_name = 0;
/* width of the longest channel name */ /* width of the longest channel name */
_longest_channel_name = 0; _longest_channel_name = 0;
/* height of highest bit of text (apart from group names) */
_highest_text = 0;
/* width of the whole thing */
_width = 0;
/* Compute dimensions using all port groups, so that we allow for the largest and hence /* Compute dimensions using all port groups, so that we allow for the largest and hence
we can change between visible groups without the size of the labels jumping around. we can change between visible groups without the size of the labels jumping around.
@ -64,10 +60,6 @@ PortMatrixColumnLabels::compute_dimensions ()
_longest_bundle_name = ext.width; _longest_bundle_name = ext.width;
} }
if (ext.height > _highest_text) {
_highest_text = ext.height;
}
for (uint32_t k = 0; k < j->bundle->nchannels (); ++k) { for (uint32_t k = 0; k < j->bundle->nchannels (); ++k) {
cairo_text_extents ( cairo_text_extents (
@ -79,14 +71,21 @@ PortMatrixColumnLabels::compute_dimensions ()
if (ext.width > _longest_channel_name) { if (ext.width > _longest_channel_name) {
_longest_channel_name = ext.width; _longest_channel_name = ext.width;
} }
if (ext.height > _highest_text) {
_highest_text = ext.height;
}
} }
} }
}
_width += group_size (*i) * grid_spacing (); /* height metrics */
cairo_text_extents_t ext;
cairo_text_extents (cr, X_("AQRjpy"), &ext);
_text_height = ext.height;
_descender_height = ext.height + ext.y_bearing;
/* width of the whole thing */
if (_matrix->visible_columns()) {
_width = group_size (_matrix->visible_columns()) * grid_spacing ();
} else {
_width = 0;
} }
cairo_destroy (cr); cairo_destroy (cr);
@ -99,7 +98,7 @@ PortMatrixColumnLabels::compute_dimensions ()
a += _longest_channel_name; a += _longest_channel_name;
} }
_height = a * sin (angle()) + _highest_text * cos (angle()); _height = a * sin (angle()) + _text_height * cos (angle());
_overhang = _height / tan (angle ()); _overhang = _height / tan (angle ());
_width += _overhang; _width += _overhang;
} }
@ -108,7 +107,7 @@ double
PortMatrixColumnLabels::basic_text_x_pos (int) const PortMatrixColumnLabels::basic_text_x_pos (int) const
{ {
return grid_spacing() / 2 + return grid_spacing() / 2 +
_highest_text / (2 * sin (angle ())); _text_height / (2 * sin (angle ()));
} }
void void
@ -278,6 +277,8 @@ PortMatrixColumnLabels::render_bundle_name (
set_source_rgb (cr, text_colour()); set_source_rgb (cr, text_colour());
double const q = ((grid_spacing() * sin (angle())) - _text_height) / 2 + _descender_height;
if (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT) { if (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT) {
double rl = 0; double rl = 0;
@ -288,16 +289,16 @@ PortMatrixColumnLabels::render_bundle_name (
} }
cairo_move_to ( cairo_move_to (
cr, cr,
xoff + basic_text_x_pos (0) + rl * cos (angle()), xoff + grid_spacing() - q * sin (angle ()) + rl * cos (angle()),
yoff + _height - rl * sin (angle()) yoff + _height - q * cos (angle ()) - rl * sin (angle())
); );
} else { } else {
cairo_move_to ( cairo_move_to (
cr, cr,
xoff + basic_text_x_pos (0) + name_pad() * cos (angle ()), xoff + grid_spacing() - q * sin (angle ()),
yoff + _height - name_pad() * sin (angle()) yoff + _height - q * cos (angle ())
); );
} }
@ -328,21 +329,24 @@ PortMatrixColumnLabels::render_channel_name (
set_source_rgb (cr, text_colour()); set_source_rgb (cr, text_colour());
double const q = ((grid_spacing() * sin (angle())) - _text_height) / 2 + _descender_height;
if (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT) { if (_matrix->arrangement() == PortMatrix::TOP_TO_RIGHT) {
cairo_move_to ( cairo_move_to (
cr, cr,
xoff + basic_text_x_pos(bc.channel), xoff + grid_spacing() - q * sin (angle ()),
yoff + _height - name_pad() * sin (angle()) yoff + _height - q * cos (angle ())
); );
} else { } else {
double const rl = 3 * name_pad() + _longest_bundle_name; double const rl = 3 * name_pad() + _longest_bundle_name;
cairo_move_to ( cairo_move_to (
cr, cr,
xoff + basic_text_x_pos(bc.channel) + rl * cos (angle ()), xoff + grid_spacing() - q * sin (angle ()) + rl * cos (angle ()),
yoff + _height - rl * sin (angle()) yoff + _height - q * cos (angle ()) - rl * sin (angle())
); );
} }
@ -453,7 +457,7 @@ PortMatrixColumnLabels::motion (double x, double y)
return; return;
} }
uint32_t const bh = _longest_channel_name * sin (angle ()) + _highest_text / cos (angle ()); uint32_t const bh = _longest_channel_name * sin (angle ()) + _text_height / cos (angle ());
if ( if (
(_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && y > bh) || (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM && y > bh) ||

View File

@ -64,7 +64,8 @@ private:
double _longest_bundle_name; double _longest_bundle_name;
double _longest_channel_name; double _longest_channel_name;
double _highest_text; double _text_height;
double _descender_height;
uint32_t _overhang; uint32_t _overhang;
}; };

View File

@ -41,16 +41,16 @@ PortMatrixGrid::PortMatrixGrid (PortMatrix* m, PortMatrixBody* b)
void void
PortMatrixGrid::compute_dimensions () PortMatrixGrid::compute_dimensions ()
{ {
if (_matrix->visible_columns() == 0) { if (_matrix->visible_columns()) {
_width = 0;
} else {
_width = group_size (_matrix->visible_columns()) * grid_spacing (); _width = group_size (_matrix->visible_columns()) * grid_spacing ();
} else {
_width = 0;
} }
if (_matrix->visible_rows() == 0) { if (_matrix->visible_rows()) {
_height = 0;
} else {
_height = group_size (_matrix->visible_rows()) * grid_spacing (); _height = group_size (_matrix->visible_rows()) * grid_spacing ();
} else {
_height = 0;
} }
} }

View File

@ -44,7 +44,6 @@ PortMatrixRowLabels::compute_dimensions ()
_longest_port_name = 0; _longest_port_name = 0;
_longest_bundle_name = 0; _longest_bundle_name = 0;
_height = 0;
/* Compute maximum dimensions using all port groups, so that we allow for the largest and hence /* Compute maximum dimensions using all port groups, so that we allow for the largest and hence
we can change between visible groups without the size of the labels jumping around. we can change between visible groups without the size of the labels jumping around.
@ -71,8 +70,12 @@ PortMatrixRowLabels::compute_dimensions ()
} }
} }
_height += group_size (_matrix->visible_rows()) * grid_spacing (); if (_matrix->visible_rows()) {
_height = group_size (_matrix->visible_rows()) * grid_spacing ();
} else {
_height = 0;
}
cairo_destroy (cr); cairo_destroy (cr);
gdk_pixmap_unref (pm); gdk_pixmap_unref (pm);