*/
package jalview.gui;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.HiddenColumns;
-import jalview.datamodel.SequenceI;
-import jalview.gui.JalviewColourChooser.ColourChooserListener;
-import jalview.renderer.AnnotationRenderer;
-import jalview.renderer.AwtRenderPanelI;
-import jalview.schemes.ResidueProperties;
-import jalview.util.Comparison;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.viewmodel.ViewportListenerI;
-import jalview.viewmodel.ViewportRanges;
-
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.Scrollable;
import javax.swing.ToolTipManager;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
+import jalview.datamodel.SequenceI;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
+import jalview.renderer.AnnotationRenderer;
+import jalview.renderer.AwtRenderPanelI;
+import jalview.schemes.ResidueProperties;
+import jalview.util.Comparison;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.viewmodel.ViewportListenerI;
+import jalview.viewmodel.ViewportRanges;
+
/**
* AnnotationPanel displays visible portion of annotation rows below unwrapped
* alignment
*/
public AnnotationPanel(AlignmentPanel ap)
{
-// setBackground(Color.white); // BH 2019
-
- ToolTipManager.sharedInstance().registerComponent(this);
+ ToolTipManager.sharedInstance().registerComponent(this);
ToolTipManager.sharedInstance().setInitialDelay(0);
ToolTipManager.sharedInstance().setDismissDelay(10000);
this.ap = ap;
if (row > -1 && ann.annotations != null
&& column < ann.annotations.length)
{
- setToolTipText(buildToolTip(ann, column, aa));
+ String toolTip = buildToolTip(ann, column, aa);
+ setToolTipText(toolTip == null ? null
+ : JvSwingUtils.wrapTooltip(true, toolTip));
String msg = getStatusMessage(av.getAlignment(), column, ann);
ap.alignFrame.setStatus(msg);
}
}
/**
- * Answers a tooltip for the annotation at the current mouse position
+ * Answers a tooltip for the annotation at the current mouse position, not
+ * wrapped in <html> tags (apply if wanted). Answers null if there is no
+ * tooltip to show.
*
* @param ann
* @param column
if (ann.graphGroup > -1)
{
StringBuilder tip = new StringBuilder(32);
- tip.append("<html>");
+ boolean first = true;
for (int i = 0; i < anns.length; i++)
{
if (anns[i].graphGroup == ann.graphGroup
&& anns[i].annotations[column] != null)
{
+ if (!first)
+ {
+ tip.append("<br>");
+ }
+ first = false;
tip.append(anns[i].label);
String description = anns[i].annotations[column].description;
if (description != null && description.length() > 0)
{
tip.append(" ").append(description);
}
- tip.append("<br>");
}
}
- if (tip.length() != 6)
- {
- tip.setLength(tip.length() - 4);
- tooltip = tip.toString() + "</html>";
- }
+ tooltip = first ? null : tip.toString();
}
else if (column < ann.annotations.length
&& ann.annotations[column] != null)
{
- String description = ann.annotations[column].description;
- if (description != null && description.length() > 0)
- {
- tooltip = JvSwingUtils.wrapTooltip(true, description);
- }
- else
- {
- tooltip = null; // no tooltip if null or empty description
- }
- }
- else
- {
- // clear the tooltip.
- tooltip = null;
+ tooltip = ann.annotations[column].description;
}
+
return tooltip;
}
g.setColor(Color.white);
g.fillRect(0, 0, visibleRect.width, visibleRect.height);
+ ViewportRanges ranges = av.getRanges();
+
+
+
if (image != null)
{
// 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);
fastPaint = false;
return;
}
}
- imgWidth = (av.getRanges().getEndRes() - av.getRanges().getStartRes()
+
+ imgWidth = (ranges.getEndRes() - ranges.getStartRes()
+ 1) * av.getCharWidth();
+
if (imgWidth < 1)
{
+ fastPaint = false;
return;
}
Graphics2D gg;
gg = (Graphics2D) image.getGraphics();
}
-
- drawComponent(gg, av.getRanges().getStartRes(),
+
+ drawComponent(gg, ranges.getStartRes(),
av.getRanges().getEndRes() + 1);
gg.dispose();
imageFresh = false;
}
/**
- * set true to enable redraw timing debug output on stderr
- */
- private final boolean debugRedraw = false;
-
- /**
* non-Thread safe repaint
*
* @param horizontal
int sr = av.getRanges().getStartRes();
int er = av.getRanges().getEndRes() + 1;
int transX = 0;
+
+ if (er == sr + 1) {
+ fastPaint = false;
+ return;
+ }
Graphics2D gg = (Graphics2D) image.getGraphics();