Skip to content

Commit 4a1e21a

Browse files
ui: migrate remaining shorts to anchor-based positioning
Followup to the anchor commit (01db8ff). The previous commit migrated uiSystem and uiLayout shorts but missed nine others that also constructed root UIObjects with manual canvas-relative positions. Those positions were being overwritten to canvas-center by the new updateTransforms, breaking each demo's layout. Migrated shorts: - music.js, musicPlayer.js: drop redundant constructor center - sound.js, speak.js, vibrate.js: drop center add in makeButton helper - piano.js: drop center add in PianoKey constructor - timers.js: pass center-relative offset directly - videoPlayer.js: pass center-relative offsets directly - sequencer.js: convert absolute pixel coords by subtracting canvas center (grid was designed around canvas top-left origin) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 01db8ff commit 4a1e21a

9 files changed

Lines changed: 11 additions & 22 deletions

File tree

examples/shorts/music.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ function gameInit()
1212
canvasClearColor = hsl(.9,.3,.2);
1313

1414
// setup music player UI
15-
const center = mainCanvasSize.scale(.5);
16-
musicPlayer = new UIObject(center, vec2(500, 220));
15+
musicPlayer = new UIObject(vec2(), vec2(500, 220));
1716

1817
// information text
1918
infoText = new UIText(vec2(0, -70), vec2(400, 50));

examples/shorts/musicPlayer.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ function gameInit()
1313
canvasClearColor = hsl(.9,.3,.2);
1414

1515
// setup music player UI
16-
const center = mainCanvasSize.scale(.5);
17-
musicPlayer = new UIObject(center, vec2(500, 300));
16+
musicPlayer = new UIObject(vec2(), vec2(500, 300));
1817
const title = new UIText(vec2(0, -100), vec2(500, 40),
1918
'LittleJS Music Player');
2019
musicPlayer.addChild(title);

examples/shorts/piano.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ class PianoKey extends UIButton
77
const keySize = 65;
88
size = size.scale(keySize);
99
pos = pos.scale(keySize).add(vec2(0,size.y/2-keySize*2));
10-
pos = pos.add(mainCanvasSize.scale(.5));
1110
super(pos, size, '', color);
1211

1312
this.dragActivate = true;

examples/shorts/sequencer.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class UISequencerButton extends UIButton
2020
const size = vec2(68, 35);
2121
let pos = vec2(step, trackCount-1-track);
2222
pos = pos.multiply(size);
23-
pos = pos.add(vec2(240, 40));
23+
pos = pos.add(vec2(240, 40)).subtract(mainCanvasSize.scale(.5));
2424
super(pos, size);
2525

2626
this.step = step;
@@ -80,7 +80,7 @@ function gameInit()
8080
new UISequencerButton(step, track);
8181

8282
// create play/stop button
83-
const playButton = new UIButton(vec2(660,500), vec2(180,60), 'PLAY');
83+
const playButton = new UIButton(vec2(660,500).subtract(mainCanvasSize.scale(.5)), vec2(180,60), 'PLAY');
8484
playButton.onClick = ()=>
8585
{
8686
isPlaying = !isPlaying;
@@ -91,7 +91,7 @@ function gameInit()
9191
// create tempo slider
9292
const minTempo = 120, maxTempo = 480;
9393
const tempoPercent = percent(tempo, minTempo, maxTempo);
94-
const tempoSlider = new UISlider(vec2(380,500), vec2(340,40), tempoPercent);
94+
const tempoSlider = new UISlider(vec2(380,500).subtract(mainCanvasSize.scale(.5)), vec2(340,40), tempoPercent);
9595
tempoSlider.onChange = ()=>
9696
{
9797
tempo = lerp(minTempo, maxTempo, tempoSlider.value);

examples/shorts/sound.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ function gameInit()
1010
function makeSoundButton(pos, icon, sound)
1111
{
1212
pos = pos.multiply(vec2(w+gap, h+gap));
13-
pos = pos.add(mainCanvasSize.scale(.5));
1413
const button = new UIButton(pos, vec2(w, h), icon);
1514
button.textHeight = 100;
1615
button.onClick = ()=> sound.play();

examples/shorts/speak.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ function gameInit()
1111
function makeButton(pos, text, onClick)
1212
{
1313
pos = pos.multiply(vec2(w+gap, h+gap));
14-
pos = pos.add(mainCanvasSize.scale(.5));
1514
const button = new UIButton(pos, vec2(w, h), text);
1615
button.onClick = onClick;
1716
}

examples/shorts/timers.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ function gameInit()
99
canvasClearColor = hsl(.3,.3,.2);
1010

1111
// create timer button
12-
const pos = mainCanvasSize.scale(.5).add(vec2(0, -40));
13-
timerButton = new UIButton(pos, vec2(200, 90), 'Start');
12+
timerButton = new UIButton(vec2(0, -40), vec2(200, 90), 'Start');
1413
timerButton.timer = new Timer;
1514
timerButton.onClick = ()=>
1615
{

examples/shorts/vibrate.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ function gameInit()
1212
function makeButton(pos, text, onClick)
1313
{
1414
pos = pos.multiply(vec2(w+gap, h+gap));
15-
pos = pos.add(mainCanvasSize.scale(.5));
1615
const button = new UIButton(pos, vec2(w, h), text);
1716
button.onClick = onClick;
1817
}

examples/shorts/videoPlayer.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,23 @@ function gameInit()
66
canvasClearColor = hsl(0,0,.1);
77

88
// video player
9-
const center = mainCanvasSize.scale(.5);
10-
const videoPos = center.add(vec2(0, -50));
119
const videoSize = vec2(480, 270);
1210
const filename = 'video.webm';
1311
const autoplay = true;
14-
videoPlayer = new UIVideo(videoPos, videoSize, filename, autoplay);
12+
videoPlayer = new UIVideo(vec2(0, -50), videoSize, filename, autoplay);
1513
videoPlayer.lineWidth = 5;
1614
videoPlayer.lineColor = WHITE;
1715

1816
// play/pause button
1917
const buttonSize = vec2(200, 100);
20-
const playButtonPos = center.add(vec2(-130, 170));
21-
const playButton = new UIButton(playButtonPos, buttonSize);
22-
playButton.onClick = ()=> videoPlayer.isPaused() ?
18+
const playButton = new UIButton(vec2(-130, 170), buttonSize);
19+
playButton.onClick = ()=> videoPlayer.isPaused() ?
2320
videoPlayer.play() : videoPlayer.pause();
24-
playButton.onUpdate = ()=> playButton.text =
21+
playButton.onUpdate = ()=> playButton.text =
2522
videoPlayer.isPaused() ? 'Play' : 'Pause';
2623

2724
// status text
28-
const statusTextPos = center.add(vec2(130, 170));
29-
const statusText = new UIText(statusTextPos, vec2(250, 90));
25+
const statusText = new UIText(vec2(130, 170), vec2(250, 90));
3026
statusText.textColor = WHITE;
3127
statusText.onUpdate = ()=> statusText.text =
3228
videoPlayer.hasEnded() ? 'Ended' :

0 commit comments

Comments
 (0)