Adjust LR combine function.
[chise/kage.git] / kagecgi / kagedf.c
1 //kagedf.c\r
2 //\r
3 #include "kage.h"\r
4 #include "kagecgi.h"\r
5 \r
6 void dfDrawFont(int a1, int a2, int a3,\r
7         int x1, int y1,\r
8         int x2, int y2,\r
9         int x3, int y3,\r
10         int x4, int y4){\r
11         int tx1, tx2, tx3, tx4, ty1, ty2, ty3, ty4, v;\r
12         double rad;\r
13         \r
14         if(kShotai == kMincho){\r
15                 switch(a1 % 100){\r
16                 case 0:\r
17                         break;\r
18         case 1:\r
19                 if(a3 == 4){\r
20                                 if(x1 == x2){\r
21                                         if(y1 < y2){ v = 1; } else{ v = -1; }\r
22                                         tx1 = x2;\r
23                                         ty1 = y2 - kMage * v;\r
24                                 }\r
25                                 else if(y1 == y2){\r
26                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
27                                         tx1 = x2 - kMage * v;\r
28                                         ty1 = y2;\r
29                                 }\r
30                                 else{\r
31                                         rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
32                                         if(x1 < x2){ v = 1; } else{v = -1; }\r
33                                         tx1 = x2 - kMage * cos(rad) * v;\r
34                                         ty1 = y2 - kMage * sin(rad) * v;\r
35                                 }\r
36                                 cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
37                                 cdDrawCurve(tx1, ty1, x2, y2, x2 - kMage, y2, 1, 14);\r
38                 }\r
39                 else{\r
40                                 cdDrawLine(x1, y1, x2, y2, a2, a3);\r
41                 }\r
42                 break;\r
43         case 2:\r
44         case 12:\r
45                 if(a3 == 4){\r
46                                 if(x2 == x3){\r
47                                         tx1 = x3;\r
48                                         ty1 = y3 - kMage;\r
49                                 }\r
50                                 else if(y2 == y3){\r
51                                         tx1 = x3 - kMage;\r
52                                         ty1 = y3;\r
53                                 }\r
54                                 else{\r
55                                         rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
56                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
57                                         tx1 = x3 - kMage * cos(rad) * v;\r
58                                         ty1 = y3 - kMage * sin(rad) * v;\r
59                                 }\r
60                                 cdDrawCurve(x1, y1, x2, y2, tx1, ty1, a2, 1);\r
61                                 cdDrawCurve(tx1, ty1, x3, y3, x3 - kMage, y3, 1, 14);\r
62                 }\r
63                 else if(a3 == 5){\r
64                                 cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, 15);\r
65                 }\r
66                 else{\r
67                                 cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, a3);\r
68                 }\r
69                 break;\r
70                 case 3:\r
71                 if(a3 == 5){\r
72                                 if(x1 == x2){\r
73                                         if(y1 < y2){ v = 1; } else{ v = -1; }\r
74                                         tx1 = x2;\r
75                                         ty1 = y2 - kMage * v;\r
76                                 }\r
77                                 else if(y1 == y2){\r
78                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
79                                         tx1 = x2 - kMage * v;\r
80                                         ty1 = y2;\r
81                                 }\r
82                                 else{\r
83                                         rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
84                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
85                                         tx1 = x2 - kMage * cos(rad) * v;\r
86                                         ty1 = y2 - kMage * sin(rad) * v;\r
87                                 }\r
88                                 if(x2 == x3){\r
89                                         if(y2 < y3){ v = 1; } else{ v = -1; }\r
90                                         tx2 = x2;\r
91                                         ty2 = y2 + kMage * v;\r
92                                 }\r
93                                 else if(y2 == y3){\r
94                                         if(x2 < x3){ v = 1; } else { v = -1; }\r
95                                         tx2 = x2 + kMage * v;\r
96                                         ty2 = y2;\r
97                                 }\r
98                                 else{\r
99                                         rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
100                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
101                                         tx2 = x2 + kMage * cos(rad) * v;\r
102                                         ty2 = y2 + kMage * sin(rad) * v;\r
103                                 }\r
104                                 tx3 = x3 - kMage;\r
105                                 ty3 = y3;\r
106                                 tx4 = x3 + kMage * 0.5;\r
107                                 ty4 = y3 - kMage * 2;\r
108                                 \r
109                                 cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
110                                 cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
111                                 cdDrawLine(tx2, ty2, tx3, ty3, 6, 5); // bolder by force\r
112                         }\r
113                         else{\r
114                                 if(x1 == x2){\r
115                                         if(y1 < y2){ v = 1; } else { v = -1; }\r
116                                         tx1 = x2;\r
117                                         ty1 = y2 - kMage * v;\r
118                                 }\r
119                                 else if(y1 == y2){\r
120                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
121                                         tx1 = x2 - kMage * v;\r
122                                         ty1 = y2;\r
123                                 }\r
124                                 else{\r
125                                         rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
126                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
127                                         tx1 = x2 - kMage * cos(rad) * v;\r
128                                         ty1 = y2 - kMage * sin(rad) * v;\r
129                                 }\r
130                                 if(x2 == x3){\r
131                                         if(y2 < y3){ v = 1; } else{ v = -1; }\r
132                                         tx2 = x2;\r
133                                         ty2 = y2 + kMage * v;\r
134                                 }\r
135                                 else if(y2 == y3){\r
136                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
137                                         tx2 = x2 + kMage * v;\r
138                                         ty2 = y2;\r
139                                 }\r
140                                 else{\r
141                                         rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
142                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
143                                         tx2 = x2 + kMage * cos(rad) * v;\r
144                                         ty2 = y2 + kMage * sin(rad) * v;\r
145                                 }\r
146                                 cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
147                                 cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
148                                 cdDrawLine(tx2, ty2, x3, y3, 6, a3); // bolder by force\r
149                         }\r
150                 break;\r
151             case 6:\r
152                 if(a3 == 5){\r
153                                 /* only implimented for gothic\r
154                                 tx1 = x4 - kMage;\r
155                                 ty1 = y4;\r
156                                 tx2 = x4 + kMage * 0.5;\r
157                                 ty2 = y4 - kMage * 2;\r
158                                 */\r
159                                 cdDrawBezier(x1, y1, x2, y2, x3, y3, x4, y4, a2, 15);\r
160                                 /*\r
161                                 if(a2 == 7 || a3 == 7){\r
162                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
163                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, 15);\r
164                                 }\r
165                                 else{\r
166                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
167                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, 15);\r
168                                 }\r
169                                 */\r
170                         }\r
171                         else{\r
172                                 cdDrawBezier(x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
173                                 /*\r
174                                 if(a2 == 7 || a3 == 7){\r
175                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 17);\r
176                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 17, a3);\r
177                                 }\r
178                                 else{\r
179                                         cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 8);\r
180                                         cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
181                                 }\r
182                                 */\r
183                         }\r
184                         break;\r
185         case 7:\r
186           cdDrawLine(x1, y1, x2, y2, a2, 1);\r
187           cdDrawCurve(x2, y2, x3, y3, x4, y4, 1, 7);\r
188           break;\r
189         case 9: // may not be exist\r
190           kageCanvas[y1][x1] = 0;\r
191           kageCanvas[y2][x2] = 0;\r
192           break;\r
193         default:\r
194           break;\r
195         }\r
196         }\r
197     \r
198     else{ // gothic\r
199         switch(a1 % 100){\r
200         case 0:\r
201                 break;\r
202         case 1:\r
203                 if(a3 == 4){\r
204                                 if(x1 == x2){\r
205                                         if(y1 < y2){ v = 1; } else{ v = -1; }\r
206                                         tx1 = x2;\r
207                                         ty1 = y2 - kMage * v;\r
208                                 }\r
209                                 else if(y1 == y2){\r
210                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
211                                         tx1 = x2 - kMage * v;\r
212                                         ty1 = y2;\r
213                                 }\r
214                                 else{\r
215                                         rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
216                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
217                                         tx1 = x2 - kMage * cos(rad) * v;\r
218                                         ty1 = y2 - kMage * sin(rad) * v;\r
219                                 }\r
220                                 cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
221                                 cdDrawCurve(tx1, ty1, x2, y2, x2 - kMage * 2, y2 - kMage * 0.5, 1, 0);\r
222                 }\r
223                 else{\r
224                                 cdDrawLine(x1, y1, x2, y2, a2, a3);\r
225                 }\r
226                         break;\r
227         case 2:\r
228         case 12:\r
229                 if(a3 == 4){\r
230                                 if(x2 == x3){\r
231                                         tx1 = x3;\r
232                                         ty1 = y3 - kMage;\r
233                                 }\r
234                                 else if(y2 == y3){\r
235                                         tx1 = x3 - kMage;\r
236                                         ty1 = y3;\r
237                                 }\r
238                                 else{\r
239                                         rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
240                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
241                                         tx1 = x3 - kMage * cos(rad) * v;\r
242                                         ty1 = y3 - kMage * sin(rad) * v;\r
243                                 }\r
244                                 cdDrawCurve(x1, y1, x2, y2, tx1, ty1, a2, 1);\r
245                                 cdDrawCurve(tx1, ty1, x3, y3, x3 - kMage * 2, y3 - kMage * 0.5, 1, 0);\r
246                 }\r
247                 else if(a3 == 5){\r
248                                 tx1 = x3 + kMage;\r
249                                 ty1 = y3;\r
250                                 tx2 = tx1 + kMage * 0.5;\r
251                                 ty2 = y3 - kMage * 2;\r
252                                 cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, 1);\r
253                                 cdDrawCurve(x3, y3, tx1, ty1, tx2, ty2, 1, 0);\r
254                 }\r
255                 else{\r
256                                 cdDrawCurve(x1, y1, x2, y2, x3, y3, a2, a3);\r
257                 }\r
258                 break;\r
259         case 3:\r
260                 if(a3 == 5){\r
261                                 if(x1 == x2){\r
262                                         if(y1 < y2){ v = 1; } else{ v = -1; }\r
263                                         tx1 = x2;\r
264                                         ty1 = y2 - kMage * v;\r
265                                 }\r
266                                 else if(y1 == y2){\r
267                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
268                                         tx1 = x2 - kMage * v;\r
269                                         ty1 = y2;\r
270                                 }\r
271                                 else{\r
272                                         rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
273                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
274                                         tx1 = x2 - kMage * cos(rad) * v;\r
275                                         ty1 = y2 - kMage * sin(rad) * v;\r
276                                 }\r
277                                 if(x2 == x3){\r
278                                         if(y2 < y3){ v = 1; } else{ v = -1; }\r
279                                         tx2 = x2;\r
280                                         ty2 = y2 + kMage * v;\r
281                                 }\r
282                                 else if(y2 == y3){\r
283                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
284                                         tx2 = x2 + kMage * v;\r
285                                         ty2 = y2;\r
286                                 }\r
287                                 else{\r
288                                         rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
289                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
290                                         tx2 = x2 + kMage * cos(rad) * v;\r
291                                         ty2 = y2 + kMage * sin(rad) * v;\r
292                                 }\r
293                                 tx3 = x3 - kMage;\r
294                                 ty3 = y3;\r
295                                 tx4 = x3 + kMage * 0.5;\r
296                                 ty4 = y3 - kMage * 2;\r
297                                 \r
298                                 cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
299                                 cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
300                                 cdDrawLine(tx2, ty2, tx3, ty3, 1, 1);\r
301                                 cdDrawCurve(tx3, ty3, x3, y3, tx4, ty4, 1, 0);\r
302                 }\r
303                 else{\r
304                                 if(x1 == x2){\r
305                                         if(y1 < y2){ v = 1; } else{ v = -1; }\r
306                                         tx1 = x2;\r
307                                         ty1 = y2 - kMage * v;\r
308                                 }\r
309                                 else if(y1 == y2){\r
310                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
311                                         tx1 = x2 - kMage * v;\r
312                                         ty1 = y2;\r
313                                 }\r
314                                 else{\r
315                                         rad = atan((double)(y2 - y1) / (double)(x2 - x1));\r
316                                         if(x1 < x2){ v = 1; } else{ v = -1; }\r
317                                         tx1 = x2 - kMage * cos(rad) * v;\r
318                                         ty1 = y2 - kMage * sin(rad) * v;\r
319                                 }\r
320                                 if(x2 == x3){\r
321                                         if(y2 < y3){ v = 1; } else{ v = -1; }\r
322                                         tx2 = x2;\r
323                                         ty2 = y2 + kMage * v;\r
324                                 }\r
325                                 else if(y2 == y3){\r
326                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
327                                         tx2 = x2 + kMage * v;\r
328                                         ty2 = y2;\r
329                                 }\r
330                                 else{\r
331                                         rad = atan((double)(y3 - y2) / (double)(x3 - x2));\r
332                                         if(x2 < x3){ v = 1; } else{ v = -1; }\r
333                                         tx2 = x2 + kMage * cos(rad) * v;\r
334                                         ty2 = y2 + kMage * sin(rad) * v;\r
335                                 }\r
336                                 \r
337                                 cdDrawLine(x1, y1, tx1, ty1, a2, 1);\r
338                                 cdDrawCurve(tx1, ty1, x2, y2, tx2, ty2, 1, 1);\r
339                                 cdDrawLine(tx2, ty2, x3, y3, 1, a3);\r
340                 }\r
341                 break;\r
342         case 6:\r
343                 if(a3 == 5){\r
344                                 tx1 = x4 - kMage;\r
345                                 ty1 = y4;\r
346                                 tx2 = x4 + kMage * 0.5;\r
347                                 ty2 = y4 - kMage * 2;\r
348                                 /*\r
349                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
350                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, tx1, ty1, 1, 1);\r
351                                 */\r
352                                 cdDrawBezier(x1, y1, x2, y2, x3, y3, tx1, ty1, a2, 1);\r
353                                 cdDrawCurve(tx1, ty1, x4, y4, tx2, ty2, 1, 0);\r
354                 }\r
355                 else{\r
356                                 /*\r
357                                 cdDrawCurve(x1, y1, x2, y2, (x2 + x3) / 2, (y2 + y3) / 2, a2, 1);\r
358                                 cdDrawCurve((x2 + x3) / 2, (y2 + y3) / 2, x3, y3, x4, y4, 1, a3);\r
359                                 */\r
360                                 cdDrawBezier(x1, y1, x2, y2, x3, y3, x4, y4, a2, a3);\r
361                 }\r
362                 break;\r
363         case 7:\r
364                 cdDrawLine(x1, y1, x2, y2, a2, 1);\r
365                 cdDrawCurve(x2, y2, x3, y3, x4, y4, 1, a3);\r
366                 break;\r
367         case 9: // may not be exist\r
368           kageCanvas[y1][x1] = 0;\r
369           kageCanvas[y2][x2] = 0;\r
370                 break;\r
371         default:\r
372                         break;\r
373                 }\r
374         }\r
375 }\r