2023-01-19 18:07:27 +00:00
package main
2023-04-18 06:59:44 +00:00
import "image"
2023-01-19 18:07:27 +00:00
import "git.tebibyte.media/sashakoshka/tomo"
2023-03-31 03:19:04 +00:00
import "git.tebibyte.media/sashakoshka/tomo/elements"
2023-03-16 05:14:39 +00:00
import _ "git.tebibyte.media/sashakoshka/tomo/backends/all"
2023-01-19 18:07:27 +00:00
func main ( ) {
tomo . Run ( run )
}
func run ( ) {
2023-04-10 06:58:52 +00:00
window , _ := tomo . NewWindow ( tomo . Bounds ( 0 , 0 , 360 , 240 ) )
2023-01-19 18:07:27 +00:00
window . SetTitle ( "Scroll" )
2023-04-18 20:18:30 +00:00
container := elements . NewVBox ( elements . SpaceBoth )
2023-01-19 18:07:27 +00:00
window . Adopt ( container )
2023-03-31 03:19:04 +00:00
textBox := elements . NewTextBox ( "" , copypasta )
2023-03-10 03:23:09 +00:00
2023-04-18 20:18:30 +00:00
disconnectedContainer := elements . NewHBox ( elements . SpaceMargin )
2023-04-18 06:59:44 +00:00
list := elements . NewList (
2023-04-18 07:23:51 +00:00
elements . NewCell ( elements . NewCheckbox ( "Item 0" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 1" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 2" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 3" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 4" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 5" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 6" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 7" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 8" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 9" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 10" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 11" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 12" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 13" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 14" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 15" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 16" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 17" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 18" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 19" , false ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 20" , true ) ) ,
elements . NewCell ( elements . NewCheckbox ( "Item 21" , false ) ) ,
2023-04-18 20:18:30 +00:00
elements . NewCell ( elements . NewScroll (
elements . ScrollHorizontal ,
elements . NewTextBox ( "" , "I bet you weren't expecting this!" ) ) ) )
2023-04-18 06:59:44 +00:00
list . Collapse ( 0 , 32 )
2023-04-20 05:10:47 +00:00
scrollBar := elements . NewVScrollBar ( )
2023-04-18 06:59:44 +00:00
list . OnScrollBoundsChange ( func ( ) {
scrollBar . SetBounds (
list . ScrollContentBounds ( ) ,
list . ScrollViewportBounds ( ) )
} )
scrollBar . OnScroll ( func ( viewport image . Point ) {
list . ScrollTo ( viewport )
} )
2023-03-10 03:23:09 +00:00
2023-04-18 20:18:30 +00:00
container . Adopt ( elements . NewLabel ( "A ScrollContainer:" ) )
container . Adopt ( elements . NewScroll ( elements . ScrollHorizontal , textBox ) )
disconnectedContainer . Adopt ( list )
disconnectedContainer . AdoptExpand ( elements . NewLabelWrapped (
2023-03-10 04:27:08 +00:00
"Notice how the scroll bar to the right can be used to " +
"control the list, despite not even touching it. It is " +
"indeed a thing you can do. It is also terrible UI design so " +
2023-04-18 20:18:30 +00:00
"don't do it." ) )
disconnectedContainer . Adopt ( scrollBar )
container . AdoptExpand ( disconnectedContainer )
2023-01-19 18:07:27 +00:00
window . OnClose ( tomo . Stop )
window . Show ( )
}
2023-03-10 03:23:09 +00:00
const copypasta = ` "I use Linux as my operating system," I state proudly to the unkempt, bearded man. He swivels around in his desk chair with a devilish gleam in his eyes, ready to mansplain with extreme precision. "Actually", he says with a grin, "Linux is just the kernel. You use GNU+Linux!' I don't miss a beat and reply with a smirk, "I use Alpine, a distro that doesn't include the GNU Coreutils, or any other GNU code. It's Linux, but it's not GNU+Linux." The smile quickly drops from the man's face. His body begins convulsing and he foams at the mouth and drops to the floor with a sickly thud. As he writhes around he screams "I-IT WAS COMPILED WITH GCC! THAT MEANS IT'S STILL GNU!" Coolly, I reply "If windows were compiled with GCC, would that make it GNU?" I interrupt his response with "-and work is being made on the kernel to make it more compiler-agnostic. Even if you were correct, you won't be for long." With a sickly wheeze, the last of the man's life is ejected from his body. He lies on the floor, cold and limp. I've womansplained him to death. `