This commit is contained in:
Dongdong Zhou 2018-02-12 10:17:55 +00:00
parent b58c89035b
commit b2807f20e5
3 changed files with 50 additions and 17 deletions

View File

@ -23,6 +23,7 @@ type Editor struct {
buffers map[string]*Buffer
buffersRWMutex sync.RWMutex
activeWin *Window
winIndex int
wins map[int]*Window
winsRWMutext sync.RWMutex
@ -73,7 +74,16 @@ func NewEditor() (*Editor, error) {
}
buffer.applyUpdate(u)
case *xi.ScrollTo:
// e.view.scrollto(u.Col, u.Line)
if e.activeWin == nil {
return
}
if e.activeWin.buffer == nil {
return
}
if e.activeWin.buffer.xiView.ID != u.ViewID {
return
}
e.activeWin.scrollto(u.Col, u.Line)
}
})
e.xi.HandleUpdate = e.handleUpdate

View File

@ -114,23 +114,31 @@ func NewView(e *Editor) *View {
}
func (v *View) scrollto(col, row int) {
if v.cursor == nil {
v.cursor = v.scence.AddRect2(
0,
0,
// if v.cursor == nil {
// v.cursor = v.scence.AddRect2(
// 0,
// 0,
// 1,
// v.font.lineHeight,
// gui.NewQPen(),
// gui.NewQBrush3(gui.NewQColor3(0, 0, 0, 255), core.Qt__SolidPattern))
// }
// if row >= len(v.lines) {
// row = len(v.lines) - 1
// }
// v.cursor.SetPos2(
// v.font.fontMetrics.Width(v.lines[row].text[:col])-0.5,
// )
// v.view.EnsureVisible3(v.cursor, 20, 20)
v.view.EnsureVisible2(
v.font.fontMetrics.Width(v.lines[row].text[:col])-0.5,
float64(row)*v.font.lineHeight,
1,
v.font.lineHeight,
gui.NewQPen(),
gui.NewQBrush3(gui.NewQColor3(0, 0, 0, 255), core.Qt__SolidPattern))
}
if row >= len(v.lines) {
row = len(v.lines) - 1
}
v.cursor.SetPos2(
v.font.fontMetrics.Width(v.lines[row].text[:col])-0.5,
float64(row)*v.font.lineHeight)
v.view.EnsureVisible3(v.cursor, 20, 20)
20,
20,
)
}
func (v *View) height() int {

View File

@ -148,6 +148,7 @@ func (f *Frame) setFocus() {
return
}
f.win.view.SetFocus2()
f.editor.activeWin = f.win
}
func (f *Frame) close() *Frame {
@ -237,6 +238,7 @@ func NewWindow(editor *Editor, frame *Frame) *Window {
editor.winsRWMutext.Unlock()
w.view.ConnectKeyPressEvent(func(event *gui.QKeyEvent) {
editor.activeWin = w
if w.buffer == nil {
return
}
@ -293,6 +295,7 @@ func NewWindow(editor *Editor, frame *Frame) *Window {
w.buffer.xiView.Insert(event.Text())
})
w.view.ConnectScrollContentsBy(func(dx, dy int) {
editor.activeWin = w
w.view.ScrollContentsByDefault(dx, dy)
})
w.view.SetAlignment(core.Qt__AlignLeft | core.Qt__AlignTop)
@ -305,3 +308,15 @@ func (w *Window) loadBuffer(buffer *Buffer) {
w.buffer = buffer
w.view.SetScene(buffer.scence)
}
func (w *Window) scrollto(col, row int) {
b := w.buffer
w.view.EnsureVisible2(
b.font.fontMetrics.Width(b.lines[row].text[:col])-0.5,
float64(row)*b.font.lineHeight,
1,
b.font.lineHeight,
20,
20,
)
}