سؤال

سؤال:

هل هناك طريقة للتحقق مما إذا كان الخط المعطى أحد Microsoft خطوط ClearType المحسنة?

أظن أنه يمكنني ببساطة أن أتعامل مع قائمة أسماء الخطوط ، لأنها قائمة قصيرة نسبيًا ، لكن هذا يبدو قبيحًا بعض الشيء. هل ستكون أسماء الخطوط هي نفسها بغض النظر عن إعدادات لغة Windows وإعدادات اللغة؟

خلفية:

المعجون يبدو قبيحًا حقًا مع نص Consolas Bold و ClearType. قررت أن ألعب مع المصدر ومعرفة ما إذا كان بإمكاني معرفة المشكلة ، وأعتقد أنني قمت بتتبعها إلى رمز (مختصر) التالي:

font_height = cfg.font.height;
if (font_height > 0) {
    font_height =
        -MulDiv(font_height, GetDeviceCaps(hdc, LOGPIXELSY), 72);
    }
}
font_width = 0;

#define f(i,c,w,u) \
    fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \
                           c, OUT_DEFAULT_PRECIS, \
                           CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \
                           FIXED_PITCH | FF_DONTCARE, cfg.font.name)

f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE);

SelectObject(hdc, fonts[FONT_NORMAL]);
GetTextMetrics(hdc, &tm);

font_height = tm.tmHeight;
font_width = tm.tmAveCharWidth;

f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE);

القصد من ذلك هو اختيار خط جريء يناسب نفس الأبعاد مثل الخط العادي. أفترض أن نص Consolas الخاص بـ Putty يبدو قبيحًا لأنه ، نظرًا لأن Consolas تم تحسينه بشدة ليتم وضعه على حدود محددة من البكسل ، فإن محاولة التغلب عليها في أبعاد تعسفية تنتج نتائج سيئة.

لذلك ، يبدو أن الإصلاح المناسب هو اكتشاف الخطوط المحسّنة التي تحسنتها ClearType ومحاولة إنشاء إصدارات جريئة من تلك الخطوط باستخدام نفس العرض والارتفاع مثل مكالمة CreateFont الأولية.

هل كانت مفيدة؟

المحلول

لست متأكدًا من أنني أتابع تمامًا ما هو المقصود بـ "تعقبه وصولاً إلى الكود التالي (المختصر)" ، ولكن من المؤكد أن كافيًا يبدو أن Consolas Bold سيئ في المعجون. فيما يلي مصدر معجون لنظام التشغيل Windows/Window.C (المراجعة 8914 تم الحصول عليها مع Subversion "SVN CO SVN: //svn.tartarus.org/sgt/putty" ، في 5 أبريل 2010).

      1386      fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \
      1387                             c, OUT_DEFAULT_PRECIS, \
      1388                             CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \
      1389                             FIXED_PITCH | FF_DONTCARE, cfg.font.name)
      1390  
      1391      f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE);
      1392  
      1393      SelectObject(hdc, fonts[FONT_NORMAL]);
      1394      GetTextMetrics(hdc, &tm);
      1395  
      1396      GetObject(fonts[FONT_NORMAL], sizeof(LOGFONT), &lfont);
      1397  
      1398      if (pick_width == 0 || pick_height == 0) {
      1399            font_height = tm.tmHeight;
      1400            font_width = tm.tmAveCharWidth;
      1401      }
      ...
      1477      if (bold_mode == BOLD_FONT) {
      1478      f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE);
      1479      }

بالنسبة إلى 10 pt consolas ، كانت قيم font_height و font_width -13 و 0 عندما تم استدعاء CreateFont لـ font_normal (عبر الماكرو F) ، ولكن 15 و 7 عندما تم استدعاؤه لـ FONT_BOLD (يتم تغيير القيم على الأسطر 1399،1400) . إن تحديد قيمة العرض بشكل صريح لا يتفق جيدًا مع خط Consolas Bold. إذا تم تعديل Window.c بحيث يتم نقل الخطوط 1477-1479 ليأتي بعد السطر 1391 ، يتم الحصول على خط Consolas Bold Tower كثيرًا (لقد جربت أيضًا جميع الخطوط الأخرى المتاحة (Courier ، Bitstream ، Lucida وما إلى ذلك) ولم تكن سلبًا تأثرت. لقد أرسلت هذا الاقتراح إلى فريق المعجون. إليك شخصية توضح الفرق:Bold-consolas-example

تمت إضافة في 16 يناير 2011: لا يزال "الخطأ" موجودًا ، ولا يزال الإصلاح يعمل. الآن ، يجب نقل خطوط الخط في النافذة.

أضيفت في يناير. 13 ، 2012: لا يزال الخطأ في الإصدار 0.62 من المعجون (صدر في 10 ديسمبر 2011). إن الكتان الذي يجب الانتقال إليه الآن 1532-1534 ليأتي بعد عام 1439. لاكتمال هنا هي الخطوات التي أجريتها في Cygwin:

$ svn co svn://svn.tartarus.org/sgt/putty2
$ cd putty
$ perl mkfiles.pl
$ cd windows
$ --- edit window.c and move the 3 lines---
$ make CC=gcc-3 -f Makefile.cyg
$ --- move resulting executable files (including putty.exe) to a suitable folder
$ --- add shortcuts to the executables to Windows start menu

كريستجان

نصائح أخرى

لست متأكدًا مما إذا كان هذا إجابة لك ، ولكن التأكد من أن عرض الخط هو عرض بكسل عدد صحيح دقيق ، سيجعل خطوط TrueType ذات العرض الثابت تبدو جيدة تحت ClearType.

لتحقيق ذلك ، ستحتاج إلى "توصيل" ارتفاع الخط مع بعض التجربة والخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top