private final SequenceRenderer seqRdr;
- private boolean fastPaint = false;
+ boolean fastPaint = false;
private boolean fastpainting = false;
public void fastPaint(int horizontal, int vertical)
{
- // System.err.println("<<SeqCanvas fastPaint " + fastpainting + " "
- // + horizontal + " " + vertical);
// effectively:
// if (horizontal != 0 && vertical != 0)
// throw new InvalidArgumentException();
@Override
public void paintComponent(Graphics g)
{
+
int charHeight = av.getCharHeight();
int charWidth = av.getCharWidth();
width -= (width % charWidth);
height -= (height % charHeight);
- // BH 2019 can't possibly fastPaint if width and height are 0
+ // BH 2019 can't possibly fastPaint if either width or height is 0
+
if (width == 0 || height == 0)
{
return;
int startSeq = ranges.getStartSeq();
int endRes = ranges.getEndRes();
int endSeq = ranges.getEndSeq();
- if (av.isFastPaintDisabled())
- {
- fastPaint = false;
- }
- // System.err.println(">>SeqCanvas paintComponent " + fastPaint + "\n"
- // + getVisibleRect() + "\n" + g.getClipBounds());
- // System.err.println(">>>>>>>>>>>>>>>>SeqCanvas paintComponent "
- // + startRes + " " + endRes + " " + startSeq + " " + endSeq);
+ // [JAL-3226] problem that JavaScript (or Java) may consolidate multiple
+ // repaint() requests in unpredictable ways. In this case, the issue was
+ // that in response to a CTRL-C/CTRL-V paste request, in Java a fast
+ // repaint request preceded two full requests, thus resulting
+ // in a full request for paint. In constrast, in JavaScript, the three
+ // requests were bundled together into one, so the fastPaint flag was
+ // still present for the second and third request.
+ //
+ // This resulted in incomplete painting.
+ //
+ // The solution was to set seqCanvas.fastPaint and idCanvas.fastPaint false
+ // in PaintRefresher when the target to be painted is one of those two
+ // components.
+ //
+ // BH 2019.04.22
+ //
+ // An initial idea; can be removed once we determine this issue is closed:
+ // if (av.isFastPaintDisabled())
+ // {
+ // fastPaint = false;
+ // }
+
Rectangle vis, clip;
if (img != null
&& (fastPaint
|| vis.height != clip.height))
{
g.drawImage(img, 0, 0, this);
- // System.err.println(">>>>>>>>>>>>>>>>SeqCanvas paintComponent FAST");
drawSelectionGroup((Graphics2D) g, startRes, endRes, startSeq,
endSeq);
fastPaint = false;
else
{
// System.out.println("SeqCanvas full paint");
- /*
- * img is a cached version of the last view we drew.
- * If we have no img or the size has changed, make a new one
- */
+
+ // img is a cached version of the last view we drew.
+ // If we have no img or the size has changed, make a new one.
+ //
if (img == null || width != img.getWidth()
|| height != img.getHeight())
{
img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
}
-
+
Graphics2D gg = (Graphics2D) img.getGraphics();
gg.setFont(av.getFont());