/* * WorkbenchMetrics.java * * Copyright (C) 2009-12 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.model; import com.google.gwt.core.client.JavaScriptObject; public class WorkbenchMetrics extends JavaScriptObject { protected WorkbenchMetrics() { } public static final native WorkbenchMetrics create(int consoleWidth, int graphicsWidth, int graphicsHeight, double devicePixelRatio) /*-{ var clientMetrics = new Object(); clientMetrics.consoleWidth = consoleWidth ; clientMetrics.graphicsWidth = graphicsWidth ; clientMetrics.graphicsHeight = graphicsHeight ; clientMetrics.devicePixelRatio = devicePixelRatio; return clientMetrics ; }-*/; public final native int getConsoleWidth() /*-{ return this.consoleWidth; }-*/; public final native int getGraphicsWidth() /*-{ return this.graphicsWidth ; }-*/; public final native int getGraphicsHeight() /*-{ return this.graphicsHeight; }-*/; public final native double getDevicePixelRatio() /*-{ return this.devicePixelRatio; }-*/; public final boolean equalTo(WorkbenchMetrics other) { return (other != null && getConsoleWidth() == other.getConsoleWidth() && getGraphicsWidth() == other.getGraphicsWidth() && getGraphicsHeight() == other.getGraphicsHeight() && getDevicePixelRatio() == other.getDevicePixelRatio()); } // are the metrics "close enough"to the previous ones such that we don't // need to send an update? graphics always have to be equal but if the // console width has gotten 1 or 2 characters wider then we can // suppress sending. note we do this to avoid chatty set_workbench_metrics // calls (failing to increase the width of the console merely results // in some extra whitespace at the right margin) public final boolean closeEnoughToPrevious(WorkbenchMetrics previous) { // if previous is null then we're not close enough if (previous == null) return false; // new width offset int newWidthOffset = getConsoleWidth() - previous.getConsoleWidth(); // if it's 0, 1, or 2 larger then it's close enough boolean consoleCloseEnough = newWidthOffset >= 0 && newWidthOffset <= 2; return (consoleCloseEnough && (getGraphicsWidth() == previous.getGraphicsWidth()) && (getGraphicsHeight() == previous.getGraphicsHeight()) && (getDevicePixelRatio() == previous.getDevicePixelRatio())); } }