… | |
… | |
150 | typedef struct cf_layout { |
150 | typedef 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 | CFPlus__Font font; |
|
|
155 | rc_t *rc; |
155 | } *CFPlus__Layout; |
156 | } *CFPlus__Layout; |
156 | |
157 | |
157 | static CFPlus__Font default_font; |
158 | static CFPlus__Font default_font; |
158 | static PangoContext *opengl_context; |
159 | static PangoContext *opengl_context; |
159 | static PangoFontMap *opengl_fontmap; |
160 | static PangoFontMap *opengl_fontmap; |
… | |
… | |
1036 | RETVAL->g = 1.; |
1037 | RETVAL->g = 1.; |
1037 | RETVAL->b = 1.; |
1038 | RETVAL->b = 1.; |
1038 | RETVAL->a = 1.; |
1039 | RETVAL->a = 1.; |
1039 | RETVAL->base_height = MIN_FONT_HEIGHT; |
1040 | RETVAL->base_height = MIN_FONT_HEIGHT; |
1040 | RETVAL->font = 0; |
1041 | RETVAL->font = 0; |
|
|
1042 | RETVAL->rc = rc_alloc (); |
1041 | |
1043 | |
1042 | pango_layout_set_wrap (RETVAL->pl, PANGO_WRAP_WORD_CHAR); |
1044 | pango_layout_set_wrap (RETVAL->pl, PANGO_WRAP_WORD_CHAR); |
1043 | layout_update_font (RETVAL); |
1045 | layout_update_font (RETVAL); |
1044 | OUTPUT: |
1046 | OUTPUT: |
1045 | RETVAL |
1047 | RETVAL |
1046 | |
1048 | |
1047 | void |
1049 | void |
1048 | DESTROY (CFPlus::Layout self) |
1050 | DESTROY (CFPlus::Layout self) |
1049 | CODE: |
1051 | CODE: |
1050 | g_object_unref (self->pl); |
1052 | g_object_unref (self->pl); |
|
|
1053 | rc_free (self->rc); |
1051 | Safefree (self); |
1054 | Safefree (self); |
1052 | |
1055 | |
1053 | void |
1056 | void |
1054 | set_text (CFPlus::Layout self, SV *text_) |
1057 | set_text (CFPlus::Layout self, SV *text_) |
1055 | CODE: |
1058 | CODE: |
… | |
… | |
1307 | } |
1310 | } |
1308 | } |
1311 | } |
1309 | |
1312 | |
1310 | void |
1313 | void |
1311 | render (CFPlus::Layout self, float x, float y, int flags = 0) |
1314 | render (CFPlus::Layout self, float x, float y, int flags = 0) |
1312 | PPCODE: |
1315 | CODE: |
|
|
1316 | rc_clear (self->rc); |
1313 | pango_opengl_render_layout_subpixel ( |
1317 | pango_opengl_render_layout_subpixel ( |
1314 | self->pl, |
1318 | self->pl, |
|
|
1319 | self->rc, |
1315 | x * PANGO_SCALE, y * PANGO_SCALE, |
1320 | x * PANGO_SCALE, y * PANGO_SCALE, |
1316 | self->r, self->g, self->b, self->a, |
1321 | self->r, self->g, self->b, self->a, |
1317 | flags |
1322 | flags |
1318 | ); |
1323 | ); |
|
|
1324 | // we assume that context_change actually clears/frees stuff |
|
|
1325 | // and does not do any recomputation... |
|
|
1326 | pango_layout_context_changed (self->pl); |
|
|
1327 | |
|
|
1328 | void |
|
|
1329 | draw (CFPlus::Layout self) |
|
|
1330 | CODE: |
|
|
1331 | { |
|
|
1332 | glEnable (GL_TEXTURE_2D); |
|
|
1333 | glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
|
|
1334 | glEnable (GL_BLEND); |
|
|
1335 | gl_BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, |
|
|
1336 | GL_ONE , GL_ONE_MINUS_SRC_ALPHA); |
|
|
1337 | glEnable (GL_ALPHA_TEST); |
|
|
1338 | glAlphaFunc (GL_GREATER, 7.f / 255.f); |
|
|
1339 | |
|
|
1340 | rc_draw (self->rc); |
|
|
1341 | |
|
|
1342 | glDisable (GL_ALPHA_TEST); |
|
|
1343 | glDisable (GL_BLEND); |
|
|
1344 | glDisable (GL_TEXTURE_2D); |
|
|
1345 | } |
1319 | |
1346 | |
1320 | MODULE = CFPlus PACKAGE = CFPlus::Texture |
1347 | MODULE = CFPlus PACKAGE = CFPlus::Texture |
1321 | |
1348 | |
1322 | PROTOTYPES: ENABLE |
1349 | PROTOTYPES: ENABLE |
1323 | |
1350 | |
… | |
… | |
1875 | skey.x = x + 2; skey.y = y ; smooth_or_bits (smooth, &skey, 0x0800); |
1902 | skey.x = x + 2; skey.y = y ; smooth_or_bits (smooth, &skey, 0x0800); |
1876 | } |
1903 | } |
1877 | } |
1904 | } |
1878 | } |
1905 | } |
1879 | } |
1906 | } |
|
|
1907 | |
|
|
1908 | rc_draw (rc); |
|
|
1909 | rc_clear (rc); |
1880 | |
1910 | |
1881 | // go through all smoothlevels, lowest to highest, then draw. |
1911 | // go through all smoothlevels, lowest to highest, then draw. |
1882 | // this is basically counting sort |
1912 | // this is basically counting sort |
1883 | { |
1913 | { |
1884 | int w, b; |
1914 | int w, b; |