rubber.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 102 行

ERL
102
字号
%% ``The contents of this file are subject to the Erlang Public License,%% Version 1.1, (the "License"); you may not use this file except in%% compliance with the License. You should have received a copy of the%% Erlang Public License along with this software. If not, it can be%% retrieved via the world wide web at http://www.erlang.org/.%% %% Software distributed under the License is distributed on an "AS IS"%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See%% the License for the specific language governing rights and limitations%% under the License.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %%     $Id$%%%% ------------------------------------------------------------%% A rubberbanding example in Erlang%% -------------------------------------------------------------module(rubber).-export([start/0, init/0]).start() ->    spawn(rubber,init,[]).init() ->    I=gs:start(),    Win = gs:window(I,[{title,"Rubberbanding in Erlang"},		      {width,300},{height,200}]),    C= gs:canvas(Win,[{width,300},{height,200},{bg,green}]),    gs:radiobutton(Win,[{width,100},{label,{text,"Oval"}},{align,w},			{data,oval},{y,0},{select,true}]),    gs:radiobutton(Win,[{width,100},{label,{text,"Rectangle"}},{align,w},			{data,rectangle},{y,30}]),    gs:radiobutton(Win,[{width,100},{label,{text,"Line"}},{align,w},			{data,line},{y,60}]),    gs:button(Win,[{label,{text,"Quit"}},{data,quit},{y,90}]),    gs:config(Win,[{motion,true},{buttonpress,true},{buttonrelease,true}]),    gs:config(Win,{map,true}),    loop(C,nil,oval,0,0).loop(Win,Obj,Objtype,X1,Y1) ->    receive	{gs,_,motion,_,[X2,Y2]} -> 	    flush(Win,Obj,Objtype,X1,Y1,X2,Y2);	{gs,_,buttonpress,_,[1,X2,Y2]} -> 	    down(Win,Obj,Objtype,X2,Y2);	{gs,_,buttonrelease,_,[1,X2,Y2]} -> 	    up(Win,Obj,Objtype,X1,Y1,X2,Y2);	{gs,_,click,quit,_} -> 	    exit(normal);	{gs,_,click,Newtype,_} -> 	    loop(Win,Obj,Newtype,X1,Y1);	{gs,_,destroy,_,_} -> 	    exit(normal);	Other -> 	    io:format("Other:~w~n",[Other]),	    loop(Win,Obj,Objtype,X1,Y1)    end.down(Win,nil,oval,X1,Y1) ->    Obj = gs:create(oval,Win,[{coords,[{X1,Y1},{X1+1,Y1+1}]},{fill,red}]),    loop(Win,Obj,oval,X1,Y1);down(Win,nil,line,X1,Y1) ->    Obj = gs:create(line,Win,[{coords,[{X1,Y1},{X1+1,Y1+1}]},{width,3},{fg,black}]),    loop(Win,Obj,line,X1,Y1);down(Win,nil,Objtype,X1,Y1) ->    Obj = gs:create(Objtype,Win,[{coords,[{X1,Y1},{X1+1,Y1+1}]},{bw,2},{fg,blue}]),    loop(Win,Obj,Objtype,X1,Y1);down(Win,Obj,Objtype,X1,Y1) ->    gs:destroy(Obj),    down(Win,nil,Objtype,X1,Y1).up(Win,nil,Objtype,_X1,_Y1,X2,Y2) ->    loop(Win,nil,Objtype,X2,Y2);up(Win,Obj,Objtype,X1,Y1,X2,Y2) ->    gs:config(Obj,{coords,[{X1,Y1},{X2,Y2}]}),    loop(Win,nil,Objtype,X2,Y2).move(Win,nil,Objtype,X1,Y1,_X2,_Y2) ->    loop(Win,nil,Objtype,X1,Y1);move(Win,Obj,Objtype,X1,Y1,X2,Y2) ->    gs:config(Obj,{coords,[{X1,Y1},{X2,Y2}]}),    loop(Win,Obj,Objtype,X1,Y1).flush(Win,Obj,Objtype,X1,Y1,X2,Y2) ->    receive        {gs,_,motion,_,[XX2,YY2]} ->             flush(Win,Obj,Objtype,X1,Y1,XX2,YY2)    after        0 -> move(Win,Obj,Objtype,X1,Y1,X2,Y2)    end.%% ------------------------------------------------------------

⌨️ 快捷键说明

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