package application.draw; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Point; import application.texteditor.*; import controlledparts.*; public class Text extends AFigElement { String charSet; public void setCharSet(String c){ this.charSet=c; } public void immediateActionAfterSetStep() { if(step==50) // modifying { this.canvas.gui.openTextEditor(this.canvas.editdispatch); String s=""+this.text.toString(); this.canvas.gui.textEditFrame.getTextArea().setText(s); selected=false; canvas.ftemp.remove(this); // canvas.editdispatch.select(); step=-10; return; } } public boolean saveAttrib(TemporalyText outs) { if(color==null) color=Color.black; if(!strmWrite(outs,"attrib(\n")) return false; if(!strmWrite(outs,"color("+color.getRGB()+")\n")) return false; if(!strmWrite(outs,"depth("+depth+")\n")) return false; if(!strmWrite(outs,"width("+lineWidth+")\n")) return false; if(!strmWrite(outs,"font(\""+font.getName()+"\","+font.getStyle()+","+font.getSize()+")\n")) return false; if(!strmWrite(outs,")\n")) return false; return true; } public void setFont(Font f) { canvas.setFont(f); this.font=f; fmetrics=canvas.getFontMetrics(font); } public void setText(String s) { text=new StringBuffer(s); } public void drawString2(Graphics g,StringBuffer s) { int height; int lines; int n; int p1,p2; int maxc; int maxl; int x2,y2; char buff[]; buff= new char[256]; height=fmetrics.getMaxAscent()+fmetrics.getMaxDescent(); lines=0; n=0; p1=0; p2=0; maxl=0; maxc=0; String aLine=""; while(s.length()>n){ if(s.charAt(n)=='\n'|| s.charAt(n)==(char)13){ g.drawString(aLine,xView(offX),yView(offY+height*lines+fmetrics.getMaxAscent())); aLine=""; lines++; p1=n+1; p2=-1; } if(s.charAt(n)!='\n') aLine=aLine+s.charAt(n); p2++; n++; } g.drawString(aLine,xView(offX),yView(offY+height*lines+fmetrics.getMaxAscent())); } public int getCursorPosition(int x, int y) { if(xxView(offX)+x2) return len; return (int)((((double)x-(double)(xView(offX)))/(double)x2)*len); } public int oldY; public int oldX; public void magnifyXY() { // int x1,y1,x2,y2; double offXw, offYw; offXw=oldX; offYw=oldY; magrotateP(dcX,dcY,magRatio,angle,(double)oldX, (double)oldY); offX=(int)newdX; offY=(int)newdY; return; } public int rightMost; public Point getSize(StringBuffer s) { int height; int lines; int n; int p1,p2; int maxc; int maxl; int x2,y2; char buff[]; buff= new char[256]; height=fmetrics.getMaxAscent()+fmetrics.getMaxDescent(); lines=0; n=0; p1=0; p2=0; maxl=0; maxc=0; while(s.length()>n){ // must be corrected by using fmetrics if(s.charAt(n)=='\n'){ lines++; if(maxc0 && x2==0) x2=maxc*height; y2=(lines+1)*height; return new Point(x2,y2); } public void drawCursor(Graphics g) { StringBuffer sb=new StringBuffer(""); int l=text.length(); int i; for(i=0;il) break; sb.append(text.charAt(i)); } Point pwh=getSize(sb); g.drawLine(xView(offX)+pwh.x,yView(offY)+pwh.y, xView(offX)+pwh.x, yView(offY)); } public String str2saveable(StringBuffer s) { String sx=""; int i=0; int len=s.length(); while(i0) cursorPosition--; } else if(key==1007) { // right arrow key if(cursorPosition(offX+x2)) return false; if(y(offY+y2)) return false; return true; } public Text() { } public Text(FigCanvas c) { canvas=c; super.init(); x2=20; y2=5; text= new StringBuffer(""); cursorPosition=0; rightMost=0; } public void getSize() { Point pwh=getSize(text); x2=pwh.x; y2=pwh.y; } public void drawTemp(Graphics g) { // g.setFont(font); /* g.drawString(text.toString(), xView(offX), yView(offY+fmetrics.getMaxAscent())); */ drawString2(g,text); getSize(); g.drawRect(xView(offX),yView(offY), x2,y2); drawCursor(g); showRC(g); } public FontMetrics fmetrics; public Font font; public void draw(Graphics g) { if(showhide){ Color cc=g.getColor(); g.setColor(color); g.setFont(font); fmetrics=canvas.getFontMetrics(font); if(isEditing()) drawTemp(g); else /* g.drawString(text.toString(), xView(offX), yView(offY+fmetrics.getMaxAscent())); */ drawString2(g,text); g.setColor(cc); } } public int cursorPosition; public StringBuffer text; }