Skip to content

Commit 213b64b

Browse files
committed
Improvements to page turning
Reverted to an earlier page turning strategy, but with a new optimization. Turning a page, a single time, should feel effortless and smooth. Most of all it should not distract from reading. Before sometimes there was grinding (the feeling that the computer was struggling). On another attempt it felt jerky or uneven. With the new setup, the page can always be displayed and then any other work follows. Added refreshSpreads command Reduced time wasted in printLoaded() Ensure never trying to render a partially loaded spread Added trace routines to better time function execution
1 parent e9432d7 commit 213b64b

File tree

6 files changed

+49
-24
lines changed

6 files changed

+49
-24
lines changed

cmd/cbxv/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,37 @@ import (
1313

1414
const (
1515
NAME = "cbxv"
16-
VERSION = "0.4.9"
16+
VERSION = "0.5.0"
1717
)
1818

1919
// Update listens for messages on the message channel and
2020
// handles messages by invoking messageHandlers
2121
func update(m *model.Model, u *ui.UI, msgChan chan util.Message, msgHandlers *MessageHandlerList) {
2222
for msg := range msgChan {
2323
msgHandler := msgHandlers.List[msg.TypeName]
24+
25+
// If spreads are nil, the list below are the only commands
26+
// that are allowed to run
2427
if m.Spreads == nil &&
2528
(msg.TypeName != "quit" &&
2629
msg.TypeName != "openFile" &&
2730
msg.TypeName != "openFileResult" &&
2831
msg.TypeName != "toggleFullscreen") {
2932
continue
3033
}
34+
35+
// We have a handler, schedule it to run on event dispatch thread
3136
if msgHandler != nil {
3237
u.RunFunc(func() {
3338
msgHandler(msg.Data)
34-
u.Render(m)
3539
})
3640
}
41+
42+
// Render after every command, except refreshSpreads
43+
if msg.TypeName != "refreshSpreads" {
44+
u.Render(m)
45+
}
46+
3747
runtime.GC()
3848

3949
// Handling the quit message above

cmd/cbxv/messagehandlers.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
3232
if m.SpreadIndex < len(m.Spreads)-1 {
3333
m.SpreadIndex++
3434
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
35-
if !m.SpreadLoaded(m.SpreadIndex) {
36-
m.RefreshSpreads()
37-
}
3835
} else {
3936
handlers.List["nextFile"]("")
4037
}
@@ -44,9 +41,6 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
4441
if m.SpreadIndex > 0 {
4542
m.SpreadIndex--
4643
m.PageIndex = m.Spreads[m.SpreadIndex].VersoPage()
47-
if !m.SpreadLoaded(m.SpreadIndex) {
48-
m.RefreshSpreads()
49-
}
5044
} else {
5145
handlers.List["previousFile"]("")
5246
}
@@ -292,7 +286,13 @@ func NewMessageHandlers(m *model.Model, u *ui.UI) *MessageHandlerList {
292286
}
293287

294288
handlers.List["render"] = func(data string) {
295-
//noop render always gets called after cmd
289+
// noop render always gets called after cmd
290+
}
291+
292+
// Unless it's refreshSpreads, this is the one cmd that
293+
// after running we don't call render
294+
handlers.List["refreshSpreads"] = func(data string) {
295+
m.RefreshSpreads()
296296
}
297297

298298
handlers.List["quit"] = func(data string) {

internal/model/model.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -678,18 +678,20 @@ func (m *Model) checkSpreads() {
678678

679679
// dbg
680680
func (m *Model) printLoaded() {
681-
var buf string
682-
for i := range m.Pages {
683-
if !m.Pages[i].Loaded {
684-
buf += "0"
685-
} else {
686-
if i == m.PageIndex {
687-
buf += "_"
681+
if util.DEBUG == true {
682+
var buf string
683+
for i := range m.Pages {
684+
if !m.Pages[i].Loaded {
685+
buf += "0"
688686
} else {
689-
buf += "1"
687+
if i == m.PageIndex {
688+
buf += "_"
689+
} else {
690+
buf += "1"
691+
}
690692
}
691693
}
694+
util.Log("%s\n", buf)
692695
}
693-
util.Log("%s\n", buf)
694696
}
695697

internal/ui/commands.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ func NewCommands(m *model.Model, u *UI) *CommandList {
4444
[]uint{gdk.KEY_d, gdk.KEY_Right, gdk.KEY_l},
4545
func(args ...any) {
4646
u.SendMessage(util.Message{TypeName: "rightPage"})
47+
u.SendMessage(util.Message{TypeName: "refreshSpreads"})
4748
}))
4849

4950
AddCommand(cmds, NewCommand("leftPage", "Left Page",
5051
[]uint{gdk.KEY_a, gdk.KEY_Left, gdk.KEY_h},
5152
func(args ...any) {
5253
u.SendMessage(util.Message{TypeName: "leftPage"})
54+
u.SendMessage(util.Message{TypeName: "refreshSpreads"})
5355
}))
5456

5557
AddCommand(cmds, NewCommand("firstPage", "First Page",

internal/ui/pageview.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,14 @@ func (v *PageView) initRenderer(m *model.Model) {
131131
}
132132

133133
spread := m.Spreads[m.SpreadIndex]
134-
if m.LayoutMode == model.TWO_PAGE {
135-
s := newTwoPageSpread(m, canvas, cr, spread)
136-
renderTwoPageSpread(s)
137-
} else if m.LayoutMode == model.ONE_PAGE {
138-
s := newOnePageSpread(canvas, cr, spread.Pages[0])
139-
renderOnePageSpread(s)
134+
if m.SpreadLoaded(m.SpreadIndex) {
135+
if m.LayoutMode == model.TWO_PAGE {
136+
s := newTwoPageSpread(m, canvas, cr, spread)
137+
renderTwoPageSpread(s)
138+
} else if m.LayoutMode == model.ONE_PAGE {
139+
s := newOnePageSpread(canvas, cr, spread.Pages[0])
140+
renderOnePageSpread(s)
141+
}
140142
}
141143
w := v.hud.GetAllocatedWidth() - 40
142144
v.hdrControl.container.SetSizeRequest(w, 8)

internal/util/util.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,3 +682,12 @@ func Log(format string, a ...any) {
682682
}
683683
}
684684

685+
func TrcStart (s string) (string, time.Time) {
686+
return s, time.Now()
687+
}
688+
689+
func TrcEnd (s string, startTime time.Time) {
690+
endTime := time.Now()
691+
fmt.Printf("Name:%s, Time:%d\n", s, endTime.Sub(startTime).Milliseconds())
692+
}
693+

0 commit comments

Comments
 (0)