Ai
1 Star 0 Fork 1

w4xj/webview

forked from 归位/webview 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
main.go 3.54 KB
一键复制 编辑 原始数据 按行查看 历史
Serge A. Zaitsev 提交于 2018-01-22 17:34 +08:00 . gtk-webkit: implement webview_set_color
package main
import (
"log"
"net"
"net/http"
"strconv"
"strings"
"github.com/zserge/webview"
)
const (
windowWidth = 480
windowHeight = 320
)
var indexHTML = `
<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<button onclick="external.invoke('close')">Close</button>
<button onclick="external.invoke('fullscreen')">Fullscreen</button>
<button onclick="external.invoke('unfullscreen')">Unfullscreen</button>
<button onclick="external.invoke('open')">Open</button>
<button onclick="external.invoke('opendir')">Open directory</button>
<button onclick="external.invoke('save')">Save</button>
<button onclick="external.invoke('message')">Message</button>
<button onclick="external.invoke('info')">Info</button>
<button onclick="external.invoke('warning')">Warning</button>
<button onclick="external.invoke('error')">Error</button>
<button onclick="external.invoke('changeTitle:'+document.getElementById('new-title').value)">
Change title
</button>
<input id="new-title" type="text" />
<button onclick="external.invoke('changeColor:'+document.getElementById('new-color').value)">
Change color
</button>
<input id="new-color" value="#e91e63" type="color" />
</body>
</html>
`
func startServer() string {
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
log.Fatal(err)
}
go func() {
defer ln.Close()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(indexHTML))
})
log.Fatal(http.Serve(ln, nil))
}()
return "http://" + ln.Addr().String()
}
func handleRPC(w webview.WebView, data string) {
switch {
case data == "close":
w.Terminate()
case data == "fullscreen":
w.SetFullscreen(true)
case data == "unfullscreen":
w.SetFullscreen(false)
case data == "open":
log.Println("open", w.Dialog(webview.DialogTypeOpen, 0, "Open file", ""))
case data == "opendir":
log.Println("open", w.Dialog(webview.DialogTypeOpen, webview.DialogFlagDirectory, "Open directory", ""))
case data == "save":
log.Println("save", w.Dialog(webview.DialogTypeSave, 0, "Save file", ""))
case data == "message":
w.Dialog(webview.DialogTypeAlert, 0, "Hello", "Hello, world!")
case data == "info":
w.Dialog(webview.DialogTypeAlert, webview.DialogFlagInfo, "Hello", "Hello, info!")
case data == "warning":
w.Dialog(webview.DialogTypeAlert, webview.DialogFlagWarning, "Hello", "Hello, warning!")
case data == "error":
w.Dialog(webview.DialogTypeAlert, webview.DialogFlagError, "Hello", "Hello, error!")
case strings.HasPrefix(data, "changeTitle:"):
w.SetTitle(strings.TrimPrefix(data, "changeTitle:"))
case strings.HasPrefix(data, "changeColor:"):
hex := strings.TrimPrefix(strings.TrimPrefix(data, "changeColor:"), "#")
num := len(hex) / 2
if !(num == 3 || num == 4) {
log.Println("Color must be RRGGBB or RRGGBBAA")
return
}
i, err := strconv.ParseUint(hex, 16, 64)
if err != nil {
log.Println(err)
return
}
if num == 3 {
r := uint8((i >> 16) & 0xFF)
g := uint8((i >> 8) & 0xFF)
b := uint8(i & 0xFF)
w.SetColor(r, g, b, 255)
return
}
if num == 4 {
r := uint8((i >> 24) & 0xFF)
g := uint8((i >> 16) & 0xFF)
b := uint8((i >> 8) & 0xFF)
a := uint8(i & 0xFF)
w.SetColor(r, g, b, a)
return
}
}
}
func main() {
url := startServer()
w := webview.New(webview.Settings{
Width: windowWidth,
Height: windowHeight,
Title: "Simple window demo",
Resizable: true,
URL: url,
ExternalInvokeCallback: handleRPC,
})
w.SetColor(255, 255, 255, 255)
defer w.Exit()
w.Run()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/w4xj/webview.git
git@gitee.com:w4xj/webview.git
w4xj
webview
webview
9c1b0a888aa4

搜索帮助