gio icon indicating copy to clipboard operation
gio copied to clipboard

deps: bump go-text/typesetting version to v0.1.0

Open benoitkugler opened this issue 1 year ago • 6 comments

Using this stable release should ensure user upgrading gio with go get -u do not encouter compilation error

benoitkugler avatar Jan 12 '24 10:01 benoitkugler

Thanks for the PR @benoitkugler! A number of my bidi tests are failing now though:

Test results
?   	gioui.org/app/internal/log	[no test files]
ok  	gioui.org/app	(cached)
?   	gioui.org/app/internal/xkb	[no test files]
?   	gioui.org/app/permission	[no test files]
?   	gioui.org/app/permission/bluetooth	[no test files]
?   	gioui.org/app/permission/camera	[no test files]
?   	gioui.org/app/permission/networkstate	[no test files]
?   	gioui.org/app/permission/storage	[no test files]
?   	gioui.org/app/permission/wakelock	[no test files]
ok  	gioui.org/f32	(cached)
?   	gioui.org/font	[no test files]
?   	gioui.org/font/gofont	[no test files]
?   	gioui.org/font/opentype	[no test files]
ok  	gioui.org/gesture	(cached)
ok  	gioui.org/gpu	0.002s [no tests to run]
?   	gioui.org/gpu/internal/d3d11	[no test files]
?   	gioui.org/gpu/internal/driver	[no test files]
?   	gioui.org/gpu/internal/metal	[no test files]
?   	gioui.org/gpu/internal/opengl	[no test files]
?   	gioui.org/gpu/internal/vulkan	[no test files]
?   	gioui.org/internal/byteslice	[no test files]
?   	gioui.org/internal/debug	[no test files]
?   	gioui.org/internal/egl	[no test files]
?   	gioui.org/internal/f32	[no test files]
?   	gioui.org/internal/f32color/f32colorgen	[no test files]
?   	gioui.org/internal/gl	[no test files]
?   	gioui.org/internal/init	[no test files]
?   	gioui.org/internal/ops	[no test files]
?   	gioui.org/internal/scene	[no test files]
?   	gioui.org/internal/vk	[no test files]
?   	gioui.org/io/clipboard	[no test files]
?   	gioui.org/io/event	[no test files]
?   	gioui.org/io/profile	[no test files]
?   	gioui.org/io/semantic	[no test files]
?   	gioui.org/io/system	[no test files]
?   	gioui.org/io/transfer	[no test files]
ok  	gioui.org/gpu/headless	0.315s
?   	gioui.org/op/paint	[no test files]
ok  	gioui.org/gpu/internal/rendertest	5.259s
ok  	gioui.org/internal/f32color	(cached)
ok  	gioui.org/internal/fling	(cached)
ok  	gioui.org/internal/stroke	(cached) [no tests to run]
ok  	gioui.org/io/key	(cached)
ok  	gioui.org/io/pointer	(cached)
ok  	gioui.org/io/router	(cached)
ok  	gioui.org/layout	(cached)
ok  	gioui.org/op	(cached)
ok  	gioui.org/op/clip	0.080s
ok  	gioui.org/text	0.067s
ok  	gioui.org/unit	(cached)
--- FAIL: TestIndexPositionBidi (0.00s)
    --- FAIL: TestIndexPositionBidi/bidi_rtl (0.00s)
        index_test.go:314: position 0: expected x=41:41(2665), got x=41:22(2646)
        index_test.go:314: position 1: expected x=51:27(3291), got x=51:08(3272)
        index_test.go:314: position 2: expected x=60:21(3861), got x=60:02(3842)
        index_test.go:314: position 3: expected x=69:15(4431), got x=68:60(4412)
        index_test.go:314: position 4: expected x=73:44(4716), got x=73:25(4697)
        index_test.go:314: position 5: expected x=82:38(5286), got x=82:19(5267)
        index_test.go:314: position 6: expected x=91:32(5856), got x=91:13(5837)
        index_test.go:314: position 7: expected x=95:29(6109), got x=95:10(6090)
        index_test.go:314: position 8: expected x=103:29(6621), got x=103:10(6602)
        index_test.go:314: position 9: expected x=111:29(7133), got x=111:10(7114)
        index_test.go:314: position 10: expected x=41:41(2665), got x=41:22(2646)
        index_test.go:314: position 16: expected x=123:14(7886), got x=122:59(7867)
        index_test.go:314: position 17: expected x=111:14(7118), got x=110:59(7099)
        index_test.go:314: position 18: expected x=99:14(6350), got x=98:59(6331)
        index_test.go:314: position 19: expected x=87:14(5582), got x=86:59(5563)
        index_test.go:314: position 20: expected x=75:14(4814), got x=74:59(4795)
        index_test.go:314: position 21: expected x=70:49(4529), got x=70:30(4510)
        index_test.go:314: position 22: expected x=66:07(4231), got x=65:52(4212)
        index_test.go:314: position 23: expected x=61:29(3933), got x=61:10(3914)
        index_test.go:314: position 24: expected x=57:19(3667), got x=57:00(3648)
        index_test.go:314: position 25: expected x=35:60(2300), got x=35:41(2281)
        index_test.go:314: position 26: expected x=40:25(2585), got x=40:06(2566)
        index_test.go:314: position 27: expected x=49:19(3155), got x=49:00(3136)
        index_test.go:314: position 28: expected x=57:19(3667), got x=57:00(3648)
        index_test.go:314: position 29: expected x=35:60(2300), got x=35:41(2281)
        index_test.go:337: positions[ 0] = {runes:  0, line:  0, col:  0, x:  2646, y:  22}
        index_test.go:337: positions[ 1] = {runes:  1, line:  0, col:  1, x:  3272, y:  22}
        index_test.go:337: positions[ 2] = {runes:  2, line:  0, col:  2, x:  3842, y:  22}
        index_test.go:337: positions[ 3] = {runes:  3, line:  0, col:  3, x:  4412, y:  22}
        index_test.go:337: positions[ 4] = {runes:  4, line:  0, col:  4, x:  4697, y:  22}
        index_test.go:337: positions[ 5] = {runes:  5, line:  0, col:  5, x:  5267, y:  22}
        index_test.go:337: positions[ 6] = {runes:  6, line:  0, col:  6, x:  5837, y:  22}
        index_test.go:337: positions[ 7] = {runes:  7, line:  0, col:  7, x:  6090, y:  22}
        index_test.go:337: positions[ 8] = {runes:  8, line:  0, col:  8, x:  6602, y:  22}
        index_test.go:337: positions[ 9] = {runes:  9, line:  0, col:  9, x:  7114, y:  22}
        index_test.go:337: positions[10] = {runes:  9, line:  0, col:  9, x:  2646, y:  22}
        index_test.go:337: positions[11] = {runes: 10, line:  0, col: 10, x:  2380, y:  22}
        index_test.go:337: positions[12] = {runes: 11, line:  0, col: 11, x:  1577, y:  22}
        index_test.go:337: positions[13] = {runes: 12, line:  0, col: 12, x:   985, y:  22}
        index_test.go:337: positions[14] = {runes: 13, line:  0, col: 13, x:   687, y:  22}
        index_test.go:337: positions[15] = {runes: 14, line:  0, col: 14, x:   266, y:  22}
        index_test.go:337: positions[16] = {runes: 15, line:  1, col:  0, x:  7867, y:  41}
        index_test.go:337: positions[17] = {runes: 16, line:  1, col:  1, x:  7099, y:  41}
        index_test.go:337: positions[18] = {runes: 17, line:  1, col:  2, x:  6331, y:  41}
        index_test.go:337: positions[19] = {runes: 18, line:  1, col:  3, x:  5563, y:  41}
        index_test.go:337: positions[20] = {runes: 19, line:  1, col:  4, x:  4795, y:  41}
        index_test.go:337: positions[21] = {runes: 20, line:  1, col:  5, x:  4510, y:  41}
        index_test.go:337: positions[22] = {runes: 21, line:  1, col:  6, x:  4212, y:  41}
        index_test.go:337: positions[23] = {runes: 22, line:  1, col:  7, x:  3914, y:  41}
        index_test.go:337: positions[24] = {runes: 23, line:  1, col:  8, x:  3648, y:  41}
        index_test.go:337: positions[25] = {runes: 23, line:  1, col:  8, x:  2281, y:  41}
        index_test.go:337: positions[26] = {runes: 24, line:  1, col:  9, x:  2566, y:  41}
        index_test.go:337: positions[27] = {runes: 25, line:  1, col: 10, x:  3136, y:  41}
        index_test.go:337: positions[28] = {runes: 26, line:  1, col: 11, x:  3648, y:  41}
        index_test.go:337: positions[29] = {runes: 26, line:  1, col: 11, x:  2281, y:  41}
        index_test.go:337: positions[30] = {runes: 27, line:  1, col: 12, x:  2015, y:  41}
        index_test.go:337: positions[31] = {runes: 28, line:  1, col: 13, x:  1709, y:  41}
        index_test.go:337: positions[32] = {runes: 29, line:  1, col: 14, x:  1117, y:  41}
        index_test.go:337: positions[33] = {runes: 30, line:  1, col: 15, x:   266, y:  41}
        index_test.go:337: positions[34] = {runes: 31, line:  2, col:  0, x:  8794, y:  60}
        index_test.go:337: positions[35] = {runes: 32, line:  2, col:  1, x:  8026, y:  60}
        index_test.go:337: positions[36] = {runes: 33, line:  2, col:  2, x:  7258, y:  60}
        index_test.go:337: positions[37] = {runes: 34, line:  2, col:  3, x:  6490, y:  60}
        index_test.go:337: positions[38] = {runes: 35, line:  2, col:  4, x:  5722, y:  60}
        index_test.go:337: positions[39] = {runes: 36, line:  2, col:  5, x:  5437, y:  60}
        index_test.go:337: positions[40] = {runes: 37, line:  2, col:  6, x:  4922, y:  60}
        index_test.go:337: positions[41] = {runes: 38, line:  2, col:  7, x:  4540, y:  60}
        index_test.go:337: positions[42] = {runes: 39, line:  2, col:  8, x:  4134, y:  60}
        index_test.go:337: positions[43] = {runes: 40, line:  2, col:  9, x:  3868, y:  60}
        index_test.go:337: positions[44] = {runes: 40, line:  2, col:  9, x:     0, y:  60}
        index_test.go:337: positions[45] = {runes: 41, line:  2, col: 10, x:   290, y:  60}
        index_test.go:337: positions[46] = {runes: 42, line:  2, col: 11, x:   860, y:  60}
        index_test.go:337: positions[47] = {runes: 43, line:  2, col: 12, x:  1430, y:  60}
        index_test.go:337: positions[48] = {runes: 44, line:  2, col: 13, x:  1715, y:  60}
        index_test.go:337: positions[49] = {runes: 45, line:  2, col: 14, x:  1989, y:  60}
        index_test.go:337: positions[50] = {runes: 46, line:  2, col: 15, x:  2559, y:  60}
        index_test.go:337: positions[51] = {runes: 47, line:  2, col: 16, x:  3071, y:  60}
        index_test.go:337: positions[52] = {runes: 48, line:  2, col: 17, x:  3583, y:  60}
        index_test.go:337: positions[53] = {runes: 49, line:  3, col:  0, x:   324, y:  79}
        index_test.go:337: positions[54] = {runes: 50, line:  3, col:  1, x:   894, y:  79}
        index_test.go:337: positions[55] = {runes: 51, line:  3, col:  2, x:  1464, y:  79}
        index_test.go:337: positions[56] = {runes: 52, line:  3, col:  3, x:  2034, y:  79}
        index_test.go:337: positions[57] = {runes: 52, line:  3, col:  3, x:   324, y:  79}
        index_test.go:337: positions[58] = {runes: 53, line:  3, col:  4, x:     0, y:  79}
        index_test.go:339: glyphs[ 0] = {ID: 0x0040000000037, Flags: _____C_, Advance:  626(  9:50), Runes: 1, Y:  22, X: 2646( 41:22)} 
        index_test.go:339: glyphs[ 1] = {ID: 0x004000000004b, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  22, X: 3272( 51:08)} 
        index_test.go:339: glyphs[ 2] = {ID: 0x0040000000048, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  22, X: 3842( 60:02)} 
        index_test.go:339: glyphs[ 3] = {ID: 0x0040000000003, Flags: _____C_, Advance:  285(  4:29), Runes: 1, Y:  22, X: 4412( 68:60)} 
        index_test.go:339: glyphs[ 4] = {ID: 0x0040000000054, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  22, X: 4697( 73:25)} 
        index_test.go:339: glyphs[ 5] = {ID: 0x0040000000058, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  22, X: 5267( 82:19)} 
        index_test.go:339: glyphs[ 6] = {ID: 0x004000000004c, Flags: _____C_, Advance:  253(  3:61), Runes: 1, Y:  22, X: 5837( 91:13)} 
        index_test.go:339: glyphs[ 7] = {ID: 0x0040000000046, Flags: _____C_, Advance:  512(  8:00), Runes: 1, Y:  22, X: 6090( 95:10)} 
        index_test.go:339: glyphs[ 8] = {ID: 0x004000000004e, Flags: ____RC_, Advance:  512(  8:00), Runes: 1, Y:  22, X: 6602(103:10)} 
        index_test.go:339: glyphs[ 9] = {ID: 0x1040000000003, Flags: __T__C_, Advance:  266(  4:10), Runes: 1, Y:  22, X: 2380( 37:12)} 
        index_test.go:339: glyphs[10] = {ID: 0x104000000042e, Flags: __T__C_, Advance:  803( 12:35), Runes: 1, Y:  22, X: 1577( 24:41)} 
        index_test.go:339: glyphs[11] = {ID: 0x1040000000300, Flags: __T__C_, Advance:  592(  9:16), Runes: 1, Y:  22, X:  985( 15:25)} 
        index_test.go:339: glyphs[12] = {ID: 0x104000000002e, Flags: __T__C_, Advance:  298(  4:42), Runes: 1, Y:  22, X:  687( 10:47)} 
        index_test.go:339: glyphs[13] = {ID: 0x10400000001d1, Flags: __T__C_, Advance:  421(  6:37), Runes: 1, Y:  22, X:  266(  4:10)} 
        index_test.go:339: glyphs[14] = {ID: 0x1040000000003, Flags: __TLRC_, Advance:  266(  4:10), Runes: 1, Y:  22, X:    0(  0:00)} 
        index_test.go:339: glyphs[15] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  41, X: 7099(110:59)} 
        index_test.go:339: glyphs[16] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  41, X: 6331( 98:59)} 
        index_test.go:339: glyphs[17] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  41, X: 5563( 86:59)} 
        index_test.go:339: glyphs[18] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  41, X: 4795( 74:59)} 
        index_test.go:339: glyphs[19] = {ID: 0x0040000000003, Flags: __T_RC_, Advance:  285(  4:29), Runes: 1, Y:  41, X: 4510( 70:30)} 
        index_test.go:339: glyphs[20] = {ID: 0x10400000002bb, Flags: __T__C_, Advance:  596(  9:20), Runes: 2, Y:  41, X: 3914( 61:10)} 
        index_test.go:339: glyphs[21] = {ID: 0x1040000000003, Flags: __T_RC_, Advance:  266(  4:10), Runes: 1, Y:  41, X: 3648( 57:00)} 
        index_test.go:339: glyphs[22] = {ID: 0x0040000000049, Flags: _____C_, Advance:  285(  4:29), Runes: 1, Y:  41, X: 2281( 35:41)} 
        index_test.go:339: glyphs[23] = {ID: 0x0040000000052, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  41, X: 2566( 40:06)} 
        index_test.go:339: glyphs[24] = {ID: 0x004000000005b, Flags: ____RC_, Advance:  512(  8:00), Runes: 1, Y:  41, X: 3136( 49:00)} 
        index_test.go:339: glyphs[25] = {ID: 0x1040000000003, Flags: __T__C_, Advance:  266(  4:10), Runes: 1, Y:  41, X: 2015( 31:31)} 
        index_test.go:339: glyphs[26] = {ID: 0x10400000004e9, Flags: __T__C_, Advance:  306(  4:50), Runes: 1, Y:  41, X: 1709( 26:45)} 
        index_test.go:339: glyphs[27] = {ID: 0x1040000000300, Flags: __T__C_, Advance:  592(  9:16), Runes: 1, Y:  41, X: 1117( 17:29)} 
        index_test.go:339: glyphs[28] = {ID: 0x10400000004bd, Flags: __T__C_, Advance:  851( 13:19), Runes: 1, Y:  41, X:  266(  4:10)} 
        index_test.go:339: glyphs[29] = {ID: 0x1040000000003, Flags: __TLRC_, Advance:  266(  4:10), Runes: 1, Y:  41, X:    0(  0:00)} 
        index_test.go:339: glyphs[30] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  60, X: 8026(125:26)} 
        index_test.go:339: glyphs[31] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  60, X: 7258(113:26)} 
        index_test.go:339: glyphs[32] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  60, X: 6490(101:26)} 
        index_test.go:339: glyphs[33] = {ID: 0x0040000000000, Flags: __T__C_, Advance:  768( 12:00), Runes: 1, Y:  60, X: 5722( 89:26)} 
        index_test.go:339: glyphs[34] = {ID: 0x0040000000003, Flags: __T_RC_, Advance:  285(  4:29), Runes: 1, Y:  60, X: 5437( 84:61)} 
        index_test.go:339: glyphs[35] = {ID: 0x1040000000183, Flags: __T__C_, Advance:  515(  8:03), Runes: 1, Y:  60, X: 4922( 76:58)} 
        index_test.go:339: glyphs[36] = {ID: 0x10400000005c9, Flags: __T__C_, Advance:  382(  5:62), Runes: 1, Y:  60, X: 4540( 70:60)} 
        index_test.go:339: glyphs[37] = {ID: 0x10400000003cc, Flags: __T__C_, Advance:  406(  6:22), Runes: 1, Y:  60, X: 4134( 64:38)} 
        index_test.go:339: glyphs[38] = {ID: 0x1040000000003, Flags: __T_RC_, Advance:  266(  4:10), Runes: 1, Y:  60, X: 3868( 60:28)} 
        index_test.go:339: glyphs[39] = {ID: 0x0040000000057, Flags: _____C_, Advance:  290(  4:34), Runes: 1, Y:  60, X:    0(  0:00)} 
        index_test.go:339: glyphs[40] = {ID: 0x004000000004b, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  60, X:  290(  4:34)} 
        index_test.go:339: glyphs[41] = {ID: 0x0040000000048, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  60, X:  860( 13:28)} 
        index_test.go:339: glyphs[42] = {ID: 0x0040000000003, Flags: _____C_, Advance:  285(  4:29), Runes: 1, Y:  60, X: 1430( 22:22)} 
        index_test.go:339: glyphs[43] = {ID: 0x004000000004f, Flags: _____C_, Advance:  274(  4:18), Runes: 1, Y:  60, X: 1715( 26:51)} 
        index_test.go:339: glyphs[44] = {ID: 0x0040000000044, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  60, X: 1989( 31:05)} 
        index_test.go:339: glyphs[45] = {ID: 0x004000000005d, Flags: _____C_, Advance:  512(  8:00), Runes: 1, Y:  60, X: 2559( 39:63)} 
        index_test.go:339: glyphs[46] = {ID: 0x004000000005c, Flags: _____C_, Advance:  512(  8:00), Runes: 1, Y:  60, X: 3071( 47:63)} 
        index_test.go:339: glyphs[47] = {ID: 0x0040000000003, Flags: ___LRC_, Advance:  285(  4:29), Runes: 1, Y:  60, X: 3583( 55:63)} 
        index_test.go:339: glyphs[48] = {ID: 0x0040000000047, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  79, X:  324(  5:04)} 
        index_test.go:339: glyphs[49] = {ID: 0x0040000000052, Flags: _____C_, Advance:  570(  8:58), Runes: 1, Y:  79, X:  894( 13:62)} 
        index_test.go:339: glyphs[50] = {ID: 0x004000000004a, Flags: ____RC_, Advance:  570(  8:58), Runes: 1, Y:  79, X: 1464( 22:56)} 
        index_test.go:339: glyphs[51] = {ID: 0x0040000000011, Flags: __TLRC_, Advance:  324(  5:04), Runes: 1, Y:  79, X:    0(  0:00)} 
--- FAIL: TestIndexPositionLines (0.00s)
    --- FAIL: TestIndexPositionLines/bidi_rtl (0.00s)
        index_test.go:527: line 0: expected:
            widget.lineInfo{xOff:0, yOff:22, width:7133, ascent:1407, descent:756, glyphs:15}, got:
            widget.lineInfo{xOff:0, yOff:22, width:7114, ascent:1407, descent:756, glyphs:15}
        index_test.go:527: line 1: expected:
            widget.lineInfo{xOff:0, yOff:41, width:7886, ascent:1407, descent:756, glyphs:15}, got:
            widget.lineInfo{xOff:0, yOff:41, width:7867, ascent:1407, descent:756, glyphs:15}
    --- FAIL: TestIndexPositionLines/bidi_rtl_opposite_alignment (0.00s)
        index_test.go:527: line 0: expected:
            widget.lineInfo{xOff:3107, yOff:22, width:7133, ascent:1407, descent:756, glyphs:15}, got:
            widget.lineInfo{xOff:3126, yOff:22, width:7114, ascent:1407, descent:756, glyphs:15}
        index_test.go:527: line 1: expected:
            widget.lineInfo{xOff:2354, yOff:41, width:7886, ascent:1407, descent:756, glyphs:15}, got:
            widget.lineInfo{xOff:2373, yOff:41, width:7867, ascent:1407, descent:756, glyphs:15}
--- FAIL: TestGlyphIterator (0.01s)
    --- FAIL: TestGlyphIterator/whitespace (0.00s)
        label_test.go:158: expected bounds image.Rectangle{Min:image.Point{X:0, Y:0}, Max:image.Point{X:14, Y:20}}, got image.Rectangle{Min:image.Point{X:0, Y:0}, Max:image.Point{X:16, Y:16}}
FAIL
FAIL	gioui.org/widget	0.120s
ok  	gioui.org/widget/material	0.002s
FAIL

Off the top of my head, I'm not sure why we should be getting different glyph positions on this API. Am I forgetting an important change in our horizontal text layout?

whereswaldon avatar Jan 15 '24 14:01 whereswaldon

Oh sorry, I only ran the tests in the text package. Perhaps the change comes from the new space handling (during line wrapping) introduced in https://github.com/go-text/typesetting/commit/9170faf75ca25acb3daf5dc797bf169c5257dd97 ?

benoitkugler avatar Jan 15 '24 18:01 benoitkugler

There is also https://github.com/go-text/typesetting/commit/4f7d5afc5c9b0bd0eb674aca4e30362ad4272370 which changes glyph offsets if you use a custom scale (font size).

benoitkugler avatar Jan 15 '24 18:01 benoitkugler

Ah, I'd forgotten about those changes. I'll need to look carefully at the tests to ensure that the values we're getting now are correct. Sorry that this isn't straightforward. Those tests are trying to enforce correct cursoring for bidi text, but that ends up being somewhat dependent upon how the shaper shapes the text in the test font. I had hoped that it would be pretty stable when I wrote the tests. Alas.

whereswaldon avatar Jan 15 '24 18:01 whereswaldon

Alright, thank you for the explanation !

As a side note, it would perhaps be useful to include a cursor API into go-text? I know pango had one and I suspect fyne would also benefit from it ? Of course this is not in the scope of this PR, but it coud maybe ensure that when we change the shaper, the "cursor values" are also properly changed, thus making easier for toolkits to write stable tests.

benoitkugler avatar Jan 15 '24 19:01 benoitkugler

In Gio, the text widgets currently derive cursor positions from the glyph data themselves, rather than relying upon the shaper to do it. Perhaps that is misguided, but the necessary info is present in the glyphs (as far as I can tell). I'm not certain whether it makes sense to expose that within typesetting, but I'm also not very familiar with the pango API.

whereswaldon avatar Jan 15 '24 19:01 whereswaldon

I've rebased on main and fixed some tests, but we still need https://github.com/go-text/typesetting/pull/154 to be merged for this to land. Thanks @benoitkugler for your patience and for the reminder to tackle this.

whereswaldon avatar Mar 29 '24 17:03 whereswaldon

Merged!

To git.sr.ht:~eliasnaur/gio
   1be34eec..1802761c  main -> main

whereswaldon avatar Mar 29 '24 17:03 whereswaldon