432 |
*) |
*) |
433 |
|
|
434 |
let fit_string_to_pixels s ~context ~pixels = |
let fit_string_to_pixels s ~context ~pixels = |
435 |
let us = U.utf8_of s in |
if s = "" |
436 |
let pango_layout = Pango.Layout.create context#as_context in |
then s |
|
Pango.Layout.set_text pango_layout us; |
|
|
let us' = |
|
|
if fst (Pango.Layout.get_pixel_size pango_layout) <= pixels |
|
|
then us |
|
437 |
else begin |
else begin |
438 |
let len = Glib.Utf8.length us in |
let us = U.utf8_of s in |
439 |
let uca = Glib.Utf8.to_unistring us in |
let pango_layout = Pango.Layout.create context#as_context in |
440 |
let uca_ext = Array.sub uca (len - 7) 7 in |
Pango.Layout.set_text pango_layout us; |
441 |
let ext = "..." ^ (Glib.Utf8.from_unistring uca_ext) in |
let us' = |
442 |
let rec adjust_string n len = |
if fst (Pango.Layout.get_pixel_size pango_layout) <= pixels |
443 |
if n = len |
then us |
444 |
then us |
else begin |
445 |
else begin |
let len = Glib.Utf8.length us in |
446 |
let ustr = (Glib.Utf8.from_unistring (Array.sub uca 0 n)) ^ ext in |
let uca = Glib.Utf8.to_unistring us in |
447 |
Pango.Layout.set_text pango_layout ustr; |
let ext_len = min 7 (len - 1) in |
448 |
let ustr_pixels = fst (Pango.Layout.get_pixel_size pango_layout) in |
let uca_ext = Array.sub uca (len - ext_len) ext_len in |
449 |
(* Printf.printf "width %d - Pango.Layout.get_pixel_size %d Pango.Layout.get_text %s\n" |
let ext = "..." ^ (Glib.Utf8.from_unistring uca_ext) in |
450 |
pixels s_width (Pango.Layout.get_text pango_layout); |
let rec adjust_string n len = |
451 |
flush stdout; *) |
if n = len |
452 |
if ustr_pixels < pixels |
then us |
453 |
then adjust_string (n + 1) len |
else begin |
454 |
else ustr |
let ustr = (Glib.Utf8.from_unistring (Array.sub uca 0 n)) ^ ext in |
455 |
end |
Pango.Layout.set_text pango_layout ustr; |
456 |
in |
let ustr_pixels = fst (Pango.Layout.get_pixel_size pango_layout) in |
457 |
adjust_string 0 len |
if ustr_pixels < pixels |
458 |
|
then adjust_string (n + 1) len |
459 |
|
else ustr |
460 |
|
end |
461 |
|
in |
462 |
|
adjust_string 0 len |
463 |
|
end |
464 |
|
in us' |
465 |
end |
end |
|
in us' |
|
|
|
|
466 |
|
|
467 |
|
|
468 |
let warning_box |
let warning_box |