更新代码
This commit is contained in:
1 parent
eda7e8bc96
commit
6ff632e0b0
19 files changed
+2033
-197
No files matched your search
@@ -13,6 +13,9 @@ import (
|
||||
// 屏幕上一直显示当前框选区域的红框,让使用者随时知道自己在看哪一块;
|
||||
// 这个框被 SetWindowDisplayAffinity 排除在截屏与录屏之外,
|
||||
// 所以模型看到的画面、录屏软件录到的画面里都不会有它。
|
||||
//
|
||||
// 红框本身是可以交互的:拖动边框可以改范围,右上角有「确定 / 取消」两个
|
||||
// 按钮(平时全透明,鼠标移上去才显示),用来直接修改监视区域。
|
||||
type regionFrame struct {
|
||||
frame *win32.Frame
|
||||
|
||||
@@ -20,6 +23,9 @@ type regionFrame struct {
|
||||
last capture.Region
|
||||
hasLast bool
|
||||
suspended bool
|
||||
|
||||
onApply func(capture.Region)
|
||||
onCancel func()
|
||||
}
|
||||
|
||||
// newRegionFrame 创建取景框。创建失败时返回 nil,调用方自行决定是否降级。
|
||||
@@ -29,7 +35,25 @@ func newRegionFrame() *regionFrame {
|
||||
slog.Warn("取景框创建失败,屏幕将不再显示选区边框", "err", err)
|
||||
return nil
|
||||
}
|
||||
return ®ionFrame{frame: f}
|
||||
r := ®ionFrame{frame: f}
|
||||
f.SetCallbacks(r.commit, r.abort)
|
||||
return r
|
||||
}
|
||||
|
||||
// commit 是取景框上点「确定」的回调:把调整后的区域交给上层。
|
||||
func (f *regionFrame) commit(r win32.Rect) {
|
||||
if f == nil || f.onApply == nil {
|
||||
return
|
||||
}
|
||||
f.onApply(capture.Region{X: r.Left, Y: r.Top, W: r.Width(), H: r.Height()})
|
||||
}
|
||||
|
||||
// abort 是取景框上点「取消」的回调:红框已经自己隐藏了。
|
||||
func (f *regionFrame) abort() {
|
||||
if f == nil || f.onCancel == nil {
|
||||
return
|
||||
}
|
||||
f.onCancel()
|
||||
}
|
||||
|
||||
// apply 把取景框移到指定区域;区域无效时隐藏。
|
||||
@@ -85,6 +109,30 @@ func (f *regionFrame) resume(r capture.Region) {
|
||||
f.apply(r)
|
||||
}
|
||||
|
||||
// show 重新显示取景框(会清掉"用户点过取消"的状态)。
|
||||
func (f *regionFrame) show() {
|
||||
if f == nil {
|
||||
return
|
||||
}
|
||||
f.frame.Show()
|
||||
}
|
||||
|
||||
// toggle 切换取景框的显示状态,返回切换后是否可见。
|
||||
func (f *regionFrame) toggle() bool {
|
||||
if f == nil {
|
||||
return false
|
||||
}
|
||||
return f.frame.ToggleVisible()
|
||||
}
|
||||
|
||||
// visible 返回取景框当前是否显示。
|
||||
func (f *regionFrame) visible() bool {
|
||||
if f == nil {
|
||||
return false
|
||||
}
|
||||
return f.frame.Visible()
|
||||
}
|
||||
|
||||
// close 销毁取景框窗口。
|
||||
func (f *regionFrame) close() {
|
||||
if f == nil {
|
||||
|
||||
Reference in new issue
Block a user