/**********************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
- * Copyright (c) 2011, 2012 Ericsson.
- *
+ * Copyright (c) 2005, 2013 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.
*/
// Methods
// ------------------------------------------------------------------------
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setLineStyle(int)
- */
@Override
public void setLineStyle(int style) {
fContext.setLineStyle(style);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getLineStyle()
- */
@Override
public int getLineStyle() {
return fContext.getLineStyle();
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getContentsX()
- */
@Override
public int getContentsX() {
return Math.round(fView.getContentsX() / fView.fZoomValue);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getContentsY()
- */
@Override
public int getContentsY() {
return Math.round(fView.getContentsY() / fView.fZoomValue);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getVisibleWidth()
- */
@Override
public int getVisibleWidth() {
return Math.round(fView.getVisibleWidth() / fView.fZoomValue);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getVisibleHeight()
- */
@Override
public int getVisibleHeight() {
return Math.round(fView.getVisibleHeight() / fView.fZoomValue);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#contentsToViewX(int)
- */
@Override
public int contentsToViewX(int x) {
return fView.contentsToViewX(x);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#contentsToViewY(int)
- */
@Override
public int contentsToViewY(int y) {
return fView.contentsToViewY(y);
/**
* 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) {
return c;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawLine(int, int, int, int)
- */
@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);
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawRectangle(int, int, int, int)
- */
@Override
public void drawRectangle(int x, int y, int width, int height) {
int localX = x;
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)
- */
+
@Override
public void drawFocus(int x, int y, int width, int height) {
int localX = x;
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);
setForeground(fC);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#fillPolygon(int[])
- */
@Override
public void fillPolygon(int[] points) {
int len = (points.length / 2) * 2;
i++;
localPoint[i] = fView.contentsToViewY(Math.round(points[i] * fView.fZoomValue));
}
-
- if (validatePolygonHeight(localPoint) <= 0)
+
+ if (validatePolygonHeight(localPoint) <= 0) {
return;
-
+ }
+
fContext.fillPolygon(localPoint);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawPolygon(int[])
- */
@Override
public void drawPolygon(int[] points) {
int len = (points.length / 2) * 2;
i++;
localPoint[i] = fView.contentsToViewY(Math.round(points[i] * fView.fZoomValue));
}
-
+
if (validatePolygonHeight(localPoint) <= 0) {
return;
}
fContext.drawPolygon(localPoint);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#fillRectangle(int, int, int, int)
- */
@Override
public void fillRectangle(int x, int y, int width, int height) {
int localX = x;
localHeight = fView.getVisibleHeight() + fVisibleScreenBounds - localY;
}
fContext.fillRectangle(localX, localY, localWidth, localHeight);
-
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#fillGradientRectangle(int, int, int, int, boolean)
- */
@Override
public void fillGradientRectangle(int x, int y, int width, int height, boolean isVertical) {
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);
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;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawText(java.lang.String, int, int, boolean)
- */
@Override
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);
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawText(java.lang.String, int, int)
- */
@Override
public void drawText(String string, int x, int y) {
int localX = x;
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#fillOval(int, int, int, int)
- */
@Override
public void fillOval(int x, int y, int width, int height) {
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);
fContext.fillOval(fView.contentsToViewX(localX), fView.contentsToViewY(localY), localWidth, localHeight);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getBackground()
- */
@Override
public IColor getBackground() {
if ((fBackground != null) && (fBackground.getColor() instanceof Color) && (!((Color) (fBackground.getColor())).isDisposed())) {
return ColorImpl.getSystemColor(SWT.COLOR_WHITE);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getForeground()
- */
@Override
public IColor getForeground() {
if ((fForeground != null) && (fForeground.getColor() instanceof Color) && (!((Color) (fForeground.getColor())).isDisposed())) {
return ColorImpl.getSystemColor(SWT.COLOR_WHITE);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setBackground(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IColor)
- */
@Override
public void setBackground(IColor color) {
if (color == null) {
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setForeground(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IColor)
- */
@Override
public void setForeground(IColor color) {
if (color == null) {
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setGradientColor(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IColor)
- */
@Override
public void setGradientColor(IColor color) {
if (color == null) {
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setLineWidth(int)
- */
@Override
public void setLineWidth(int width) {
if (fView.isPrinting()) {
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getLineWidth()
- */
@Override
public int getLineWidth() {
return fContext.getLineWidth();
/**
* 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.
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawTextTruncatedCentred(java.lang.String, int, int, int, int, boolean)
- */
@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);
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawTextTruncated(java.lang.String, int, int, int, int, boolean)
- */
@Override
public void drawTextTruncated(String name, int xValue, int yValue, int width, int height, boolean trans) {
int localX = xValue;
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);
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawImage(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IImage, int, int, int, int)
- */
@Override
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();
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#drawArc(int, int, int, int, int, int)
- */
@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);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setFont(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IFont)
- */
@Override
public void setFont(IFont font) {
if (font.getFont() != null && ((Font) font.getFont()).getFontData().length > 0) {
}
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getFontHeight(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IFont)
- */
@Override
public int getFontHeight(IFont font) {
if (font.getFont() != null && (font.getFont() instanceof Font) && ((Font) font.getFont()).getFontData().length > 0) {
/**
* Returns the current font height.
- *
+ *
* @return the current font height.
*/
protected int getCurrentFontHeight() {
return fContext.textExtent("lp").y; //$NON-NLS-1$
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getFontWidth(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IFont)
- */
@Override
public int getFontWidth(IFont font) {
if ((font.getFont() != null) && (font.getFont() instanceof Font)) {
fContext = null;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getZoom()
- */
@Override
public float getZoom() {
if (fView != null) {
return fView.fZoomValue;
- }
+ }
return 1;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getLineDotStyle()
- */
@Override
public int getLineDotStyle() {
return SWT.LINE_DOT;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getLineDashStyle()
- */
@Override
public int getLineDashStyle() {
return SWT.LINE_DASH;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#getLineSolidStyle()
- */
@Override
public int getLineSolidStyle() {
return SWT.LINE_SOLID;
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#createColor(int, int, int)
- */
@Override
public IColor createColor(int r, int g, int b) {
return new ColorImpl(Display.getDefault(), r, g, b);
}
- /*
- * (non-Javadoc)
- * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC#setDrawTextWithFocusStyle(boolean)
- */
@Override
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;
}