/******************************************************************************* * Copyright (c) 2003, 2010, 2012 IBM Corporation, Gerhardt Informatics Kft. and others. * 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 Corporation - initial API and implementation * Gerhardt Informatics Kft. - GEFGWT port *******************************************************************************/ package org.eclipse.gef.internal.ui.rulers; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FocusEvent; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.PointList; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.SharedCursors; /** * @author Pratik Shah */ public class GuideFigure extends Figure { private static final Dimension H_PREFSIZE = new Dimension(9, 11); private static final Dimension V_PREFSIZE = new Dimension(11, 9); private boolean horizontal; private boolean drawFocus; public GuideFigure(boolean isHorizontal) { horizontal = isHorizontal; setBackgroundColor(ColorConstants.button); if (horizontal) { setCursor(SharedCursors.SIZENS); } else { setCursor(SharedCursors.SIZEWE); } } /* * (non-Javadoc) * * @see org.eclipse.draw2d.Figure#getPreferredSize(int, int) */ public Dimension getPreferredSize(int wHint, int hHint) { Dimension prefSize; if (isHorizontal()) { prefSize = H_PREFSIZE; } else { prefSize = V_PREFSIZE; } if (getBorder() != null) { prefSize = prefSize.getExpanded(getInsets().getWidth(), getInsets() .getHeight()); } return prefSize; } public void handleFocusGained(FocusEvent event) { super.handleFocusGained(event); repaint(); getUpdateManager().performUpdate(); } public void handleFocusLost(FocusEvent event) { super.handleFocusLost(event); repaint(); getUpdateManager().performUpdate(); } protected boolean isHorizontal() { return horizontal; } /* * (non-Javadoc) * * @see org.eclipse.draw2d.Figure#paintFigure(org.eclipse.draw2d.Graphics) */ protected void paintFigure(Graphics graphics) { // Since painting can occur a lot, using a transposer is not good for // performance. // Hence, this method does not use it. PointList list = new PointList(); graphics.pushState(); if (isHorizontal()) { // Rectangle clientArea = getClientArea(); // clientArea.shrink(0, 1); // clientArea.x = clientArea.x + clientArea.width - 8; // clientArea.width = 8; // // graphics.fillRectangle(clientArea // .getShrinked(new Insets(2, 2, 2, 1))); // // graphics.setForegroundColor(ColorConstants.buttonLightest); // graphics.drawLine(clientArea.x, clientArea.y + 1, clientArea.x, // clientArea.y + 7); // graphics.drawLine(clientArea.x + 1, clientArea.y, clientArea.x + // 4, // clientArea.y); // graphics.drawLine(clientArea.x + 1, clientArea.y + 8, // clientArea.x + 4, clientArea.y + 8); // graphics.drawLine(clientArea.x + 2, clientArea.y + 2, // clientArea.x + 2, clientArea.y + 5); // graphics.drawLine(clientArea.x + 3, clientArea.y + 2, // clientArea.x + 3, clientArea.y + 2); // graphics.drawLine(clientArea.x + 6, clientArea.y + 2, // clientArea.x + 6, clientArea.y + 2); // graphics.drawLine(clientArea.x + 6, clientArea.y + 6, // clientArea.x + 6, clientArea.y + 6); // graphics.drawLine(clientArea.x + 7, clientArea.y + 3, // clientArea.x + 7, clientArea.y + 5); // // graphics.setForegroundColor(ColorConstants.buttonDarker); // graphics.drawLine(clientArea.x + 1, clientArea.y + 1, // clientArea.x + 4, clientArea.y + 1); // graphics.drawLine(clientArea.x + 1, clientArea.y + 2, // clientArea.x + 1, clientArea.y + 7); // graphics.drawLine(clientArea.x + 2, clientArea.y + 7, // clientArea.x + 2, clientArea.y + 7); // graphics.drawLine(clientArea.x + 5, clientArea.y + 2, // clientArea.x + 5, clientArea.y + 2); // graphics.drawLine(clientArea.x + 6, clientArea.y + 3, // clientArea.x + 6, clientArea.y + 3); // // graphics.setForegroundColor(ColorConstants.buttonDarkest); // graphics.drawLine(clientArea.x + 3, clientArea.y + 7, // clientArea.x + 4, clientArea.y + 7); // graphics.drawLine(clientArea.x + 5, clientArea.y + 6, // clientArea.x + 5, clientArea.y + 6); // graphics.drawLine(clientArea.x + 6, clientArea.y + 5, // clientArea.x + 6, clientArea.y + 5); // graphics.drawLine(clientArea.x + 7, clientArea.y + 4, // clientArea.x + 7, clientArea.y + 4); Rectangle clientArea = getClientArea(); clientArea.x = clientArea.getTopRight().x - 7; clientArea.y++; list.addPoint(clientArea.x, clientArea.y); list.addPoint(clientArea.x + 3, clientArea.y); list.addPoint(clientArea.x + 6, clientArea.y + 3); list.addPoint(clientArea.x + 3, clientArea.y + 6); list.addPoint(clientArea.x, clientArea.y + 6); graphics.fillPolygon(list); graphics.drawPolygon(list); graphics.setForegroundColor(ColorConstants.buttonLightest); graphics.drawLine(clientArea.x - 1, clientArea.y, clientArea.x - 1, clientArea.y + 6); graphics.drawLine(clientArea.x, clientArea.y - 1, clientArea.x + 3, clientArea.y - 1); graphics.drawLine(clientArea.x, clientArea.y + 7, clientArea.x + 3, clientArea.y + 7); if (drawFocus) { clientArea = getClientArea(); clientArea.shrink(0, 1); clientArea.y -= 1; clientArea.x = clientArea.x + clientArea.width - 8; clientArea.width = 8; clientArea.expand(1, 1); clientArea.height -= 2; graphics.setClip(clientArea.getCopy().expand(1, 1)); graphics.setForegroundColor(ColorConstants.black); graphics.setBackgroundColor(ColorConstants.white); graphics.drawFocus(clientArea); } } else { // Rectangle clientArea = getClientArea(); // clientArea.shrink(1, 0); // clientArea.y = clientArea.y + clientArea.height - 8; // clientArea.height = 8; // // graphics.fillRectangle(clientArea // .getShrinked(new Insets(2, 2, 1, 2))); // // graphics.setForegroundColor(ColorConstants.buttonLightest); // graphics.drawLine(clientArea.x + 1, clientArea.y, clientArea.x + // 7, // clientArea.y); // graphics.drawLine(clientArea.x, clientArea.y + 1, clientArea.x, // clientArea.y + 4); // graphics.drawLine(clientArea.x + 8, clientArea.y + 1, // clientArea.x + 8, clientArea.y + 4); // graphics.drawLine(clientArea.x + 2, clientArea.y + 2, // clientArea.x + 5, clientArea.y + 2); // graphics.drawLine(clientArea.x + 2, clientArea.y + 3, // clientArea.x + 2, clientArea.y + 3); // graphics.drawLine(clientArea.x + 2, clientArea.y + 6, // clientArea.x + 2, clientArea.y + 6); // graphics.drawLine(clientArea.x + 6, clientArea.y + 6, // clientArea.x + 6, clientArea.y + 6); // graphics.drawLine(clientArea.x + 3, clientArea.y + 7, // clientArea.x + 5, clientArea.y + 7); // // graphics.setForegroundColor(ColorConstants.buttonDarker); // graphics.drawLine(clientArea.x + 1, clientArea.y + 1, // clientArea.x + 1, clientArea.y + 4); // graphics.drawLine(clientArea.x + 2, clientArea.y + 1, // clientArea.x + 7, clientArea.y + 1); // graphics.drawLine(clientArea.x + 7, clientArea.y + 2, // clientArea.x + 7, clientArea.y + 2); // graphics.drawLine(clientArea.x + 2, clientArea.y + 5, // clientArea.x + 2, clientArea.y + 5); // graphics.drawLine(clientArea.x + 3, clientArea.y + 6, // clientArea.x + 3, clientArea.y + 6); // // graphics.setForegroundColor(ColorConstants.buttonDarkest); // graphics.drawLine(clientArea.x + 7, clientArea.y + 3, // clientArea.x + 7, clientArea.y + 4); // graphics.drawLine(clientArea.x + 6, clientArea.y + 5, // clientArea.x + 6, clientArea.y + 5); // graphics.drawLine(clientArea.x + 5, clientArea.y + 6, // clientArea.x + 5, clientArea.y + 6); // graphics.drawLine(clientArea.x + 4, clientArea.y + 7, // clientArea.x + 4, clientArea.y + 7); Rectangle clientArea = getClientArea(); clientArea.y = clientArea.getBottomLeft().y - 7; clientArea.x++; list.addPoint(clientArea.x, clientArea.y); list.addPoint(clientArea.x + 6, clientArea.y); list.addPoint(clientArea.x + 6, clientArea.y + 3); list.addPoint(clientArea.x + 3, clientArea.y + 6); list.addPoint(clientArea.x, clientArea.y + 3); graphics.fillPolygon(list); graphics.drawPolygon(list); graphics.setForegroundColor(ColorConstants.buttonLightest); graphics.drawLine(clientArea.x, clientArea.y - 1, clientArea.x + 6, clientArea.y - 1); graphics.drawLine(clientArea.x - 1, clientArea.y, clientArea.x - 1, clientArea.y + 3); graphics.drawLine(clientArea.x + 7, clientArea.y, clientArea.x + 7, clientArea.y + 3); if (drawFocus) { clientArea = getClientArea(); clientArea.shrink(1, 0); clientArea.x -= 1; clientArea.y = clientArea.y + clientArea.height - 8; clientArea.height = 8; clientArea.expand(1, 1); clientArea.width -= 2; graphics.setClip(clientArea.getCopy().expand(1, 1)); graphics.setForegroundColor(ColorConstants.black); graphics.setBackgroundColor(ColorConstants.white); graphics.drawFocus(clientArea); } } graphics.popState(); } public void setDrawFocus(boolean drawFocus) { if (this.drawFocus != drawFocus) { this.drawFocus = drawFocus; repaint(); } } }