⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphicscmd.java

📁 Hecl编程语言是一个高层次的脚本语言的Java实现。其用意是要小
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2005-2007 * Wolfgang S. Kechel, data2c GmbH (www.data2c.com) *  * Author: Wolfgang S. Kechel - wolfgang.kechel@data2c.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  * http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.hecl.midp20.lcdui;import java.lang.StringBuffer;import java.util.Vector;import java.util.Stack;//#ifdef j2se//import java.awt.Color;//import java.awt.Dimension;//import java.awt.Font;import java.awt.geom.Point2D;//import java.awt.Rectangle;//#elseimport javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;import org.awt.Color;import org.awt.Dimension;import org.awt.geom.Point2D;import org.awt.Rectangle;//#endifimport org.graphics.Draw;import org.graphics.Drawable;import org.hecl.DoubleThing;import org.hecl.HeclException;import org.hecl.Interp;import org.hecl.IntThing;import org.hecl.ListThing;import org.hecl.ObjectThing;import org.hecl.Properties;import org.hecl.Thing;import org.hecl.misc.HeclUtils;public class GraphicsCmd extends OptionCmd {    public static void load(Interp ip) {	ip.addClassCmd(Drawable.class,cmd);    }    public static void unload(Interp ip) {	ip.removeClassCmd(Drawable.class);    }        public Thing cmdCode(Interp interp,Thing[] argv) throws HeclException {	throw new HeclException("Invalid direct call of GraphicsCmd.cmdCode");    };    public static Thing createDrawable(Graphics g,int width,int height) {	return ObjectThing.create(new Drawable(g,width,height));    }        protected GraphicsCmd() {}    public Thing cget(Interp ip,Object target,String optname) throws HeclException {	Drawable d = (Drawable)target;		if(optname.equals(WidgetInfo.NCLIPHEIGHT))	    return IntThing.create(d.getClipBounds().height);	if(optname.equals(WidgetInfo.NCLIPWIDTH))	    return IntThing.create(d.getClipBounds().width);	if(optname.equals(WidgetInfo.NCLIPX))	    return IntThing.create(d.getClipBounds().x);	if(optname.equals(WidgetInfo.NCLIPY))	    return IntThing.create(d.getClipBounds().y);	if(optname.equals(WidgetInfo.NCOLOR))	    return WidgetInfo.fromColor(d.getColor());	if(optname.equals("-background"))	    return WidgetInfo.fromColor(d.getColor());	if(optname.equals(WidgetInfo.NFONT))	    return FontMap.fontThing(d.getFont());	if(optname.equals("-grayscale"))	    return IntThing.create(d.getGrayScale());//#ifdef notdef	if(optname.equals("-blue"))	    return IntThing.create(d.getBlueComponent());	if(optname.equals("-green"))	    return IntThing.create(d.getGreenComponent());	if(optname.equals("-red"))	    return IntThing.create(d.getRedComponent());//#endif	if(optname.equals(WidgetInfo.NLINETYPE))	    return IntThing.create((int)d.getLineType());//#ifdef notdef	if(optname.equals("-translatex"))	    return DoubleThing.create(d.getTranslateX());	if(optname.equals("-translatey"))	    return DoubleThing.create(d.getTranslateY());//#endif	return super.cget(ip,target,optname);    }    public void cset(Interp ip,Object target,String optname,Thing optval)	throws HeclException {	Drawable d = (Drawable)target;		if(optname.equals(WidgetInfo.NCOLOR)) {	    d.setColor(new Color(WidgetInfo.toColor(optval)));	    return;	}	if(optname.equals("-background")) {	    d.setBackground(new Color(WidgetInfo.toColor(optval)));	    return;	}	if(optname.equals("-grayscale")) {	    d.setGrayScale(IntThing.get(optval));	    return;	}	if(optname.equals(WidgetInfo.NFONT)) {	    d.setFont(FontMap.get(optval));	    return;	}	if(optname.equals(WidgetInfo.NLINETYPE)) {	    d.setLineStipple((short)HeclUtils.thing2int(optval,false,0));	    return;	}//#ifdef notdef	if(optname.equals("-translatex")) {	    d.translate(IntThing.get(optval),d.getTranslateY());	    return;	}	if(optname.equals("-translatey")) {	    d.translate(d.getTranslateX(),IntThing.get(optval));	    return;	}//#endif	super.cset(ip,target,optname,optval);    }    public synchronized Thing handlecmd(Interp ip,Object target,					String subcmd, Thing[] argv,int startat)	throws HeclException {	return sequence(ip,new Stack(),(Drawable)target,subcmd,argv,startat);    }        private synchronized Thing sequence(Interp ip,Stack st,Drawable d,					String subcmd, Thing[] argv,int startat)	throws HeclException {	int n = startat;	// Stack manipulation	if(subcmd.equals("push")) {	    st.push(new Context(d));	    return null;	}	if(subcmd.equals("pop")) {	    if(st.empty()) {		throw new HeclException("Empty context stack.");	    }	    ((Context)st.pop()).restore(d);	    return null;	}	if(subcmd.equals("draw")) {	    StringBuffer errs = null;	    for(; startat+1 <= argv.length; ++startat) {		Vector v = ListThing.get(argv[startat]);		int cmdlen = v.size();		for(int pos = 0; pos < cmdlen; ++pos) {		    Vector cmd = ListThing.get((Thing)v.elementAt(pos));		    Thing[] xargs = new Thing[cmd.size()];		    cmd.copyInto(xargs);		    try {			sequence(ip,st,d,xargs[0].toString().toLowerCase(),xargs,1);		    }		    catch (HeclException e) {			// OOPS, error			// We create a comfortable error message with index			// into command sequence and error message for the			// errorneous command.			if(errs == null) {			    errs = new StringBuffer("Error in "+subcmd+":");			}			errs.append(' ').append(startat).append(',')			    .append(pos).append('-').append(e.toString());		    }		}	    }	    if(errs != null) {		throw new HeclException(errs.toString());	    }	    return null;	}		// Draw commands	if(subcmd.equals("arc")) {	    /* point dimension arcw, arch */	    if(startat+4 != argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "point dimension arcw arch");	    d.drawArc(HeclUtils.thing2Point(argv,startat),		      HeclUtils.thing2Dimension(argv,startat+1),		      IntThing.get(argv[startat+2]),		      IntThing.get(argv[startat+3]),		      false);	    return null;	}	if(subcmd.equals("clear")) {	    d.clear();	    return null;	}	if(subcmd.equals("copyarea")) {	    /* vsrc(x,y), dim(w,h) vdst(x,y), anchor */	    if(startat+3 > argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "psrc dimension pdst [anchor]");	    	    int anchor = startat+3 < argv.length ?		WidgetInfo.toCanvasAnchor(argv[n]) : Graphics.BOTTOM|Graphics.LEFT;	    //System.err.println("anchor="+Integer.toHexString(anchor));	    d.copyArea(HeclUtils.thing2Point(argv,startat),		       HeclUtils.thing2Dimension(argv,startat+1),		       HeclUtils.thing2Point(argv,startat+2), anchor);	    return null;	}	if(subcmd.equals("image")) {	    // image, v(x,y), anchor	    if(startat+2 > argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "animage point [anchor]");	    	    int anchor = startat+2 < argv.length ?		WidgetInfo.toCanvasAnchor(argv[startat+2]) : Graphics.BOTTOM|Graphics.LEFT;	    //System.err.println("anchor="+Integer.toHexString(anchor));	    d.drawImage(GUICmds.asImage(argv[startat],false),			HeclUtils.thing2Point(argv,startat+1), anchor);	    return null;	}	if(subcmd.equals("line")) {	    // v0(x,y) v1(x,y)	    if(startat+2 != argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "frompt topt");	    Point2D v0 = new Point2D.Double();	    Point2D v1 = new Point2D.Double();	    HeclUtils.getPoint(v0,argv,startat);	    HeclUtils.getPoint(v1,argv,startat+1);	    d.drawLine(v0,v1);	    return null;	}	if(subcmd.equals("xline")) {	    // v0(x,y) v1(x,y) [...]	    if(startat+2 != argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "frompt topt");	    Point2D v0 = new Point2D.Double();	    Point2D v1 = new Point2D.Double();	    HeclUtils.getPoint(v0,argv,startat);	    HeclUtils.getPoint(v1,argv,startat+1);	    d.xline(v0,v1);	    return null;	}	if(subcmd.equals("lines")) {	    // v0(x,y) v1(x,y) [...]	    if(startat+1 > argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "point0 point1 [...]");	    Point2D v0 = new Point2D.Double();	    Point2D v1 = new Point2D.Double();	    for(; startat+1 < argv.length; startat += 2) {		HeclUtils.getPoint(v0,argv,startat);		HeclUtils.getPoint(v1,argv,startat+1);		d.drawLine(v0,v1);	    }	    return null;	}		if(subcmd.equals("points")) {	    // v0(x,y) [...] 	    Point2D p = new Point2D.Double();	    for(; startat < argv.length; ++startat) {		d.drawPoint(HeclUtils.getPoint(p,argv,startat));	    }	    return null;	}	if(subcmd.equals("linestrip")) {	    // p0 p1 [...]	    if(startat+2 > argv.length)		throw HeclException.createWrongNumArgsException(		    argv, startat, "p0 p1 [...]");	    	    Point2D v0 = HeclUtils.thing2Point(argv,startat);	    Point2D v1 = new Point2D.Double();	    for(++startat; startat < argv.length; ++startat) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -