นี่คืออะไรกันแน่?
- เป็นไลบรารีที่จำลองส่วนสำคัญจำนวนมากของ API "Toolbox" ของ Macintosh Classic แม้จะยังไม่ใช่การติดตั้งใช้งานแบบสมบูรณ์ แต่ก็เพียงพอสำหรับการสร้างแอปพลิเคชันง่าย ๆ บางประเภท
- เป็นฟีเจอร์ที่เพิ่มเข้าไปในอีมูเลเตอร์ MII Apple //e และเป็นหนึ่งในโปรเจ็กต์ที่เหมือนกำลังท้าทายสถิติโลกด้านการเพิ่มฟีเจอร์
ทำไม?
- ผู้พัฒนาต้องการไลบรารี UI สำหรับ MII ที่มี dependency ไม่มาก และไม่ต้องการสไตล์แบบ "คล้ายเกม"
- เริ่มต้นด้วย Nuklear ซึ่งเป็น UI แบบ immediate mode แต่รู้สึกว่ามันมีข้อจำกัดมาก และใช้งานลำบากเมื่อต้องการปรับแต่ง
- ไม่พอใจกับเอนจินจัดเลย์เอาต์ UI และแม้จะอ้างว่าเก็บสถานะไว้ แต่ในทางปฏิบัติจริงกลับอิงสถานะจากค่าแฮช
- ในอดีต UI ถูกสร้างขึ้นอย่างประณีตแบบงานช่างฝีมือ แต่ปัจจุบันหลายอย่างมักถูกตัดสินใจโดยไม่มีความรู้สึกด้านดีไซน์หรือการใช้งาน
- จึงเริ่มสร้างไลบรารีของตัวเองขึ้นมาโดยนำชิ้นส่วนต่าง ๆ ที่มีอยู่แล้วมาใช้
ไลบรารีนี้ทำอะไรได้บ้าง?
- มี "manager" บางส่วนของ Macintosh Toolbox และทำงานในลักษณะที่เข้ากับระบบสมัยใหม่
- ออกแบบมาให้วาดลงบน "หน้าจอ" ที่เป็น ARGB buffer และสามารถคัดลอกไปยังตำแหน่งที่ต้องการได้
- ไลบรารีจะติดตามพื้นที่ "invalid" และวาดใหม่เฉพาะส่วนที่จำเป็นเพื่อลด overdraw ให้น้อยที่สุด
มันต่างจากต้นฉบับอย่างไร?
- ในแง่รูปลักษณ์เริ่มต้นจาก MacOS 8/9 แต่ตัดเฉดสีเทาทั้งหมดออก
- ในแง่ API เป็นแบบ asynchronous ทั้งหมด และไม่สามารถวาดลงในหน้าต่างหรือ GrafPort ได้ทุกเมื่อเหมือนต้นฉบับ
- ทุกอย่างประกอบขึ้นจาก mui_window หรือ mui_control
ตัวจัดการหน้าต่าง
- สามารถสร้างและวาดหน้าต่างได้
- มี "layer" ได้สูงสุด 15 ชั้น และสามารถทำ clipping เป็นต้น
ตัวจัดการเมนู
- มีแถบเมนู เมนู เครื่องหมายถูก คีย์ลัดคีย์บอร์ด ฯลฯ ที่ดูเหมือน System 7/8 หรือ GS/OS
ตัวจัดการคอนโทรล
- มีปุ่ม ช่องทำเครื่องหมาย ปุ่มวิทยุ แถบเลื่อน (แนวตั้ง) กล่องข้อความ เป็นต้น
ตัวจัดการรายการ
- ออกแบบมาเพื่อแสดงชื่อไฟล์ และรองรับปุ่มลูกศร Page Up/Down ล้อเลื่อนเมาส์ เป็นต้น
การแจ้งเตือน
- มีหน้าต่างแจ้งเตือนทั่วไปพร้อมปุ่ม "ยกเลิก" และ "ตกลง"
Standard File
ตัวจัดการทรัพยากร
dependency มีอะไรบ้าง?
- dependency ภายนอกมีเพียง libpixman เท่านั้น
- ใช้ libpixman, libcg, stb_truetype.h, stb_ttc.h เป็นต้น
วิธี build?
- ใช้ Makefile แบบเรียบง่าย โดยสามารถสั่ง
make จากไดเรกทอรีรากเพื่อ build ไลบรารีและ test/demo/sample ได้
วิธีใช้งาน?
- วิธีที่ดีที่สุดคือแก้ไข mui_shell.c และ mui_widgets_demo.c เพื่อใช้งาน
- โหลด mui_widgets_demo.so เป็นปลั๊กอิน และเมื่อระบบตรวจพบการเปลี่ยนแปลงก็จะ reload ให้อัตโนมัติ
FAQ!
- ไม่มี dark mode, ธีม, หน้าต่างโปร่งใส, เอฟเฟกต์ลูกบาศก์, เมนูแบบ sticky, เครื่องมือหรือเฟรมเวิร์กสายเทรนดี้รุ่นใหม่, language binding ใหม่, การรองรับ Wayland ฯลฯ
ความเห็นของ GN⁺
- ไลบรารีนี้เป็นโปรเจ็กต์ที่น่าสนใจซึ่งนำ UI ของ Macintosh แบบคลาสสิกมาสร้างใหม่ให้เข้ากับระบบสมัยใหม่ และอาจปลุกความคิดถึงเรื่องการออกแบบ UI ยุคเก่าให้กับนักพัฒนาได้
- ไลบรารี UI แบบ asynchronous เหมาะกับการพัฒนาแอปพลิเคชันสมัยใหม่มากกว่า และไลบรารีนี้ก็ใช้แนวทางสมัยใหม่นั้น
- ไลบรารีนี้อาจมีประโยชน์เป็นพิเศษสำหรับนักพัฒนาที่ให้ความสำคัญกับประสิทธิภาพของทรัพยากร เพราะการลด overdraw และวาดใหม่เฉพาะส่วนที่จำเป็นสามารถช่วยเรื่องการปรับแต่งประสิทธิภาพได้
- อย่างไรก็ตาม ไลบรารีนี้ไม่มีฟีเจอร์สมัยใหม่อย่าง dark mode หรือการรองรับธีม จึงอาจไม่ตอบโจทย์นักพัฒนาทุกคน
- ไลบรารี UI สมัยใหม่ที่มีความสามารถคล้ายกันได้แก่เฟรมเวิร์กอย่าง Qt, GTK หรือ Electron ซึ่งมีฟีเจอร์และการรองรับที่กว้างกว่า
ยังไม่มีความคิดเห็น