Commit cd3ec12e5f6020bf47197e645f9cb92b4ebcc92c

Authored by Perry Werneck
1 parent 1dd925cd
Exists in master and in 1 other branch develop

Adding subscript chars.

Showing 1 changed file with 46 additions and 22 deletions   Show diff stats
src/terminal/drawing/draw.c
... ... @@ -205,32 +205,15 @@ void v3270_draw_text(cairo_t *cr, const GdkRectangle *rect, v3270FontInfo *font,
205 205 v3270_draw_text_at(cr,rect->x,rect->y,font,str);
206 206 }
207 207  
208   -static gboolean draw_cg(cairo_t *cr, unsigned char chr, v3270FontInfo *font, GdkRectangle *rect)
  208 +static void draw_small_text(cairo_t *cr, const GdkRectangle *rect, v3270FontInfo *font, const char *str, int mode)
209 209 {
210   - static const struct CharList
211   - {
212   - unsigned char chr;
213   - const gchar * utf;
214   - } charlist[] =
215   - {
216   - { 0x8c, "≤" }, // CG 0xf7, less or equal "≤"
217   - { 0xae, "≥" }, // CG 0xd9, greater or equal "≥"
218   - { 0xbe, "≠" }, // CG 0x3e, not equal "≠"
219   - { 0xad, "[" }, // "["
220   - { 0xbd, "]" }, // "]"
221   - };
222   -
223   - size_t ix;
224   -
225   - if(chr >= 0xf0 && chr <= 0xf9)
226   - {
227   - char str[] = { '0' + (chr-0xF0), 0 };
228   -
229 210 cairo_status_t status;
230 211 cairo_glyph_t * glyphs = NULL;
231 212 int num_glyphs = 0;
232 213 cairo_text_cluster_t * clusters = NULL;
233 214 int num_clusters = 0;
  215 + double y = (double) rect->y;
  216 +
234 217 cairo_text_cluster_flags_t cluster_flags;
235 218 cairo_scaled_font_t * scaled_font = cairo_get_scaled_font(cr);
236 219 cairo_font_extents_t extents;
... ... @@ -238,12 +221,21 @@ static gboolean draw_cg(cairo_t *cr, unsigned char chr, v3270FontInfo *font, Gdk
238 221 cairo_save(cr);
239 222  
240 223 cairo_set_font_face(cr,font->face);
241   - cairo_set_font_size(cr,font->size/1.3);
  224 + cairo_set_font_size(cr,font->size/ 1.6);
242 225 cairo_font_extents(cr,&extents);
243 226  
  227 + if(mode == 0)
  228 + {
  229 + y += ((double) extents.height);
  230 + }
  231 + else
  232 + {
  233 + y += font->height;
  234 + }
  235 +
244 236 status = cairo_scaled_font_text_to_glyphs(
245 237 scaled_font,
246   - (double) rect->x, (double) (rect->y+extents.height),
  238 + (double) rect->x, y,
247 239 str, 1,
248 240 &glyphs, &num_glyphs,
249 241 &clusters, &num_clusters, &cluster_flags );
... ... @@ -260,6 +252,38 @@ static gboolean draw_cg(cairo_t *cr, unsigned char chr, v3270FontInfo *font, Gdk
260 252  
261 253 cairo_restore(cr);
262 254  
  255 +}
  256 +
  257 +static gboolean draw_cg(cairo_t *cr, unsigned char chr, v3270FontInfo *font, GdkRectangle *rect)
  258 +{
  259 + static const struct CharList
  260 + {
  261 + unsigned char chr;
  262 + const gchar * utf;
  263 + } charlist[] =
  264 + {
  265 + { 0x8c, "≤" }, // CG 0xf7, less or equal "≤"
  266 + { 0xae, "≥" }, // CG 0xd9, greater or equal "≥"
  267 + { 0xbe, "≠" }, // CG 0x3e, not equal "≠"
  268 + { 0xad, "[" }, // "["
  269 + { 0xbd, "]" }, // "]"
  270 + { 0xb8, "÷" }, // Division Sign ÷
  271 +
  272 + };
  273 +
  274 + size_t ix;
  275 +
  276 + if(chr >= 0xf0 && chr <= 0xf9)
  277 + {
  278 + char str[] = { '0' + (chr-0xF0), 0 };
  279 + draw_small_text(cr, rect, font, str, 0);
  280 + return TRUE;
  281 + }
  282 +
  283 + if(chr >= 0xe1 && chr <= 0xe3)
  284 + {
  285 + char str[] = { '1' + (chr-0xe1), 0 };
  286 + draw_small_text(cr, rect, font, str, 1);
263 287 return TRUE;
264 288 }
265 289  
... ...