mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Support image view scaling using Ctrl+MouseWheel
This commit is contained in:
@@ -13,6 +13,7 @@ import java.awt.RenderingHints;
|
|||||||
import java.awt.Shape;
|
import java.awt.Shape;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseMotionAdapter;
|
import java.awt.event.MouseMotionAdapter;
|
||||||
|
import java.awt.event.MouseWheelEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -55,7 +56,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
|
|
||||||
private final CardViewDisplay display;
|
private final CardViewDisplay display;
|
||||||
private List<Integer> selectedIndices = new ArrayList<Integer>();
|
private List<Integer> selectedIndices = new ArrayList<Integer>();
|
||||||
private int imageScaleFactor = 3;
|
private int imageScaleFactor = 5;
|
||||||
private boolean allowMultipleSelections;
|
private boolean allowMultipleSelections;
|
||||||
private ColumnDef pileBy = null;
|
private ColumnDef pileBy = null;
|
||||||
private GroupDef groupBy = null;
|
private GroupDef groupBy = null;
|
||||||
@@ -238,6 +239,32 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMouseWheelZoom(MouseWheelEvent e) {
|
||||||
|
if (e.getWheelRotation() > 0) {
|
||||||
|
setImageScaleFactor(imageScaleFactor - 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setImageScaleFactor(imageScaleFactor + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getImageScaleFactor() {
|
||||||
|
return imageScaleFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setImageScaleFactor(int imageScaleFactor0) {
|
||||||
|
if (imageScaleFactor0 < 1) {
|
||||||
|
imageScaleFactor0 = 1;
|
||||||
|
}
|
||||||
|
else if (imageScaleFactor0 > 10) {
|
||||||
|
imageScaleFactor0 = 10;
|
||||||
|
}
|
||||||
|
if (imageScaleFactor == imageScaleFactor0) { return; }
|
||||||
|
imageScaleFactor = imageScaleFactor0;
|
||||||
|
updateLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResize() {
|
protected void onResize() {
|
||||||
updateLayout(false); //need to update layout to adjust wrapping of items
|
updateLayout(false); //need to update layout to adjust wrapping of items
|
||||||
@@ -293,7 +320,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
int pileX = PADDING;
|
int pileX = PADDING;
|
||||||
int pileWidth = itemAreaWidth - 2 * pileX;
|
int pileWidth = itemAreaWidth - 2 * pileX;
|
||||||
|
|
||||||
int itemWidth = 50 * imageScaleFactor;
|
int itemWidth = 50 + 25 * (imageScaleFactor - 1);
|
||||||
int gap = Math.round(itemWidth * GAP_SCALE_FACTOR);
|
int gap = Math.round(itemWidth * GAP_SCALE_FACTOR);
|
||||||
int dx = itemWidth + gap;
|
int dx = itemWidth + gap;
|
||||||
int itemsPerRow = (pileWidth + gap) / dx;
|
int itemsPerRow = (pileWidth + gap) / dx;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.awt.event.FocusEvent;
|
|||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.KeyListener;
|
import java.awt.event.KeyListener;
|
||||||
|
import java.awt.event.MouseWheelEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -50,10 +51,20 @@ public abstract class ItemView<T extends InventoryItem> {
|
|||||||
private int heightBackup;
|
private int heightBackup;
|
||||||
private boolean isIncrementalSearchActive = false;
|
private boolean isIncrementalSearchActive = false;
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
protected ItemView(ItemManager<T> itemManager0, ItemManagerModel<T> model0) {
|
protected ItemView(ItemManager<T> itemManager0, ItemManagerModel<T> model0) {
|
||||||
this.itemManager = itemManager0;
|
this.itemManager = itemManager0;
|
||||||
this.model = model0;
|
this.model = model0;
|
||||||
this.scroller = new FScrollPane(false);
|
this.scroller = new FScrollPane(false) {
|
||||||
|
@Override
|
||||||
|
protected void processMouseWheelEvent(MouseWheelEvent e) {
|
||||||
|
if (e.isControlDown()) {
|
||||||
|
onMouseWheelZoom(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.processMouseWheelEvent(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
this.scroller.setBorder(new FSkin.LineSkinBorder(BORDER_COLOR));
|
this.scroller.setBorder(new FSkin.LineSkinBorder(BORDER_COLOR));
|
||||||
this.button = new FLabel.Builder().hoverable().selectable(true)
|
this.button = new FLabel.Builder().hoverable().selectable(true)
|
||||||
.icon(getIcon()).iconScaleAuto(false)
|
.icon(getIcon()).iconScaleAuto(false)
|
||||||
@@ -112,6 +123,9 @@ public abstract class ItemView<T extends InventoryItem> {
|
|||||||
scroller.getVerticalScrollBar().setValue(value);
|
scroller.getVerticalScrollBar().setValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void onMouseWheelZoom(MouseWheelEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isIncrementalSearchActive() {
|
public boolean isIncrementalSearchActive() {
|
||||||
return this.isIncrementalSearchActive;
|
return this.isIncrementalSearchActive;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user