@@ -5272,11 +5272,11 @@ fn fragMain(f: FragParams ) -> @location(0) vec4f {
5272
5272
matrixIdx = 0 ,
5273
5273
matrixDirty = false ; // tracks if the matrix has been modified
5274
5274
5275
- // initialize with a 4x4 identity matrix
5275
+ // 4x4 identity matrix with y axis flipped
5276
5276
// prettier-ignore
5277
5277
matrices . push ( [
5278
5278
1 , 0 , 0 , 0 ,
5279
- 0 , 1 , 0 , 0 ,
5279
+ 0 , - 1 , 0 , 0 , // -1 here flips the y axis
5280
5280
0 , 0 , 1 , 0 ,
5281
5281
0 , 0 , 0 , 1
5282
5282
] ) ;
@@ -5289,13 +5289,14 @@ fn fragMain(f: FragParams ) -> @location(0) vec4f {
5289
5289
} ;
5290
5290
$ . resetMatrix ( ) ;
5291
5291
5292
- $ . translate = ( x , y , z = 0 ) => {
5293
- if ( ! x && ! y && ! z ) return ;
5294
- // update the translation values
5292
+ $ . translate = ( x , y ) => {
5293
+ if ( ! x && ! y ) return ;
5295
5294
let m = matrix ;
5296
- m [ 12 ] += x * m [ 0 ] ;
5297
- m [ 13 ] -= y * m [ 5 ] ;
5298
- m [ 14 ] += z * m [ 10 ] ;
5295
+
5296
+ // Apply translation in sheared/skewed space (2D only)
5297
+ m [ 12 ] += x * m [ 0 ] + y * m [ 4 ] ;
5298
+ m [ 13 ] += x * m [ 1 ] + y * m [ 5 ] ;
5299
+
5299
5300
matrixDirty = true ;
5300
5301
} ;
5301
5302
@@ -5365,8 +5366,8 @@ fn fragMain(f: FragParams ) -> @location(0) vec4f {
5365
5366
m4 = m [ 4 ] ,
5366
5367
m5 = m [ 5 ] ;
5367
5368
5368
- m [ 0 ] = m0 + m4 * tanAng ;
5369
- m [ 1 ] = m1 + m5 * tanAng ;
5369
+ m [ 4 ] = m4 + m0 * tanAng ;
5370
+ m [ 5 ] = m5 + m1 * tanAng ;
5370
5371
5371
5372
matrixDirty = true ;
5372
5373
} ;
@@ -5382,8 +5383,8 @@ fn fragMain(f: FragParams ) -> @location(0) vec4f {
5382
5383
m4 = m [ 4 ] ,
5383
5384
m5 = m [ 5 ] ;
5384
5385
5385
- m [ 4 ] = m4 + m0 * tanAng ;
5386
- m [ 5 ] = m5 + m1 * tanAng ;
5386
+ m [ 0 ] = m0 + m4 * tanAng ;
5387
+ m [ 1 ] = m1 + m5 * tanAng ;
5387
5388
5388
5389
matrixDirty = true ;
5389
5390
} ;
@@ -5507,21 +5508,21 @@ fn fragMain(f: FragParams ) -> @location(0) vec4f {
5507
5508
if ( ! mode || mode == 'corner' ) {
5508
5509
l = x ;
5509
5510
r = x + w ;
5510
- t = - y ;
5511
- b = - ( y + h ) ;
5511
+ t = y ;
5512
+ b = y + h ;
5512
5513
} else if ( mode == 'center' ) {
5513
5514
let hw = w / 2 ,
5514
5515
hh = h / 2 ;
5515
5516
l = x - hw ;
5516
5517
r = x + hw ;
5517
- t = - ( y - hh ) ;
5518
- b = - ( y + hh ) ;
5518
+ t = y - hh ;
5519
+ b = y + hh ;
5519
5520
} else {
5520
5521
// CORNERS
5521
5522
l = x ;
5522
5523
r = w ;
5523
- t = - y ;
5524
- b = - h ;
5524
+ t = y ;
5525
+ b = h ;
5525
5526
}
5526
5527
5527
5528
return [ l , r , t , b ] ;
@@ -6042,7 +6043,7 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6042
6043
6043
6044
// calculate perimeter vertex
6044
6045
let vx = x + a * Math . cos ( t ) ;
6045
- let vy = y - b * Math . sin ( t ) ;
6046
+ let vy = y + b * Math . sin ( t ) ;
6046
6047
6047
6048
// add perimeter vertex
6048
6049
v [ i ++ ] = vx ;
@@ -6068,11 +6069,11 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6068
6069
for ( let j = 0 ; j <= n ; j ++ ) {
6069
6070
// Outer vertex
6070
6071
let vxOuter = x + outerA * Math . cos ( t ) ;
6071
- let vyOuter = y - outerB * Math . sin ( t ) ;
6072
+ let vyOuter = y + outerB * Math . sin ( t ) ;
6072
6073
6073
6074
// Inner vertex
6074
6075
let vxInner = x + innerA * Math . cos ( t ) ;
6075
- let vyInner = y - innerB * Math . sin ( t ) ;
6076
+ let vyInner = y + innerB * Math . sin ( t ) ;
6076
6077
6077
6078
// Add vertices for triangle strip
6078
6079
v [ i ++ ] = vxOuter ;
@@ -6137,26 +6138,26 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6137
6138
6138
6139
l += rr ;
6139
6140
r -= rr ;
6140
- t - = rr ;
6141
- b + = rr ;
6141
+ t + = rr ;
6142
+ b - = rr ;
6142
6143
6143
6144
// Clamp radius
6144
6145
rr = Math . min ( rr , Math . min ( w , h ) / 2 ) ;
6145
6146
6146
6147
let n = getArcSegments ( rr * _scale ) ;
6147
6148
6148
- let trr = t + rr ,
6149
- brr = b - rr ,
6149
+ let trr = t - rr ,
6150
+ brr = b + rr ,
6150
6151
lrr = l - rr ,
6151
6152
rrr = r + rr ;
6152
6153
6153
6154
if ( doFill ) {
6154
6155
ci = fillIdx ;
6155
6156
// Corner arcs
6156
- addArc ( r , b , rr , rr , 0 , HALF_PI , n , ci , ti ) ;
6157
- addArc ( l , b , rr , rr , Math . PI , HALF_PI , n , ci , ti ) ;
6158
- addArc ( l , t , rr , rr , - Math . PI , - HALF_PI , n , ci , ti ) ;
6159
- addArc ( r , t , rr , rr , - HALF_PI , 0 , n , ci , ti ) ;
6157
+ addArc ( l , t , rr , - rr , - HALF_PI , Math . PI , n , ci , ti ) ; // top-left
6158
+ addArc ( r , t , rr , - rr , HALF_PI , 0 , n , ci , ti ) ; // top-right
6159
+ addArc ( r , b , rr , - rr , 0 , - HALF_PI , n , ci , ti ) ; // bottom-right
6160
+ addArc ( l , b , rr , - rr , - HALF_PI , - Math . PI , n , ci , ti ) ; // bottom-left
6160
6161
6161
6162
addRect ( l , trr , r , trr , r , brr , l , brr , ci , ti ) ; // center
6162
6163
addRect ( l , t , lrr , t , lrr , b , l , b , ci , ti ) ; // Left
@@ -6170,11 +6171,12 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6170
6171
outerB = rr + hsw ,
6171
6172
innerA = rr - hsw ,
6172
6173
innerB = rr - hsw ;
6174
+
6173
6175
// Corner arc strokes
6174
- addArcStroke ( r , b , outerA , outerB , innerA , innerB , 0 , HALF_PI , n , ci , ti ) ;
6175
- addArcStroke ( l , b , outerA , outerB , innerA , innerB , Math . PI , HALF_PI , n , ci , ti ) ;
6176
- addArcStroke ( l , t , outerA , outerB , innerA , innerB , - Math . PI , - HALF_PI , n , ci , ti ) ;
6177
- addArcStroke ( r , t , outerA , outerB , innerA , innerB , - HALF_PI , 0 , n , ci , ti ) ;
6176
+ addArcStroke ( l , t , outerA , - outerB , innerA , - innerB , Math . PI , HALF_PI , n , ci , ti ) ; // top-left
6177
+ addArcStroke ( r , t , outerA , - outerB , innerA , - innerB , HALF_PI , 0 , n , ci , ti ) ; // top-right
6178
+ addArcStroke ( r , b , outerA , - outerB , innerA , - innerB , 0 , - HALF_PI , n , ci , ti ) ; // bottom-right
6179
+ addArcStroke ( l , b , outerA , - outerB , innerA , - innerB , - HALF_PI , - Math . PI , n , ci , ti ) ; // bottom-left
6178
6180
6179
6181
let lrrMin = lrr - hsw ,
6180
6182
lrrMax = lrr + hsw ,
@@ -6246,11 +6248,11 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6246
6248
let ti = matrixIdx ;
6247
6249
6248
6250
if ( doFill ) {
6249
- addArc ( x , - y , a , b , 0 , TAU , n , fillIdx , ti ) ;
6251
+ addArc ( x , y , a , b , 0 , TAU , n , fillIdx , ti ) ;
6250
6252
}
6251
6253
if ( doStroke ) {
6252
6254
// Draw the stroke as a ring using triangle strips
6253
- addArcStroke ( x , - y , a + hsw , b + hsw , a - hsw , b - hsw , 0 , TAU , n , strokeIdx , ti ) ;
6255
+ addArcStroke ( x , y , a + hsw , b + hsw , a - hsw , b - hsw , 0 , TAU , n , strokeIdx , ti ) ;
6254
6256
}
6255
6257
} ;
6256
6258
@@ -6299,15 +6301,15 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6299
6301
6300
6302
// Draw fill
6301
6303
if ( doFill ) {
6302
- addArc ( x , - y , a , b , start , stop , n , fillIdx , ti ) ;
6304
+ addArc ( x , y , a , b , start , stop , n , fillIdx , ti ) ;
6303
6305
}
6304
6306
6305
6307
// Draw stroke
6306
6308
if ( doStroke ) {
6307
- addArcStroke ( x , - y , a + hsw , b + hsw , a - hsw , b - hsw , start , stop , n , strokeIdx , ti ) ;
6309
+ addArcStroke ( x , y , a + hsw , b + hsw , a - hsw , b - hsw , start , stop , n , strokeIdx , ti ) ;
6308
6310
if ( _strokeCap == 'round' ) {
6309
- addArc ( x + a * Math . cos ( start ) , - y - b * Math . sin ( start ) , hsw , hsw , 0 , TAU , n , strokeIdx , ti ) ;
6310
- addArc ( x + a * Math . cos ( stop ) , - y - b * Math . sin ( stop ) , hsw , hsw , 0 , TAU , n , strokeIdx , ti ) ;
6311
+ addArc ( x + a * Math . cos ( start ) , y + b * Math . sin ( start ) , hsw , hsw , 0 , TAU , n , strokeIdx , ti ) ;
6312
+ addArc ( x + a * Math . cos ( stop ) , y + b * Math . sin ( stop ) , hsw , hsw , 0 , TAU , n , strokeIdx , ti ) ;
6311
6313
}
6312
6314
}
6313
6315
} ;
@@ -6323,7 +6325,7 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6323
6325
} else {
6324
6326
let n = getArcSegments ( scaledSW ) ;
6325
6327
sw /= 2 ;
6326
- addArc ( x , - y , sw , sw , 0 , TAU , n , ci , ti ) ;
6328
+ addArc ( x , y , sw , sw , 0 , TAU , n , ci , ti ) ;
6327
6329
}
6328
6330
} ;
6329
6331
@@ -6351,12 +6353,12 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6351
6353
let px = - ( dy / length ) * hsw ,
6352
6354
py = ( dx / length ) * hsw ;
6353
6355
6354
- addRect ( x1 + px , - y1 - py , x1 - px , - y1 + py , x2 - px , - y2 + py , x2 + px , - y2 - py , ci , ti ) ;
6356
+ addRect ( x1 + px , y1 + py , x1 - px , y1 - py , x2 - px , y2 - py , x2 + px , y2 + py , ci , ti ) ;
6355
6357
6356
6358
if ( scaledSW > 2 && _strokeCap != 'square' ) {
6357
6359
let n = getArcSegments ( scaledSW ) ;
6358
- addArc ( x1 , - y1 , hsw , hsw , 0 , TAU , n , ci , ti ) ;
6359
- addArc ( x2 , - y2 , hsw , hsw , 0 , TAU , n , ci , ti ) ;
6360
+ addArc ( x1 , y1 , hsw , hsw , 0 , TAU , n , ci , ti ) ;
6361
+ addArc ( x2 , y2 , hsw , hsw , 0 , TAU , n , ci , ti ) ;
6360
6362
}
6361
6363
} ;
6362
6364
@@ -6378,13 +6380,13 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6378
6380
6379
6381
$ . vertex = ( x , y ) => {
6380
6382
if ( matrixDirty ) saveMatrix ( ) ;
6381
- sv . push ( x , - y , fillIdx , matrixIdx ) ;
6383
+ sv . push ( x , y , fillIdx , matrixIdx ) ;
6382
6384
shapeVertCount ++ ;
6383
6385
} ;
6384
6386
6385
6387
$ . curveVertex = ( x , y ) => {
6386
6388
if ( matrixDirty ) saveMatrix ( ) ;
6387
- curveVertices . push ( { x : x , y : - y } ) ;
6389
+ curveVertices . push ( { x, y } ) ;
6388
6390
} ;
6389
6391
6390
6392
$ . bezierVertex = function ( cx1 , cy1 , cx2 , cy2 , x , y ) {
@@ -6415,14 +6417,14 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6415
6417
6416
6418
if ( quadratic ) {
6417
6419
vx = mt2 * startX + 2 * mt * t * cx1 + t2 * x ;
6418
- vy = mt2 * startY + 2 * mt * t * - cy1 + t2 * - y ;
6420
+ vy = mt2 * startY + 2 * mt * t * cy1 + t2 * y ;
6419
6421
} else {
6420
6422
let t3 = t2 * t ;
6421
6423
let mt3 = mt2 * mt ;
6422
6424
6423
6425
// Cubic Bezier formula
6424
6426
vx = mt3 * startX + 3 * mt2 * t * cx1 + 3 * mt * t2 * cx2 + t3 * x ;
6425
- vy = mt3 * startY + 3 * mt2 * t * - cy1 + 3 * mt * t2 * - cy2 + t3 * - y ;
6427
+ vy = mt3 * startY + 3 * mt2 * t * cy1 + 3 * mt * t2 * cy2 + t3 * y ;
6426
6428
}
6427
6429
6428
6430
sv . push ( vx , vy , fillIdx , matrixIdx ) ;
@@ -6479,8 +6481,8 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6479
6481
}
6480
6482
6481
6483
if ( ! shapeVertCount ) return ;
6482
- if ( shapeVertCount == 1 ) return $ . point ( sv [ 0 ] , - sv [ 1 ] ) ;
6483
- if ( shapeVertCount == 2 ) return $ . line ( sv [ 0 ] , - sv [ 1 ] , sv [ 4 ] , - sv [ 5 ] ) ;
6484
+ if ( shapeVertCount == 1 ) return $ . point ( sv [ 0 ] , sv [ 1 ] ) ;
6485
+ if ( shapeVertCount == 2 ) return $ . line ( sv [ 0 ] , sv [ 1 ] , sv [ 4 ] , sv [ 5 ] ) ;
6484
6486
6485
6487
// close the shape if requested
6486
6488
if ( close ) {
@@ -6530,13 +6532,13 @@ fn fragMain(f: FragParams) -> @location(0) vec4f {
6530
6532
for ( let i = 0 ; i < shapeVertCount - 1 ; i ++ ) {
6531
6533
let v1 = i * 4 ;
6532
6534
let v2 = ( i + 1 ) * 4 ;
6533
- $ . line ( sv [ v1 ] , - sv [ v1 + 1 ] , sv [ v2 ] , - sv [ v2 + 1 ] ) ;
6535
+ $ . line ( sv [ v1 ] , sv [ v1 + 1 ] , sv [ v2 ] , sv [ v2 + 1 ] ) ;
6534
6536
6535
6537
addArc ( sv [ v1 ] , sv [ v1 + 1 ] , hsw , hsw , 0 , TAU , n , strokeIdx , ti ) ;
6536
6538
}
6537
6539
let v1 = ( shapeVertCount - 1 ) * 4 ;
6538
6540
let v2 = 0 ;
6539
- if ( close ) $ . line ( sv [ v1 ] , - sv [ v1 + 1 ] , sv [ v2 ] , - sv [ v2 + 1 ] ) ;
6541
+ if ( close ) $ . line ( sv [ v1 ] , sv [ v1 + 1 ] , sv [ v2 ] , sv [ v2 + 1 ] ) ;
6540
6542
addArc ( sv [ v1 ] , sv [ v1 + 1 ] , hsw , hsw , 0 , TAU , n , strokeIdx , ti ) ;
6541
6543
_strokeCap = ogStrokeCap ;
6542
6544
}
@@ -7065,7 +7067,7 @@ struct Text {
7065
7067
@group(2) @binding(0) var<storage> textChars: array<vec4f>;
7066
7068
@group(2) @binding(1) var<storage> textMetadata: array<Text>;
7067
7069
7068
- const quad = array(vec2f(0, - 1), vec2f(1, - 1), vec2f(0, 0), vec2f(1, 0));
7070
+ const quad = array(vec2f(0, 1), vec2f(1, 1), vec2f(0, 0), vec2f(1, 0));
7069
7071
const uvs = array(vec2f(0, 1), vec2f(1, 1), vec2f(0, 0), vec2f(1, 0));
7070
7072
7071
7073
fn calcPos(i: u32, char: vec4f, fontChar: Char, text: Text) -> vec2f {
@@ -7292,7 +7294,7 @@ fn fragMain(f : FragParams) -> @location(0) vec4f {
7292
7294
fontChars [ o + 4 ] = char . width ; // size.x
7293
7295
fontChars [ o + 5 ] = char . height ; // size.y
7294
7296
fontChars [ o + 6 ] = char . xoffset ; // offset.x
7295
- fontChars [ o + 7 ] = - char . yoffset ; // offset.y
7297
+ fontChars [ o + 7 ] = char . yoffset ; // offset.y
7296
7298
o += 8 ;
7297
7299
}
7298
7300
charsBuffer . unmap ( ) ;
@@ -7526,7 +7528,7 @@ fn fragMain(f : FragParams) -> @location(0) vec4f {
7526
7528
if ( ta == 'left' && ! hasNewline ) {
7527
7529
measurements = measureText ( $ . _font , str , ( textX , textY , line , char ) => {
7528
7530
charsData [ o ] = textX ;
7529
- charsData [ o + 1 ] = textY ;
7531
+ charsData [ o + 1 ] = - textY ;
7530
7532
charsData [ o + 2 ] = char . charIndex ;
7531
7533
charsData [ o + 3 ] = textIndex ;
7532
7534
o += 4 ;
@@ -7553,7 +7555,7 @@ fn fragMain(f : FragParams) -> @location(0) vec4f {
7553
7555
offsetX = - measurements . lineWidths [ line ] ;
7554
7556
}
7555
7557
charsData [ o ] = textX + offsetX ;
7556
- charsData [ o + 1 ] = textY + offsetY ;
7558
+ charsData [ o + 1 ] = - ( textY + offsetY ) ;
7557
7559
charsData [ o + 2 ] = char . charIndex ;
7558
7560
charsData [ o + 3 ] = textIndex ;
7559
7561
o += 4 ;
@@ -7566,7 +7568,7 @@ fn fragMain(f : FragParams) -> @location(0) vec4f {
7566
7568
if ( matrixDirty ) saveMatrix ( ) ;
7567
7569
7568
7570
txt [ 0 ] = x ;
7569
- txt [ 1 ] = - y ;
7571
+ txt [ 1 ] = y ;
7570
7572
txt [ 2 ] = _textSize / 42 ;
7571
7573
txt [ 3 ] = matrixIdx ;
7572
7574
txt [ 4 ] = doFill && fillSet ? fillIdx : 0 ;
0 commit comments