@@ -6,8 +6,12 @@ import javafx.scene.Scene
66import javafx.scene.canvas.Canvas
77import javafx.scene.control.Button
88import javafx.scene.control.TextArea
9+ import javafx.scene.layout.Background
10+ import javafx.scene.layout.BackgroundFill
911import javafx.scene.layout.GridPane
12+ import javafx.scene.layout.StackPane
1013import javafx.scene.layout.VBox
14+ import javafx.scene.paint.Color
1115import javafx.stage.FileChooser
1216import java.io.File
1317
@@ -24,30 +28,30 @@ class Gpu {
2428 // buttons (4x6 grid)
2529 val keypadScreen = GridPane ()
2630 // power and load another rom buttons
27- val loadRomScreen = VBox (10.0 )
31+ val menuScreen = VBox (10.0 )
2832
29- val root = GridPane ()
30- val scene = Scene (root)
33+ var buttons = emptyArray<Button >()
3134
32- lateinit var cpu: Cpu
35+ val mainScreen = GridPane ()
36+ val root = StackPane (mainScreen, settings.popup)
37+ val scene = Scene (root)
3338
3439 init {
35- // log of opcodes that are going through
36- opcodeTextArea.isEditable = false
37-
3840 // buttons (4x4 grid) (need to change the order of the buttons)
3941 for (y in 0 until 4 ) {
4042 for (x in 0 until 4 ) {
4143 val button = Button ((y * 4 + x).toString(16 ))
44+ buttons + = button
4245 button.onAction = EventHandler {
4346 cpu.log(0 , " pressed button " + (y * 4 + x).toString(16 ))
4447 }
4548 keypadScreen.add(button, x, y)
4649 }
4750 }
4851 // buttons
49- loadRomScreen .alignment = Pos .CENTER
52+ menuScreen .alignment = Pos .CENTER
5053 val powerButton = Button (" power" )
54+ buttons + = powerButton
5155 powerButton.onAction = EventHandler {
5256 if (running) {
5357 cpu.log(0 , " powering off" )
@@ -63,18 +67,12 @@ class Gpu {
6367 }
6468
6569 val pauseButton = Button (" toggle pause" )
70+ buttons + = pauseButton
6671 pauseButton.onAction = EventHandler {
67- if (running) {
68- cpu.log(0 , " emulation paused" )
69- handleLogs()
70- running = false
71- }
72- else {
73- cpu.log(0 , " emulation resumed" )
74- running = true
75- }
72+ togglePause()
7673 }
7774 val loadRomButton = Button (" load rom" )
75+ buttons + = loadRomButton
7876 loadRomButton.onAction = EventHandler {
7977 cpu.log(0 , " loading another rom" )
8078
@@ -93,15 +91,29 @@ class Gpu {
9391 }
9492
9593 val settingsButton = Button (" settings" )
94+ buttons + = settingsButton
9695 settingsButton.onAction = EventHandler {
96+ settings.showPopup()
97+ }
9798
99+ val toggleThemeButton = Button (" toggle theme" )
100+ buttons + = toggleThemeButton
101+ toggleThemeButton.onAction = EventHandler {
102+ if (settings.colours.first == Color .WHITE ) {
103+ settings.colours = Pair (Color .BLACK , Color .WHITE )
104+ } else {
105+ settings.colours = Pair (Color .WHITE , Color .BLACK )
106+ }
107+ settings.flipStops()
108+ updateAllGraphics()
98109 }
99- loadRomScreen .children.addAll(powerButton, loadRomButton, pauseButton, settingsButton)
110+ menuScreen .children.addAll(powerButton, loadRomButton, pauseButton, settingsButton, toggleThemeButton )
100111
101- root.add(screen, 0 , 0 )
102- root.add(opcodeTextArea, 0 , 1 )
103- root.add(keypadScreen, 1 , 0 )
104- root.add(loadRomScreen, 1 , 1 )
112+ updateAllGraphics()
113+ mainScreen.add(screen, 0 , 0 )
114+ mainScreen.add(opcodeTextArea, 0 , 1 )
115+ mainScreen.add(keypadScreen, 1 , 0 )
116+ mainScreen.add(menuScreen, 1 , 1 )
105117 }
106118 fun draw (x : Int , y : Int , height : Int ) {
107119 cpu.v[0xF ] = 0 .toByte() // collision register defaults to off
@@ -144,4 +156,36 @@ class Gpu {
144156 opcodeTextArea.appendText(cpu.log + " \n " )
145157 opcodeTextArea.scrollTop = scrollTop // Restore the previous vertical scroll position
146158 }
159+
160+ fun togglePause () {
161+ if (! paused) {
162+ cpu.log(0 , " emulation paused" )
163+ handleLogs()
164+ paused = true
165+ }
166+ else {
167+ cpu.log(0 , " emulation resumed" )
168+ paused = false
169+ }
170+ }
171+
172+ fun updateAllGraphics () {
173+ mainScreen.background = Background (BackgroundFill (settings.colours.second, null , null ))
174+ opcodeTextArea.style = """
175+ -fx-control-inner-background: rgb(
176+ ${settings.colours.second.red * 255 } ,
177+ ${settings.colours.second.green * 255 } ,
178+ ${settings.colours.second.blue * 255 } );
179+
180+ -fx-text-fill: rgb(
181+ ${settings.colours.first.red * 255 } ,
182+ ${settings.colours.first.green * 255 } ,
183+ ${settings.colours.first.blue * 255 } );
184+ """ .trimIndent()
185+ for (button in buttons) {
186+ button.background = Background (BackgroundFill (settings.gradient, null , null ))
187+ button.textFill = settings.colours.second
188+ }
189+ updateDisplay()
190+ }
147191}
0 commit comments