Esimerkkinä melko lailla yksinkertaisin mahdollinen "custom widget" 8th:n käyttämälle Nuklear GUI:lle.
Esimerkki tekee oman widgetin mikä näyttää mikäli kyseisen widgetin nappi on hiirikursorin alla. Mallina muodostetaan käyttöliittymä jossa on neljä nappia ja mikäli nappia painaa niin tulostaa konsoliin mitä nappia on painettu.
Näyttää tältä
needs nk/gui needs nk/buttons 24 font:system font:new "font1" font:atlas! drop : new-win { name: "main", wide: 640, high: 64, resizable: false, bg: "white", title: "Custom widget test" } nk:win ; : highlight-button \ s w -- \ We just highlight the button when it's under the mouse cursor, \ so we only need to test that status is not WIDGET_INVALID. \ If we would handle input ourself then we should also honor \ possible WIDGET_ROM state. Without this mechanism when your widget \ would be under the menu item, it would also handle mouse input when \ menu item above it is clicked. Bottom line is when status is WIDGET_ROM, \ then don't handle the input. nk:widget if \ Widget bounds rectangle is on TOS. \ Grid layout and margin does the trick... { rows: 1, cols: 1, margin: 4 } nk:layout-grid-begin 0 1 0 1 nk:grid { rows: 1, cols: 1, margin: 4 } nk:layout-grid-begin 0 1 0 1 nk:grid nk:rect>local nk:grid-push nk:button-label 0 1 0 1 nk:grid nk:hovered? nk:layout-grid-end if 0 1 0 1 nk:grid 4 4 "red" nk:stroke-rect then nk:layout-grid-end else drop then ; ( a:new ( "Button %d" s:strfmt dup "%s pressed\n" s:strfmt ( . ) curry 2 a:close a:push ) 1 4 loop ) w:exec constant button-names-and-callbacks : 4buttons button-names-and-callbacks ( swap 0 1 rot 1 nk:grid nk:rect>local nk:grid-push a:open highlight-button ) a:each drop ; : main-render { bg: "white", flags: [ @nk:WINDOW_NO_SCROLLBAR ] } nk:begin null { rows: 1, cols: 4, margin: 4 } nk:layout-grid-begin 4buttons nk:layout-grid-end nk:end ; : app:main new-win ' main-render -1 nk:render-loop ;
Aihe on jo aika vanha, joten et voi enää vastata siihen.