001 package org.springframework.richclient.util; 002 003 import java.awt.AWTEvent; 004 import java.awt.Font; 005 import java.awt.Frame; 006 import java.awt.Toolkit; 007 import java.awt.Window; 008 import java.awt.event.AWTEventListener; 009 import java.awt.event.MouseWheelEvent; 010 011 import javax.swing.SwingUtilities; 012 import javax.swing.UIManager; 013 import javax.swing.plaf.FontUIResource; 014 015 public class FontSizeAdjuster { 016 private static final AWTEventListener listener = new AWTEventListener() { 017 public void eventDispatched(AWTEvent e) { 018 MouseWheelEvent event = (MouseWheelEvent) e; 019 if (event.isControlDown()) { 020 adjust(event.getWheelRotation() < 0 ? -1 : 1); 021 } 022 } 023 }; 024 025 private static int adjustment = 0; 026 027 private FontSizeAdjuster() { 028 // static class only 029 } 030 031 public static void init() { 032 Toolkit.getDefaultToolkit().addAWTEventListener(listener, 033 AWTEvent.MOUSE_WHEEL_EVENT_MASK); 034 } 035 036 public static void dispose() { 037 Toolkit.getDefaultToolkit().removeAWTEventListener(listener); 038 } 039 040 public static void adjust(int amount) { 041 Object[] objs = UIManager.getLookAndFeel().getDefaults().keySet() 042 .toArray(); 043 for (int i = 0; i < objs.length; i++) { 044 if (objs[i].toString().toUpperCase().indexOf("FONT") != -1) { 045 Font font = UIManager.getFont(objs[i]); 046 if (font != null) { 047 UIManager.put(objs[i], new FontUIResource(font 048 .deriveFont((float)font.getSize() + amount))); 049 } 050 } 051 } 052 053 adjustment = adjustment + amount; 054 055 updateUI(); 056 } 057 058 public static int getAdjustment() { 059 return adjustment; 060 } 061 062 private static void updateUI() { 063 Frame[] frames = Frame.getFrames(); 064 for (int i = 0; i < frames.length; i++) { 065 update(frames[i]); 066 } 067 } 068 069 private static void update(Window window) { 070 SwingUtilities.updateComponentTreeUI(window); 071 window.pack(); 072 073 // update the owned windows and dialogs 074 Window[] ownedWindows = window.getOwnedWindows(); 075 for (int i = 0; i < ownedWindows.length; i++) { 076 Window childWindow = ownedWindows[i]; 077 update(childWindow); 078 } 079 } 080 }