X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;fp=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=15adafc7a88938a4ed184aaa825e252a2d73ccee;hb=586ade46bdcd05ff028a1cff82c3c527326d28ec;hp=35ae2422c0230971d784fe2beefd1a03681794f0;hpb=adcef27f5747b4e70e89a56c3735bc3afb8ce9bf;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 35ae242..15adafc 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,14 +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 { if (dragMode == DragMode.Resize) @@ -734,6 +749,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 +891,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 +1006,9 @@ 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,35 +1019,40 @@ 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)) { - - - g.drawImage(image, 0, 0, this); + g.drawImage(image, 0, 0, this); fastPaint = false; 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,24 +1091,20 @@ 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(); } - - drawComponent(gg, av.getRanges().getStartRes(), - av.getRanges().getEndRes() + 1); + + drawComponent(gg, ranges.getStartRes(), av.getRanges().getEndRes() + 1); gg.dispose(); imageFresh = false; g.drawImage(image, 0, 0, this); } /** - * set true to enable redraw timing debug output on stderr - */ - private final boolean debugRedraw = false; - - /** * non-Thread safe repaint * * @param horizontal @@ -1102,6 +1125,12 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, int er = av.getRanges().getEndRes() + 1; int transX = 0; + if (er == sr + 1) + { + fastPaint = false; + return; + } + Graphics2D gg = (Graphics2D) image.getGraphics(); gg.copyArea(0, 0, imgWidth, getHeight(), @@ -1124,7 +1153,7 @@ 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,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, private int[] bounds = new int[2]; + private boolean allowFastPaint; + @Override public int[] getVisibleVRange() { @@ -1268,7 +1299,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, ap = null; image = null; fadedImage = null; -// gg = null; + // gg = null; _mwl = null; /* @@ -1348,4 +1379,14 @@ 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; + } + }