created mirror
This commit is contained in:
commit
6764738d92
600 files changed
+87187
No files matched your search
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
SimpleLineInfo.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.*;
|
||||
|
||||
/** A simple implementation of LineInfo, for plain strings in a list
|
||||
* of fonts.
|
||||
*/
|
||||
|
||||
public class SimpleLineInfo implements LineInfo {
|
||||
public static final String rcsid = "$Id: SimpleLineInfo.java,v 1.8 2000/09/19 10:32:00 ajk Exp $";
|
||||
public static boolean dbg = false;
|
||||
static final void p(String s) { if(dbg) System.out.println(s); }
|
||||
|
||||
public interface Layout {
|
||||
FontMetrics getFontMetrics(int line);
|
||||
int getWidth(int line);
|
||||
int getCenterLine();
|
||||
}
|
||||
|
||||
String s;
|
||||
Layout l;
|
||||
int cursor;
|
||||
|
||||
SimpleLineInfo(String s, int cursor, Layout l) { this.s = s; this.l = l;
|
||||
this.cursor = cursor;}
|
||||
|
||||
public int getMax() { return s.length(); }
|
||||
public int getCursor() { return cursor; }
|
||||
public int getCenterLine() { return l.getCenterLine(); }
|
||||
|
||||
public void split(int x0, int n, int sug, int[] ret) {
|
||||
int ind = s.indexOf(' ', x0+1);
|
||||
|
||||
if(ind >= x0+n || ind < 0) {
|
||||
// split word
|
||||
ind = 1;
|
||||
ret[0] = 1;
|
||||
ret[1] = 500;
|
||||
} else {
|
||||
while(true) {
|
||||
int ind2 = s.indexOf(' ', ind+1);
|
||||
if(ind2 < 0) break;
|
||||
if(ind2 >= x0+n) break;
|
||||
if(ind2 >= sug) break;
|
||||
ind = ind2;
|
||||
}
|
||||
ret[0] = ind - x0;
|
||||
ret[1] = 0;
|
||||
}
|
||||
p("Split: "+x0+" "+n+" "+sug+" "+ret[0]+" "+ret[1]);
|
||||
}
|
||||
|
||||
public void widthPenalty(int x0, int n, int line, int[] ret) {
|
||||
p("WP: "+x0+" "+n+" "+line);
|
||||
String subs = s.substring(x0, x0+n).trim();
|
||||
int w = l.getFontMetrics(line).stringWidth(subs);
|
||||
int want = l.getWidth(line);
|
||||
ret[0] = (1000*w) / want;
|
||||
if(w > want) {
|
||||
ret[1] = (w-want) * (w-want) / 3;
|
||||
} else {
|
||||
ret[1] = (want - w) / 2;
|
||||
}
|
||||
p("WP: "+x0+" "+n+" "+line+" "+want+" "+w+" Ret: "+ret[0]+" "+ret[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user