- screen size: 1855, 1056
- canvas size: 1080, 1920
- frame size: 1121, 1938
- canvas size ´Â screenshot ¿¡ ÀÇÇÑ image ÀÇ size ÀÓ
- frame.height > screen.height: frame.height = (int) (0.9 * screen.height); 950.4
- frame.width > screen.width: frame.width 1121
- frame.width > 1080 + inset + toolbar + scrollbar
- frame.height > 1920 + inset + infopane + scrollbar 950.4
- ´Ù¸¥ ÇÁ·Î±×·¥À» ÂüÁ¶ÇÒ °Í
- screen size, canvas size µÑ ´Ù º¯¼öÀ̹ǷÎ, Àß »ý°¢ÇØ¾ß ÇÒ µíÇÔ.
- public class DeviceFrame extends JFrame
- public DeviceFrame(Application app, final AndroidDevice device)
- pack(); ¿¡ ÀÇÇØ getPreferredSize method °¡ call µÈ´Ù.
public Dimension getPreferredSize() {^M
Dimension frame = super.getPreferredSize();^M
Insets fb = super.getInsets();^M
Dimension screen = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getSize();^M
Dimension canvasSize = canvas.getPreferredSize();^M
Dimension infoPaneSize = infoPane.getSize();^M
Dimension toolBarSize = toolBar.getSize();^M
^M
log.debug(String.format("getPreferredSize: screen=%s, canvas=%s, frame=%s",^M
screen, canvasSize, frame^M
));^M
^M
if (frame.height > screen.height) {^M
frame.height = (int) (0.9 * screen.height);^M
}^M
if (frame.width > screen.width) {^M
frame.width = (int) (0.9*screen.width);^M
}^M
^M
JScrollBar vsb = canvasScrollable.getVerticalScrollBar();^M
int vsbW = vsb.getWidth(); //vsb.isShowing() ? vsb.getWidth() : 0;^M
JScrollBar hsb = canvasScrollable.getHorizontalScrollBar();^M
int hsbH = hsb.getHeight(); //hsb.isShowing() ? hsb.getHeight() : 0;^M
^M
int W = fb.left + toolBarSize.width + canvasSize.width + vsbW + fb.right;^M
int H = fb.top + infoPaneSize.height + canvasSize.height + hsbH + fb.bottom;^M
if (frame.width > W) {^M
frame.width = W;^M
}^M
if (frame.height > H) {^M
frame.height = H;^M
}^M
log.debug(String.format("getPreferredSize: frame2=%s", frame));^M
^M
return frame;^M
}^M
public Dimension getPreferredSize() {^M
if (image == null) {^M
return new Dimension(200, 300);^M
}^M
if (landscapeMode) {^M
if (skinBackgroundImage != null) {^M
return new Dimension(scale(skinBackgroundImage.getHeight(null)), scale(skinBackgroundImage.getWidth(null)));^M
}^M
return new Dimension(scale(image.getHeight()), scale(image.getWidth()));^M
}^M
if (skinBackgroundImage != null) {^M
return new Dimension(scale(skinBackgroundImage.getWidth(null)), scale(skinBackgroundImage.getHeight(null)));^M
}^M
return new Dimension(scale(image.getWidth()), scale(image.getHeight()));^M
}^M
- /my-app/src/main/resources/skins
- galaxy nexus, gt-i9505, htc one v, nexus s
- frame.cfg, frame.png
- 855 X 1672, 1340 X 2438, 655 X 1221, 749 X 1308
- frame.cfg: 67 X 213, 120 X 265, 86 X 146, 134 X 248
call ¶
- Dimension frame = super.getPreferredSize();
- canvas, img ´Â ImageCanvas ÀÇ ¿ÀºêÁ§Æ®ÀÓ.
- Dimension canvasSize = canvas.getPreferredSize();
- image °¡ null À̸é Dimension(200, 300) ¸®ÅÏ
- skinBackgroundImage °¡ ÀÖÀ¸¸é
- Dimension(scale(skinBackgroundImage.getWidth(null)), scale(skinBackgroundImage.getHeight(null)))
- Dimension(scale(image.getWidth()), scale(image.getHeight()))
- Dimension sz = img.getPreferredSize();
private int scale(int value) {^M
double factor = getScaleFactor();^M
if (factor != 1) {^M
scalePercentage = (int) (factor * 100);^M
}^M
if (scalePercentage == 100) {^M
return value;^M
}^M
return (int) Math.round(value * scalePercentage / 100.0);^M
}^M
private double getScaleFactor() {^M
final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();^M
final double screenHeight = screen.getHeight();^M
final double screenWidth = screen.getWidth();^M
double factor = 1;^M
if (screenHeight <= getHeight()) {^M
factor = screenHeight / getHeight();^M
if (factor > 0.75) {^M
factor = 0.25;^M
} else if (factor > 0.50) {^M
factor = 0.25;^M
} else if (factor > 0.25) {^M
factor = 0.25;^M
}^M
}^M
return factor;^M
}^M
canvas ¶
- class ImageCanvas extends JComponent
- public void setScreenshot(ScreenImage image)
- protected void paintComponent(Graphics g)
- public Dimension getPreferredSize()
- return new Dimension(scale(image.getWidth()), scale(image.getHeight()));
Settings ¶
- private final Preferences applicationPreferences;
- set
- askBeforeQuit, imageFormat, askBeforeScreenshot, scale, hideEmulators,
- upsideDown, landscape, autoShow
- private void set(String name, String value)
- private void set(String name, int value)
- private void set(String name, boolean value)
public int getPreferredScale() {^M
return applicationPreferences.getInt("scale", 100);^M
}^M
^M
public void setPreferredScale(int value) {^M
set("scale", value);^M
}^M
integer division ¶
int x = ...;
int y = ...;
double value = ((double) x) / y;
|
|