Remove graphic_alloc and reference to old style in macros.
[scilab.git] / scilab / modules / graphics / macros / getcolor.sci
1 function [c] = getcolor(Title,cini)
2 // Copyright INRIA
3 [lhs,rhs] = argn(0)
4 if rhs==0 then
5   Title = "";
6   cini = 1;
7 elseif rhs==1 then
8   if type(Title)~=10 then
9     error("getcolor: argument must be a string")
10   end;
11   cini = 1;
12 elseif rhs==2 then
13   if type(Title)~=10|type(cini)~=1|size(cini,"*")~=1 then
14     error("getcolor: arguments must be a string and an integer")
15   end;
16 else
17   error("function ""color"" must have 1 or 3 arguments")
18 end;
19
20 if winsid()~=[] then
21   cmap = get(gcf(),"color_map");
22   curwin = xget("window");
23 else
24   cmap = []
25   curwin = []
26 end;
27 win = max(winsid()+1);
28 xset("window",win);
29
30 sdf;
31 sda;
32 f = gcf();
33 if cmap~=[] then
34   f.color_map = cmap;
35 else
36   cmap = f.color_map;
37 end;
38
39 N = size(cmap,1);
40 wdim = [1,1];
41 r = wdim(1)/wdim(2);
42 n = round(sqrt(N/r));
43 m = int(n*r);
44 H = m*30;
45 W = n*30;
46 f.figure_size = [H,W];
47
48 if ~MSDOS then
49   delmenu(win,"3D Rot.")
50   delmenu(win,"UnZoom")
51   delmenu(win,"Zoom")
52   delmenu(win,"Edit")
53   delmenu(win,"File")
54   delmenu(win,"Insert")
55 else
56   hidetoolbar(win)
57   // French
58   delmenu(win,"&Fichier")
59   delmenu(win,"&Editer")
60   delmenu(win,"&Outils")
61   delmenu(win,"&Inserer")
62   // English
63   delmenu(win,"&File")
64   delmenu(win,"&Edit")
65   delmenu(win,"&Tools")
66   delmenu(win,"&Insert")
67 end;
68
69 dx = wdim(1)/m;
70 dy = wdim(2)/n;
71 x = -dx;
72 y = wdim(2);
73 R = [0;0;dx*0.95;dy*0.95];
74 rects = [];
75 for k = 1:N
76   if modulo(k,n)==1 then
77     x = x+dx;
78     y = wdim(2);
79   end;
80   rects = [rects,R+[x;y;0;0]];
81   y = y-dy;
82 end;
83
84 if Title~="" then
85   xsetech([-1/8,0,1+1/6,1+1/6-1/8],[0,0,wdim(1),wdim(2)]);
86 else
87   xsetech([-1/8,-1/8,1+1/6,1+1/6],[0,0,wdim(1),wdim(2)]);
88 end;
89 // rectangles with the colors
90 xrects(rects,1:N);
91 // frame around the colors
92 r = m*n-N;
93 ddx = 0.05*dx;
94 ddy = 0.05*dy;
95 if r==0 then
96   xpoly([-ddx,1,1,-ddx],[0,0,1+ddy,1+ddy],"lines",1);
97 else
98   xpoly([-ddx,1-1/n,1-1/n,1,1,-ddx],[0,0,r/m,r/m,1+ddy,1+ddy],"lines",1);
99 end;
100
101 // title
102 if Title~="" then
103   xtitle(Title);
104   t = gce();
105   t.font_size = 4;
106   t.font_style = 6;
107 end;
108
109 k1 = min(max(cini,1),N);
110 xrects(rects(eye(),k1),-k1);
111 e = gce();
112 rector = e.children;
113 rector.thickness = 4;
114 rector.foreground = color(255*(1-cmap(k1,1)),255*(1-cmap(k1,2)),255*(1-cmap(k1,3)));
115
116 //add a menu and its callback
117 done = %f;
118 addmenu(win,"File",["Ok","Cancel"]);
119 execstr("File_"+string(win)+"=[""done=%t;k=k1;"";""done=%t;k=[]""]")
120 cmdok = "execstr(File_"+string(win)+"(1))";
121 cmdcancel = "execstr(File_"+string(win)+"(2))";
122
123 c_i = 0;
124 c = cini;
125 while %t
126   [c_i,cx,cy,cw,str] = xclick();
127   if c_i==(-2) then
128     if str==cmdok then k = k1; c = k; break;end;
129     if str==cmdcancel then k = []; c = []; break;end;
130   end;
131   if c_i==(-100) then k = []; break;end;
132   mc = int(cx/dx)+1;
133   nc = n-int(cy/dy);
134   k = (mc-1)*n+nc;
135   if or(c_i==[0,3])&k<=N&k>0 then
136     if k1~=0 then
137       move(rector,[rects(1,k)-rects(1,k1),rects(2,k)-rects(2,k1)]);
138       rector.foreground = color(255*(1-cmap(k,1)),255*(1-cmap(k,2)),255*(1-cmap(k,3)));
139     end;
140     k1 = k;
141     name = rgb2name(cmap(k,eye())*255);
142     xinfo("Color number "+string(k)+": R="+string(floor(cmap(k,1)*255))+" G="+string(floor(cmap(k,2)*255))+" B="+string(floor(cmap(k,3)*255))+" Name="""+name(1)+"""");
143   
144   
145   end;
146 end;
147
148 xdel(win);
149 if curwin~=[] then
150   xset("window",curwin);
151 end;
152
153
154 endfunction
155