public Dimension requestResize( final Dimension newSize, final RequestOrigin origin, int cursorY, JediTerminal.ResizeHandler resizeHandler) { if (!newSize.equals(myTermSize)) { myTerminalTextBuffer.lock(); try { myTerminalTextBuffer.resize(newSize, origin, cursorY, resizeHandler, mySelection); myTermSize = (Dimension) newSize.clone(); final Dimension pixelDimension = new Dimension(getPixelWidth(), getPixelHeight()); setPreferredSize(pixelDimension); if (myTerminalPanelListener != null) { myTerminalPanelListener.onPanelResize(pixelDimension, origin); } SwingUtilities.invokeLater( new Runnable() { @Override public void run() { updateScrolling(); } }); } finally { myTerminalTextBuffer.unlock(); } } return new Dimension(getPixelWidth(), getPixelHeight()); }
private void establishFontMetrics() { final BufferedImage img = createBufferedImage(1, 1); final Graphics2D graphics = img.createGraphics(); graphics.setFont(myNormalFont); final float lineSpace = mySettingsProvider.getLineSpace(); final FontMetrics fo = graphics.getFontMetrics(); myDescent = fo.getDescent(); myCharSize.width = fo.charWidth('W'); myCharSize.height = fo.getHeight() + (int) (lineSpace * 2); myDescent += lineSpace; myMonospaced = isMonospaced(fo); if (!myMonospaced) { LOG.info("WARNING: Font " + myNormalFont.getName() + " is non-monospaced"); } img.flush(); graphics.dispose(); }
public TerminalPanel( @NotNull SettingsProvider settingsProvider, @NotNull TerminalTextBuffer terminalTextBuffer, @NotNull StyleState styleState) { mySettingsProvider = settingsProvider; myTerminalTextBuffer = terminalTextBuffer; myStyleState = styleState; myTermSize.width = terminalTextBuffer.getWidth(); myTermSize.height = terminalTextBuffer.getHeight(); myMaxFPS = mySettingsProvider.maxRefreshRate(); updateScrolling(); enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.INPUT_METHOD_EVENT_MASK); enableInputMethods(true); terminalTextBuffer.addModelListener( new TerminalModelListener() { @Override public void modelChanged() { repaint(); } }); }