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.118 by root, Thu Jun 15 15:47:35 2006 UTC vs.
Revision 1.121 by root, Fri Jun 23 20:28:19 2006 UTC

42 typedef signed int int32_t; 42 typedef signed int int32_t;
43#endif 43#endif
44 44
45#include "glext.h" 45#include "glext.h"
46 46
47#define OBJ_STR "\xef\xbf\xbc" /* U+FFFC, objetc replacement character */
48
47#define FOW_DARKNESS 32 49#define FOW_DARKNESS 32
48 50
49#define MAP_EXTEND_X 32 51#define MAP_EXTEND_X 32
50#define MAP_EXTEND_Y 512 52#define MAP_EXTEND_Y 512
51 53
70 72
71typedef Mix_Chunk *CFClient__MixChunk; 73typedef Mix_Chunk *CFClient__MixChunk;
72typedef Mix_Music *CFClient__MixMusic; 74typedef Mix_Music *CFClient__MixMusic;
73 75
74typedef PangoFontDescription *CFClient__Font; 76typedef PangoFontDescription *CFClient__Font;
77
78static int
79shape_attr_p (PangoLayoutRun *run)
80{
81 GSList *attrs = run->item->analysis.extra_attrs;
82
83 while (attrs)
84 {
85 PangoAttribute *attr = attrs->data;
86
87 if (attr->klass->type == PANGO_ATTR_SHAPE)
88 return 1;
89
90 attrs = attrs->next;
91 }
92
93 return 0;
94}
75 95
76typedef struct cf_layout { 96typedef struct cf_layout {
77 PangoLayout *pl; // either derived from a cairo or ft2 context 97 PangoLayout *pl; // either derived from a cairo or ft2 context
78 int rgba; // wether we use rgba (cairo) or grayscale (ft2) 98 int rgba; // wether we use rgba (cairo) or grayscale (ft2)
79 float r, g, b, a; // default color for rgba mode 99 float r, g, b, a; // default color for rgba mode
810 char *text = SvPVutf8 (text_, textlen); 830 char *text = SvPVutf8 (text_, textlen);
811 831
812 pango_layout_set_markup (self->pl, text, textlen); 832 pango_layout_set_markup (self->pl, text, textlen);
813} 833}
814 834
835void
836set_shapes (CFClient::Layout self, ...)
837 CODE:
838{
839 PangoAttrList *attrs = 0;
840 const char *text = pango_layout_get_text (self->pl);
841 const char *pos = text;
842 int arg = 2;
843
844 while (arg < items && (pos = strstr (pos, OBJ_STR)))
845 {
846 PangoRectangle rect;
847 PangoAttribute *attr;
848
849 int w = SvIV (ST (arg - 1));
850 int h = SvIV (ST (arg));
851
852 arg += 2;
853
854 rect.x = 0;
855 rect.y = -h * PANGO_SCALE;
856 rect.width = w * PANGO_SCALE;
857 rect.height = h * PANGO_SCALE;
858
859 if (!attrs)
860 attrs = pango_layout_get_attributes (self->pl);
861
862 attr = pango_attr_shape_new (&rect, &rect);
863 attr->start_index = pos - text;
864 attr->end_index = attr->start_index + sizeof (OBJ_STR) - 1;
865 pango_attr_list_insert (attrs, attr);
866
867 pos += sizeof (OBJ_STR) - 1;
868 }
869
870 if (attrs)
871 pango_layout_set_attributes (self->pl, attrs);
872}
873
874void
875get_shapes (CFClient::Layout self)
876 PPCODE:
877{
878 PangoLayoutIter *iter = pango_layout_get_iter (self->pl);
879
880 do
881 {
882 PangoLayoutRun *run = pango_layout_iter_get_run (iter);
883
884 if (run && shape_attr_p (run))
885 {
886 PangoRectangle extents;
887 pango_layout_iter_get_run_extents (iter, 0, &extents);
888
889 PUSHs (sv_2mortal (newSViv (PANGO_PIXELS (extents.x))));
890 PUSHs (sv_2mortal (newSViv (PANGO_PIXELS (extents.y))));
891 }
892 }
893 while (pango_layout_iter_next_run (iter));
894
895 pango_layout_iter_free (iter);
896}
897
898int
899has_wrapped (CFClient::Layout self)
900 CODE:
901{
902 int lines = 1;
903 const char *text = pango_layout_get_text (self->pl);
904
905 while (*text)
906 lines += *text++ == '\n';
907
908 RETVAL = lines < pango_layout_get_line_count (self->pl);
909}
910 OUTPUT:
911 RETVAL
912
815SV * 913SV *
816get_text (CFClient::Layout self) 914get_text (CFClient::Layout self)
817 CODE: 915 CODE:
818 RETVAL = newSVpv (pango_layout_get_text (self->pl), 0); 916 RETVAL = newSVpv (pango_layout_get_text (self->pl), 0);
819 sv_utf8_decode (RETVAL); 917 sv_utf8_decode (RETVAL);
1233 1331
1234 while (data < data_end) 1332 while (data < data_end)
1235 { 1333 {
1236 flags = (data [0] << 8) + data [1]; data += 2; 1334 flags = (data [0] << 8) + data [1]; data += 2;
1237 1335
1238 x = ((flags >> 10) & 63) + self->x; 1336 x = self->x + ((flags >> 10) & 63);
1239 y = ((flags >> 4) & 63) + self->y; 1337 y = self->y + ((flags >> 4) & 63);
1240 1338
1241 cell = map_get_cell (self, x, y); 1339 cell = map_get_cell (self, x, y);
1242 1340
1243 if (flags & 15) 1341 if (flags & 15)
1244 { 1342 {
1341 int vx, vy; 1439 int vx, vy;
1342 int x, y, z; 1440 int x, y, z;
1343 int last_name; 1441 int last_name;
1344 mapface face; 1442 mapface face;
1345 1443
1346 vx = self->x + (self->w - sw + 1) / 2 - shift_x; 1444 vx = self->x + self->w / 2 - sw / 2 - shift_x;
1347 vy = self->y + (self->h - sh + 1) / 2 - shift_y; 1445 vy = self->y + self->h / 2 - sh / 2 - shift_y;
1348 1446
1349 /* 1447 /*
1350 int vx = self->vx = self->w >= sw 1448 int vx = self->vx = self->w >= sw
1351 ? self->x + (self->w - sw) / 2 1449 ? self->x + (self->w - sw) / 2
1352 : MIN (self->x, MAX (self->x + self->w - sw + 1, self->vx)); 1450 : MIN (self->x, MAX (self->x + self->w - sw + 1, self->vx));
1715 const_iv (GL_SCISSOR_TEST), 1813 const_iv (GL_SCISSOR_TEST),
1716 const_iv (GL_DEPTH_TEST), 1814 const_iv (GL_DEPTH_TEST),
1717 const_iv (GL_ALPHA_TEST), 1815 const_iv (GL_ALPHA_TEST),
1718 const_iv (GL_NORMALIZE), 1816 const_iv (GL_NORMALIZE),
1719 const_iv (GL_RESCALE_NORMAL), 1817 const_iv (GL_RESCALE_NORMAL),
1818 const_iv (GL_FRONT),
1819 const_iv (GL_BACK),
1720 const_iv (GL_AND), 1820 const_iv (GL_AND),
1721 const_iv (GL_ONE), 1821 const_iv (GL_ONE),
1722 const_iv (GL_ZERO), 1822 const_iv (GL_ZERO),
1723 const_iv (GL_SRC_ALPHA), 1823 const_iv (GL_SRC_ALPHA),
1724 const_iv (GL_DST_ALPHA), 1824 const_iv (GL_DST_ALPHA),
1846 1946
1847void glPopMatrix () 1947void glPopMatrix ()
1848 1948
1849void glLoadIdentity () 1949void glLoadIdentity ()
1850 1950
1951void glDrawBuffer (int buffer)
1952
1953void glReadBuffer (int buffer)
1954
1851# near_ and far_ are due to microsofts buggy "c" compiler 1955# near_ and far_ are due to microsofts buggy "c" compiler
1852void glFrustum (double left, double right, double bottom, double top, double near_, double far_) 1956void glFrustum (double left, double right, double bottom, double top, double near_, double far_)
1853 1957
1854# near_ and far_ are due to microsofts buggy "c" compiler 1958# near_ and far_ are due to microsofts buggy "c" compiler
1855void glOrtho (double left, double right, double bottom, double top, double near_, double far_) 1959void glOrtho (double left, double right, double bottom, double top, double near_, double far_)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines