X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=93af6ec83f40402919d343286f881ef79a979c5e;hb=bea1d9b563d2fea018de3dbde9112dd59149126e;hp=35ae2422c0230971d784fe2beefd1a03681794f0;hpb=d281dbb95856e0796188c810b819519878235e36;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 35ae242..93af6ec 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -150,6 +150,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, */ public AnnotationPanel(AlignmentPanel ap) { + setName("AnnotationPanel"); ToolTipManager.sharedInstance().registerComponent(this); ToolTipManager.sharedInstance().setInitialDelay(0); ToolTipManager.sharedInstance().setDismissDelay(10000); @@ -355,7 +356,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, @Override public void colourSelected(Color c) { - HiddenColumns hiddenColumns = av.getAlignment().getHiddenColumns(); + HiddenColumns hiddenColumns = av.getAlignment() + .getHiddenColumns(); for (int index : av.getColumnSelection().getSelected()) { if (hiddenColumns.isVisible(index)) @@ -366,10 +368,11 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } fAnot[index].colour = c; } - }}; + } + }; }; - JalviewColourChooser.showColourChooser(this, - title, Color.black, listener); + JalviewColourChooser.showColourChooser(this, title, Color.black, + listener); } else // HELIX, SHEET or STEM @@ -634,6 +637,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, mouseDragLastX = -1; mouseDragLastY = -1; mouseDragging = false; + if (dragMode == DragMode.Resize) + { + ap.adjustAnnotationHeight(); + } dragMode = DragMode.Undefined; ap.getScalePanel().mouseReleased(evt); @@ -674,16 +681,25 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } /** - * DOCUMENT ME! + * Action on starting or continuing a mouse drag. There are two possible + * actions: + * + * A drag on a graph annotation is treated as column selection if it starts + * with more horizontal than vertical movement, and as resize if it starts + * with more vertical than horizontal movement. Once started, the drag does + * not change mode. * * @param evt - * DOCUMENT ME! */ @Override public void mouseDragged(MouseEvent evt) { /* - * todo: if dragMode is Undefined: + * if dragMode is Undefined: * - set to Select if dx > dy * - set to Resize if dy > dx * - do nothing if dx == dy @@ -711,13 +727,13 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } if (dragMode == DragMode.Undefined) - { + { /* * drag is diagonal - defer deciding whether to * treat as up/down or left/right */ - return; - } + return; + } try { @@ -734,6 +750,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, int newHeight = Math.max(0, graphAnnotation.graphHeight + deltaY); graphAnnotation.graphHeight = newHeight; adjustPanelHeight(); + setNoFastPaint(); ap.paintAlignment(false, false); } } @@ -875,6 +892,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, && ann.annotations[column] != null) { tooltip = ann.annotations[column].description; + if ("".equals(tooltip)) + { + tooltip = null; + } } return tooltip; @@ -986,7 +1007,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } private volatile boolean imageFresh = false; - private Rectangle visibleRect = new Rectangle(), clipBounds = new Rectangle(); + private Rectangle visibleRect = new Rectangle(), + clipBounds = new Rectangle(); /** * DOCUMENT ME! @@ -997,23 +1019,25 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, @Override public void paintComponent(Graphics g) { - - // BH: note that this method is generally recommended to - // call super.paintComponent(g). Otherwise, the children of this - // component will not be rendered. That is not needed here - // because AnnotationPanel does not have any children. It is - // just a JPanel contained in a JViewPort. + // BH: note that this method is generally recommended to + // call super.paintComponent(g). Otherwise, the children of this + // component will not be rendered. That is not needed here + // because AnnotationPanel does not have any children. It is + // just a JPanel contained in a JViewPort. computeVisibleRect(visibleRect); - g.setColor(Color.white); g.fillRect(0, 0, visibleRect.width, visibleRect.height); - if (image != null) + ViewportRanges ranges = av.getRanges(); + + if (allowFastPaint && image != null) { - // BH 2018 optimizing generation of new Rectangle(). - if (fastPaint || (visibleRect.width != (clipBounds = g.getClipBounds(clipBounds)).width) - || (visibleRect.height != clipBounds.height)) + // BH 2018 optimizing generation of new Rectangle(). + if (fastPaint + || (visibleRect.width != (clipBounds = g + .getClipBounds(clipBounds)).width) + || (visibleRect.height != clipBounds.height)) { @@ -1022,10 +1046,11 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, return; } } - imgWidth = (av.getRanges().getEndRes() - av.getRanges().getStartRes() - + 1) * av.getCharWidth(); + imgWidth = (ranges.getEndRes() - ranges.getStartRes() + 1) + * av.getCharWidth(); if (imgWidth < 1) { + fastPaint = false; return; } Graphics2D gg; @@ -1064,8 +1089,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, gg.setColor(Color.white); gg.fillRect(0, 0, imgWidth, image.getHeight()); imageFresh = true; - } else { - gg = (Graphics2D) image.getGraphics(); + } + else + { + gg = (Graphics2D) image.getGraphics(); } @@ -1077,11 +1104,6 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } /** - * set true to enable redraw timing debug output on stderr - */ - private final boolean debugRedraw = false; - - /** * non-Thread safe repaint * * @param horizontal @@ -1102,19 +1124,27 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, int er = av.getRanges().getEndRes() + 1; int transX = 0; - Graphics2D gg = (Graphics2D) image.getGraphics(); - - gg.copyArea(0, 0, imgWidth, getHeight(), - -horizontal * av.getCharWidth(), 0); - - if (horizontal > 0) // scrollbar pulled right, image to the left + if (er == sr + 1) { - transX = (er - sr - horizontal) * av.getCharWidth(); - sr = er - horizontal; + fastPaint = false; + return; } - else if (horizontal < 0) - { - er = sr - horizontal; + Graphics2D gg = (Graphics2D) image.getGraphics(); + + if (imgWidth>Math.abs(horizontal*av.getCharWidth())) { + //scroll is less than imgWidth away so can re-use buffered graphics + gg.copyArea(0, 0, imgWidth, getHeight(), + -horizontal * av.getCharWidth(), 0); + + if (horizontal > 0) // scrollbar pulled right, image to the left + { + transX = (er - sr - horizontal) * av.getCharWidth(); + sr = er - horizontal; + } + else if (horizontal < 0) + { + er = sr - horizontal; + } } gg.translate(transX, 0); @@ -1124,7 +1154,6 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, gg.translate(-transX, 0); gg.dispose(); - fastPaint = true; // Call repaint on alignment panel so that repaints from other alignment @@ -1242,6 +1271,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, private int[] bounds = new int[2]; + private boolean allowFastPaint; @Override public int[] getVisibleVRange() { @@ -1268,7 +1298,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, ap = null; image = null; fadedImage = null; -// gg = null; + // gg = null; _mwl = null; /* @@ -1348,4 +1378,13 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } return annotationHeight; } + + /** + * Clears the flag that allows a 'fast paint' on the next repaint, so + * requiring a full repaint + */ + public void setNoFastPaint() + { + allowFastPaint = false; + } }