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.133 by root, Sun Jul 30 13:16:44 2006 UTC vs.
Revision 1.141 by root, Fri Aug 18 01:01:00 2006 UTC

144} 144}
145 145
146static void 146static void
147layout_get_pixel_size (CFPlus__Layout self, int *w, int *h) 147layout_get_pixel_size (CFPlus__Layout self, int *w, int *h)
148{ 148{
149 PangoRectangle rect;
150
151 // get_pixel_* wrongly rounds down
149 pango_layout_get_pixel_size (self->pl, w, h); 152 pango_layout_get_extents (self->pl, 0, &rect);
150 153
151 if (!*w) *w = 1; 154 rect.width = (rect.width + PANGO_SCALE - 1) / PANGO_SCALE;
152 if (!*h) *h = 1; 155 rect.height = (rect.height + PANGO_SCALE - 1) / PANGO_SCALE;
153 156
154 *w = (*w + 3) & ~3; 157 if (!rect.width) rect.width = 1;
158 if (!rect.height) rect.height = 1;
159
160 *w = rect.width;
161 *h = rect.height;
155} 162}
156 163
157typedef uint16_t mapface; 164typedef uint16_t mapface;
158 165
159typedef struct { 166typedef struct {
512 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 519 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
513 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0); 520 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0);
514 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 521 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
515 522
516 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 523 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
524#if SDL_VERSION_ATLEAST(1,2,10)
517 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1); 525 SDL_GL_SetAttribute (SDL_GL_ACCELERATED_VISUAL, 1);
518 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1); 526 SDL_GL_SetAttribute (SDL_GL_SWAP_CONTROL, 1);
527#endif
519 528
520 SDL_EnableUNICODE (1); 529 SDL_EnableUNICODE (1);
521 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); 530 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
522 531
523 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 532 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
1023 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE))); 1032 PUSHs (sv_2mortal (newSViv (strong_pos.y / PANGO_SCALE)));
1024 PUSHs (sv_2mortal (newSViv (strong_pos.height / PANGO_SCALE))); 1033 PUSHs (sv_2mortal (newSViv (strong_pos.height / PANGO_SCALE)));
1025} 1034}
1026 1035
1027void 1036void
1028render (CFPlus::Layout self, float x, float y) 1037render (CFPlus::Layout self, float x, float y, int flags = 0)
1029 PPCODE: 1038 PPCODE:
1030 pango_opengl_render_layout_subpixel ( 1039 pango_opengl_render_layout_subpixel (
1031 self->pl, 1040 self->pl,
1032 x * PANGO_SCALE, y * PANGO_SCALE, 1041 x * PANGO_SCALE, y * PANGO_SCALE,
1033 self->r, self->g, self->b, self->a 1042 self->r, self->g, self->b, self->a,
1043 flags
1034 ); 1044 );
1035 1045
1036MODULE = CFPlus PACKAGE = CFPlus::Texture 1046MODULE = CFPlus PACKAGE = CFPlus::Texture
1037 1047
1038void 1048void
1250 self->y += MAP_EXTEND_Y; 1260 self->y += MAP_EXTEND_Y;
1251 } 1261 }
1252} 1262}
1253 1263
1254void 1264void
1255map1a_update (CFPlus::Map self, SV *data_) 1265map1a_update (CFPlus::Map self, SV *data_, int extmap)
1256 CODE: 1266 CODE:
1257{ 1267{
1258 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_); 1268 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_);
1259 uint8_t *data_end = (uint8_t *)SvEND (data_); 1269 uint8_t *data_end = (uint8_t *)SvEND (data_);
1260 mapcell *cell; 1270 mapcell *cell;
1277 cell->face [0] = 0; 1287 cell->face [0] = 0;
1278 cell->face [1] = 0; 1288 cell->face [1] = 0;
1279 cell->face [2] = 0; 1289 cell->face [2] = 0;
1280 } 1290 }
1281 1291
1292 if (flags & 8)
1293 {
1294 fprintf (stderr, "oi\n");//D
1295 if (extmap)
1296 {
1297 uint8_t ext, cmd;
1298
1299 do
1300 {
1301
1302 ext = *data++;
1303 cmd = ext & 0x7f;
1304
1305 fprintf (stderr, "extcmd = %x\n", ext);//D
1306
1307 if (ext < 4)
1308 cell->darkness = 255 - ext * 64;
1309 }
1310 while (cmd & 0x80);
1311 }
1312 else
1282 cell->darkness = flags & 8 ? *data++ : 255; 1313 cell->darkness = flags & 8 ? *data++ : 255;
1314 }
1283 1315
1284 //TODO: don't trust server data to be in-range(!) 1316 //TODO: don't trust server data to be in-range(!)
1285 1317
1286 if (flags & 4) 1318 if (flags & 4)
1287 { 1319 {
1800 const_iv (GL_SEPARABLE_2D), 1832 const_iv (GL_SEPARABLE_2D),
1801 const_iv (GL_CONVOLUTION_2D), 1833 const_iv (GL_CONVOLUTION_2D),
1802 const_iv (GL_CONVOLUTION_BORDER_MODE), 1834 const_iv (GL_CONVOLUTION_BORDER_MODE),
1803 const_iv (GL_CONSTANT_BORDER), 1835 const_iv (GL_CONSTANT_BORDER),
1804 const_iv (GL_LINES), 1836 const_iv (GL_LINES),
1837 const_iv (GL_LINE_STRIP),
1805 const_iv (GL_LINE_LOOP), 1838 const_iv (GL_LINE_LOOP),
1806 const_iv (GL_QUADS), 1839 const_iv (GL_QUADS),
1807 const_iv (GL_QUAD_STRIP), 1840 const_iv (GL_QUAD_STRIP),
1808 const_iv (GL_TRIANGLES), 1841 const_iv (GL_TRIANGLES),
1809 const_iv (GL_TRIANGLE_STRIP), 1842 const_iv (GL_TRIANGLE_STRIP),
2006 2039
2007void glEndList () 2040void glEndList ()
2008 2041
2009void glCallList (int list) 2042void glCallList (int list)
2010 2043
2011

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines