--- deliantra/Deliantra-Client/Client.xs 2006/04/13 23:07:56 1.30 +++ deliantra/Deliantra-Client/Client.xs 2006/04/14 02:03:10 1.35 @@ -39,7 +39,7 @@ substitute_func (FcPattern *pattern, gpointer data) { FcPatternAddBool (pattern, FC_HINTING , 1); - FcPatternAddBool (pattern, FC_AUTOHINT, 1); + FcPatternAddBool (pattern, FC_AUTOHINT, 0); } static void @@ -152,9 +152,7 @@ if (x >= row->c1) break; - mapcell *cell = row->col + (x - row->c0); - cell->darkness = -1; - cell->face [2] = 0; + row->col[x - row->c0].darkness = -1; } } } @@ -289,6 +287,16 @@ Safefree (self); void +set_text (CFClient::Layout self, SV *text_) + CODE: +{ + STRLEN textlen; + char *text = SvPVutf8 (text_, textlen); + + pango_layout_set_text (self->pl, text, textlen); +} + +void set_markup (CFClient::Layout self, SV *text_) CODE: { @@ -562,17 +570,21 @@ } } else - { - cell->darkness = -1; - cell->face [2] = 0; - } + cell->darkness = -1; } } void draw (CFClient::Map self, int x0, int y0, int sw, int sh) - CODE: + PPCODE: { + int sw4 = (sw + 3) & ~3; + SV *darkness_sv = sv_2mortal (newSV (sw4 * sh)); + uint8_t *darkness = (uint8_t *)SvPVX (darkness_sv); + + SvPOK_only (darkness_sv); + SvCUR_set (darkness_sv, sw4 * sh); + int vx = self->vx = self->w >= sw ? self->x + (self->w - sw) / 2 : MIN (self->x, MAX (self->x + self->w - sw + 1, self->vx)); @@ -604,6 +616,11 @@ if (row->c0 <= x + vx && x + vx < row->c1) { mapcell *cell = row->col + (x + vx - row->c0); + + darkness[y * sw4 + x] = cell->darkness < 0 + ? 255 - FOW_DARKNESS + : 255 - cell->darkness; + uint16_t face = cell->face [z]; if (face) @@ -630,5 +647,13 @@ } glEnd (); + + glDisable (GL_TEXTURE_2D); + glDisable (GL_BLEND); + + EXTEND (SP, 3); + PUSHs (sv_2mortal (newSViv (sw4))); + PUSHs (sv_2mortal (newSViv (sh))); + PUSHs (darkness_sv); }