ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/Client.xs
(Generate patch)

Comparing deliantra/Deliantra-Client/Client.xs (file contents):
Revision 1.235 by root, Tue Aug 28 01:23:47 2007 UTC vs.
Revision 1.242 by root, Wed Dec 26 21:03:21 2007 UTC

120 120
121#include "pango-font.c" 121#include "pango-font.c"
122#include "pango-fontmap.c" 122#include "pango-fontmap.c"
123#include "pango-render.c" 123#include "pango-render.c"
124 124
125typedef IV CFPlus__Channel; 125typedef IV DC__Channel;
126typedef SDL_RWops *CFPlus__RW; 126typedef SDL_RWops *DC__RW;
127typedef Mix_Chunk *CFPlus__MixChunk; 127typedef Mix_Chunk *DC__MixChunk;
128typedef Mix_Music *CFPlus__MixMusic; 128typedef Mix_Music *DC__MixMusic;
129 129
130typedef PangoFontDescription *CFPlus__Font; 130typedef PangoFontDescription *DC__Font;
131 131
132static int 132static int
133shape_attr_p (PangoLayoutRun *run) 133shape_attr_p (PangoLayoutRun *run)
134{ 134{
135 GSList *attrs = run->item->analysis.extra_attrs; 135 GSList *attrs = run->item->analysis.extra_attrs;
149 149
150typedef struct cf_layout { 150typedef struct cf_layout {
151 PangoLayout *pl; 151 PangoLayout *pl;
152 float r, g, b, a; // default color for rgba mode 152 float r, g, b, a; // default color for rgba mode
153 int base_height; 153 int base_height;
154 CFPlus__Font font; 154 DC__Font font;
155 rc_t *rc; 155 rc_t *rc;
156} *CFPlus__Layout; 156} *DC__Layout;
157 157
158static CFPlus__Font default_font; 158static DC__Font default_font;
159static PangoContext *opengl_context; 159static PangoContext *opengl_context;
160static PangoFontMap *opengl_fontmap; 160static PangoFontMap *opengl_fontmap;
161 161
162static void 162static void
163substitute_func (FcPattern *pattern, gpointer data) 163substitute_func (FcPattern *pattern, gpointer data)
168#endif 168#endif
169 FcPatternAddBool (pattern, FC_AUTOHINT, 0); 169 FcPatternAddBool (pattern, FC_AUTOHINT, 0);
170} 170}
171 171
172static void 172static void
173layout_update_font (CFPlus__Layout self) 173layout_update_font (DC__Layout self)
174{ 174{
175 /* use a random scale factor to account for unknown descenders, 0.8 works 175 /* use a random scale factor to account for unknown descenders, 0.8 works
176 * reasonably well with bitstream vera 176 * reasonably well with bitstream vera
177 */ 177 */
178 PangoFontDescription *font = self->font ? self->font : default_font; 178 PangoFontDescription *font = self->font ? self->font : default_font;
182 182
183 pango_layout_set_font_description (self->pl, font); 183 pango_layout_set_font_description (self->pl, font);
184} 184}
185 185
186static void 186static void
187layout_get_pixel_size (CFPlus__Layout self, int *w, int *h) 187layout_get_pixel_size (DC__Layout self, int *w, int *h)
188{ 188{
189 PangoRectangle rect; 189 PangoRectangle rect;
190 190
191 // get_pixel_* wrongly rounds down 191 // get_pixel_* wrongly rounds down
192 pango_layout_get_extents (self->pl, 0, &rect); 192 pango_layout_get_extents (self->pl, 0, &rect);
231 int faces; tileid *face2tile; // [faceid] 231 int faces; tileid *face2tile; // [faceid]
232 int texs; maptex *tex; // [tileid] 232 int texs; maptex *tex; // [tileid]
233 233
234 int32_t rows; 234 int32_t rows;
235 maprow *row; 235 maprow *row;
236} *CFPlus__Map; 236} *DC__Map;
237 237
238static char * 238static char *
239prepend (char *ptr, int sze, int inc) 239prepend (char *ptr, int sze, int inc)
240{ 240{
241 char *p; 241 char *p;
279 self->texs *= 2; 279 self->texs *= 2;
280 } 280 }
281} 281}
282 282
283static maprow * 283static maprow *
284map_get_row (CFPlus__Map self, int y) 284map_get_row (DC__Map self, int y)
285{ 285{
286 if (0 > y) 286 if (0 > y)
287 { 287 {
288 int extend = - y + MAP_EXTEND_Y; 288 int extend = - y + MAP_EXTEND_Y;
289 Prepend (maprow, self->row, self->rows, extend); 289 Prepend (maprow, self->row, self->rows, extend);
327 327
328 return row->col + (x - row->c0); 328 return row->col + (x - row->c0);
329} 329}
330 330
331static mapcell * 331static mapcell *
332map_get_cell (CFPlus__Map self, int x, int y) 332map_get_cell (DC__Map self, int x, int y)
333{ 333{
334 return row_get_cell (map_get_row (self, y), x); 334 return row_get_cell (map_get_row (self, y), x);
335} 335}
336 336
337static void 337static void
338map_clear (CFPlus__Map self) 338map_clear (DC__Map self)
339{ 339{
340 int r; 340 int r;
341 341
342 for (r = 0; r < self->rows; r++) 342 for (r = 0; r < self->rows; r++)
343 Safefree (self->row[r].col); 343 Safefree (self->row[r].col);
351 self->row = 0; 351 self->row = 0;
352 self->rows = 0; 352 self->rows = 0;
353} 353}
354 354
355static void 355static void
356map_blank (CFPlus__Map self, int x0, int y0, int w, int h) 356map_blank (DC__Map self, int x0, int y0, int w, int h)
357{ 357{
358 int x, y; 358 int x, y;
359 maprow *row; 359 maprow *row;
360 mapcell *cell; 360 mapcell *cell;
361 361
498 return 0; 498 return 0;
499 499
500 return 1; 500 return 1;
501} 501}
502 502
503MODULE = CFPlus PACKAGE = CFPlus 503MODULE = Deliantra::Client PACKAGE = DC
504 504
505PROTOTYPES: ENABLE 505PROTOTYPES: ENABLE
506 506
507BOOT: 507BOOT:
508{ 508{
509 HV *stash = gv_stashpv ("CFPlus", 1); 509 HV *stash = gv_stashpv ("DC", 1);
510 static const struct { 510 static const struct {
511 const char *name; 511 const char *name;
512 IV iv; 512 IV iv;
513 } *civ, const_iv[] = { 513 } *civ, const_iv[] = {
514# define const_iv(name) { # name, (IV)name } 514# define const_iv(name) { # name, (IV)name }
619 const_iv (KMOD_LMETA), 619 const_iv (KMOD_LMETA),
620 const_iv (KMOD_RMETA), 620 const_iv (KMOD_RMETA),
621 const_iv (KMOD_NUM), 621 const_iv (KMOD_NUM),
622 const_iv (KMOD_CAPS), 622 const_iv (KMOD_CAPS),
623 const_iv (KMOD_MODE), 623 const_iv (KMOD_MODE),
624
625 const_iv (MIX_DEFAULT_FORMAT),
624# undef const_iv 626# undef const_iv
625 }; 627 };
626 628
627 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 629 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
628 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 630 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
698 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 700 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
699 701
700 if (m && m != (SDL_Rect **)-1) 702 if (m && m != (SDL_Rect **)-1)
701 while (*m) 703 while (*m)
702 { 704 {
703 if ((*m)->w >= 640 && (*m)->h >= 480) 705 if ((*m)->w >= 800 && (*m)->h >= 600)
704 { 706 {
705 AV *av = newAV (); 707 AV *av = newAV ();
706 av_push (av, newSViv ((*m)->w)); 708 av_push (av, newSViv ((*m)->w));
707 av_push (av, newSViv ((*m)->h)); 709 av_push (av, newSViv ((*m)->h));
708 av_push (av, newSViv (rgb)); 710 av_push (av, newSViv (rgb));
732 734
733 if (RETVAL) 735 if (RETVAL)
734 { 736 {
735 av_clear (texture_av); 737 av_clear (texture_av);
736 738
737 SDL_WM_SetCaption ("Crossfire TRT Client " VERSION, "Crossfire TRT"); 739 SDL_WM_SetCaption ("Deliantra MORPG Client " VERSION, "Deliantra");
738#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name); 740#define GL_FUNC(ptr,name) gl.name = (ptr)SDL_GL_GetProcAddress ("gl" # name);
739#include "glfunc.h" 741#include "glfunc.h"
740#undef GL_FUNC 742#undef GL_FUNC
741 } 743 }
742} 744}
823 hv_store (hv, "data1", 5, newSViv ((IV)ev.user.data1), 0); 825 hv_store (hv, "data1", 5, newSViv ((IV)ev.user.data1), 0);
824 hv_store (hv, "data2", 5, newSViv ((IV)ev.user.data2), 0); 826 hv_store (hv, "data2", 5, newSViv ((IV)ev.user.data2), 0);
825 break; 827 break;
826 } 828 }
827 829
828 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("CFPlus::UI::Event", 1)))); 830 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("DC::UI::Event", 1))));
829 } 831 }
830} 832}
831 833
832int 834int
833Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 1024) 835Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096)
834 POSTCALL: 836 POSTCALL:
835 Mix_HookMusicFinished (music_finished); 837 Mix_HookMusicFinished (music_finished);
836 Mix_ChannelFinished (channel_finished); 838 Mix_ChannelFinished (channel_finished);
839
840void
841Mix_QuerySpec ()
842 PPCODE:
843{
844 int freq, channels;
845 Uint16 format;
846
847 if (Mix_QuerySpec (&freq, &format, &channels))
848 {
849 EXTEND (SP, 3);
850 PUSHs (sv_2mortal (newSViv (freq)));
851 PUSHs (sv_2mortal (newSViv (format)));
852 PUSHs (sv_2mortal (newSViv (channels)));
853 }
854}
837 855
838void 856void
839Mix_CloseAudio () 857Mix_CloseAudio ()
840 858
841int 859int
975void 993void
976error (char *message) 994error (char *message)
977 CODE: 995 CODE:
978 fprintf (stderr, "ERROR: %s\n", message); 996 fprintf (stderr, "ERROR: %s\n", message);
979#ifdef _WIN32 997#ifdef _WIN32
980 MessageBox (0, message, "Crossfire+ Error", MB_OK | MB_ICONERROR); 998 MessageBox (0, message, "Deliantra Client Error", MB_OK | MB_ICONERROR);
981#endif 999#endif
982 1000
983void 1001void
984fatal (char *message) 1002fatal (char *message)
985 CODE: 1003 CODE:
986 fprintf (stderr, "FATAL: %s\n", message); 1004 fprintf (stderr, "FATAL: %s\n", message);
987#ifdef _WIN32 1005#ifdef _WIN32
988 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR); 1006 MessageBox (0, message, "Deliantra Client Fatal Error", MB_OK | MB_ICONERROR);
989#endif 1007#endif
990 _exit (1); 1008 _exit (1);
991 1009
992void 1010void
993_exit (int retval = 0) 1011_exit (int retval = 0)
1005#if DEBUG 1023#if DEBUG
1006 VALGRIND_DO_LEAK_CHECK; 1024 VALGRIND_DO_LEAK_CHECK;
1007#endif 1025#endif
1008} 1026}
1009 1027
1010MODULE = CFPlus PACKAGE = CFPlus::Font 1028MODULE = Deliantra::Client PACKAGE = DC::Font
1011 1029
1012PROTOTYPES: DISABLE 1030PROTOTYPES: DISABLE
1013 1031
1014CFPlus::Font 1032DC::Font
1015new_from_file (SV *class, char *path, int id = 0) 1033new_from_file (SV *class, char *path, int id = 0)
1016 CODE: 1034 CODE:
1017{ 1035{
1018 int count; 1036 int count;
1019 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, id, 0, &count); 1037 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, id, 0, &count);
1022} 1040}
1023 OUTPUT: 1041 OUTPUT:
1024 RETVAL 1042 RETVAL
1025 1043
1026void 1044void
1027DESTROY (CFPlus::Font self) 1045DESTROY (DC::Font self)
1028 CODE: 1046 CODE:
1029 pango_font_description_free (self); 1047 pango_font_description_free (self);
1030 1048
1031void 1049void
1032make_default (CFPlus::Font self) 1050make_default (DC::Font self)
1033 PROTOTYPE: $ 1051 PROTOTYPE: $
1034 CODE: 1052 CODE:
1035 default_font = self; 1053 default_font = self;
1036 1054
1037MODULE = CFPlus PACKAGE = CFPlus::Layout 1055MODULE = Deliantra::Client PACKAGE = DC::Layout
1038 1056
1039PROTOTYPES: DISABLE 1057PROTOTYPES: DISABLE
1040 1058
1041void 1059void
1042reset_glyph_cache () 1060glyph_cache_backup ()
1043 PROTOTYPE: 1061 PROTOTYPE:
1044 CODE: 1062 CODE:
1063 tc_backup ();
1064
1065void
1066glyph_cache_restore ()
1067 PROTOTYPE:
1068 CODE:
1045 tc_clear (); 1069 tc_restore ();
1046 1070
1047CFPlus::Layout 1071DC::Layout
1048new (SV *class) 1072new (SV *class)
1049 CODE: 1073 CODE:
1050 New (0, RETVAL, 1, struct cf_layout); 1074 New (0, RETVAL, 1, struct cf_layout);
1051 1075
1052 RETVAL->pl = pango_layout_new (opengl_context); 1076 RETVAL->pl = pango_layout_new (opengl_context);
1062 layout_update_font (RETVAL); 1086 layout_update_font (RETVAL);
1063 OUTPUT: 1087 OUTPUT:
1064 RETVAL 1088 RETVAL
1065 1089
1066void 1090void
1067DESTROY (CFPlus::Layout self) 1091DESTROY (DC::Layout self)
1068 CODE: 1092 CODE:
1069 g_object_unref (self->pl); 1093 g_object_unref (self->pl);
1070 rc_free (self->rc); 1094 rc_free (self->rc);
1071 Safefree (self); 1095 Safefree (self);
1072 1096
1073void 1097void
1074set_text (CFPlus::Layout self, SV *text_) 1098set_text (DC::Layout self, SV *text_)
1075 CODE: 1099 CODE:
1076{ 1100{
1077 STRLEN textlen; 1101 STRLEN textlen;
1078 char *text = SvPVutf8 (text_, textlen); 1102 char *text = SvPVutf8 (text_, textlen);
1079 1103
1080 pango_layout_set_text (self->pl, text, textlen); 1104 pango_layout_set_text (self->pl, text, textlen);
1081} 1105}
1082 1106
1083void 1107void
1084set_markup (CFPlus::Layout self, SV *text_) 1108set_markup (DC::Layout self, SV *text_)
1085 CODE: 1109 CODE:
1086{ 1110{
1087 STRLEN textlen; 1111 STRLEN textlen;
1088 char *text = SvPVutf8 (text_, textlen); 1112 char *text = SvPVutf8 (text_, textlen);
1089 1113
1090 pango_layout_set_markup (self->pl, text, textlen); 1114 pango_layout_set_markup (self->pl, text, textlen);
1091} 1115}
1092 1116
1093void 1117void
1094set_shapes (CFPlus::Layout self, ...) 1118set_shapes (DC::Layout self, ...)
1095 CODE: 1119 CODE:
1096{ 1120{
1097 PangoAttrList *attrs = 0; 1121 PangoAttrList *attrs = 0;
1098 const char *text = pango_layout_get_text (self->pl); 1122 const char *text = pango_layout_get_text (self->pl);
1099 const char *pos = text; 1123 const char *pos = text;
1134 if (attrs) 1158 if (attrs)
1135 pango_layout_set_attributes (self->pl, attrs); 1159 pango_layout_set_attributes (self->pl, attrs);
1136} 1160}
1137 1161
1138void 1162void
1139get_shapes (CFPlus::Layout self) 1163get_shapes (DC::Layout self)
1140 PPCODE: 1164 PPCODE:
1141{ 1165{
1142 PangoLayoutIter *iter = pango_layout_get_iter (self->pl); 1166 PangoLayoutIter *iter = pango_layout_get_iter (self->pl);
1143 1167
1144 do 1168 do
1159 1183
1160 pango_layout_iter_free (iter); 1184 pango_layout_iter_free (iter);
1161} 1185}
1162 1186
1163int 1187int
1164has_wrapped (CFPlus::Layout self) 1188has_wrapped (DC::Layout self)
1165 CODE: 1189 CODE:
1166{ 1190{
1167 int lines = 1; 1191 int lines = 1;
1168 const char *text = pango_layout_get_text (self->pl); 1192 const char *text = pango_layout_get_text (self->pl);
1169 1193
1174} 1198}
1175 OUTPUT: 1199 OUTPUT:
1176 RETVAL 1200 RETVAL
1177 1201
1178SV * 1202SV *
1179get_text (CFPlus::Layout self) 1203get_text (DC::Layout self)
1180 CODE: 1204 CODE:
1181 RETVAL = newSVpv (pango_layout_get_text (self->pl), 0); 1205 RETVAL = newSVpv (pango_layout_get_text (self->pl), 0);
1182 sv_utf8_decode (RETVAL); 1206 sv_utf8_decode (RETVAL);
1183 OUTPUT: 1207 OUTPUT:
1184 RETVAL 1208 RETVAL
1185 1209
1186void 1210void
1187set_foreground (CFPlus::Layout self, float r, float g, float b, float a = 1.) 1211set_foreground (DC::Layout self, float r, float g, float b, float a = 1.)
1188 CODE: 1212 CODE:
1189 self->r = r; 1213 self->r = r;
1190 self->g = g; 1214 self->g = g;
1191 self->b = b; 1215 self->b = b;
1192 self->a = a; 1216 self->a = a;
1193 1217
1194void 1218void
1195set_font (CFPlus::Layout self, CFPlus::Font font = 0) 1219set_font (DC::Layout self, DC::Font font = 0)
1196 CODE: 1220 CODE:
1197 if (self->font != font) 1221 if (self->font != font)
1198 { 1222 {
1199 self->font = font; 1223 self->font = font;
1200 layout_update_font (self); 1224 layout_update_font (self);
1201 } 1225 }
1202 1226
1203void 1227void
1204set_height (CFPlus::Layout self, int base_height) 1228set_height (DC::Layout self, int base_height)
1205 CODE: 1229 CODE:
1206 if (self->base_height != base_height) 1230 if (self->base_height != base_height)
1207 { 1231 {
1208 self->base_height = base_height; 1232 self->base_height = base_height;
1209 layout_update_font (self); 1233 layout_update_font (self);
1210 } 1234 }
1211 1235
1212void 1236void
1213set_width (CFPlus::Layout self, int max_width = -1) 1237set_width (DC::Layout self, int max_width = -1)
1214 CODE: 1238 CODE:
1215 pango_layout_set_width (self->pl, max_width < 0 ? max_width : max_width * PANGO_SCALE); 1239 pango_layout_set_width (self->pl, max_width < 0 ? max_width : max_width * PANGO_SCALE);
1216 1240
1217void 1241void
1218set_indent (CFPlus::Layout self, int indent) 1242set_indent (DC::Layout self, int indent)
1219 CODE: 1243 CODE:
1220 pango_layout_set_indent (self->pl, indent * PANGO_SCALE); 1244 pango_layout_set_indent (self->pl, indent * PANGO_SCALE);
1221 1245
1222void 1246void
1223set_spacing (CFPlus::Layout self, int spacing) 1247set_spacing (DC::Layout self, int spacing)
1224 CODE: 1248 CODE:
1225 pango_layout_set_spacing (self->pl, spacing * PANGO_SCALE); 1249 pango_layout_set_spacing (self->pl, spacing * PANGO_SCALE);
1226 1250
1227void 1251void
1228set_ellipsise (CFPlus::Layout self, int ellipsise) 1252set_ellipsise (DC::Layout self, int ellipsise)
1229 CODE: 1253 CODE:
1230 pango_layout_set_ellipsize (self->pl, 1254 pango_layout_set_ellipsize (self->pl,
1231 ellipsise == 1 ? PANGO_ELLIPSIZE_START 1255 ellipsise == 1 ? PANGO_ELLIPSIZE_START
1232 : ellipsise == 2 ? PANGO_ELLIPSIZE_MIDDLE 1256 : ellipsise == 2 ? PANGO_ELLIPSIZE_MIDDLE
1233 : ellipsise == 3 ? PANGO_ELLIPSIZE_END 1257 : ellipsise == 3 ? PANGO_ELLIPSIZE_END
1234 : PANGO_ELLIPSIZE_NONE 1258 : PANGO_ELLIPSIZE_NONE
1235 ); 1259 );
1236 1260
1237void 1261void
1238set_single_paragraph_mode (CFPlus::Layout self, int spm) 1262set_single_paragraph_mode (DC::Layout self, int spm)
1239 CODE: 1263 CODE:
1240 pango_layout_set_single_paragraph_mode (self->pl, !!spm); 1264 pango_layout_set_single_paragraph_mode (self->pl, !!spm);
1241 1265
1242void 1266void
1243size (CFPlus::Layout self) 1267size (DC::Layout self)
1244 PPCODE: 1268 PPCODE:
1245{ 1269{
1246 int w, h; 1270 int w, h;
1247 1271
1248 layout_get_pixel_size (self, &w, &h); 1272 layout_get_pixel_size (self, &w, &h);
1251 PUSHs (sv_2mortal (newSViv (w))); 1275 PUSHs (sv_2mortal (newSViv (w)));
1252 PUSHs (sv_2mortal (newSViv (h))); 1276 PUSHs (sv_2mortal (newSViv (h)));
1253} 1277}
1254 1278
1255int 1279int
1256descent (CFPlus::Layout self) 1280descent (DC::Layout self)
1257 CODE: 1281 CODE:
1258{ 1282{
1259 PangoRectangle rect; 1283 PangoRectangle rect;
1260 PangoLayoutLine *line = pango_layout_get_line (self->pl, 0); 1284 PangoLayoutLine *line = pango_layout_get_line (self->pl, 0);
1261 pango_layout_line_get_pixel_extents (line, 0, &rect); 1285 pango_layout_line_get_pixel_extents (line, 0, &rect);
1263} 1287}
1264 OUTPUT: 1288 OUTPUT:
1265 RETVAL 1289 RETVAL
1266 1290
1267int 1291int
1268xy_to_index (CFPlus::Layout self, int x, int y) 1292xy_to_index (DC::Layout self, int x, int y)
1269 CODE: 1293 CODE:
1270{ 1294{
1271 int index, trailing; 1295 int index, trailing;
1272 pango_layout_xy_to_index (self->pl, x * PANGO_SCALE, y * PANGO_SCALE, &index, &trailing); 1296 pango_layout_xy_to_index (self->pl, x * PANGO_SCALE, y * PANGO_SCALE, &index, &trailing);
1273 RETVAL = index + trailing; 1297 RETVAL = index + trailing;
1274} 1298}
1275 OUTPUT: 1299 OUTPUT:
1276 RETVAL 1300 RETVAL
1277 1301
1278void 1302void
1279cursor_pos (CFPlus::Layout self, int index) 1303cursor_pos (DC::Layout self, int index)
1280 PPCODE: 1304 PPCODE:
1281{ 1305{
1282 PangoRectangle strong_pos; 1306 PangoRectangle strong_pos;
1283 pango_layout_get_cursor_pos (self->pl, index, &strong_pos, 0); 1307 pango_layout_get_cursor_pos (self->pl, index, &strong_pos, 0);
1284 1308
1287 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE))); 1311 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE)));
1288 PUSHs (sv_2mortal (newSViv (strong_pos.height / PANGO_SCALE))); 1312 PUSHs (sv_2mortal (newSViv (strong_pos.height / PANGO_SCALE)));
1289} 1313}
1290 1314
1291void 1315void
1292index_to_line_x (CFPlus::Layout self, int index, int trailing = 0) 1316index_to_line_x (DC::Layout self, int index, int trailing = 0)
1293 PPCODE: 1317 PPCODE:
1294{ 1318{
1295 int line, x; 1319 int line, x;
1296 1320
1297 pango_layout_index_to_line_x (self->pl, index, trailing, &line, &x); 1321 pango_layout_index_to_line_x (self->pl, index, trailing, &line, &x);
1301 PUSHs (sv_2mortal (newSViv (line - 1))); 1325 PUSHs (sv_2mortal (newSViv (line - 1)));
1302 PUSHs (sv_2mortal (newSViv (x / PANGO_SCALE))); 1326 PUSHs (sv_2mortal (newSViv (x / PANGO_SCALE)));
1303} 1327}
1304 1328
1305void 1329void
1306line_x_to_index (CFPlus::Layout self, int line, int x) 1330line_x_to_index (DC::Layout self, int line, int x)
1307 PPCODE: 1331 PPCODE:
1308{ 1332{
1309 PangoLayoutLine *lp; 1333 PangoLayoutLine *lp;
1310 int index, trailing; 1334 int index, trailing;
1311 1335
1326 PUSHs (sv_2mortal (newSViv (trailing))); 1350 PUSHs (sv_2mortal (newSViv (trailing)));
1327 } 1351 }
1328} 1352}
1329 1353
1330void 1354void
1331render (CFPlus::Layout self, float x, float y, int flags = 0) 1355render (DC::Layout self, float x, float y, int flags = 0)
1332 CODE: 1356 CODE:
1333 rc_clear (self->rc); 1357 rc_clear (self->rc);
1334 pango_opengl_render_layout_subpixel ( 1358 pango_opengl_render_layout_subpixel (
1335 self->pl, 1359 self->pl,
1336 self->rc, 1360 self->rc,
1341 // we assume that context_change actually clears/frees stuff 1365 // we assume that context_change actually clears/frees stuff
1342 // and does not do any recomputation... 1366 // and does not do any recomputation...
1343 pango_layout_context_changed (self->pl); 1367 pango_layout_context_changed (self->pl);
1344 1368
1345void 1369void
1346draw (CFPlus::Layout self) 1370draw (DC::Layout self)
1347 CODE: 1371 CODE:
1348{ 1372{
1349 glEnable (GL_TEXTURE_2D); 1373 glEnable (GL_TEXTURE_2D);
1350 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 1374 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
1351 glEnable (GL_BLEND); 1375 glEnable (GL_BLEND);
1359 glDisable (GL_ALPHA_TEST); 1383 glDisable (GL_ALPHA_TEST);
1360 glDisable (GL_BLEND); 1384 glDisable (GL_BLEND);
1361 glDisable (GL_TEXTURE_2D); 1385 glDisable (GL_TEXTURE_2D);
1362} 1386}
1363 1387
1364MODULE = CFPlus PACKAGE = CFPlus::Texture 1388MODULE = Deliantra::Client PACKAGE = DC::Texture
1365 1389
1366PROTOTYPES: ENABLE 1390PROTOTYPES: ENABLE
1367 1391
1368void 1392void
1369pad (SV *data_, int ow, int oh, int nw, int nh) 1393pad (SV *data_, int ow, int oh, int nw, int nh)
1448 RETVAL = width > 0; 1472 RETVAL = width > 0;
1449} 1473}
1450 OUTPUT: 1474 OUTPUT:
1451 RETVAL 1475 RETVAL
1452 1476
1453MODULE = CFPlus PACKAGE = CFPlus::Map 1477MODULE = Deliantra::Client PACKAGE = DC::Map
1454 1478
1455PROTOTYPES: DISABLE 1479PROTOTYPES: DISABLE
1456 1480
1457CFPlus::Map 1481DC::Map
1458new (SV *class) 1482new (SV *class)
1459 CODE: 1483 CODE:
1460 New (0, RETVAL, 1, struct map); 1484 New (0, RETVAL, 1, struct map);
1461 RETVAL->x = 0; 1485 RETVAL->x = 0;
1462 RETVAL->y = 0; 1486 RETVAL->y = 0;
1470 RETVAL->row = 0; 1494 RETVAL->row = 0;
1471 OUTPUT: 1495 OUTPUT:
1472 RETVAL 1496 RETVAL
1473 1497
1474void 1498void
1475DESTROY (CFPlus::Map self) 1499DESTROY (DC::Map self)
1476 CODE: 1500 CODE:
1477{ 1501{
1478 map_clear (self); 1502 map_clear (self);
1479 Safefree (self->face2tile); 1503 Safefree (self->face2tile);
1480 Safefree (self->tex); 1504 Safefree (self->tex);
1481 Safefree (self); 1505 Safefree (self);
1482} 1506}
1483 1507
1484void 1508void
1485resize (CFPlus::Map self, int map_width, int map_height) 1509resize (DC::Map self, int map_width, int map_height)
1486 CODE: 1510 CODE:
1487 self->w = map_width; 1511 self->w = map_width;
1488 self->h = map_height; 1512 self->h = map_height;
1489 1513
1490void 1514void
1491clear (CFPlus::Map self) 1515clear (DC::Map self)
1492 CODE: 1516 CODE:
1493 map_clear (self); 1517 map_clear (self);
1494 1518
1495void 1519void
1496set_tileid (CFPlus::Map self, int face, int tile) 1520set_tileid (DC::Map self, int face, int tile)
1497 CODE: 1521 CODE:
1498{ 1522{
1499 need_facenum (self, face); self->face2tile [face] = tile; 1523 need_facenum (self, face); self->face2tile [face] = tile;
1500 need_texid (self, tile); 1524 need_texid (self, tile);
1501} 1525}
1502 1526
1503void 1527void
1504set_smooth (CFPlus::Map self, int face, int smooth, int level) 1528set_smooth (DC::Map self, int face, int smooth, int level)
1505 CODE: 1529 CODE:
1506{ 1530{
1507 tileid texid; 1531 tileid texid;
1508 maptex *tex; 1532 maptex *tex;
1509 1533
1522 tex->smoothtile = self->face2tile [smooth]; 1546 tex->smoothtile = self->face2tile [smooth];
1523 tex->smoothlevel = level; 1547 tex->smoothlevel = level;
1524} 1548}
1525 1549
1526void 1550void
1527set_texture (CFPlus::Map self, int texid, int name, int w, int h, float s, float t, int r, int g, int b, int a) 1551set_texture (DC::Map self, int texid, int name, int w, int h, float s, float t, int r, int g, int b, int a)
1528 CODE: 1552 CODE:
1529{ 1553{
1530 need_texid (self, texid); 1554 need_texid (self, texid);
1531 1555
1532 { 1556 {
1552 // from transparent color bleeding and ugly wrapping effects. 1576 // from transparent color bleeding and ugly wrapping effects.
1553 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 1577 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1554} 1578}
1555 1579
1556int 1580int
1557ox (CFPlus::Map self) 1581ox (DC::Map self)
1558 ALIAS: 1582 ALIAS:
1559 oy = 1 1583 oy = 1
1560 x = 2 1584 x = 2
1561 y = 3 1585 y = 3
1562 w = 4 1586 w = 4
1573 } 1597 }
1574 OUTPUT: 1598 OUTPUT:
1575 RETVAL 1599 RETVAL
1576 1600
1577void 1601void
1578scroll (CFPlus::Map self, int dx, int dy) 1602scroll (DC::Map self, int dx, int dy)
1579 CODE: 1603 CODE:
1580{ 1604{
1581 if (dx > 0) 1605 if (dx > 0)
1582 map_blank (self, self->x, self->y, dx, self->h); 1606 map_blank (self, self->x, self->y, dx, self->h);
1583 else if (dx < 0) 1607 else if (dx < 0)
1599 self->y += MAP_EXTEND_Y; 1623 self->y += MAP_EXTEND_Y;
1600 } 1624 }
1601} 1625}
1602 1626
1603SV * 1627SV *
1604map1a_update (CFPlus::Map self, SV *data_, int extmap) 1628map1a_update (DC::Map self, SV *data_, int extmap)
1605 CODE: 1629 CODE:
1606{ 1630{
1607 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_); 1631 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_);
1608 uint8_t *data_end = (uint8_t *)SvEND (data_); 1632 uint8_t *data_end = (uint8_t *)SvEND (data_);
1609 mapcell *cell; 1633 mapcell *cell;
1698} 1722}
1699 OUTPUT: 1723 OUTPUT:
1700 RETVAL 1724 RETVAL
1701 1725
1702SV * 1726SV *
1703mapmap (CFPlus::Map self, int x0, int y0, int w, int h) 1727mapmap (DC::Map self, int x0, int y0, int w, int h)
1704 CODE: 1728 CODE:
1705{ 1729{
1706 int x1, x; 1730 int x1, x;
1707 int y1, y; 1731 int y1, y;
1708 int z; 1732 int z;
1753} 1777}
1754 OUTPUT: 1778 OUTPUT:
1755 RETVAL 1779 RETVAL
1756 1780
1757void 1781void
1758draw (CFPlus::Map self, int mx, int my, int sw, int sh, int T) 1782draw (DC::Map self, int mx, int my, int sw, int sh, int T)
1759 CODE: 1783 CODE:
1760{ 1784{
1761 int x, y, z; 1785 int x, y, z;
1762 1786
1763 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); 1787 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ());
2034 } 2058 }
2035 } 2059 }
2036} 2060}
2037 2061
2038void 2062void
2039draw_magicmap (CFPlus::Map self, int dx, int dy, int w, int h, unsigned char *data) 2063draw_magicmap (DC::Map self, int dx, int dy, int w, int h, unsigned char *data)
2040 CODE: 2064 CODE:
2041{ 2065{
2042 static float color[16][3] = { 2066 static float color[16][3] = {
2043 { 0.00F, 0.00F, 0.00F }, 2067 { 0.00F, 0.00F, 0.00F },
2044 { 1.00F, 1.00F, 1.00F }, 2068 { 1.00F, 1.00F, 1.00F },
2094 glDisable (GL_BLEND); 2118 glDisable (GL_BLEND);
2095 glDisable (GL_TEXTURE_2D); 2119 glDisable (GL_TEXTURE_2D);
2096} 2120}
2097 2121
2098void 2122void
2099fow_texture (CFPlus::Map self, int mx, int my, int sw, int sh) 2123fow_texture (DC::Map self, int mx, int my, int sw, int sh)
2100 PPCODE: 2124 PPCODE:
2101{ 2125{
2102 int x, y; 2126 int x, y;
2103 int sw1 = sw + 2; 2127 int sw1 = sw + 2;
2104 int sh1 = sh + 2; 2128 int sh1 = sh + 2;
2175 PUSHs (sv_2mortal (newSViv (sh3))); 2199 PUSHs (sv_2mortal (newSViv (sh3)));
2176 PUSHs (darkness3_sv); 2200 PUSHs (darkness3_sv);
2177} 2201}
2178 2202
2179SV * 2203SV *
2180get_rect (CFPlus::Map self, int x0, int y0, int w, int h) 2204get_rect (DC::Map self, int x0, int y0, int w, int h)
2181 CODE: 2205 CODE:
2182{ 2206{
2183 int x, y, x1, y1; 2207 int x, y, x1, y1;
2184 SV *data_sv = newSV (w * h * 7 + 5); 2208 SV *data_sv = newSV (w * h * 7 + 5);
2185 uint8_t *data = (uint8_t *)SvPVX (data_sv); 2209 uint8_t *data = (uint8_t *)SvPVX (data_sv);
2250} 2274}
2251 OUTPUT: 2275 OUTPUT:
2252 RETVAL 2276 RETVAL
2253 2277
2254void 2278void
2255set_rect (CFPlus::Map self, int x0, int y0, uint8_t *data) 2279set_rect (DC::Map self, int x0, int y0, uint8_t *data)
2256 PPCODE: 2280 PPCODE:
2257{ 2281{
2258 int x, y, z; 2282 int x, y, z;
2259 int w, h; 2283 int w, h;
2260 int x1, y1; 2284 int x1, y1;
2313 } 2337 }
2314 } 2338 }
2315 } 2339 }
2316} 2340}
2317 2341
2318MODULE = CFPlus PACKAGE = CFPlus::RW 2342MODULE = Deliantra::Client PACKAGE = DC::RW
2319 2343
2320CFPlus::RW 2344DC::RW
2321new (SV *class, SV *data_sv) 2345new (SV *class, SV *data_sv)
2322 CODE: 2346 CODE:
2323{ 2347{
2324 STRLEN datalen; 2348 STRLEN datalen;
2325 char *data = SvPVbyte (data_sv, datalen); 2349 char *data = SvPVbyte (data_sv, datalen);
2327 RETVAL = SDL_RWFromConstMem (data, datalen); 2351 RETVAL = SDL_RWFromConstMem (data, datalen);
2328} 2352}
2329 OUTPUT: 2353 OUTPUT:
2330 RETVAL 2354 RETVAL
2331 2355
2332CFPlus::RW 2356DC::RW
2333new_from_file (SV *class, const char *path, const char *mode = "rb") 2357new_from_file (SV *class, const char *path, const char *mode = "rb")
2334 CODE: 2358 CODE:
2335 RETVAL = SDL_RWFromFile (path, mode); 2359 RETVAL = SDL_RWFromFile (path, mode);
2336 OUTPUT: 2360 OUTPUT:
2337 RETVAL 2361 RETVAL
2338 2362
2339# fails on win32: 2363# fails on win32:
2340# CFPlus.xs(2268) : error C2059: syntax error : '(' 2364# dc.xs(2268) : error C2059: syntax error : '('
2341#void 2365#void
2342#close (CFPlus::RW self) 2366#close (DC::RW self)
2343# CODE: 2367# CODE:
2344# (self->(close)) (self); 2368# (self->(close)) (self);
2345 2369
2346MODULE = CFPlus PACKAGE = CFPlus::Channel 2370MODULE = Deliantra::Client PACKAGE = DC::Channel
2347 2371
2348PROTOTYPES: DISABLE 2372PROTOTYPES: DISABLE
2349 2373
2350CFPlus::Channel 2374DC::Channel
2351find () 2375find ()
2352 CODE: 2376 CODE:
2353{ 2377{
2354 RETVAL = Mix_GroupAvailable (-1); 2378 RETVAL = Mix_GroupAvailable (-1);
2355 2379
2368} 2392}
2369 OUTPUT: 2393 OUTPUT:
2370 RETVAL 2394 RETVAL
2371 2395
2372void 2396void
2373halt (CFPlus::Channel self) 2397halt (DC::Channel self)
2374 CODE: 2398 CODE:
2375 Mix_HaltChannel (self); 2399 Mix_HaltChannel (self);
2376 2400
2377void 2401void
2378expire (CFPlus::Channel self, int ticks = -1) 2402expire (DC::Channel self, int ticks = -1)
2379 CODE: 2403 CODE:
2380 Mix_ExpireChannel (self, ticks); 2404 Mix_ExpireChannel (self, ticks);
2381 2405
2382void 2406void
2383fade_out (CFPlus::Channel self, int ticks = -1) 2407fade_out (DC::Channel self, int ticks = -1)
2384 CODE: 2408 CODE:
2385 Mix_FadeOutChannel (self, ticks); 2409 Mix_FadeOutChannel (self, ticks);
2386 2410
2387int 2411int
2388volume (CFPlus::Channel self, int volume) 2412volume (DC::Channel self, int volume)
2389 CODE: 2413 CODE:
2390 RETVAL = Mix_Volume (self, CLAMP (volume, 0, 128)); 2414 RETVAL = Mix_Volume (self, CLAMP (volume, 0, 128));
2391 OUTPUT: 2415 OUTPUT:
2392 RETVAL 2416 RETVAL
2393 2417
2394void 2418void
2395unregister_all_effects (CFPlus::Channel self) 2419unregister_all_effects (DC::Channel self)
2396 CODE: 2420 CODE:
2397 Mix_UnregisterAllEffects (self); 2421 Mix_UnregisterAllEffects (self);
2398 2422
2399void 2423void
2400set_panning (CFPlus::Channel self, int left, int right) 2424set_panning (DC::Channel self, int left, int right)
2401 CODE: 2425 CODE:
2402 left = CLAMP (left , 0, 255); 2426 left = CLAMP (left , 0, 255);
2403 right = CLAMP (right, 0, 255); 2427 right = CLAMP (right, 0, 255);
2404 Mix_SetPanning (self, left, right); 2428 Mix_SetPanning (self, left, right);
2405 2429
2406void 2430void
2407set_distance (CFPlus::Channel self, int distance) 2431set_distance (DC::Channel self, int distance)
2408 CODE: 2432 CODE:
2409 Mix_SetDistance (self, CLAMP (distance, 0, 255)); 2433 Mix_SetDistance (self, CLAMP (distance, 0, 255));
2410 2434
2411void 2435void
2412set_position (CFPlus::Channel self, int angle, int distance) 2436set_position (DC::Channel self, int angle, int distance)
2413 CODE: 2437 CODE:
2414 2438
2415void 2439void
2416set_position_r (CFPlus::Channel self, int dx, int dy, int maxdistance) 2440set_position_r (DC::Channel self, int dx, int dy, int maxdistance)
2417 CODE: 2441 CODE:
2418{ 2442{
2419 int distance = sqrtf (dx * dx + dy * dy) * (255.f / sqrtf (maxdistance * maxdistance)); 2443 int distance = sqrtf (dx * dx + dy * dy) * (255.f / sqrtf (maxdistance * maxdistance));
2420 int angle = 360 + (int)roundf (atan2f (dx, -dy) * 180.f / (float)M_PI); 2444 int angle = 360 + (int)roundf (atan2f (dx, -dy) * 180.f / (float)M_PI);
2421 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255)); 2445 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255));
2422} 2446}
2423 2447
2424void 2448void
2425set_reverse_stereo (CFPlus::Channel self, int flip) 2449set_reverse_stereo (DC::Channel self, int flip)
2426 CODE: 2450 CODE:
2427 Mix_SetReverseStereo (self, flip); 2451 Mix_SetReverseStereo (self, flip);
2428 2452
2429MODULE = CFPlus PACKAGE = CFPlus::MixChunk 2453MODULE = Deliantra::Client PACKAGE = DC::MixChunk
2430 2454
2431PROTOTYPES: DISABLE 2455PROTOTYPES: DISABLE
2432 2456
2433CFPlus::MixChunk 2457DC::MixChunk
2434new (SV *class, CFPlus::RW rwops) 2458new (SV *class, DC::RW rwops)
2435 CODE: 2459 CODE:
2436 RETVAL = Mix_LoadWAV_RW (rwops, 1); 2460 RETVAL = Mix_LoadWAV_RW (rwops, 1);
2437 OUTPUT: 2461 OUTPUT:
2438 RETVAL 2462 RETVAL
2439 2463
2440void 2464void
2441DESTROY (CFPlus::MixChunk self) 2465DESTROY (DC::MixChunk self)
2442 CODE: 2466 CODE:
2443 Mix_FreeChunk (self); 2467 Mix_FreeChunk (self);
2444 2468
2445int 2469int
2446volume (CFPlus::MixChunk self, int volume = -1) 2470volume (DC::MixChunk self, int volume = -1)
2447 CODE: 2471 CODE:
2448 if (items > 1) 2472 if (items > 1)
2449 volume = CLAMP (volume, 0, 128); 2473 volume = CLAMP (volume, 0, 128);
2450 RETVAL = Mix_VolumeChunk (self, volume); 2474 RETVAL = Mix_VolumeChunk (self, volume);
2451 OUTPUT: 2475 OUTPUT:
2452 RETVAL 2476 RETVAL
2453 2477
2454CFPlus::Channel 2478DC::Channel
2455play (CFPlus::MixChunk self, CFPlus::Channel channel = -1, int loops = 0, int ticks = -1) 2479play (DC::MixChunk self, DC::Channel channel = -1, int loops = 0, int ticks = -1)
2456 CODE: 2480 CODE:
2457{ 2481{
2458 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks); 2482 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks);
2459 2483
2460 if (RETVAL < 0) 2484 if (RETVAL < 0)
2467 } 2491 }
2468} 2492}
2469 OUTPUT: 2493 OUTPUT:
2470 RETVAL 2494 RETVAL
2471 2495
2472MODULE = CFPlus PACKAGE = CFPlus::MixMusic 2496MODULE = Deliantra::Client PACKAGE = DC::MixMusic
2473 2497
2474int 2498int
2475volume (int volume = -1) 2499volume (int volume = -1)
2476 PROTOTYPE: ;$ 2500 PROTOTYPE: ;$
2477 CODE: 2501 CODE:
2489void 2513void
2490halt () 2514halt ()
2491 CODE: 2515 CODE:
2492 Mix_HaltMusic (); 2516 Mix_HaltMusic ();
2493 2517
2494CFPlus::MixMusic 2518DC::MixMusic
2495new (SV *class, CFPlus::RW rwops) 2519new (SV *class, DC::RW rwops)
2496 CODE: 2520 CODE:
2497 RETVAL = Mix_LoadMUS_RW (rwops); 2521 RETVAL = Mix_LoadMUS_RW (rwops);
2498 OUTPUT: 2522 OUTPUT:
2499 RETVAL 2523 RETVAL
2500 2524
2501void 2525void
2502DESTROY (CFPlus::MixMusic self) 2526DESTROY (DC::MixMusic self)
2503 CODE: 2527 CODE:
2504 Mix_FreeMusic (self); 2528 Mix_FreeMusic (self);
2505 2529
2506int 2530int
2507play (CFPlus::MixMusic self, int loops = -1) 2531play (DC::MixMusic self, int loops = -1)
2508 CODE: 2532 CODE:
2509 RETVAL = Mix_PlayMusic (self, loops); 2533 RETVAL = Mix_PlayMusic (self, loops);
2510 OUTPUT: 2534 OUTPUT:
2511 RETVAL 2535 RETVAL
2512 2536
2513void 2537void
2514fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position) 2538fade_in_pos (DC::MixMusic self, int loops, int ms, double position)
2515 CODE: 2539 CODE:
2516 Mix_FadeInMusicPos (self, loops, ms, position); 2540 Mix_FadeInMusicPos (self, loops, ms, position);
2517 2541
2518MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2542MODULE = Deliantra::Client PACKAGE = DC::OpenGL
2519 2543
2520PROTOTYPES: ENABLE 2544PROTOTYPES: ENABLE
2521 2545
2522BOOT: 2546BOOT:
2523{ 2547{
2524 HV *stash = gv_stashpv ("CFPlus::OpenGL", 1); 2548 HV *stash = gv_stashpv ("DC::OpenGL", 1);
2525 static const struct { 2549 static const struct {
2526 const char *name; 2550 const char *name;
2527 IV iv; 2551 IV iv;
2528 } *civ, const_iv[] = { 2552 } *civ, const_iv[] = {
2529# define const_iv(name) { # name, (IV)name } 2553# define const_iv(name) { # name, (IV)name }
2858 2882
2859void glEndList () 2883void glEndList ()
2860 2884
2861void glCallList (int list) 2885void glCallList (int list)
2862 2886
2863MODULE = CFPlus PACKAGE = CFPlus::UI::Base 2887MODULE = Deliantra::Client PACKAGE = DC::UI::Base
2864 2888
2865PROTOTYPES: DISABLE 2889PROTOTYPES: DISABLE
2866 2890
2867void 2891void
2868find_widget (SV *self, NV x, NV y) 2892find_widget (SV *self, NV x, NV y)
2872 XPUSHs (self); 2896 XPUSHs (self);
2873} 2897}
2874 2898
2875BOOT: 2899BOOT:
2876{ 2900{
2877 hover_gv = gv_fetchpv ("CFPlus::UI::HOVER", 1, SVt_NV); 2901 hover_gv = gv_fetchpv ("DC::UI::HOVER", 1, SVt_NV);
2878 2902
2879 draw_x_gv = gv_fetchpv ("CFPlus::UI::Base::draw_x", 1, SVt_NV); 2903 draw_x_gv = gv_fetchpv ("DC::UI::Base::draw_x", 1, SVt_NV);
2880 draw_y_gv = gv_fetchpv ("CFPlus::UI::Base::draw_y", 1, SVt_NV); 2904 draw_y_gv = gv_fetchpv ("DC::UI::Base::draw_y", 1, SVt_NV);
2881 draw_w_gv = gv_fetchpv ("CFPlus::UI::Base::draw_w", 1, SVt_NV); 2905 draw_w_gv = gv_fetchpv ("DC::UI::Base::draw_w", 1, SVt_NV);
2882 draw_h_gv = gv_fetchpv ("CFPlus::UI::Base::draw_h", 1, SVt_NV); 2906 draw_h_gv = gv_fetchpv ("DC::UI::Base::draw_h", 1, SVt_NV);
2883} 2907}
2884 2908
2885void 2909void
2886draw (SV *self) 2910draw (SV *self)
2887 CODE: 2911 CODE:
2894 SV *draw_w_sv = GvSV (draw_w_gv); 2918 SV *draw_w_sv = GvSV (draw_w_gv);
2895 SV *draw_h_sv = GvSV (draw_h_gv); 2919 SV *draw_h_sv = GvSV (draw_h_gv);
2896 double draw_x, draw_y; 2920 double draw_x, draw_y;
2897 2921
2898 if (!SvROK (self)) 2922 if (!SvROK (self))
2899 croak ("CFPlus::Base::draw: %s not a reference", SvPV_nolen (self)); 2923 croak ("DC::Base::draw: %s not a reference", SvPV_nolen (self));
2900 2924
2901 hv = (HV *)SvRV (self); 2925 hv = (HV *)SvRV (self);
2902 2926
2903 if (SvTYPE (hv) != SVt_PVHV) 2927 if (SvTYPE (hv) != SVt_PVHV)
2904 croak ("CFPlus::Base::draw: %s not a hashref", SvPV_nolen (self)); 2928 croak ("DC::Base::draw: %s not a hashref", SvPV_nolen (self));
2905 2929
2906 svp = hv_fetch (hv, "w", 1, 0); w = svp ? SvNV (*svp) : 0.; 2930 svp = hv_fetch (hv, "w", 1, 0); w = svp ? SvNV (*svp) : 0.;
2907 svp = hv_fetch (hv, "h", 1, 0); h = svp ? SvNV (*svp) : 0.; 2931 svp = hv_fetch (hv, "h", 1, 0); h = svp ? SvNV (*svp) : 0.;
2908 2932
2909 if (!h || !w) 2933 if (!h || !w)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines