Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Automatically omit merge risers from the graph when the graph is scrunched due to many rails. Make sure there is adequate spacing between the graph and text when the graph is scrunched. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
dafc3fe42aa40666f5e0456832c3a93d |
| User & Date: | drh 2015-03-10 15:22:05.439 |
Context
|
2015-03-10
| ||
| 15:40 | Bug fix from previous check-in: Make sure merge risers are drawn when requested. check-in: 151717fc48 user: drh tags: trunk | |
| 15:22 | Automatically omit merge risers from the graph when the graph is scrunched due to many rails. Make sure there is adequate spacing between the graph and text when the graph is scrunched. check-in: dafc3fe42a user: drh tags: trunk | |
| 04:05 | Fix an off-by-one error in computing some coordinates in the graph layout. Closed-Leaf check-in: 3229e5e83c user: drh tags: ex-graph | |
| 02:21 | Allow the rail pitch on graphs to go as low as 11 pixels. Adjust the offset of the merge risers as the rail pitch gets smaller so that merge arrows do not overlap the merge risers. check-in: e81344f3bd user: drh tags: trunk | |
Changes
Changes to src/finfo.c.
| ︙ | ︙ | |||
533 534 535 536 537 538 539 |
db_finalize(&q);
if( pGraph ){
graph_finish(pGraph, 1);
if( pGraph->nErr ){
graph_free(pGraph);
pGraph = 0;
}else{
| | | 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 |
db_finalize(&q);
if( pGraph ){
graph_finish(pGraph, 1);
if( pGraph->nErr ){
graph_free(pGraph);
pGraph = 0;
}else{
int w = pGraph->mxRail*pGraph->iRailPitch + 28;
@ <tr><td></td><td>
@ <div id="grbtm" style="width:%d(w)px;"></div>
@ </td><td></td></tr>
}
}
@ </table>
timeline_output_graph_javascript(pGraph, 0, 1);
|
| ︙ | ︙ |
Changes to src/timeline.c.
| ︙ | ︙ | |||
584 585 586 587 588 589 590 |
graph_free(pGraph);
pGraph = 0;
}else{
int w;
/* style is not moved to css, because this is
** a technical div for the timeline graph
*/
| | | 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 |
graph_free(pGraph);
pGraph = 0;
}else{
int w;
/* style is not moved to css, because this is
** a technical div for the timeline graph
*/
w = pGraph->mxRail*pGraph->iRailPitch + 28;
@ <tr><td></td><td>
@ <div id="grbtm" style="width:%d(w)px;"></div>
@ </td><td></td></tr>
}
}
@ </table>
if( fchngQueryInit ) db_finalize(&fchngQuery);
|
| ︙ | ︙ | |||
608 609 610 611 612 613 614 |
int omitDescenders, /* True to omit descenders */
int fileDiff /* True for file diff. False for check-in diff */
){
if( pGraph && pGraph->nErr==0 && pGraph->nRow>0 ){
GraphRow *pRow;
int i;
char cSep;
| | > > | > > | > | | 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
int omitDescenders, /* True to omit descenders */
int fileDiff /* True for file diff. False for check-in diff */
){
if( pGraph && pGraph->nErr==0 && pGraph->nRow>0 ){
GraphRow *pRow;
int i;
char cSep;
int mergeOffset; /* Pixel offset from rail to merge riser */
int iRailPitch; /* Pixels between consecutive rails */
iRailPitch = pGraph->iRailPitch;
/* Number of pixels that the thin merge lines are offset from the
** the center of the think rail lines. If zero, then the vertical
** merge lines overlap with the thicker rail lines.
*/
mergeOffset = iRailPitch>=14 ? 4 : iRailPitch>=13 ? 3 : 0;
if( PB("nomo") ) mergeOffset = 0;
@ <script>
@ var railPitch=%d(iRailPitch);
/* the rowinfo[] array contains all the information needed to generate
** the graph. Each entry contains information for a single row:
**
** id: The id of the <div> element for the row. This is an integer.
** to get an actual id, prepend "m" to the integer. The top node
** is 1 and numbers increase moving down the timeline.
|
| ︙ | ︙ | |||
654 655 656 657 658 659 660 |
*/
cgi_printf("var rowinfo = [\n");
for(pRow=pGraph->pFirst; pRow; pRow=pRow->pNext){
int mo = pRow->mergeOut;
if( mo<0 ){
mo = 0;
}else{
| | | 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 |
*/
cgi_printf("var rowinfo = [\n");
for(pRow=pGraph->pFirst; pRow; pRow=pRow->pNext){
int mo = pRow->mergeOut;
if( mo<0 ){
mo = 0;
}else{
int x = (mo/4)*iRailPitch;
switch( mo&3 ){
case 0: x -= mergeOffset-2; break;
case 1: x += 1; break;
case 2: x += mergeOffset+1; break;
}
mo = x;
}
|
| ︙ | ︙ | |||
687 688 689 690 691 692 693 |
}
if( cSep=='[' ) cgi_printf("[");
cgi_printf("],mi:");
/* mi */
cSep = '[';
for(i=0; i<GR_MAX_RAIL; i++){
if( pRow->mergeIn[i] ){
| > > | | 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 |
}
if( cSep=='[' ) cgi_printf("[");
cgi_printf("],mi:");
/* mi */
cSep = '[';
for(i=0; i<GR_MAX_RAIL; i++){
if( pRow->mergeIn[i] ){
int mi = i*iRailPitch;
if( pRow->mergeIn[i]==1 ) mi -= mergeOffset-1;
if( pRow->mergeIn[i]==3 ) mi += mergeOffset;
if( pRow->mergeDown & (1<<i) ) mi = -mi;
cgi_printf("%c%d", cSep, mi);
cSep = ',';
}
}
if( cSep=='[' ) cgi_printf("[");
cgi_printf("],h:\"%s\"}%s", pRow->zUuid, pRow->pNext ? ",\n" : "];\n");
|
| ︙ | ︙ | |||
817 818 819 820 821 822 823 824 825 826 827 828 829 830 |
@ var u = rowinfo[p.mu-1];
@ var y0 = u.y+5;
@ if( x1>=p.x-5 && x1<=p.x+5 ){
@ y1 = p.y-5;
@ }else{
@ drawThinLine(x0,y1,x1,y1);
@ }
@ drawThinLine(x1,y0,x1,y1);
@ }
@ var n = p.au.length;
@ for(var i=0; i<n; i+=2){
@ var x1 = p.au[i]*railPitch + left;
@ var x0 = x1>p.x ? p.x+7 : p.x-6;
@ var u = rowinfo[p.au[i+1]-1];
| > | 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 |
@ var u = rowinfo[p.mu-1];
@ var y0 = u.y+5;
@ if( x1>=p.x-5 && x1<=p.x+5 ){
@ y1 = p.y-5;
@ }else{
@ drawThinLine(x0,y1,x1,y1);
@ }
if( mergeOffset>0 ) cgi_printf("if( p.mo!=p.u-1 ) ");
@ drawThinLine(x1,y0,x1,y1);
@ }
@ var n = p.au.length;
@ for(var i=0; i<n; i+=2){
@ var x1 = p.au[i]*railPitch + left;
@ var x0 = x1>p.x ? p.x+7 : p.x-6;
@ var u = rowinfo[p.au[i+1]-1];
|
| ︙ | ︙ |
Changes to test/graph-test-1.wiki.
| ︙ | ︙ | |||
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
Common ancestor path of e663bac6f7 to a298a0e2f9.</a>
* <a href="../../../timeline?f=65dd90fb95a2af55" target="testwindow">
Merge on the same branch does not result in a leaf.
</a>
* <a href="../../../timeline?c=20015206bc"
target="testwindow">
This timeline has a hidden commit.</a> Click Unhide to reveal.
External:
* <a href="http://www.sqlite.org/src/timeline?c=2010-09-29&nd"
target="testwindow">Timewarp due to a mis-configured system clock.</a>
* <a href="http://core.tcl.tk/tk/finfo?name=tests/id.test"
target="testwindow">Show all three separate deletions of "id.test".
(Scroll down for the third deletion.)
| > > > > > > > > | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
Common ancestor path of e663bac6f7 to a298a0e2f9.</a>
* <a href="../../../timeline?f=65dd90fb95a2af55" target="testwindow">
Merge on the same branch does not result in a leaf.
</a>
* <a href="../../../timeline?c=20015206bc"
target="testwindow">
This timeline has a hidden commit.</a> Click Unhide to reveal.
* <a href="../../../timeline?y=ci&n=15&b=2a4e4cf03e"
target="testwindow">Isolated check-ins.</a>
External:
* <a href="http://www.sqlite.org/src/timeline?c=2010-09-29&nd"
target="testwindow">Timewarp due to a mis-configured system clock.</a>
* <a href="http://core.tcl.tk/tk/finfo?name=tests/id.test"
target="testwindow">Show all three separate deletions of "id.test".
(Scroll down for the third deletion.)
* <a href='http://core.tcl.tk/tk/timeline?y=ci&b=2015-03-07'
target='testwindow'>Merge arrows to the left and to the right</a>
* <a href='http://core.tcl.tk/tk/timeline?y=ci&b=2015-03-07&railpitch=13'
target='testwindow'>Previous, with a scrunched graph</a>
* <a href='http://core.tcl.tk/tk/timeline?y=ci&b=2015-03-07&railpitch=11'
target='testwindow'>Previous, with a severely scrunched graph</a>
|