blob: 492f2e120d83608e7b5d2ec54b65020966344227 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}
}