سؤال

أقوم بتجربة XLIB للحصول على فهم أعمق لكيفية عمل برامج Linux Gui. لقد كتبت برنامجا بسيطا يعرض "Hello، World" في نافذة، لكنه يبدو مفاجأة إلى حد ما لأن النص ليس مضادا للتعزيز.

ما هي أفضل طريقة لعرض نص مضاد للتعيس في X11؟ كيف يتم تنفيذ مكافحة التعرجات في GTK و QT وأدوات الأدوات الأخرى؟

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

المحلول

لا تدعم تسهيلات تقديم النص في بروتوكول X. (أعتقد أن السبب هو أن بروتوكول الخط X ليس لديه أي مكان لقناة ألفا.)

تقدم GTK و QT نص في العميل باستخدام مكتبة FreeType، والحصول على Pixmap مع قناة ألفا كنتيجة لذلك. إذا كان خادم X يدعم ملحق التجسيد، فيمكن للعميل إرسال ملف pixmap إلى الخادم ليتم إضافته على الشاشة باستخدام قناة ألفا الخاصة بها. إذا كان خادم X لا يدعم التجسيد، يتعين على العميل استرجاع منطقة الشاشة حيث يتم عرض النص (أخذ لقطة شاشة صغيرة، في الأساس)، قم بجانب عميل مزج ألفا وإرسال Pixmap المشفوف الناتج العودة إلى خادم X المراد عرضها.

نصائح أخرى

FreeType هو على مستوى خاطئ من المكدس. لن يسمح لك فقط برسم الرساميات في أماكن معينة. عادة ما تحتاج إلى آلية اختيار الخط على الأقل (المقدمة fontconfig.) ومحرك تشكيل (المقدمة من قبل بانجو أو كيو تي).

يستخدم كل من Pango و QT إصدارا متشعبا من محرك تخطيط Freetype مفهوم، ولكن يتم التوفيق بين هذا harfbuzz. مشروع.

انظر أيضا هذا المنشور بواسطة Behdad Esfahbod: Pango vs Harfbuzz., وهذا وثيقة أطول وأكثر شمولا: تحديد النص.

FreeType.. وبعد يستخدم GTK + Pango، و QT لديه مكتبة تخطيط نصية خاصة به، ولكن كلاهما يستخدم فريدتكم في النهاية، وعدة تطبيقات (على سبيل المثال xterm مع الخطوط القاسية المدفوعة) استخدم FreeType من خلال مكتبة Libxft ذات المستوى الأدنى والتي تأتي مع Xorg.

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