From bb07e30b16d9ab0a2ffb2ab4dcbc6a8dd06692b0 Mon Sep 17 00:00:00 2001 From: creme332 <65414576+creme332@users.noreply.github.com> Date: Mon, 1 Jul 2024 17:36:24 +0400 Subject: [PATCH] implement dynamic font size --- .../creme332/controller/CanvasController.java | 2 +- .../creme332/controller/SideMenuController.java | 8 ++++++++ .../com/github/creme332/model/CanvasModel.java | 15 ++++++++++++--- .../java/com/github/creme332/view/Canvas.java | 2 +- .../com/github/creme332/view/SideMenuPanel.java | 2 +- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/creme332/controller/CanvasController.java b/src/main/java/com/github/creme332/controller/CanvasController.java index 6e71261a..9b5f09c2 100644 --- a/src/main/java/com/github/creme332/controller/CanvasController.java +++ b/src/main/java/com/github/creme332/controller/CanvasController.java @@ -195,7 +195,7 @@ public void propertyChange(PropertyChangeEvent e) { * List of property names that should result only in a canvas repaint. */ final Set repaintProperties = Set.of("clearCanvas", "standardView", "enableGuidelines", - "cellSize", "axesVisible"); + "cellSize", "axesVisible", "labelFontSize"); if (repaintProperties.contains(propertyName)) { canvas.repaint(); diff --git a/src/main/java/com/github/creme332/controller/SideMenuController.java b/src/main/java/com/github/creme332/controller/SideMenuController.java index 5c953e75..9f3c8835 100644 --- a/src/main/java/com/github/creme332/controller/SideMenuController.java +++ b/src/main/java/com/github/creme332/controller/SideMenuController.java @@ -35,6 +35,7 @@ public SideMenuController(AppState app, SideMenuPanel sidebar) { // set default values in canvas settings sidebar.getGridLinesCheckBox().setSelected(app.getCanvasModel().isGuidelinesEnabled()); sidebar.getAxesCheckBox().setSelected(app.getCanvasModel().isAxesVisible()); + sidebar.getFontSizeSelector().setSelectedItem(String.format("%d", app.getCanvasModel().getLabelFontSize())); // Initialize button listeners initializeButtonListeners(app); @@ -100,6 +101,13 @@ public void mousePressed(MouseEvent e) { } }); + sidebar.getFontSizeSelector().addActionListener( + e -> canvasModel + .setLabelFontSize( + Integer.valueOf( + (String) sidebar.getFontSizeSelector() + .getSelectedItem()))); + // Reset button sidebar.getResetButton().addActionListener(e -> { // Reset guidelines checkbox and model diff --git a/src/main/java/com/github/creme332/model/CanvasModel.java b/src/main/java/com/github/creme332/model/CanvasModel.java index 42907f7b..796ea371 100644 --- a/src/main/java/com/github/creme332/model/CanvasModel.java +++ b/src/main/java/com/github/creme332/model/CanvasModel.java @@ -49,7 +49,10 @@ public class CanvasModel { */ int cellSize = Math.max(MIN_CELL_SIZE, Math.min(DEFAULT_CELL_SIZE, MAX_CELL_SIZE)); - private float labelFontSizeScaleFactor = 1.4F; + /** + * Font size of labels on canvas in pixels. + */ + private int labelFontSize = 28; // define attributes for next shape to be drawn private LineType lineType = LineType.SOLID; @@ -247,6 +250,7 @@ public void addPropertyChangeListener(PropertyChangeListener listener) { support.addPropertyChangeListener("cellSize", listener); support.addPropertyChangeListener("clearCanvas", listener); support.addPropertyChangeListener("standardView", listener); + support.addPropertyChangeListener("labelFontSize", listener); } /** @@ -283,8 +287,13 @@ public int getCellSize() { return cellSize; } - public float getLabelFontSizeSF() { - return labelFontSizeScaleFactor; + public void setLabelFontSize(int newFontSize) { + support.firePropertyChange("labelFontSize", this.labelFontSize, newFontSize); + labelFontSize = newFontSize; + } + + public int getLabelFontSize() { + return labelFontSize; } public int getXZero() { diff --git a/src/main/java/com/github/creme332/view/Canvas.java b/src/main/java/com/github/creme332/view/Canvas.java index 05709fac..790ec98e 100644 --- a/src/main/java/com/github/creme332/view/Canvas.java +++ b/src/main/java/com/github/creme332/view/Canvas.java @@ -186,7 +186,7 @@ public void paintComponent(Graphics g) { super.paintComponent(g); Font currentFont = g.getFont(); - Font newFont = currentFont.deriveFont(currentFont.getSize() * model.getLabelFontSizeSF()); + Font newFont = currentFont.deriveFont((float) model.getLabelFontSize()); g.setFont(newFont); Graphics2D g2 = (Graphics2D) g; diff --git a/src/main/java/com/github/creme332/view/SideMenuPanel.java b/src/main/java/com/github/creme332/view/SideMenuPanel.java index 9660ff95..286f7186 100644 --- a/src/main/java/com/github/creme332/view/SideMenuPanel.java +++ b/src/main/java/com/github/creme332/view/SideMenuPanel.java @@ -101,7 +101,7 @@ private JPanel createSettingsPanel() { gbc.gridx = 1; gbc.gridy = 2; fontSizeSelector = new JComboBox<>( - new String[] { "12 pt", "16 pt", "18 pt", "20 pt", "24 pt", "28 pt" }); + new String[] { "12", "16", "18", "20", "24", "28" }); formPanel.add(fontSizeSelector, gbc); resetButton = new JButton("Reset");