@@ -16,8 +16,8 @@ import androidx.compose.runtime.snapshots.SnapshotStateMap
16
16
import androidx.compose.ui.Alignment
17
17
import androidx.compose.ui.Modifier
18
18
import androidx.compose.ui.geometry.Offset
19
- import com.squareup.workflow1.traceviewer.TraceMode.File
20
- import com.squareup.workflow1.traceviewer.TraceMode.Live
19
+ import androidx.compose.ui.layout.onGloballyPositioned
20
+ import androidx.compose.ui.unit.IntSize
21
21
import com.squareup.workflow1.traceviewer.model.Node
22
22
import com.squareup.workflow1.traceviewer.model.NodeUpdate
23
23
import com.squareup.workflow1.traceviewer.ui.ColorLegend
@@ -39,6 +39,7 @@ import io.github.vinceglb.filekit.PlatformFile
39
39
internal fun App (
40
40
modifier : Modifier = Modifier
41
41
) {
42
+ var appWindowSize by remember { mutableStateOf(IntSize (0 ,0 )) }
42
43
var selectedNode by remember { mutableStateOf<NodeUpdate ?>(null ) }
43
44
var frameSize by remember { mutableIntStateOf(0 ) }
44
45
var rawRenderPass by remember { mutableStateOf(" " ) }
@@ -60,7 +61,9 @@ internal fun App(
60
61
}
61
62
62
63
Box (
63
- modifier = modifier
64
+ modifier = modifier.onGloballyPositioned {
65
+ appWindowSize = it.size
66
+ }
64
67
) {
65
68
fun resetStates () {
66
69
selectedTraceFile = null
@@ -115,8 +118,11 @@ internal fun App(
115
118
SearchBox (
116
119
nodes = nodeLocations[frameInd].keys.toList(),
117
120
onSearch = { name ->
121
+ sandboxState.scale = 1f
118
122
val node = nodeLocations[frameInd].keys.firstOrNull { it.name == name }
119
- sandboxState.offset = nodeLocations[frameInd][node] ? : sandboxState.offset
123
+ val newX = sandboxState.offset.x - nodeLocations[frameInd][node]!! .x + appWindowSize.width / 2
124
+ val newY = sandboxState.offset.y - nodeLocations[frameInd][node]!! .y + appWindowSize.height / 2
125
+ sandboxState.offset = Offset (x = newX, y = newY)
120
126
},
121
127
modifier = Modifier .align(Alignment .CenterHorizontally )
122
128
)
@@ -126,16 +132,16 @@ internal fun App(
126
132
TraceModeToggleSwitch (
127
133
onToggle = {
128
134
resetStates()
129
- traceMode = if (traceMode is Live ) {
135
+ traceMode = if (traceMode is TraceMode . Live ) {
130
136
frameIndex = 0
131
- File (null )
137
+ TraceMode . File (null )
132
138
} else {
133
139
/*
134
140
We set the frame to -1 here since we always increment it during Live mode as the list of
135
141
frames get populated, so we avoid off by one when indexing into the frames.
136
142
*/
137
143
frameIndex = - 1
138
- Live ()
144
+ TraceMode . Live ()
139
145
}
140
146
},
141
147
traceMode = traceMode,
@@ -148,7 +154,7 @@ internal fun App(
148
154
resetOnFileSelect = {
149
155
resetStates()
150
156
selectedTraceFile = it
151
- traceMode = File (it)
157
+ traceMode = TraceMode . File (it)
152
158
},
153
159
modifier = Modifier .align(Alignment .BottomStart )
154
160
)
@@ -158,7 +164,7 @@ internal fun App(
158
164
if ((traceMode as TraceMode .Live ).device == null ) {
159
165
DisplayDevices (
160
166
onDeviceSelect = { selectedDevice ->
161
- traceMode = Live (selectedDevice)
167
+ traceMode = TraceMode . Live (selectedDevice)
162
168
},
163
169
devices = listDevices(),
164
170
modifier = Modifier .align(Alignment .Center )
0 commit comments