Fossil

Check-in [70ba2951]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Draw the upward riser arrow just a short ways, not to the top of screen, for nodes whose next child is off-screen.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | short-offscreen-risers
Files: files | file ages | folders
SHA1:70ba2951f2802a2f76691bb9f04ffddc14b95076
User & Date: drh 2016-03-18 14:35:16
Context
2016-03-19
00:55
Update the built-in SQLite to include the "PRAGMA integrity_check" fix. check-in: 9245076e user: drh tags: short-offscreen-risers
2016-03-18
14:35
Draw the upward riser arrow just a short ways, not to the top of screen, for nodes whose next child is off-screen. check-in: 70ba2951 user: drh tags: short-offscreen-risers
14:10
Fix a case in the graph renderer where a non-leaf node whose immediate child is not on screen did now show the arrow going straight up to the top of the page. check-in: da4a3b4f user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/graph.c.

325
326
327
328
329
330
331
332


333
334
335
336

337
338
339
340
341
342
343
344
...
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
...
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
    while( p->mxRail<GR_MAX_RAIL && pRow->mergeDown>(BIT(p->mxRail+1)-1) ){
      p->mxRail++;
    }
  }
}

/*
** Draw a riser from pRow to the top of the graph


*/
static void riser_to_top(GraphRow *pRow){
  u64 mask = BIT(pRow->iRail);
  pRow->aiRiser[pRow->iRail] = 0;

  while( pRow ){
    pRow->railInUse |= mask;
    pRow = pRow->pPrev;
  }
}


/*
................................................................................
    int parentRid;

    if( pRow->iRail>=0 ){
      if( pRow->pChild==0 && !pRow->timeWarp ){
        if( omitDescenders || pRow->isLeaf ){
          /* no-op */
        }else{
          riser_to_top(pRow);
        }
      }
      continue;
    }
    if( pRow->isDup ){
      continue;
    }else{
................................................................................
      }
    }
    mask = BIT(pRow->iRail);
    pRow->railInUse |= mask;
    if( pRow->pChild ){
      assignChildrenToRail(pRow);
    }else if( !pRow->isLeaf ){
      riser_to_top(pRow);
    }
    if( pParent ){
      for(pLoop=pParent->pPrev; pLoop && pLoop!=pRow; pLoop=pLoop->pPrev){
        pLoop->railInUse |= mask;
      }
    }
  }







|
>
>

|


>
|







 







|







 







|







325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
...
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
...
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
    while( p->mxRail<GR_MAX_RAIL && pRow->mergeDown>(BIT(p->mxRail+1)-1) ){
      p->mxRail++;
    }
  }
}

/*
** pRow has direct children, but they are all off-screen and not
** shown on the current graph.  Therefore, draw an arrow up from
** pRow but terminate it in empty space.
*/
static void riserToOffScreenChild(GraphRow *pRow){
  u64 mask = BIT(pRow->iRail);
  pRow->aiRiser[pRow->iRail] = 0;
  int n = 0;
  while( pRow && (n++)<3 ){
    pRow->railInUse |= mask;
    pRow = pRow->pPrev;
  }
}


/*
................................................................................
    int parentRid;

    if( pRow->iRail>=0 ){
      if( pRow->pChild==0 && !pRow->timeWarp ){
        if( omitDescenders || pRow->isLeaf ){
          /* no-op */
        }else{
          riserToOffScreenChild(pRow);
        }
      }
      continue;
    }
    if( pRow->isDup ){
      continue;
    }else{
................................................................................
      }
    }
    mask = BIT(pRow->iRail);
    pRow->railInUse |= mask;
    if( pRow->pChild ){
      assignChildrenToRail(pRow);
    }else if( !pRow->isLeaf ){
      riserToOffScreenChild(pRow);
    }
    if( pParent ){
      for(pLoop=pParent->pPrev; pLoop && pLoop!=pRow; pLoop=pLoop->pPrev){
        pLoop->railInUse |= mask;
      }
    }
  }

Changes to src/timeline.c.

899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
    @   if( p.mi.length ) cls += " merge";
    @   if( p.f&1 ) cls += " leaf";
    @   var n = drawBox(cls,p.bg,p.x,p.y);
    @   n.id = "tln"+p.id;
    @   n.onclick = clickOnNode;
    @   n.style.zIndex = 10;
    if( !omitDescenders ){
      @   if( p.u==0 ) drawUpArrow(p,{x: p.x, y: -node.h},p.fg);
      @   if( p.d ) drawUpArrow({x: p.x, y: btm-node.h/2},p,p.fg);
    }
    @   if( p.mo>=0 ){
    @     var x0 = p.x + node.w/2;
    @     var x1 = p.mo*railPitch + node.w/2;
    @     var u = rowinfo[p.mu-1];
    @     var y1 = miLineY(u);







|







899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
    @   if( p.mi.length ) cls += " merge";
    @   if( p.f&1 ) cls += " leaf";
    @   var n = drawBox(cls,p.bg,p.x,p.y);
    @   n.id = "tln"+p.id;
    @   n.onclick = clickOnNode;
    @   n.style.zIndex = 10;
    if( !omitDescenders ){
      @   if( p.u==0 ) drawUpArrow(p,{x: p.x, y: p.y-40},p.fg);
      @   if( p.d ) drawUpArrow({x: p.x, y: btm-node.h/2},p,p.fg);
    }
    @   if( p.mo>=0 ){
    @     var x0 = p.x + node.w/2;
    @     var x1 = p.mo*railPitch + node.w/2;
    @     var u = rowinfo[p.mu-1];
    @     var y1 = miLineY(u);