/* * This file is part of lanterna (http://code.google.com/p/lanterna/). * * lanterna is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2010-2017 Martin Berglund */ package com.googlecode.lanterna.terminal; import com.googlecode.lanterna.TerminalSize; /** * This class is a simple implementation of Terminal.ResizeListener which will keep track of the size of the terminal * and let you know if the terminal has been resized since you last checked. This can be useful to avoid threading * problems with the resize callback when your application is using a main event loop. * * @author martin */ @SuppressWarnings("WeakerAccess") public class SimpleTerminalResizeListener implements TerminalResizeListener { boolean wasResized; TerminalSize lastKnownSize; /** * Creates a new SimpleTerminalResizeListener * @param initialSize Before any resize event, this listener doesn't know the size of the terminal. By supplying a * value here, you control what getLastKnownSize() will return if invoked before any resize events has reached us. */ public SimpleTerminalResizeListener(TerminalSize initialSize) { this.wasResized = false; this.lastKnownSize = initialSize; } /** * Checks if the terminal was resized since the last time this method was called. If this is the first time calling * this method, the result is going to be based on if the terminal has been resized since this listener was attached * to the Terminal. * * @return true if the terminal was resized, false otherwise */ public synchronized boolean isTerminalResized() { if(wasResized) { wasResized = false; return true; } else { return false; } } /** * Returns the last known size the Terminal is supposed to have. * * @return Size of the terminal, as of the last resize update */ public TerminalSize getLastKnownSize() { return lastKnownSize; } @Override public synchronized void onResized(Terminal terminal, TerminalSize newSize) { this.wasResized = true; this.lastKnownSize = newSize; } }