package main import ( "fmt" gui "github.com/gen2brain/raylib-go/raygui" rl "github.com/gen2brain/raylib-go/raylib" ) /******************************************************************************************* * * raygui - Controls test * * TEST CONTROLS: * - gui.ScrollPanel() * * DEPENDENCIES: * raylib 4.0 - Windowing/input management and drawing. * raygui 3.0 - Immediate-mode GUI controls. * * COMPILATION (Windows - MinGW): * gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99 * * COMPILATION (Linux - gcc): * gcc -o $(NAME_PART) $(FILE_NAME) -I../../src -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -std=c99 * * LICENSE: zlib/libpng * * Copyright (c) 2019-2022 Vlad Adrian (@Demizdor) and Ramon Santamaria (@raysan5) * **********************************************************************************************/ //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ func main() { // Initialization //--------------------------------------------------------------------------------------- const ( screenWidth = 800 screenHeight = 450 ) rl.InitWindow(screenWidth, screenHeight, "raygui - gui.ScrollPanel()") var ( panelRec = rl.Rectangle{20, 40, 200, 150} panelContentRec = rl.Rectangle{0, 0, 340, 340} panelScroll = rl.Vector2{99, -20} showContentArea = true ) rl.SetTargetFPS(60) //--------------------------------------------------------------------------------------- // Main game loop for !rl.WindowShouldClose() { // Detect window close button or ESC key // Update //---------------------------------------------------------------------------------- // TODO: Implement required update logic //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- rl.BeginDrawing() rl.ClearBackground(rl.RayWhite) rl.DrawText(fmt.Sprintf("[%.1f, %.1f]", panelScroll.X, panelScroll.Y), 4, 4, 20, rl.Red) view := gui.ScrollPanel(panelRec, "", panelContentRec, &panelScroll) rl.BeginScissorMode(int32(view.X), int32(view.Y), int32(view.Width), int32(view.Height)) gui.Grid(rl.Rectangle{ float32(panelRec.X + panelScroll.X), float32(panelRec.Y + panelScroll.Y), float32(panelContentRec.Width), float32(panelContentRec.Height), }, "", 16, 3) rl.EndScissorMode() if showContentArea { rl.DrawRectangle( int32(panelRec.X+panelScroll.X), int32(panelRec.Y+panelScroll.Y), int32(panelContentRec.Width), int32(panelContentRec.Height), rl.Fade(rl.Red, 0.1), ) } DrawStyleEditControls() showContentArea = gui.CheckBox(rl.Rectangle{565, 80, 20, 20}, "SHOW CONTENT AREA", showContentArea) panelContentRec.Width = gui.SliderBar(rl.Rectangle{590, 385, 145, 15}, "WIDTH", fmt.Sprintf("%.1f", panelContentRec.Width), panelContentRec.Width, 1, 600) panelContentRec.Height = gui.SliderBar(rl.Rectangle{590, 410, 145, 15}, "HEIGHT", fmt.Sprintf("%.1f", panelContentRec.Height), panelContentRec.Height, 1, 400) rl.EndDrawing() //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- rl.CloseWindow() // Close window and OpenGL context //-------------------------------------------------------------------------------------- } // Draw and process scroll bar style edition controls func DrawStyleEditControls() { // ScrollPanel style controls //---------------------------------------------------------- gui.GroupBox(rl.Rectangle{550, 170, 220, 205}, "SCROLLBAR STYLE") var style int32 style = gui.GetStyle(gui.SCROLLBAR, gui.BORDER_WIDTH) gui.Label(rl.Rectangle{555, 195, 110, 10}, "BORDER_WIDTH") gui.Spinner(rl.Rectangle{670, 190, 90, 20}, "", &style, 0, 6, false) gui.SetStyle(gui.SCROLLBAR, gui.BORDER_WIDTH, style) style = gui.GetStyle(gui.SCROLLBAR, gui.ARROWS_SIZE) gui.Label(rl.Rectangle{555, 220, 110, 10}, "ARROWS_SIZE") gui.Spinner(rl.Rectangle{670, 215, 90, 20}, "", &style, 4, 14, false) gui.SetStyle(gui.SCROLLBAR, gui.ARROWS_SIZE, style) style = gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING) gui.Label(rl.Rectangle{555, 245, 110, 10}, "SLIDER_PADDING") gui.Spinner(rl.Rectangle{670, 240, 90, 20}, "", &style, 0, 14, false) gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING, style) style = boolToint32( gui.CheckBox(rl.Rectangle{565, 280, 20, 20}, "ARROWS_VISIBLE", int32Tobool(gui.GetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE)))) gui.SetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE, style) style = gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING) gui.Label(rl.Rectangle{555, 325, 110, 10}, "SLIDER_PADDING") gui.Spinner(rl.Rectangle{670, 320, 90, 20}, "", &style, 0, 14, false) gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING, style) style = gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_WIDTH) gui.Label(rl.Rectangle{555, 350, 110, 10}, "SLIDER_WIDTH") gui.Spinner(rl.Rectangle{670, 345, 90, 20}, "", &style, 2, 100, false) gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_WIDTH, style) var text string if gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE) == gui.SCROLLBAR_LEFT_SIDE { text = "SCROLLBAR: LEFT" } else { text = "SCROLLBAR: RIGHT" } style = boolToint32( gui.Toggle(rl.Rectangle{560, 110, 200, 35}, text, int32Tobool(gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE)))) gui.SetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE, style) //---------------------------------------------------------- // ScrollBar style controls //---------------------------------------------------------- gui.GroupBox(rl.Rectangle{550, 20, 220, 135}, "SCROLLPANEL STYLE") style = gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_WIDTH) gui.Label(rl.Rectangle{555, 35, 110, 10}, "SCROLLBAR_WIDTH") gui.Spinner(rl.Rectangle{670, 30, 90, 20}, "", &style, 6, 30, false) gui.SetStyle(gui.LISTVIEW, gui.SCROLLBAR_WIDTH, style) style = gui.GetStyle(gui.DEFAULT, gui.BORDER_WIDTH) gui.Label(rl.Rectangle{555, 60, 110, 10}, "BORDER_WIDTH") gui.Spinner(rl.Rectangle{670, 55, 90, 20}, "", &style, 0, 20, false) gui.SetStyle(gui.DEFAULT, gui.BORDER_WIDTH, style) //---------------------------------------------------------- } func boolToint32(b bool) int32 { if b { return 1 } return 0 } func int32Tobool(v int32) bool { return 0 < v }