/* TestLines.java * * Copyright (c) 2000, Ted Nelson and Tuomas Lukka * * You may use and distribute under the terms of either the GNU Lesser * General Public License, either version 2 of the license or, * at your choice, any later version. Alternatively, you may use and * distribute under the terms of the XPL. * * See the LICENSE.lgpl and LICENSE.xpl files for the specific terms of * the licenses. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the README * file for more details. * */ /* * Written by Tuomas Lukka */ package org.gzigzag; import java.util.*; import java.io.*; import java.awt.*; /** Some tests for line breaking. */ public class TestLines { public static final String rcsid = "$Id: TestLines.java,v 1.10 2001/02/23 15:01:10 tjl Exp $"; static final boolean dbg = false; static final void p(String s) { if(dbg) System.out.println(s); } Frame f = new Frame(); /* Jikes won't eat this any more in new versions due to äö. static final String str = "Pikku stringi testataksemme rivinpilkkomista. "+ "Tällä kertaa kirjoitammekin sen suomeksi - englanninkielisiä lukijoitamme "+ "varmaankin hämmästyttää. Etenkin ääkköset. Tämä merkkijono piirretään "+ "näytölle monta kertaa erilaisena, siis \"kursori\" eri kohdalle laitettuna. "+ "Tästä voidaan sitten nähdä, toimiiko rivien pilkkominen palasiksi oikein. " + "Itse asiassa merkkijonoa tulee vielä jonkin verran pidentää koska muuten " + "emme ehdi nähdä kaikkia efektejä. Hauskaahan tästä tulee vasta sitten " + "kun voimme oikeasti muokata näin näytettyä tekstiä mutta tämä testi on " + "tärkeä askel siihen suuntaan mentäessä." ; */ static final String str = "lsjifs lefjis elfj sef jsle fjslf "; class MyLayout implements SimpleLineInfo.Layout { int c; MyLayout(int c) { this.c = c; } public FontMetrics getFontMetrics(int line) { return fm[find(c, line)]; } public int getWidth(int line) { return width(c, line); } public int getCenterLine() { return 0; } } public static void main(String[] argv) { TestLines t = new TestLines(); t.br(); } int NTESTS = 1; int[][] lines = new int[NTESTS][]; Font[] fonts = new Font[64]; FontMetrics[] fm = new FontMetrics[fonts.length]; { for(int i=0; i 400) w = 400; return w; } else if(cas == 1) { int w =300 - 20 * line; if(w < 50) return 50; return w; } else if(cas == 2) { return (int)(100 + 200.0 / (1 + (line * line)/40.0)); } return -1; } int curs = 0; int dir = 1; public TestLines() { } public void br() { Component cp; f.add( cp= new Component() { Image cache; public void paint(Graphics g0) { Thread.dumpStack(); if(lines == null) return; if(cache==null) { cache = createImage(800,800); } Graphics g = cache.getGraphics(); g.setColor(getBackground()); g.fillRect(0, 0, 800, 800); for(int set = 0; set < lines.length; set++) { if(lines[set] == null) return; int cur = 0; int x = 20 + 400 * set; int y = 100; int line = lines[set][0]; for(int i=0; i= cur && curs < lines[set][i+1]) { // Trim is wrong :( int cw = metr.stringWidth(str.substring(cur, curs).trim()); g.setColor(Color.blue); g.drawLine(x+cw, y-metr.getAscent(), x+cw, y+metr.getDescent()); } g.setColor(Color.red); g.drawLine(x+width(cas, line), y-metr.getAscent(), x+width(cas,line), y+metr.getDescent()); cur = lines[set][i+1]; y += metr.getDescent(); line ++; } } g0.drawImage(cache, 0, 0, null); } }); f.setSize(800,800); SimpleLineBreaker slb = new SimpleLineBreaker(); f.show(); while(true) { for(int i=0; i= str.length()-5) dir = -dir; } } } }