detached 5041353

scale_probe.go RawHistoryFolder

1package cef
2
3import (
4	"math"
5	"strings"
6)
7
8const scaleProbeRoundFactor = 1_000_000
9
10type cefScaleProbeMetrics struct {
11	SurfaceWidth         int32
12	SurfaceHeight        int32
13	SurfaceScale         float64
14	PageZoomCompensation float64
15	UserZoom             float64
16	InternalCEFFactor    float64
17}
18
19func shouldRunCEFScaleProbe(frameURL string, httpStatusCode int32) bool {
20	url := strings.ToLower(strings.TrimSpace(frameURL))
21	if url == "" || url == "about:blank" {
22		return false
23	}
24	if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
25		return httpStatusCode >= 200 && httpStatusCode < 400
26	}
27	return httpStatusCode >= 0
28}
29
30func cefScaleProbeSnapshot(wv *WebView) cefScaleProbeMetrics {
31	m := cefScaleProbeMetrics{
32		SurfaceWidth:         1,
33		SurfaceHeight:        1,
34		SurfaceScale:         1,
35		PageZoomCompensation: 1,
36		UserZoom:             1,
37		InternalCEFFactor:    1,
38	}
39	if wv == nil {
40		return m
41	}
42	m.UserZoom = normalizeScale(wv.GetZoomLevel())
43	m.PageZoomCompensation = wv.pageZoomCompensation()
44	m.SurfaceScale = normalizeScale(wv.viewBridgeScale())
45	m.InternalCEFFactor = m.UserZoom * m.PageZoomCompensation
46	if wv.viewBridge != nil {
47		m.SurfaceWidth, m.SurfaceHeight = wv.viewBridge.Size()
48	}
49	return m
50}
51
52func (m cefScaleProbeMetrics) logFields() map[string]any {
53	return map[string]any{
54		"surface_width":          m.SurfaceWidth,
55		"surface_height":         m.SurfaceHeight,
56		"surface_scale":          roundedScale(m.SurfaceScale),
57		"page_zoom_compensation": roundedScale(m.PageZoomCompensation),
58		"user_zoom":              roundedScale(m.UserZoom),
59		"internal_cef_factor":    roundedScale(m.InternalCEFFactor),
60	}
61}
62
63func roundedScale(v float64) float64 {
64	if math.IsNaN(v) || math.IsInf(v, 0) {
65		return 1
66	}
67	return math.Round(v*scaleProbeRoundFactor) / scaleProbeRoundFactor
68}
69
70const cefScaleProbeScript = `(function(){
71  try {
72    var vv = window.visualViewport;
73    var probe = document.createElement('div');
74    probe.style.cssText = 'position:fixed;left:0;top:0;width:100px;height:100px;visibility:hidden;pointer-events:none;z-index:-1';
75    document.documentElement.appendChild(probe);
76    var rect = probe.getBoundingClientRect();
77    probe.remove();
78    var data = {
79      dpr: window.devicePixelRatio,
80      inner: [window.innerWidth, window.innerHeight],
81      outer: [window.outerWidth, window.outerHeight],
82      client: [document.documentElement.clientWidth, document.documentElement.clientHeight],
83      screen: [window.screen.width, window.screen.height],
84      avail: [window.screen.availWidth, window.screen.availHeight],
85      visualViewport: vv ? {
86        width: vv.width,
87        height: vv.height,
88        scale: vv.scale,
89        offsetLeft: vv.offsetLeft,
90        offsetTop: vv.offsetTop,
91        pageLeft: vv.pageLeft,
92        pageTop: vv.pageTop
93      } : null,
94      css100Rect: {width: rect.width, height: rect.height, left: rect.left, top: rect.top},
95      scroll: [window.scrollX, window.scrollY]
96    };
97    console.info('[SCALE-PROBE] ' + JSON.stringify(data));
98  } catch (e) {
99    console.warn('[SCALE-PROBE] error ' + (e && e.message ? e.message : String(e)));
100  }
101})();`

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close