From f557b696d9cac4215dca2116f91ca5db6872718e Mon Sep 17 00:00:00 2001 From: "changhyun1.lee" Date: Thu, 20 Dec 2012 13:40:58 +0900 Subject: [PATCH] [Title] Fixed Error shows in Web HTML editior of Basic app when set the width of text area to 21px [Desc.] [Issue] Redmine-7805 Change-Id: I3bf82dbf6d622e65b24a8adf02c4b7834347d6df --- .../css2/widget/TextAreaWidgetProvider.java | 214 +++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100755 org.eclipse.jst.pagedesigner.patch/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java diff --git a/org.eclipse.jst.pagedesigner.patch/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java b/org.eclipse.jst.pagedesigner.patch/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java new file mode 100755 index 0000000..1f9340f --- /dev/null +++ b/org.eclipse.jst.pagedesigner.patch/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java @@ -0,0 +1,214 @@ +/******************************************************************************* + * Copyright (c) 2006 Sybase, Inc. 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: + * Sybase, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.jst.pagedesigner.css2.widget; + +import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.FigureUtilities; +import org.eclipse.draw2d.Graphics; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.jst.pagedesigner.css2.ICSSStyle; +import org.eclipse.jst.pagedesigner.css2.font.ICSSFont; +import org.eclipse.jst.pagedesigner.css2.layout.TextLayoutSupport; +import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID; +import org.eclipse.jst.pagedesigner.css2.provider.DimensionInfo; +import org.eclipse.jst.pagedesigner.css2.style.DefaultStyle; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.widgets.Display; + +/** + * @author mengbo + * @version 1.5 + */ +public class TextAreaWidgetProvider extends AbstractWidgetProvider { + private static final int DEFAULTCOLUMN = 20; + + private static final int DEFAULTROWS = 2; + + private static final int VERTICAL_PADDING = 2; + + private static final int HORIZONTAL_PADDING = 2; + + private static int ARRAWWIDTH = 16; + + private static int ARROWHEIGHT = 16; + + private int _columns = DEFAULTCOLUMN; + + private int _rows = DEFAULTROWS; + + private String _value; + + /** + * @param style + */ + public TextAreaWidgetProvider(ICSSStyle style) { + super(style); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider#getPreferredDimension(int, + * int) + */ + public DimensionInfo getPreferredDimension(int width, int height) { + if (width <= 0) { + width = getDefaultWidth(); + } + if (height <= 0) { + height = getDefaultHeight(); + } + return new DimensionInfo(width, height, -1); + } + + /** + * @return + */ + private int getDefaultHeight() { + ICSSStyle style = this.getCSSStyle(); + if (style == null) { + style = DefaultStyle.getInstance(); + } + ICSSFont font = style.getCSSFont(); + Font swtfont = font.getSwtFont(); + int fontHeight = FigureUtilities.getFontMetrics(swtfont).getHeight(); + + return (fontHeight) * _rows + VERTICAL_PADDING; + } + + /** + * @return + */ + private int getDefaultWidth() { + ICSSStyle style = this.getCSSStyle(); + if (style == null) { + style = DefaultStyle.getInstance(); + } + ICSSFont font = style.getCSSFont(); + + int fontWidth = FigureUtilities.getFontMetrics(font.getSwtFont()) + .getAverageCharWidth(); + return _columns * fontWidth + ARRAWWIDTH + HORIZONTAL_PADDING; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider#paintFigure(org.eclipse.draw2d.Graphics, + * org.eclipse.draw2d.geometry.Rectangle) + */ + public void paintFigure(Graphics g, Rectangle rect) { + if (_value != null) { + g.clipRect(rect); + ICSSStyle style = this.getCSSStyle(); + if (style == null) { + style = DefaultStyle.getInstance(); + } + int decoration = ((Integer) style + .getStyleProperty(ICSSPropertyID.ATTR_TEXTDECORATION)) + .intValue(); + ICSSFont font = style.getCSSFont(); + g.setFont(font.getSwtFont()); + + Color newColor = null; + Object color = style.getColor(); + if (color instanceof Color) { + g.setForegroundColor((Color) color); + } else if (color instanceof RGB) { + newColor = new Color(Display.getCurrent(), (RGB) color); + g.setForegroundColor(newColor); + } else { + g.setForegroundColor(ColorConstants.black); + } + + Object textAlign = style + .getStyleProperty(ICSSPropertyID.ATTR_TEXTALIGN); + int begin = 0; + int end = 0; + int fontHeight = FigureUtilities.getFontMetrics(font.getSwtFont()) + .getHeight(); + + int fontWidth = FigureUtilities.getFontMetrics(font.getSwtFont()) + .getAverageCharWidth(); + int columns = (rect.width - HORIZONTAL_PADDING) / fontWidth; + + int i = 0; + while (true) { + int y = rect.y + VERTICAL_PADDING / 2 + fontHeight * i; + if (y >= rect.bottom()) { + break; + } + end += columns; + if (end > _value.length()) { + end = _value.length(); + } + end = getTextCount(begin, end, g.getFont(), rect.width + - ARRAWWIDTH); + + String text = _value.substring(begin, end); + + int width = FigureUtilities.getTextWidth(text, g.getFont()); + int x = TextLayoutSupport.getBeginX(textAlign, rect, width); + g.drawString(text, x, y); + + TextLayoutSupport.paintTextDecoration(g, new Rectangle(x, y, + width, fontHeight), decoration); + begin = end; + + if (end == _value.length()) { + break; + } + i++; + } + if (newColor != null) { + newColor.dispose(); + } + } + int borderThick = 2; + BorderUtil + .drawVertialBar(g, ARRAWWIDTH, ARROWHEIGHT, borderThick, rect); + } + + private int getTextCount(int begin, int end, Font swtFont, int textWidth) { + while (FigureUtilities.getTextWidth(_value.substring(begin, end), + swtFont) > textWidth) { + if (end == 0) { + return end; + } + end--; + } + return end; + } + + /** + * @param columns + */ + public void setColumns(int columns) { + this._columns = (columns > 0 ? columns : DEFAULTCOLUMN); + } + + /** + * @param rows + */ + public void setRows(int rows) { + this._rows = (rows > 0 ? rows : DEFAULTROWS); + } + + /** + * @param value + */ + public void setValue(String value) { + this._value = value; + } +} -- 2.7.4