Allow specification of a background image to tile the background

of the panel in an aligned manner.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2553 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ray Greenwell
2003-05-08 04:52:24 +00:00
parent 1387c9f08b
commit 4d267ebc8c
@@ -1,5 +1,5 @@
//
// $Id: VirtualMediaPanel.java,v 1.18 2003/05/02 23:49:57 mdb Exp $
// $Id: VirtualMediaPanel.java,v 1.19 2003/05/08 04:52:24 ray Exp $
package com.threerings.media;
@@ -16,6 +16,9 @@ import javax.swing.SwingUtilities;
import com.samskivert.util.RunAnywhere;
import com.samskivert.util.StringUtil;
import com.threerings.media.image.ImageUtil;
import com.threerings.media.image.Mirage;
import com.threerings.media.util.MathUtil;
import com.threerings.media.util.Path;
import com.threerings.media.util.Pathable;
@@ -38,6 +41,14 @@ public class VirtualMediaPanel extends MediaPanel
super(framemgr);
}
/**
* Set a background image to tile the background of the media panel.
*/
public void setBackground (Mirage background)
{
_background = background;
}
/**
* Sets the upper-left coordinate of the view port in virtual
* coordinates. The view will be as efficient as possible about
@@ -358,6 +369,22 @@ public class VirtualMediaPanel extends MediaPanel
return Math.min(Math.max(tx, 0), vlen-len);
}
// documentation inherited
protected void paintBehind (Graphics2D gfx, Rectangle dirtyRect)
{
// if we have a background image specified, tile it!
if (_background != null) {
// make sure it's aligned
int iw = _background.getWidth();
int ih = _background.getHeight();
int lowx = iw * MathUtil.floorDiv(dirtyRect.x, iw);
int lowy = ih * MathUtil.floorDiv(dirtyRect.y, ih);
ImageUtil.tileImage(gfx, _background, lowx, lowy,
dirtyRect.width + (dirtyRect.x - lowx),
dirtyRect.height + (dirtyRect.y - lowy));
}
}
/** Our viewport bounds in virtual coordinates. */
protected Rectangle _vbounds = new Rectangle();
@@ -367,6 +394,9 @@ public class VirtualMediaPanel extends MediaPanel
/** Our scroll offsets. */
protected int _dx, _dy;
/** Our tiling background image. */
protected Mirage _background;
/** A region of interest which we'll try to keep visible. */
protected Rectangle _interest;