package org.xhtmlrenderer.demo.browser.actions;
import org.xhtmlrenderer.demo.browser.ScaleFactor;
import org.xhtmlrenderer.swing.ScalableXHTMLPanel;
import javax.swing.*;
import java.awt.event.ActionEvent;
/**
* Implements zooming of the browser panel.
*/
public class ZoomAction extends AbstractAction {
private static boolean needsWarning = true;
private ScaleFactor scalingFactor;
private final ScalableXHTMLPanel view;
public ZoomAction(ScalableXHTMLPanel panel, ScaleFactor factor) {
super(factor.getZoomLabel());
this.scalingFactor = factor;
this.view = panel;
}
public void actionPerformed(ActionEvent evt) {
if (needsWarning) {
String msg = "The \"zoom\" feature is experimental, and some pages\n" +
"will display incorrectly at certain zoom resolutions\n" +
"due to layout calculations not being zoom-aware.";
JOptionPane.showMessageDialog(null, msg, "Zoom Panel", JOptionPane.WARNING_MESSAGE);
needsWarning = false;
}
if (scalingFactor.getFactor() == ScaleFactor.PAGE_WIDTH) {
view.setScalePolicy(ScalableXHTMLPanel.SCALE_POLICY_FIT_WIDTH);
view.setDocument(view.getDocument());
} else if (scalingFactor.getFactor() == ScaleFactor.PAGE_HEIGHT) {
view.setScalePolicy(ScalableXHTMLPanel.SCALE_POLICY_FIT_HEIGHT);
view.setDocument(view.getDocument());
} else if (scalingFactor.getFactor() == ScaleFactor.PAGE_WHOLE) {
view.setScalePolicy(ScalableXHTMLPanel.SCALE_POLICY_FIT_WHOLE);
view.setDocument(view.getDocument());
} else {
view.setScale(scalingFactor.getFactor());
}
}
}