Pārlūkot izejas kodu

Keep font name in permanent memory

Fl::set_font() doesn't keep its own copy, so we need to make sure the
font string doesn't get freed or overwritten at a later point.
pull/1592/head
Pierre Ossman pirms 1 gada
vecāks
revīzija
8793424b34
1 mainītis faili ar 10 papildinājumiem un 5 dzēšanām
  1. 10
    5
      vncviewer/fltk/theme.cxx

+ 10
- 5
vncviewer/fltk/theme.cxx Parādīt failu

@@ -41,6 +41,10 @@

void init_theme()
{
#if defined(WIN32) || defined(__APPLE__)
static char font_name[256];
#endif

// Basic text size (10pt @ 96 dpi => 13px)
FL_NORMAL_SIZE = 13;

@@ -62,21 +66,22 @@ void init_theme()
NONCLIENTMETRICS metrics;
metrics.cbSize = sizeof(metrics);
if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
sizeof(metrics), &metrics, 0))
Fl::set_font(FL_HELVETICA, metrics.lfMessageFont.lfFaceName);
sizeof(metrics), &metrics, 0)) {
strcpy(font_name, metrics.lfMessageFont.lfFaceName);
Fl::set_font(FL_HELVETICA, font_name);
}
#elif defined(__APPLE__)
CTFontRef font;
CFStringRef name;
char cname[256];

font = CTFontCreateUIFontForLanguage(kCTFontSystemFontType, 0.0, NULL);
if (font != NULL) {
name = CTFontCopyFullName(font);
if (name != NULL) {
CFStringGetCString(name, cname, sizeof(cname),
CFStringGetCString(name, font_name, sizeof(font_name),
kCFStringEncodingUTF8);

Fl::set_font(FL_HELVETICA, cname);
Fl::set_font(FL_HELVETICA, strdup(font_name));

CFRelease(name);
}

Notiek ielāde…
Atcelt
Saglabāt