List of usage examples for java.awt.geom Rectangle2D getX
public abstract double getX();
From source file:org.squidy.designer.zoom.impl.PortShape.java
public PortShape() { setBounds(Constants.DEFAULT_PORT_BOUNDS); addInputEventListener(new PBasicInputEventHandler() { /*//from w w w .j a v a 2s . c om * (non-Javadoc) * * @see * edu.umd.cs.piccolo.event.PBasicInputEventHandler#mousePressed * (edu.umd.cs.piccolo .event.PInputEvent) */ @Override public void mousePressed(PInputEvent event) { super.mousePressed(event); if (!event.isHandled()) { isCreatingEdge = true; Rectangle2D bounds = localToGlobal(getBounds()); startX = bounds.getX() + bounds.getWidth() / 2;// .getCenterX(); startY = bounds.getY() + bounds.getWidth() / 2;// .getCenterY(); currentX = startX; currentY = startY; // moveToFront(); event.setHandled(true); } } /* * (non-Javadoc) * * @see * edu.umd.cs.piccolo.event.PBasicInputEventHandler#mouseReleased * (edu.umd.cs.piccolo.event.PInputEvent) */ @Override public void mouseReleased(PInputEvent event) { super.mouseReleased(event); isCreatingEdge = false; ConnectionManager connectionManager = ShapeUtils.getConnectionManager(PortShape.this); Point2D point = event.getPosition(); if (connectionManager.hasConnectionAtDifferentNodeAtPoint(PortShape.this, point)) { if (LOG.isDebugEnabled()) { LOG.debug("Connection port found at " + point); } ConnectorShape<?, ?> source = (ConnectorShape<?, ?>) getParent(); ConnectorShape<?, ?> target = (ConnectorShape<?, ?>) connectionManager .getConnectionAtPoint(point).getParent(); if (!source.getParent().equals(target.getParent())) { // ConnectorShape<?, ?> tmp = source; // source = target; // target = tmp; } PipeShape pipeShape; try { pipeShape = PipeShape.create(source, target); } catch (Exception e) { publishNotification(new TemporaryNotification(e.getMessage())); return; } VisualShape<VisualShape<?>> parentShape; if (!source.getParent().equals(target.getParent())) { if (target.getParent().equals(source)) { parentShape = (VisualShape<VisualShape<?>>) source; } else { parentShape = (VisualShape<VisualShape<?>>) target; } } else { parentShape = (VisualShape<VisualShape<?>>) source.getParent(); } parentShape.addVisualShape(pipeShape); pipeShape.invalidateFullBounds(); } else { // TODO [RR]: Repaint from bounds (do not repaint full node bounds) getParent().getParent().invalidatePaint(); } } /* * (non-Javadoc) * * @see * edu.umd.cs.piccolo.event.PBasicInputEventHandler#mouseDragged * (edu.umd.cs.piccolo.event.PInputEvent) */ @Override public void mouseDragged(PInputEvent event) { super.mouseDragged(event); Point2D point = event.getPosition(); currentX = point.getX(); currentY = point.getY(); event.getCamera().invalidatePaint(); event.setHandled(true); } /* * (non-Javadoc) * * @see * edu.umd.cs.piccolo.event.PBasicInputEventHandler#mouseEntered * (edu.umd.cs.piccolo.event.PInputEvent) */ @Override public void mouseEntered(PInputEvent event) { super.mouseEntered(event); innerColor = Color.GRAY; } /* * (non-Javadoc) * * @see * edu.umd.cs.piccolo.event.PBasicInputEventHandler#mouseExited( * edu.umd.cs.piccolo.event.PInputEvent) */ @Override public void mouseExited(PInputEvent event) { super.mouseExited(event); innerColor = Color.LIGHT_GRAY; } }); }
From source file:de.dakror.villagedefense.game.entity.struct.Struct.java
public void setBump(Rectangle2D r) { super.setBump(new Rectangle((int) Math.round(r.getX() * Tile.SIZE), (int) Math.round(r.getY() * Tile.SIZE), (int) Math.round(r.getWidth() * Tile.SIZE), (int) Math.round(r.getHeight() * Tile.SIZE))); }
From source file:com.hexidec.ekit.component.UnicodeDialog.java
public void init(int startIndex) { String customFont = Translatrix.getTranslationString("UnicodeDialogButtonFont"); if (customFont != null && customFont.length() > 0) { buttonFont = new Font(Translatrix.getTranslationString("UnicodeDialogButtonFont"), Font.PLAIN, 12); } else {//from w w w . j a v a 2 s . c om buttonFont = new Font("Monospaced", Font.PLAIN, 12); } Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); JPanel centerPanel = new JPanel(); centerPanel.setLayout(new GridLayout(0, 17, 0, 0)); buttonGroup = new ButtonGroup(); int prefButtonWidth = 32; int prefButtonHeight = 32; centerPanel.add(new JLabel("")); for (int labelLoop = 0; labelLoop < 16; labelLoop++) { JLabel jlblMarker = new JLabel( "x" + (labelLoop > 9 ? "" + (char) (65 + (labelLoop - 10)) : "" + labelLoop)); jlblMarker.setHorizontalAlignment(SwingConstants.CENTER); jlblMarker.setVerticalAlignment(SwingConstants.CENTER); jlblMarker.setForeground(new Color(0.5f, 0.5f, 0.75f)); centerPanel.add(jlblMarker); } int labelcount = 0; for (int counter = 0; counter < UNICODEBLOCKSIZE; counter++) { if ((counter % 16) == 0) { JLabel jlblMarker = new JLabel( (labelcount > 9 ? "" + (char) (65 + (labelcount - 10)) : "" + labelcount) + "x"); jlblMarker.setHorizontalAlignment(SwingConstants.CENTER); jlblMarker.setVerticalAlignment(SwingConstants.CENTER); jlblMarker.setForeground(new Color(0.5f, 0.5f, 0.75f)); centerPanel.add(jlblMarker); labelcount++; } buttonArray[counter] = new JToggleButton(" "); buttonArray[counter].getModel().setActionCommand(""); buttonArray[counter].setFont(buttonFont); buttonArray[counter].setBorder( javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED)); buttonArray[counter].addActionListener(this); if (counter == 0) { FontRenderContext frcLocal = ((java.awt.Graphics2D) (parentEkit.getGraphics())) .getFontRenderContext(); Rectangle2D fontBounds = buttonFont.getMaxCharBounds(frcLocal); int maxCharWidth = (int) (Math.abs(fontBounds.getX())) + (int) (Math.abs(fontBounds.getWidth())); int maxCharHeight = (int) (Math.abs(fontBounds.getY())) + (int) (Math.abs(fontBounds.getHeight())); Insets buttonInsets = buttonArray[counter].getBorder().getBorderInsets(buttonArray[counter]); prefButtonWidth = maxCharWidth + buttonInsets.left + buttonInsets.right; prefButtonHeight = maxCharHeight + buttonInsets.top + buttonInsets.bottom; } buttonArray[counter].setPreferredSize(new Dimension(prefButtonWidth, prefButtonHeight)); centerPanel.add(buttonArray[counter]); buttonGroup.add(buttonArray[counter]); } JPanel selectorPanel = new JPanel(); jcmbBlockSelector = new JComboBox(unicodeBlocks); jcmbBlockSelector.setSelectedIndex(startIndex); jcmbBlockSelector.setActionCommand(CMDCHANGEBLOCK); jcmbBlockSelector.addActionListener(this); String[] sPages = { "1" }; jcmbPageSelector = new JComboBox(sPages); jcmbPageSelector.setSelectedIndex(0); jcmbPageSelector.setActionCommand(CMDCHANGEBLOCK); jcmbPageSelector.addActionListener(this); selectorPanel.add(new JLabel(Translatrix.getTranslationString("SelectorToolUnicodeBlock"))); selectorPanel.add(jcmbBlockSelector); selectorPanel.add(new JLabel(Translatrix.getTranslationString("SelectorToolUnicodePage"))); selectorPanel.add(jcmbPageSelector); JPanel buttonPanel = new JPanel(); JButton closeButton = new JButton(Translatrix.getTranslationString("DialogClose")); closeButton.setActionCommand("close"); closeButton.addActionListener(this); buttonPanel.add(closeButton); contentPane.add(centerPanel, BorderLayout.CENTER); contentPane.add(selectorPanel, BorderLayout.NORTH); contentPane.add(buttonPanel, BorderLayout.SOUTH); this.pack(); populateButtons(startIndex, 0); this.setVisible(true); }
From source file:org.uva.itast.blended.omr.pages.PageImage.java
/** * Convert box from Milimeters to Pixels relative to the PageImage in the preferred resolution * in case of alignment rotation the returned Rectangle is the minimum bounding box that contains * the original corners transformed./*from www. ja v a 2 s .c o m*/ * @param box in milimeters related to actual page * @return minimum bounding box in pixels related to image representation */ public Rectangle toPixels(Rectangle2D box) { Point p1 = toPixels(box.getX(), box.getY()); Point p2 = toPixels(box.getMaxX(), box.getMaxY()); Rectangle bboxPx = new Rectangle(p1); bboxPx.add(p2); return bboxPx; }
From source file:org.uva.itast.blended.omr.pages.PDFPageImage.java
private Rectangle2D toPDFUnits(Rectangle2D rect) { float ratioHeight = PREFERRED_PIXELS_HEIGHT_A4 / getPage().getHeight(); float ratioWidth = PREFERRED_PIXELS_WIDTH_A4 / getPage().getWidth(); Rectangle2D rectNew = new Rectangle(); rectNew.setFrame(rect.getX() / ratioWidth, rect.getY() / ratioHeight, rect.getWidth() / ratioWidth, rect.getHeight() / ratioHeight); return rectNew; }
From source file:net.sourceforge.processdash.ui.lib.chart.DiscPlot.java
private Rectangle2D getDataArea(Rectangle2D plotArea) { double hGap = plotArea.getWidth() * this.interiorGap; double vGap = plotArea.getHeight() * this.interiorGap; return new Rectangle2D.Double(plotArea.getX() + hGap, plotArea.getY() + vGap, plotArea.getWidth() - 2 * hGap, plotArea.getHeight() - 2 * vGap); }
From source file:org.pentaho.plugin.jfreereport.reportcharts.JFreeChartReportDrawable.java
private AbstractImageMapEntry createMapEntry(final Shape area, final Rectangle2D dataArea) { if (buggyDrawArea) { if (area instanceof Ellipse2D) { final Ellipse2D ellipse2D = (Ellipse2D) area; if (ellipse2D.getWidth() == ellipse2D.getHeight()) { return new CircleImageMapEntry((float) (ellipse2D.getCenterX() + dataArea.getX()), (float) (ellipse2D.getCenterY() + dataArea.getY()), (float) (ellipse2D.getWidth() / 2)); }//from ww w . ja va2 s. co m } else if (area instanceof Rectangle2D) { final Rectangle2D rect = (Rectangle2D) area; return (new RectangleImageMapEntry((float) (rect.getX() + dataArea.getX()), (float) (rect.getY() + dataArea.getY()), (float) (rect.getX() + rect.getWidth()), (float) (rect.getY() + rect.getHeight()))); } } else { if (area instanceof Ellipse2D) { final Ellipse2D ellipse2D = (Ellipse2D) area; if (ellipse2D.getWidth() == ellipse2D.getHeight()) { return new CircleImageMapEntry((float) (ellipse2D.getCenterX()), (float) (ellipse2D.getCenterY()), (float) (ellipse2D.getWidth() / 2)); } } else if (area instanceof Rectangle2D) { final Rectangle2D rect = (Rectangle2D) area; return (new RectangleImageMapEntry((float) (rect.getX()), (float) (rect.getY()), (float) (rect.getX() + rect.getWidth()), (float) (rect.getY() + rect.getHeight()))); } } final Area a = new Area(area); if (buggyDrawArea) { a.transform(AffineTransform.getTranslateInstance(dataArea.getX(), dataArea.getY())); } if (dataArea.isEmpty() == false) { a.intersect(new Area(dataArea)); } final PathIterator pathIterator = a.getPathIterator(null, 2); final FloatList floats = new FloatList(100); final float[] coords = new float[6]; while (pathIterator.isDone() == false) { final int retval = pathIterator.currentSegment(coords); if (retval == PathIterator.SEG_MOVETO || retval == PathIterator.SEG_LINETO) { floats.add(coords[0]); floats.add(coords[1]); } pathIterator.next(); } if (floats.size() == 0) { return null; } return (new PolygonImageMapEntry(floats.toArray())); }
From source file:org.jfree.chart.demo.CylinderRenderer.java
public void drawItem(Graphics2D graphics2d, CategoryItemRendererState categoryitemrendererstate, Rectangle2D rectangle2d, CategoryPlot categoryplot, CategoryAxis categoryaxis, ValueAxis valueaxis, CategoryDataset categorydataset, int i, int j, int k) { Number number = categorydataset.getValue(i, j); if (number == null) return;/*from ww w . j a v a 2 s. c o m*/ double d = number.doubleValue(); java.awt.geom.Rectangle2D.Double double1 = new java.awt.geom.Rectangle2D.Double(rectangle2d.getX(), rectangle2d.getY() + getYOffset(), rectangle2d.getWidth() - getXOffset(), rectangle2d.getHeight() - getYOffset()); PlotOrientation plotorientation = categoryplot.getOrientation(); double d1 = calculateBarW0(categoryplot, plotorientation, double1, categoryaxis, categoryitemrendererstate, i, j); double ad[] = calculateBarL0L1(d); if (ad == null) return; RectangleEdge rectangleedge = categoryplot.getRangeAxisEdge(); float f = (float) valueaxis.valueToJava2D(ad[0], double1, rectangleedge); float f1 = (float) valueaxis.valueToJava2D(ad[1], double1, rectangleedge); float f2 = Math.min(f, f1); float f3 = Math.abs(f1 - f); GeneralPath generalpath = new GeneralPath(); java.awt.geom.Ellipse2D.Double double2 = null; if (plotorientation == PlotOrientation.HORIZONTAL) { generalpath.moveTo((float) ((double) f2 + getXOffset() / 2D), (float) d1); generalpath.lineTo((float) ((double) (f2 + f3) + getXOffset() / 2D), (float) d1); java.awt.geom.Arc2D.Double double3 = new java.awt.geom.Arc2D.Double(f2 + f3, d1, getXOffset(), categoryitemrendererstate.getBarWidth(), 90D, 180D, 0); generalpath.append(double3, true); generalpath.lineTo((float) ((double) f2 + getXOffset() / 2D), (float) (d1 + categoryitemrendererstate.getBarWidth())); double3 = new java.awt.geom.Arc2D.Double(f2, d1, getXOffset(), categoryitemrendererstate.getBarWidth(), 270D, -180D, 0); generalpath.append(double3, true); generalpath.closePath(); double2 = new java.awt.geom.Ellipse2D.Double(f2 + f3, d1, getXOffset(), categoryitemrendererstate.getBarWidth()); } else { generalpath.moveTo((float) d1, (float) ((double) f2 - getYOffset() / 2D)); generalpath.lineTo((float) d1, (float) ((double) (f2 + f3) - getYOffset() / 2D)); java.awt.geom.Arc2D.Double double4 = new java.awt.geom.Arc2D.Double(d1, (double) (f2 + f3) - getYOffset(), categoryitemrendererstate.getBarWidth(), getYOffset(), 180D, 180D, 0); generalpath.append(double4, true); generalpath.lineTo((float) (d1 + categoryitemrendererstate.getBarWidth()), (float) ((double) f2 - getYOffset() / 2D)); double4 = new java.awt.geom.Arc2D.Double(d1, (double) f2 - getYOffset(), categoryitemrendererstate.getBarWidth(), getYOffset(), 0.0D, -180D, 0); generalpath.append(double4, true); generalpath.closePath(); double2 = new java.awt.geom.Ellipse2D.Double(d1, (double) f2 - getYOffset(), categoryitemrendererstate.getBarWidth(), getYOffset()); } Object obj = getItemPaint(i, j); if (getGradientPaintTransformer() != null && (obj instanceof GradientPaint)) { GradientPaint gradientpaint = (GradientPaint) obj; obj = getGradientPaintTransformer().transform(gradientpaint, generalpath); } graphics2d.setPaint(((java.awt.Paint) (obj))); graphics2d.fill(generalpath); if (obj instanceof GradientPaint) { graphics2d.setPaint(((GradientPaint) obj).getColor2()); } if (double2 != null) { graphics2d.fill(double2); } if (isDrawBarOutline() && categoryitemrendererstate.getBarWidth() > 3D) { graphics2d.setStroke(getItemOutlineStroke(i, j)); graphics2d.setPaint(getItemOutlinePaint(i, j)); graphics2d.draw(generalpath); if (double2 != null) graphics2d.draw(double2); } CategoryItemLabelGenerator categoryitemlabelgenerator = getItemLabelGenerator(i, j); if (categoryitemlabelgenerator != null && isItemLabelVisible(i, j)) drawItemLabel(graphics2d, categorydataset, i, j, categoryplot, categoryitemlabelgenerator, generalpath.getBounds2D(), d < 0.0D); if (categoryitemrendererstate.getInfo() != null) { EntityCollection entitycollection = categoryitemrendererstate.getEntityCollection(); if (entitycollection != null) { String s = null; CategoryToolTipGenerator categorytooltipgenerator = getToolTipGenerator(i, j); if (categorytooltipgenerator != null) s = categorytooltipgenerator.generateToolTip(categorydataset, i, j); String s1 = null; if (getItemURLGenerator(i, j) != null) s1 = getItemURLGenerator(i, j).generateURL(categorydataset, i, j); CategoryItemEntity categoryitementity = new CategoryItemEntity(generalpath.getBounds2D(), s, s1, categorydataset, categorydataset.getRowKey(i), categorydataset.getColumnKey(j)); entitycollection.add(categoryitementity); } } }
From source file:com.newatlanta.bluedragon.CustomClusteredXYBarRenderer.java
private Point2D calculateLabelAnchorPoint(ItemLabelAnchor anchor, Rectangle2D bar, PlotOrientation orientation) {/*from w w w. jav a 2 s .c o m*/ Point2D result = null; double offset = getItemLabelAnchorOffset(); double x0 = bar.getX() - offset; double x1 = bar.getX(); double x2 = bar.getX() + offset; double x3 = bar.getCenterX(); double x4 = bar.getMaxX() - offset; double x5 = bar.getMaxX(); double x6 = bar.getMaxX() + offset; double y0 = bar.getMaxY() + offset; double y1 = bar.getMaxY(); double y2 = bar.getMaxY() - offset; double y3 = bar.getCenterY(); double y4 = bar.getMinY() + offset; double y5 = bar.getMinY(); double y6 = bar.getMinY() - offset; if (anchor == ItemLabelAnchor.CENTER) { result = new Point2D.Double(x3, y3); } else if (anchor == ItemLabelAnchor.INSIDE1) { result = new Point2D.Double(x4, y4); } else if (anchor == ItemLabelAnchor.INSIDE2) { result = new Point2D.Double(x4, y4); } else if (anchor == ItemLabelAnchor.INSIDE3) { result = new Point2D.Double(x4, y3); } else if (anchor == ItemLabelAnchor.INSIDE4) { result = new Point2D.Double(x4, y2); } else if (anchor == ItemLabelAnchor.INSIDE5) { result = new Point2D.Double(x4, y2); } else if (anchor == ItemLabelAnchor.INSIDE6) { result = new Point2D.Double(x3, y2); } else if (anchor == ItemLabelAnchor.INSIDE7) { result = new Point2D.Double(x2, y2); } else if (anchor == ItemLabelAnchor.INSIDE8) { result = new Point2D.Double(x2, y2); } else if (anchor == ItemLabelAnchor.INSIDE9) { result = new Point2D.Double(x2, y3); } else if (anchor == ItemLabelAnchor.INSIDE10) { result = new Point2D.Double(x2, y4); } else if (anchor == ItemLabelAnchor.INSIDE11) { result = new Point2D.Double(x2, y4); } else if (anchor == ItemLabelAnchor.INSIDE12) { result = new Point2D.Double(x3, y4); } else if (anchor == ItemLabelAnchor.OUTSIDE1) { result = new Point2D.Double(x5, y6); } else if (anchor == ItemLabelAnchor.OUTSIDE2) { result = new Point2D.Double(x6, y5); } else if (anchor == ItemLabelAnchor.OUTSIDE3) { result = new Point2D.Double(x6, y3); } else if (anchor == ItemLabelAnchor.OUTSIDE4) { result = new Point2D.Double(x6, y1); } else if (anchor == ItemLabelAnchor.OUTSIDE5) { result = new Point2D.Double(x5, y0); } else if (anchor == ItemLabelAnchor.OUTSIDE6) { result = new Point2D.Double(x3, y0); } else if (anchor == ItemLabelAnchor.OUTSIDE7) { result = new Point2D.Double(x1, y0); } else if (anchor == ItemLabelAnchor.OUTSIDE8) { result = new Point2D.Double(x0, y1); } else if (anchor == ItemLabelAnchor.OUTSIDE9) { result = new Point2D.Double(x0, y3); } else if (anchor == ItemLabelAnchor.OUTSIDE10) { result = new Point2D.Double(x0, y5); } else if (anchor == ItemLabelAnchor.OUTSIDE11) { result = new Point2D.Double(x1, y6); } else if (anchor == ItemLabelAnchor.OUTSIDE12) { result = new Point2D.Double(x3, y6); } return result; }
From source file:net.sf.mzmine.modules.visualization.twod.TwoDXYPlot.java
public boolean render(final Graphics2D g2, final Rectangle2D dataArea, int index, PlotRenderingInfo info, CrosshairState crosshairState) { // if this is not TwoDDataSet if (index != 0) return super.render(g2, dataArea, index, info, crosshairState); // prepare some necessary constants final int x = (int) dataArea.getX(); final int y = (int) dataArea.getY(); final int width = (int) dataArea.getWidth(); final int height = (int) dataArea.getHeight(); final double imageRTMin = (double) getDomainAxis().getRange().getLowerBound(); final double imageRTMax = (double) getDomainAxis().getRange().getUpperBound(); final double imageRTStep = (imageRTMax - imageRTMin) / width; final double imageMZMin = (double) getRangeAxis().getRange().getLowerBound(); final double imageMZMax = (double) getRangeAxis().getRange().getUpperBound(); final double imageMZStep = (imageMZMax - imageMZMin) / height; if ((zoomOutBitmap != null) && (imageRTMin == totalRTRange.getMin()) && (imageRTMax == totalRTRange.getMax()) && (imageMZMin == totalMZRange.getMin()) && (imageMZMax == totalMZRange.getMax()) && (zoomOutBitmap.getWidth() == width) && (zoomOutBitmap.getHeight() == height)) { g2.drawImage(zoomOutBitmap, x, y, null); return true; }/*from w ww. j a va2 s . c om*/ // Save current time Date renderStartTime = new Date(); // prepare a double array of summed intensities double values[][] = new double[width][height]; maxValue = 0; // now this is an instance variable Random r = new Random(); for (int i = 0; i < width; i++) for (int j = 0; j < height; j++) { double pointRTMin = imageRTMin + (i * imageRTStep); double pointRTMax = pointRTMin + imageRTStep; double pointMZMin = imageMZMin + (j * imageMZStep); double pointMZMax = pointMZMin + imageMZStep; double lv = dataset.getMaxIntensity(new Range(pointRTMin, pointRTMax), new Range(pointMZMin, pointMZMax), plotMode); if (logScale) { lv = Math.log10(lv); if (lv < 0 || Double.isInfinite(lv)) lv = 0; values[i][j] = lv; //values[r.nextInt(width)][r.nextInt(height)] = lv; } else { values[i][j] = lv; } if (lv > maxValue) maxValue = lv; } // This should never happen, but just for correctness if (maxValue == 0) return false; // Normalize all values for (int i = 0; i < width; i++) for (int j = 0; j < height; j++) { values[i][j] /= maxValue; } // prepare a bitmap of required size BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); // draw image points for (int i = 0; i < width; i++) for (int j = 0; j < height; j++) { Color pointColor = paletteType.getColor(values[i][j]); image.setRGB(i, height - j - 1, pointColor.getRGB()); } // if we are zoomed out, save the values if ((imageRTMin == totalRTRange.getMin()) && (imageRTMax == totalRTRange.getMax()) && (imageMZMin == totalMZRange.getMin()) && (imageMZMax == totalMZRange.getMax())) { zoomOutBitmap = image; } // Paint image g2.drawImage(image, x, y, null); Date renderFinishTime = new Date(); logger.finest("Finished rendering 2D visualizer, " + (renderFinishTime.getTime() - renderStartTime.getTime()) + " ms"); return true; }