Fixed up the goddamned repaint fuckola. Fucking pain in the ass, all this
Swing, AWT and frame manager interaction. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2325 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: FrameManager.java,v 1.33 2003/03/25 19:06:54 mdb Exp $
|
// $Id: FrameManager.java,v 1.34 2003/03/25 23:05:58 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media;
|
package com.threerings.media;
|
||||||
|
|
||||||
@@ -141,7 +141,9 @@ public class FrameManager
|
|||||||
public FrameManager (JFrame frame, MediaTimer timer)
|
public FrameManager (JFrame frame, MediaTimer timer)
|
||||||
{
|
{
|
||||||
_frame = frame;
|
_frame = frame;
|
||||||
_frame.setIgnoreRepaint(true);
|
if (frame instanceof ManagedJFrame) {
|
||||||
|
((ManagedJFrame)_frame).init(this);
|
||||||
|
}
|
||||||
_timer = timer;
|
_timer = timer;
|
||||||
|
|
||||||
// set up our custom repaint manager
|
// set up our custom repaint manager
|
||||||
@@ -457,6 +459,21 @@ public class FrameManager
|
|||||||
} while (_backimg.contentsLost());
|
} while (_backimg.contentsLost());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the {@link ManagedJFrame} when our window was hidden and
|
||||||
|
* reexposed.
|
||||||
|
*/
|
||||||
|
protected void restoreFromBack (Rectangle dirty)
|
||||||
|
{
|
||||||
|
if (_fgfx == null) {
|
||||||
|
_fgfx = _frame.getGraphics();
|
||||||
|
}
|
||||||
|
Log.info("Restoring from back buffer " + StringUtil.toString(dirty) + ".");
|
||||||
|
_fgfx.setClip(dirty);
|
||||||
|
_fgfx.drawImage(_backimg, 0, 0, null);
|
||||||
|
_fgfx.setClip(null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If frame rate display is enabled, builds beginning of performance
|
* If frame rate display is enabled, builds beginning of performance
|
||||||
* status display.
|
* status display.
|
||||||
@@ -594,7 +611,7 @@ public class FrameManager
|
|||||||
_fgfx = null;
|
_fgfx = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log.info("Created back buffer.");
|
// Log.info("Created back buffer [" + width + "x" + height + "].");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
//
|
//
|
||||||
// $Id: ManagedJFrame.java,v 1.3 2002/06/11 00:52:37 mdb Exp $
|
// $Id: ManagedJFrame.java,v 1.4 2003/03/25 23:05:58 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media;
|
package com.threerings.media;
|
||||||
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Insets;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.Shape;
|
import java.awt.Shape;
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.RepaintManager;
|
|
||||||
|
|
||||||
|
import com.samskivert.util.StringUtil;
|
||||||
import com.threerings.media.Log;
|
import com.threerings.media.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,6 +24,7 @@ public class ManagedJFrame extends JFrame
|
|||||||
*/
|
*/
|
||||||
public ManagedJFrame ()
|
public ManagedJFrame ()
|
||||||
{
|
{
|
||||||
|
this("");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,21 +35,48 @@ public class ManagedJFrame extends JFrame
|
|||||||
super(title);
|
super(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by our frame manager when it's ready to go.
|
||||||
|
*/
|
||||||
|
public void init (FrameManager fmgr)
|
||||||
|
{
|
||||||
|
_fmgr = fmgr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We catch paint requests and forward them on to the repaint
|
||||||
|
* infrastructure.
|
||||||
|
*/
|
||||||
|
public void paint (Graphics g)
|
||||||
|
{
|
||||||
|
update(g);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We catch update requests and forward them on to the repaint
|
* We catch update requests and forward them on to the repaint
|
||||||
* infrastructure.
|
* infrastructure.
|
||||||
*/
|
*/
|
||||||
public void update (Graphics g)
|
public void update (Graphics g)
|
||||||
{
|
{
|
||||||
Shape clip = clip = g.getClip();
|
Shape clip = g.getClip();
|
||||||
|
Rectangle dirty;
|
||||||
if (clip != null) {
|
if (clip != null) {
|
||||||
Rectangle cb = clip.getBounds();
|
dirty = clip.getBounds();
|
||||||
RepaintManager.currentManager(this).addDirtyRegion(
|
|
||||||
getRootPane(), cb.x, cb.y, cb.width, cb.height);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
RepaintManager.currentManager(this).addDirtyRegion(
|
dirty = getRootPane().getBounds();
|
||||||
getRootPane(), 0, 0, getWidth(), getHeight());
|
// account for our frame insets
|
||||||
|
Insets insets = getInsets();
|
||||||
|
dirty.x += insets.left;
|
||||||
|
dirty.y += insets.top;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_fmgr != null) {
|
||||||
|
_fmgr.restoreFromBack(dirty);
|
||||||
|
} else {
|
||||||
|
Log.info("Dropping AWT dirty rect " + StringUtil.toString(dirty) +
|
||||||
|
" [clip=" + StringUtil.toString(clip) + "].");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected FrameManager _fmgr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: MediaPanel.java,v 1.29 2003/03/25 19:06:54 mdb Exp $
|
// $Id: MediaPanel.java,v 1.30 2003/03/25 23:05:58 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.media;
|
package com.threerings.media;
|
||||||
|
|
||||||
@@ -67,9 +67,6 @@ public class MediaPanel extends JComponent
|
|||||||
_animmgr = new AnimationManager(_remgr);
|
_animmgr = new AnimationManager(_remgr);
|
||||||
_spritemgr = new SpriteManager(_remgr);
|
_spritemgr = new SpriteManager(_remgr);
|
||||||
|
|
||||||
// we don't want to hear about repaints
|
|
||||||
setIgnoreRepaint(true);
|
|
||||||
|
|
||||||
// participate in the frame when we're visible
|
// participate in the frame when we're visible
|
||||||
addAncestorListener(new AncestorAdapter() {
|
addAncestorListener(new AncestorAdapter() {
|
||||||
public void ancestorAdded (AncestorEvent event) {
|
public void ancestorAdded (AncestorEvent event) {
|
||||||
|
|||||||
Reference in New Issue
Block a user