X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Frenderer%2FAnnotationRenderer.java;h=fcdd77da93b6cbf7a447569b550eef66ce3ae3b8;hb=69dd054a99ba910b138e84c8db62a11ee7c3ef37;hp=7598f5fb652d6dc68ac9d6a6591810b782351ba2;hpb=be7a79e1fa45453d8916841c9cb0e5e70621d844;p=jalview.git diff --git a/src/jalview/renderer/AnnotationRenderer.java b/src/jalview/renderer/AnnotationRenderer.java index 7598f5f..fcdd77d 100644 --- a/src/jalview/renderer/AnnotationRenderer.java +++ b/src/jalview/renderer/AnnotationRenderer.java @@ -142,7 +142,22 @@ public class AnnotationRenderer * width of image to render in panel */ private int imgWidth; - + /** + * offset to beginning of visible area + */ + private int sOffset; + /** + * offset to end of visible area + */ + private int visHeight; + /** + * indicate if the renderer should only render the visible portion of the annotation given the current view settings + */ + private boolean useClip=false; + /** + * master flag indicating if renderer should ever try to clip. not enabled for jalview 2.8.1 + */ + private boolean canClip=false; // public void updateFromAnnotationPanel(FontMetrics annotFM, AlignViewportI // av) public void updateFromAwtRenderPanel(AwtRenderPanelI annotPanel, @@ -152,6 +167,22 @@ public class AnnotationRenderer annotationPanel = annotPanel; fadedImage = annotPanel.getFadedImage(); imgWidth = annotPanel.getFadedImageWidth(); + // visible area for rendering + int[] bounds=annotPanel.getVisibleVRange(); + if (bounds!=null) + { + sOffset = bounds[0]; + visHeight = bounds[1]; + if (visHeight==0) + { + useClip=false; + } else { + useClip=canClip; + } + } else { + useClip=false; + } + updateFromAlignViewport(av); } @@ -280,6 +311,9 @@ public class AnnotationRenderer // column. Font ofont = g.getFont(); // \u03B2 \u03B1 + // debug ints + int yfrom=0,f_i=0,yto=0,f_to=0; + boolean clipst=false,clipend=false; for (int i = 0; i < aa.length; i++) { AlignmentAnnotation row = aa[i]; @@ -293,6 +327,17 @@ public class AnnotationRenderer scaleColLabel = row.scaleColLabel; lastSS = ' '; lastSSX = 0; + + if (!useClip || ((y-charHeight)=sOffset)) + {// if_in_visible_region + if (!clipst) + { + clipst=true; + yfrom=y; + f_i=i; + } + yto = y; + f_to=i; if (row.graph > 0) { if (row.graphGroup > -1 && graphGroupDrawn.get(row.graphGroup)) { @@ -617,7 +662,12 @@ public class AnnotationRenderer row.graphMin, row.graphMax, y); } } - + } else { + if (clipst && !clipend) + { + clipend = true; + } + }// end if_in_visible_region if (row.graph > 0 && row.hasText) { y += charHeight; @@ -628,6 +678,20 @@ public class AnnotationRenderer y += aa[i].height; } } + if (canClip) + { + if (clipst) + { + System.err.println("Start clip at : " + yfrom + " (index " + f_i + + ")"); + } + if (clipend) + { + System.err + .println("End clip at : " + yto + " (index " + f_to + ")"); + } + } + ; return !usedFaded; }