GoSurface — เปลือกนอก
ป๊อปอัป ชีต และดรอปดาวน์ ล้วนใช้ตัวนี้ตัวเดียว มันจัดการเซฟแอเรีย คีย์บอร์ดเสมือน หัวและท้ายที่ติดหนึบ เนื้อหาที่เลื่อนได้ การตัดสินว่าหน้าต่างไหนอยู่บนสุด การคืนโฟกัส ความเป็นเจ้าของปุ่มย้อนกลับ และการลากปรับขนาด
| ตำแหน่ง | หน้าตาเป็นอย่างไร | ใช้กับอะไร |
|---|---|---|
CENTER | การ์ดกลางจอ | กล่องยืนยัน หน้าตั้งค่า |
BOTTOM | ชีตที่ยกขึ้นมาจากด้านล่าง | รายการต่าง ๆ หน้าจัดการ |
ANCHOR | การ์ดที่ตรึงไว้ข้างคอนโทรลหนึ่ง | ดรอปดาวน์ เมนูคลิกขวา |
close_requested — จะซ่อนหรือจะคืนหน่วยความจำ —
เป็นหน้าที่ของหน้าจอที่เป็นเจ้าของ เพราะตัวเปลือกไม่มีทางรู้ว่ามันกำลังถูกปิดด้วยเหตุผลอะไร
(บันทึกแล้วปิด หรือทิ้งไปเลย)
GoSheet — หน้าที่มาจากด้านล่าง
var sheet := GoSheet.new()
add_child(sheet)
sheet.open("กระเป๋าของ")
sheet.toolbar().add_child(GoStyle.line_edit("ค้นหา…"))
sheet.toolbar().visible = true
sheet.footer().add_child(GoStyle.button("ปิด", sheet.close, GoStyle.Tone.PRIMARY))
sheet.footer().visible = true
มันเป็นเจ้าของ CanvasLayer ของตัวเอง จึงลอยอยู่เหนือ HUD ได้อย่างแน่นอน open()
จะล้างเนื้อหาในตัวชีตและปิดปุ่มย้อนกลับกับแถวติดหนึบ — ปุ่มที่กดไม่ได้บนหน้าจอที่ไม่มีที่ให้ย้อนกลับ
ทำให้คนอ่านว่าแอปพัง
GoDialogs — กล่องยืนยันที่ await ได้
if await dialogs.confirm("ลบไฟล์เซฟ", "การกระทำนี้ย้อนกลับไม่ได้"):
delete_save()
confirm(title, body, ok_text, cancel_text, extra, args, destructive) — ทุกอย่างหลังจากเนื้อความ
เป็นตัวเลือกทั้งหมด และ alert() ทำงานแบบเดียวกันแต่มีปุ่มเดียว ตั้ง destructive
สำหรับสิ่งที่ย้อนกลับไม่ได้: ปุ่มยืนยันจะกลายเป็นปุ่มทึบ GoStyle.Tone.DANGER_SOLID
บนธีมสว่าง ป้ายข้อความสีอันตรายแบบย้อมสีจำเป็นต้องเข้มลงจนอ่านเหมือนตัวอักษรสีดำ แต่ปุ่มแบบทึบ
ยังคงตัวอักษรสีขาวบนพื้นแดงไว้ได้ โทนสีถูกกำหนดใหม่ทุกครั้งที่เรียกเพราะหน้าต่างถูกใช้ซ้ำอยู่บานเดียว
และการเรียก confirm() ครั้งที่สองขณะที่ยังมีบานเปิดค้างอยู่จะคืนค่า false ทันที
ส่วน confirm_key() รับคีย์คำแปลเข้าไปแทน
การจัดวางปุ่ม action_layout มีค่าเริ่มต้นเป็น VERTICAL (ปลอดภัยสำหรับคำแปลยาว ๆ)
ใช้ HORIZONTAL เพื่อจัดเป็นแถวเดียวโดยแบ่งความกว้างคนละครึ่ง หรือ AUTO
ซึ่งจะใช้แถวเดียวก็ต่อเมื่อป้ายข้อความทั้งสองพอดีกับครึ่งหนึ่งของการ์ดในบรรทัดเดียว ไม่อย่างนั้นก็ซ้อนกันลงมา
action_gap คือช่องไฟระหว่างปุ่ม ส่วน body_gap คือช่องไฟเหนือปุ่ม — ตั้งให้กว้างกว่า
ช่องไฟระหว่างปุ่ม เพื่อให้คำถามกับตัวเลือกอ่านออกมาเป็นสองส่วน ถ้าอยากเปลี่ยนเฉพาะไดอะล็อกบานเดียว
ให้เรียก set_next_action_layout() ก่อนเปิดมัน แถวปุ่มถูกสร้างตอนที่ไดอะล็อกเปิดครั้งแรก
การใส่ GoDialogs เป็น autoload จึงไม่เพิ่มภาระตอนเปิดเกมเลย
GoForm — ฟอร์มที่จำกัดความกว้าง
GoScroll — การเลื่อนด้วยนิ้ว
ใส่ของไว้ข้างในแค่ ชิ้นเดียว ส่วนหัวและแถวปุ่มต้องอยู่ข้างนอก — รายการยาว ๆ ต้องไม่ดันมันตกจอไป
use_panel_edge() ย้ายแถบเลื่อนเข้าไปอยู่ในระยะขอบที่การ์ดมีอยู่แล้ว
ขณะที่เนื้อหายังคงระยะย่อหน้าเดิมไว้