GoSurface — 창의 틀
팝업·시트·드롭다운이 전부 이것 하나를 쓴다. 안전영역·가상 키보드·고정 머리말/바닥·스크롤 본문· 가장 위 창 판정·포커스 복원·뒤로가기 소유권·끌어서 높이 조절을 한 곳에서 처리한다.
| 배치 | 모습 | 쓰는 곳 |
|---|---|---|
CENTER | 화면 가운데 카드 | 확인창·설정 |
BOTTOM | 아래에서 올라온 시트 | 목록·관리 페이지 |
ANCHOR | 지정한 컨트롤 옆에 붙는 카드 | 드롭다운·컨텍스트 메뉴 |
close_requested 를 받아 숨기거나 지우는 것은
소유한 화면이다 — 왜 닫히는지(저장하고 닫기 vs 버리고 닫기)는 틀가 알 수 없다.
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() 은 본문을 비우고 뒤로 버튼·고정 줄을 끈다 — 돌아갈 데가 없는 화면에 죽은
버튼이 남으면 누른 사람은 그것을 고장으로 읽는다.
body 에 넣으면 목록이 길어질 때
화면 밖으로 밀린다. footer() 는 언제나 보인다.
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 는 부팅 비용이 늘지 않는다.
GoForm — 폭을 제한하는 폼
브레이크포인트마다 최대 폭이 다르고, 가상 키보드가 올라오면 입력 칸이 그 위로 온다.
GoScroll — 손가락 스크롤
안에 하나만 넣는다. 머리말과 버튼 줄은 밖에 둔다 — 목록이 길어지면 그것들이 화면 밖으로
나가면 안 된다. use_panel_edge() 를 부르면 스크롤바가 카드의 기존 여백 자리로 나가고
내용은 원래 들여쓰기를 유지한다.