/******************************************************************************* * Copyright (c) 2005 IBM Corporation 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 *******************************************************************************/ package org.eclipse.draw2d.examples.text; import org.eclipse.draw2d.*; import org.eclipse.swt.SWT; import org.eclipse.draw2d.text.*; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** * The example is used to build large draw2d.text flow documents to benchmark the layout * performance as the document changes. In this case, we allow fake typing of text. * @author hudsonr */ public class TextFlowLargeExample { static int KEYS_TYPED = 0; static boolean PERFORMANCE = false; static FigureCanvas canvas; static TextFlow target; static FlowPage page; static Font regularFont = new Font(Display.getDefault(), "Arial", 15, SWT.NORMAL), boldFont = new Font(Display.getDefault(), "Comic Sans MS", 16, SWT.BOLD); public static void main(String[] args) { Display d = Display.getDefault(); Shell shell = new Shell(d); shell.setLayout(new GridLayout()); canvas = new FigureCanvas(shell); canvas.setLayoutData(new GridData(GridData.FILL_BOTH)); canvas.setVerticalScrollBarVisibility(canvas.ALWAYS); canvas.getViewport().setContentsTracksWidth(true); shell.open(); canvas.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ addText(e.character); } }); page = new FlowPage(); populatePage(); canvas.setContents(page); while (!shell.isDisposed()) if (!d.readAndDispatch()) d.sleep(); } static protected void addText(char c){ if ((c <= 'Z' && c >='A') || (c <= 'z' && c >='a') || (c == ' ')) if (target != null){ target.setText(target.getText()+c); if (PERFORMANCE && (KEYS_TYPED % 10 == 0)){ // System.out.println(KEYS_TYPED + " keys typed " + FlowPage.VALIDATIONS + " paints and layouts"); } KEYS_TYPED++; } } static public void populatePage(){ target = new TextFlow("Normal text."); target.setToolTip(new Label("This is a Tooltip")); page.add(target); page.setOpaque(true); page.setBackgroundColor(ColorConstants.white()); for (int i=0; i< 20; i++){ BlockFlow bf = new BlockFlow(); page.add(bf); if (i == 0) bf.add(target); FlowFigure ff = new InlineFlow(); ff.add(new TextFlow("This is the first small sentence. ")); bf.add(ff); FlowFigure inline = new InlineFlow(); TextFlowFactory.addSentences(inline,4); ff.add(inline); BlockFlow block = new BlockFlow(); block.setHorizontalAligment(PositionConstants.CENTER); TextFlowFactory.addFontSizes(block, 5, 25); page.add(block); } } }