/**********************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
- * Copyright (c) 2011, 2012 Ericsson.
- *
+ * Copyright (c) 2005, 2012 IBM Corporation, Ericsson
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- * Bernd Hufmann - Updated for TMF
+ *
+ * Contributors:
+ * IBM - Initial API and implementation
+ * Bernd Hufmann - Updated for TMF
**********************************************************************/
+
package org.eclipse.linuxtools.tmf.ui.views.uml2sd;
-import org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.Frame;
import org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IColor;
import org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IFont;
import org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC;
* <p>
* This class implements the graphical context for the sequence diagram widgets.
* </p>
- *
- * @version 1.0
+ *
+ * @version 1.0
* @author sveyrier
*/
public class NGC implements IGC {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
-
+
/**
* The graphical context.
*/
*/
protected int fVisibleX;
/**
- * The current yx value (view visible height - visible screen bounds)
+ * The current yx value (view visible height - visible screen bounds)
*/
protected int yx;
/**
- * The current xx value (view visible width - visible screen bounds)
+ * The current xx value (view visible width - visible screen bounds)
*/
protected int xx;
/**
- * <code>true</code> to draw with focus else <code>false</code>.
+ * <code>true</code> to draw with focus else <code>false</code>.
*/
protected boolean fDrawWithFocus = false;
* The static visible screen bounds.
*/
private static int fVisibleScreenBounds = 0;
-
-
+
+
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Default constructor.
- *
+ *
* @param scrollView A sequence diagram view reference.
* @param gc A graphical context.
*/
/**
* Get code for drawings at given x and y position.
- *
+ *
* @param x The x position
* @param y The y position.
* @return A code for top, bottom, right and left
} else if (y < fVisibleY) {
c |= 0x02; // bottom
}
-
+
if (x > xx) {
c |= 0x04; // right
} else if (x < fVisibleX) {
*/
@Override
public void drawLine(int x1, int y1, int x2, int y2) {
- int localX1 = x1;
- int localY1 = y1;
+ int localX1 = x1;
+ int localY1 = y1;
int localX2 = x2;
int localY2 = y2;
-
+
localX1 = Math.round(localX1 * fView.fZoomValue);
localY1 = Math.round(localY1 * fView.fZoomValue);
localX2 = Math.round(localX2 * fView.fZoomValue);
int localY = y;
int localWidth = width;
int localHeight = height;
-
+
localX = Math.round(localX * fView.fZoomValue);
// Workaround to avoid problems for some special cases (not very nice)
if (localY != getContentsY()) {
}
fContext.drawRectangle(localX, localY, localWidth, localHeight);
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawFocus(int, int, int, int)
localWidth = Math.round(localWidth * fView.fZoomValue);
localHeight = Math.round(localHeight * fView.fZoomValue);
- setForeground(Frame.getUserPref().getForeGroundColorSelection());
- setBackground(Frame.getUserPref().getBackGroundColorSelection());
+ setForeground(SDViewPref.getInstance().getForeGroundColorSelection());
+ setBackground(SDViewPref.getInstance().getBackGroundColorSelection());
fContext.drawFocus(fView.contentsToViewX(localX - 1), fView.contentsToViewY(localY - 1), localWidth + 3, localHeight + 3);
i++;
localPoint[i] = fView.contentsToViewY(Math.round(points[i] * fView.fZoomValue));
}
-
- if (validatePolygonHeight(localPoint) <= 0)
+
+ if (validatePolygonHeight(localPoint) <= 0) {
return;
-
+ }
+
fContext.fillPolygon(localPoint);
}
i++;
localPoint[i] = fView.contentsToViewY(Math.round(points[i] * fView.fZoomValue));
}
-
+
if (validatePolygonHeight(localPoint) <= 0) {
return;
}
int localY = y;
int localWidth = width;
int localHeight = height;
-
+
localX = Math.round(localX * fView.fZoomValue);
localY = Math.round(localY * fView.fZoomValue);
localWidth = Math.round(localWidth * fView.fZoomValue);
setForeground(tempColor);
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#textExtent(java.lang.String)
*/
@Override
public int textExtent(String name) {
- return ((Point) (fContext.textExtent(name))).x;
+ return fContext.textExtent(name).x;
}
/*
public void drawText(String string, int x, int y, boolean isTrans) {
int localX = x;
int localY = y;
-
+
localX = Math.round(localX * fView.fZoomValue);
localY = Math.round(localY * fView.fZoomValue);
fContext.drawText(string, fView.contentsToViewX(localX), fView.contentsToViewY(localY), isTrans);
int localY = y;
int localWidth = width;
int localHeight = height;
-
+
localX = Math.round(localX * fView.fZoomValue);
localY = Math.round(localY * fView.fZoomValue);
localWidth = Math.round(localWidth * fView.fZoomValue);
/**
* Method to draw a text in rectangle. (Linux GTK Workaround)
- *
+ *
* @param string The text to draw.
* @param x The x position.
* @param y The y position.
*/
@Override
public void drawTextTruncatedCentred(String name, int xValue, int yValue, int width, int height, boolean trans) {
+ int localX = xValue;
+ int localY = yValue;
+ int localWidth = width;
+ int localHeight = height;
+
Point tx = fContext.textExtent(name);
- xValue = Math.round(xValue * fView.fZoomValue);
+ localX = Math.round(localX * fView.fZoomValue);
int y = 0;
// Workaround to avoid round problems for some special cases (not very nice)
- if (yValue != getContentsY()) {
- yValue = Math.round(yValue * fView.fZoomValue);
- y = fView.contentsToViewY(yValue);
- }
- width = Math.round(width * fView.fZoomValue);
- height = Math.round(height * fView.fZoomValue);
- int x = fView.contentsToViewX(xValue);
- if (tx.y > height) {
+ if (localY != getContentsY()) {
+ localY = Math.round(localY * fView.fZoomValue);
+ y = fView.contentsToViewY(localY);
+ }
+ localWidth = Math.round(localWidth * fView.fZoomValue);
+ localHeight = Math.round(localHeight * fView.fZoomValue);
+ int x = fView.contentsToViewX(localX);
+ if (tx.y > localHeight) {
return;
}
-
+
// Adjust height and y
if (y < -fVisibleScreenBounds) {
- height = height + y + fVisibleScreenBounds;
+ localHeight = localHeight + y + fVisibleScreenBounds;
y = -fVisibleScreenBounds;
}
- if ((height < -fVisibleScreenBounds) && (y + height < -fVisibleScreenBounds)) {
- height = -fVisibleScreenBounds;
- } else if (height + y > fView.getVisibleHeight() + fVisibleScreenBounds) {
- height = fView.getVisibleHeight() + fVisibleScreenBounds - y;
+ if ((localHeight < -fVisibleScreenBounds) && (y + localHeight < -fVisibleScreenBounds)) {
+ localHeight = -fVisibleScreenBounds;
+ } else if (localHeight + y > fView.getVisibleHeight() + fVisibleScreenBounds) {
+ localHeight = fView.getVisibleHeight() + fVisibleScreenBounds - y;
}
-
- if (tx.x <= width) {
- localDrawText(name, x + 1 + (width - tx.x) / 2, y + 1 + (height - tx.y) / 2, trans);
+
+ if (tx.x <= localWidth) {
+ localDrawText(name, x + 1 + (localWidth - tx.x) / 2, y + 1 + (localHeight - tx.y) / 2, trans);
} else {
String nameToDisplay = name;
- for (int i = name.length() - 1; i >= 0 && fContext.textExtent(nameToDisplay).x >= width; i--) {
+ for (int i = name.length() - 1; i >= 0 && fContext.textExtent(nameToDisplay).x >= localWidth; i--) {
nameToDisplay = name.substring(0, i);
}
int dotCount = 0;
buf.append("."); //$NON-NLS-1$
}
nameToDisplay = buf.toString();
- localDrawText(nameToDisplay, x + 1 + (width - fContext.textExtent(nameToDisplay).x) / 2, y + 1 + (height - fContext.textExtent(nameToDisplay).y) / 2, trans);
+ localDrawText(nameToDisplay, x + 1 + (localWidth - fContext.textExtent(nameToDisplay).x) / 2, y + 1 + (localHeight - fContext.textExtent(nameToDisplay).y) / 2, trans);
}
}
int localY = yValue;
int localWidth = width;
int localHeight = height;
-
+
localX = Math.round(localX * fView.fZoomValue);
localY = Math.round(localY * fView.fZoomValue);
localWidth = Math.round(localWidth * fView.fZoomValue);
public void drawImage(IImage image, int xValue, int yValue, int maxWith, int maxHeight) {
int localX = xValue;
int localY = yValue;
-
+
Image img = null;
if (image != null && image.getImage() instanceof Image) {
img = (Image) image.getImage();
*/
@Override
public void drawArc(int x, int y, int width, int height, int startAngle, int endAngle) {
- x = Math.round(x * fView.fZoomValue);
- y = Math.round(y * fView.fZoomValue);
- width = Math.round(width * fView.fZoomValue);
- height = Math.round(height * fView.fZoomValue);
- if (width == 0 || height == 0 || endAngle == 0) {
+ int localX = x;
+ int localY = y;
+ int localWidth = width;
+ int localHeight = height;
+
+ localX = Math.round(localX * fView.fZoomValue);
+ localY = Math.round(localY * fView.fZoomValue);
+ localWidth = Math.round(localWidth * fView.fZoomValue);
+ localHeight = Math.round(localHeight * fView.fZoomValue);
+ if (localWidth == 0 || localHeight == 0 || endAngle == 0) {
return;
}
- fContext.drawArc(fView.contentsToViewX(x), fView.contentsToViewY(y), width, height, startAngle, endAngle);
+ fContext.drawArc(fView.contentsToViewX(localX), fView.contentsToViewY(localY), localWidth, localHeight, startAngle, endAngle);
}
/*
/**
* Returns the current font height.
- *
+ *
* @return the current font height.
*/
protected int getCurrentFontHeight() {
public float getZoom() {
if (fView != null) {
return fView.fZoomValue;
- }
+ }
return 1;
}
public void setDrawTextWithFocusStyle(boolean focus) {
fDrawWithFocus = focus;
}
-
+
/**
* Returns the screen bounds.
- *
+ *
* @return the screen bounds.
*/
protected static int getVscreenBounds() {
/**
* Sets the visible screen bounds.
- *
+ *
* @param vBounds the screen bounds.
*/
protected static void setVscreenBounds(int vBounds) {
fVisibleScreenBounds = vBounds;
}
-
+
// ------------------------------------------------------------------------
// Helper methods
// ------------------------------------------------------------------------
-
+
/**
* Validates the polygon height
- *
+ *
* @param localPoint array of points
* @return height
*/
int max = 0;
int min = Integer.MAX_VALUE;
while (i < localPoint.length) {
- max = Math.abs(localPoint[i]) > Math.abs(max) ? localPoint[i] : max;
+ max = Math.abs(localPoint[i]) > Math.abs(max) ? localPoint[i] : max;
min = Math.abs(localPoint[i]) < Math.abs(min) ? localPoint[i] : min;
i+=2;
}