2009-12-11 11 views
5

Tôi đang thử nghiệm với Xlib để hiểu sâu hơn về cách các chương trình GUI của Linux hoạt động. Tôi đã viết một chương trình đơn giản hiển thị "Hello, world" trong một cửa sổ, nhưng nó trông khá lỗi thời vì văn bản không được chống răng cưa.Văn bản chống răng cưa trong X11

Cách tốt nhất để hiển thị văn bản chống răng cưa trong X11 là gì? Làm cách nào để chống răng cưa được thực hiện trong GTK, Qt và các bộ công cụ khác?

Trả lời

5

Các phương tiện hiển thị văn bản của giao thức X không hỗ trợ chống răng cưa và không được sử dụng nhiều trong những ngày này. (Tôi nghĩ lý do là giao thức phông chữ X không có vị trí nào cho kênh alpha.)

GTK và Qt hiển thị văn bản trong ứng dụng khách bằng thư viện FreeType, nhận bản đồ pixmap với kênh alpha là kết quả . Nếu máy chủ X hỗ trợ phần mở rộng RENDER, máy khách có thể gửi bản đồ pixmap đó đến máy chủ để trộn nó vào màn hình bằng cách sử dụng kênh alpha của nó. Nếu máy chủ X không hỗ trợ RENDER, máy khách phải truy xuất vùng màn hình nơi văn bản được hiển thị (chụp ảnh màn hình nhỏ về cơ bản), thực hiện trộn alpha phía máy khách và gửi bản đồ mờ đục kết quả trở lại máy chủ X được hiển thị.

+0

Đánh dấu được chấp nhận vì điều này mô tả những gì thực sự xảy ra ở mức thấp. Nó làm tôi ngạc nhiên rằng việc xử lý phông chữ là tất cả ở phía khách hàng bây giờ. –

+0

Nghe có vẻ như nó sẽ kém hiệu quả hơn, nhưng từ những gì tôi đã đọc, thực sự không có nhiều khác biệt. Có, khách hàng bây giờ phải gửi các bản tóm tắt văn bản được trả lại cho máy chủ, nhưng nó không còn phải truy vấn máy chủ cho tất cả dữ liệu số liệu phông mà nó cần trong khi thực hiện bố cục văn bản. Nó cũng có nghĩa là không có chuỗi XLFD xấu xí hơn. :-) – Wyzard

4

FreeType. GTK + sử dụng Pango, và Qt có thư viện bố trí văn bản riêng, nhưng cả hai đều sử dụng FreeType cuối cùng và một số ứng dụng (ví dụ XTerm với phông chữ chống răng cưa được bật) sử dụng FreeType thông qua thư viện libXft cấp thấp đi kèm với Xorg.

6

FreeType ở cấp độ không chính xác của ngăn xếp. Nó sẽ chỉ cho phép bạn vẽ glyph ở những nơi nhất định. Thông thường, bạn cần ít nhất một cơ chế chọn phông chữ (được cung cấp bởi Fontconfig) và một công cụ tạo hình (được cung cấp bởi Pango hoặc Qt).

Cả Pango và Qt đều sử dụng phiên bản chia rẽ của công cụ bố cục FreeType bị bỏ rơi, nhưng điều này đang được hòa giải vào dự án HarfBuzz.

Xem thêm bài đăng này của Behdad Esfahbod: Pango vs HarfBuzz và tài liệu dài hơn và toàn diện hơn này: State of Text Rendering.

+0

Bài viết của Nhà xuất bản văn bản là một bài đọc thú vị. Cảm ơn bạn. –