Theppitak's blog

My personal blog.

07 กรกฎาคม 2547

Future of rendering in GNOME

เมื่อ X architecture เปลี่ยน ก็มาดูทางด้าน desktop บ้าง ในงาน GUADEC 2004, Owen Taylor ได้เสนอหัวข้อ The future of rendering in GNOME เนื้อหาหลักคือการรวม rendering API ทั้งหลายใน GNOME ให้เป็นอันหนึ่งอันเดียวกัน โดยอาศัยความสามารถของ Cairo เข้าช่วย สรุปมาสั้นๆ ดังนี้

  • rendering API ปัจจุบันของ GNOME
    • GDK : Xlib wrapper โดย GTK+ จะพยายามใช้ RENDER extension ถ้ามีให้
    • GNOME Canvas : มีสอง mode คือ GDK (non-anti-aliased) และ libart (anti-aliased)
    • gnome-print : สำหรับงานพิมพ์; interface คล้าย postscript + มี alpha channel
  • Update: ลืมเน้นตรงนี้ว่า ปัญหาคือ API หลากหลายเกินไป → ควร unify API (ซึ่งข้างล่างนี้คือแนวทางการ unify)
  • Cairo สร้าง interface หนึ่งเดียว สำหรับทั้งวาดบนจอและออกเครื่องพิมพ์ รูปแบบคล้าย SVG หรือ PDF-1.4 พร้อมมี backend หลากหลาย
  • GTK+ integration
    • GDK : ไม่ wrap Cairo เพราะ Cairo เป็น neutral API อยู่แล้ว → GTK+ app เรียก Cairo โดยตรง โดยมีฟังก์ชัน gdk_drawable_update_cairo() เชื่อม cairo_t กับ GdkDrawable
    • GDK : เพิ่ม RGBA colormap เพื่อสนับสนุนการวาดแบบมี alpha channel (ที่ผ่านมา GTK+ ทำเรื่อง alpha channel เพิ่มเอง) และ API อีกตัวสำหรับสนับสนุนการวาด widget ผ่าน COMPOSITE extension
    • Pango : GTK+ จะไม่ใช้ Cairo API สำหรับวาด text เพราะ Pango สมบูรณ์กว่า แต่จะเพิ่มการเชื่อมกับ Cairo ใน Pango API เอา
  • Theme : ต้องยืดหยุ่นต่อการวาดแบบ native ใน platform ต่างๆ แต่ spec ต้อง declarative ที่สุดเท่าที่จะทำได้ เพื่อลดความจำเป็นของการเขียน theme engine (รายละเอียดมีพูดถึงต่างหากในเอกสาร อีกฉบับ)
  • Printing : ทำใน GTK+ โดยอาศัย Cairo ช่วย แต่ที่ต้องทำเพิ่มคือ interface สำหรับเลือกเครื่องพิมพ์ ซึ่งโค้ดมีแล้วใน libgnomeprint และ libgnomeprintui (แต่ต้องทำให้สนับสนุน Cairo backend สำหรับ native platform ได้ด้วย) ซึ่ง app ก็จะ get GtkPrintContext มาใช้วาดด้วย Cairo ได้

เคลียร์ครับ ว่า GNOME ในอนาคตจะใช้ Cairo แน่ๆ และการพิมพ์ก็จะเหลือแค่ที่ GTK+ ที่เดียว ส่วน KDE กับ GNUstep จะเป็นยังไงนั้น ไม่บังอาจเขียน เพราะไม่รู้เรื่องเลย ☺

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem