Giter Club home page Giter Club logo

cogentcore / core Goto Github PK

View Code? Open in Web Editor NEW
1.3K 34.0 71.0 101.37 MB

A free and open source framework for building powerful, fast, and elegant 2D and 3D apps that run on macOS, Windows, Linux, iOS, Android, and the Web with a single pure Go codebase, allowing you to Code Once, Run Everywhere.

Home Page: http://cogentcore.org/core

License: BSD 3-Clause "New" or "Revised" License

Go 98.23% JavaScript 0.49% CSS 0.07% HTML 0.05% Java 0.17% C 0.15% Objective-C 0.32% Assembly 0.02% GLSL 0.36% Yacc 0.05% Makefile 0.04% HLSL 0.03%
go golang gui graphics vulkan android cross-platform ios linux macos web windows apps toolkit

core's Introduction

Go Report Card pkg.go.dev docs GitHub Actions Workflow Status Test Coverage Version

Cogent Core is a free and open source framework for building powerful, fast, and elegant 2D and 3D apps that run on macOS, Windows, Linux, iOS, Android, and the Web with a single pure Go codebase, allowing you to Code Once, Run Everywhere. See the Cogent Core Website for more information, including extensive documentation and interactive running examples. The website itself is a Cogent Core app running on the web using wasm.

NOTE: Cogent Core is currently undergoing a period of significant development to make it easier to make powerful, fast, and elegant apps. As such, some of the information in this repository and on the Cogent Core website may be incorrect. Furthermore, there are ongoing breaking changes, so starting new apps with this framework is not recommended at this time; if you do, please be ready to adjust to any breaking changes. We are planning to make a v1 stable release in early June (see the v1 milestone).

core's People

Contributors

buck54321 avatar daulatojha17 avatar ddkwork avatar dependabot[bot] avatar eric-s-raymond avatar etuleu avatar flopp avatar garymm avatar ianbruene avatar juneezee avatar justbuchanan avatar khalil-farashiani avatar kkoreilly avatar mewmew avatar pmezard avatar rcoreilly avatar rdwilliamson avatar rohrlich avatar shazow avatar siboehm avatar techuuu avatar testwill avatar visualfc avatar xyproto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

core's Issues

Requires Windows 8

By using SetProcessDpiAwareness it requires that windows applications build using this library will only run on Windows 8.1 and later. On Windows 7 it causes a panic.
Is this intentional?
If so, it seems unfortunate, as Windows 7 is still the most widely used Windows version.

Not clearly dealing with virtual vs. physical screens / desktops etc.

Not really sure how this works on different platforms etc. I only ever use one screen or the other and it works fine for that (modulo issue #25)

  • on mac, dragging a window to a new screen is not registered properly (wrong DPI used) and window placement continues to show up on original screen.. window placement code also restricts placement based on screen size.

  • haven't even started to test on other platforms -- just been using virtual machine.

Dynamic screen changes not being registered

If you plug into an external monitor, etc, it doesn't know about that and doesn't re-collect screen data and reconfigure everything accordingly. Shouldn't be that hard within gi itself but oswin driver part might be a bit more complicated.

Crash again with cursor move in GoGi Editor window

After playing with the sliders and scrollbars I went back to GoGi Editor window and sequentially selected slider1, slider2, scrollbar1, etc. in the WinVp tree. At some point a cursor move in the edit window (on right) caused a crash. Terminal output below starts with playing with the sliders, etc. in the widgets window.

...
Received slider signal: SliderReleased from slider: slider1 with data: 0.5
Received slider signal: SliderPressed from slider: slider2 with data: 0.59404325
Received slider signal: SliderReleased from slider: slider2 with data: 0.0032639739
Received slider signal: SliderValueChanged from slider: slider2 with data: 0.0032639739
Received scrollbar signal: SliderPressed from scrollbar: scrollbar2 with data: 0.5120658
Received scrollbar signal: SliderReleased from scrollbar: scrollbar2 with data: 0.4564935
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar2 with data: 0.4564935
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x42dfbad]

goroutine 51 [running]:
image.(*RGBA).Bounds(...)
/usr/local/Cellar/go/1.10.3/libexec/src/image/image.go:72
github.com/goki/gi.(*Viewport2D).ComputeBBox2D(0xc4375aa000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffa8)
/Users/thazy/go/src/github.com/goki/gi/viewport2d.go:316 +0x2d
github.com/goki/gi.(*WidgetBase).Move2DBase(0xc4375aa000, 0x0, 0xffffffffffffffa8, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/widget.go:370 +0xf1
github.com/goki/gi.(*Viewport2D).Move2D(0xc4375aa000, 0x0, 0xffffffffffffffa8, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/viewport2d.go:390 +0x6d
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc42e64bb00, 0x0, 0xffffffffffffffa8)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:558 +0x152
github.com/goki/gi.(*WidgetBase).Move2D(0xc42e64bb00, 0x0, 0xffffffffffffffa8, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/widget.go:375 +0x8f
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc42de5aa08, 0x0, 0xffffffffffffffa8)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:558 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc42de5aa08, 0x0, 0xffffffffffffffa8, 0x33e, 0x11a, 0x9de, 0x781)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1619 +0xd3
github.com/goki/gi.(*PartsWidgetBase).Move2D(0xc42de5a600, 0x0, 0xffffffffffffffa8, 0x33e, 0x11a, 0x9de, 0x781)
/Users/thazy/go/src/github.com/goki/gi/widget.go:755 +0xed
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc429302500, 0x0, 0xffffffffffffffa8)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:558 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc429302500, 0x0, 0x0, 0x32e, 0xdf, 0xa19, 0x791)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1619 +0xd3
github.com/goki/gi.(*WidgetBase).Move2DTree(0xc429302500)
/Users/thazy/go/src/github.com/goki/gi/widget.go:391 +0x185
github.com/goki/gi.(*Layout).SetScroll.func1(0x4629220, 0xc429302500, 0x462af20, 0xc42e804000, 0x0, 0x44c64c0, 0xc4289ea3c8)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1097 +0x8c
github.com/goki/ki.(*Signal).Emit(0xc42e805af8, 0x462af20, 0xc42e804000, 0x0, 0x44c64c0, 0xc4289ea3c8)
/Users/thazy/go/src/github.com/goki/ki/signal.go:157 +0x1b6
github.com/goki/gi.(*SliderBase).SetValueAction(0xc42e804000, 0x42b00000)
/Users/thazy/go/src/github.com/goki/gi/sliders.go:269 +0xd6
github.com/goki/gi.(*Layout).ScrollDelta(0xc429302500, 0x0, 0xffffffffffffffff, 0x462a0a0)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1167 +0xcd
github.com/goki/gi.(*Layout).LayoutScrollEvents.func1(0x4629220, 0xc429302500, 0x462de40, 0xc420412d80, 0x3, 0x454ea20, 0xc4202e0000)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1488 +0x9b
github.com/goki/gi.(*WinEventRecv).Call(0xc430ee5dd0, 0x462de40, 0xc420412d80, 0x3, 0x454ea20, 0xc4202e0000)
/Users/thazy/go/src/github.com/goki/gi/window.go:1081 +0x6d
github.com/goki/gi.(*Window).SendEventSignal(0xc420412d80, 0x4622da0, 0xc4202e0000, 0x2600701)
/Users/thazy/go/src/github.com/goki/gi/window.go:1195 +0xc65
github.com/goki/gi.(*Window).EventLoop(0xc420412d80)
/Users/thazy/go/src/github.com/goki/gi/window.go:960 +0xd5a
created by github.com/goki/gi.(*Window).GoStartEventLoop
/Users/thazy/go/src/github.com/goki/gi/window.go:438 +0x3f
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$

TextField loses focus popup dismissed

Thought it was specific to completer but the problem is there with popup edit menu. After the popup is dismissed the field no longer has focus.

Also the highlight on selected text disappears when you bring up the edit menu so you can't see what you are cutting, copying, etc.

Add option to prevent all rendering of iconified windows?

code can currently check win.OSWin.IsIconified() and not update display -- probably that is good enough but might be generally useful to have a default impl that just bails on updating, then does a full re-render when window is de-iconified. Just need to test for various potential crash-points -- may be not worth it if too many.

Different window display behavior depending on application focus

On macbook pro "all desktops" view some windows not displayed if focus is not on goki (widgets.go) app, while are displayed if focus is in goki:

Focus not in goki:
img_0149

Focus in goki:
img_0147

COMMENT: FWIW, the difference seems to be user-level windows vs. admin-level windows? But I don't believe I have seen than differential display behavior in other applications.

Cannot re-enter a text editing field.

In the edit1 text edit field I entered some text then looked at edit1 node of the WinVp tree to watch the text field updating. However, when I went back to the widgets window I couldn't get the focus to re-enter that field to continue entering text. FYI, I could enter text in the actual editor's text field, then exit that field by clicking in a different field, then click 'Update' to update the text in the widgets window edit1 text field. FYI, clicking Update before exiting the editor text field still clears the new entries (instead of "taking" and then updating the widgets window.

ALSO, using the <- or -> arrows sometimes made the cursor jump to the next edit field (integers; named 'spin' in the WinVp tree).

img_0159
g

Grid layout doesn't support spans

Every cell is a cell -- can't have an element that spans across multiple cells. HTML has such a capability, but specifying and managing it can get complicated quick, especially supporting vertical and horizontal spans etc.

A simple horizontal multi-cell would be relatively simple and is probably good enough for the vast majority of cases?

Rendering in different colors leaves a trace of previous color -- same with fonts

for reasons that I've been unable to fix / fathom, rendering one rectangular box over another, even in draw.Src mode in both cases, with theoretically the exact same coordinates, leaves a tiny trace outline of previous color. You can see this when tabbing in menus, or moving selection around in TreeView. I tried a lot of things to get rid of it, without luck.

Also seeing it when text renders over itself. Seems to be some kind of penumbra effect during anti-aliasing that is dependent on the surround colors..

One drastic soln would be to re-render entire display every time.

But overall I've seen it as a kind of a "feature" in giving you a very subtle breadcrumb trace of where you've been..

focus not leaving text field

If I click in text field (also spin text field) and then click on combo or slider, etc. and then type a character it goes into the previously focused text field. I suppose you could have designed it this way?

When I then do Command-Q to quit the Widgets demo a 'q' appears in text field and the app doesn't close.

SVG Path enhancements: re-generate, re-parse

generate string from compiled path data, and parse-on-demand of edited string value.

Probably want to have these avail as buttons in StructView interface, using method ValueView code #5

Add Undo package using general-purpose diff records

  • undo sub-package within gi
  • use diff package (prob this: https://github.com/sergi/go-diff) on top of json outputs, as in emergent diffmgr
    • map of diff records for each top-level entity -- can be many of these in parallel (e.g., textfield vs. ki tree etc)
    • records themselves are sequential slices of diff records and commands, with same logic as emergent
    • diffing happens in separate routine..

Cursor-move crash

In window shown, just moving cursor caused crash (terminal record follows; note git pulls and go build):

img_0158

NOTE: this record also spans when slider1 button got stuck (previous issue report).

hazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi$ git pull
remote: Counting objects: 33, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 33 (delta 28), reused 31 (delta 26), pack-reused 0
Unpacking objects: 100% (33/33), done.
From https://github.com/goki/gi
f8f1f5d..f4b4d0a master -> origin/master
Updating f8f1f5d..f4b4d0a
Fast-forward
README.md | 12 +++++--
dialogs.go | 45 ++++++++------------------
font.go | 13 +++-----
giv/argview.go | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
giv/colorview.go | 7 +---
giv/dialogs.go | 104 ++++++++++++++++++++++++++++++++++++++---------------------
giv/filevalueview.go | 72 +++++++++++++++++++++++++++++++++++++++++
giv/fileview.go | 11 ++-----
giv/fontview.go | 61 +++++++++++++++++++++--------------
giv/iconview.go | 71 ++++++++++++++++++++++++----------------
giv/mapview.go | 69 ++++++++++++++++++++-------------------
giv/methview.go | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
giv/prefsview.go | 58 ++++++++++++++-------------------
giv/sliceview.go | 59 ++++++++++++++++++----------------
giv/structview.go | 30 ++++++++---------
giv/tableview.go | 75 +++++++++++++++++++++---------------------
giv/valueview.go | 368 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------
prefs.go | 80 ++++++++++++++++++++++++++-------------------
textfield.go | 101 +++++++++++++++++++++++++--------------------------------
widget.go | 14 ++++++--
20 files changed, 1053 insertions(+), 554 deletions(-)
create mode 100644 giv/argview.go
create mode 100644 giv/filevalueview.go
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi$ cd ../ki
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/ki$ git pull
Already up to date.
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/ki$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/ki$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/ki$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/ki$ cd ../gi
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi$ cd examples/
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples$ cd widgets/
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$ ./widgets
Received button signal: ButtonPressed from button: button1
Received button signal: ButtonReleased from button: button1
Received button signal: ButtonClicked from button: button1
Doing final Quit cleanup here..
Doing final Close cleanup here..
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$ go build
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$ ./widgets
Received button signal: ButtonPressed from button: button1
Received button signal: ButtonReleased from button: button1
Received button signal: ButtonClicked from button: button1
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.5
Received slider signal: SliderPressed from slider: slider1 with data: 0.5
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.6
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.7
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.8
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.90000004
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.8
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.7
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.6
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.5
Received slider signal: SliderReleased from slider: slider1 with data: 0.5
Received slider signal: SliderPressed from slider: slider2 with data: 0.5777234
Received slider signal: SliderReleased from slider: slider2 with data: 0.49612403
Received slider signal: SliderValueChanged from slider: slider2 with data: 0.49612403
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.26797882
Received scrollbar signal: SliderPressed from scrollbar: scrollbar1 with data: 0.26797882
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.26916382
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.27034885
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.27153385
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.27271885
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.27390388
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.27508888
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.27627388
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.2774589
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.2798289
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.28101394
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.288124
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.290494
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.29404902
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.29760405
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.29878905
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.30234408
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3035291
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.30708414
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.30945414
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.31300917
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3141942
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3165642
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.31774923
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.32011923
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.32130426
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.32367426
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3260443
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3272293
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.32959932
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.33196935
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.33315435
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.33433935
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.33670938
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3390794
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3414494
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34381944
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34737447
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34974447
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35448453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35566953
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36040956
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3615946
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36514962
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36751962
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.37107465
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.37344468
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3758147
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3781847
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.38055474
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.38173974
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.38529477
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3876648
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3900348
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39121982
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39358982
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39477485
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39595985
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39714485
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39595985
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39477485
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39358982
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.39240482
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3900348
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3876648
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.38292477
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.38173974
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3781847
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3769997
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.37344468
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36988965
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36633462
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36514962
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3627796
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3615946
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36040956
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35922456
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35685453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35566953
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35448453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3521145
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34974447
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34618944
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34381944
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3426344
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34381944
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34618944
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34737447
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34855947
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34974447
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3509295
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3521145
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35448453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35685453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35803956
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3615946
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3627796
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3639646
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36514962
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3639646
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3627796
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3615946
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.36040956
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35922456
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35803956
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35685453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35566953
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.35448453
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3532995
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3521145
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3509295
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.34974447
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3509295
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3521145
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar1 with data: 0.3532995
Received scrollbar signal: SliderReleased from scrollbar: scrollbar1 with data: 0.3532995
Received scrollbar signal: SliderPressed from scrollbar: scrollbar2 with data: 0.5241468
Received scrollbar signal: SliderReleased from scrollbar: scrollbar2 with data: 0.4564935
Received scrollbar signal: SliderValueChanged from scrollbar: scrollbar2 with data: 0.4564935
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.5
Received slider signal: SliderPressed from slider: slider1 with data: 0.5
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.6
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.7
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.8
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.7
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.6
Received slider signal: SliderValueChanged from slider: slider1 with data: 0.5
Received slider signal: SliderReleased from slider: slider1 with data: 0.5
Received button signal: ButtonPressed from button: button2
Received button signal: ButtonReleased from button: button2
Received button signal: ButtonClicked from button: button2
Received button signal: ButtonPressed from button: button2
Received button signal: ButtonReleased from button: button2
Received button signal: ButtonClicked from button: button2
Received button signal: ButtonPressed from button: button2
Received button signal: ButtonReleased from button: button2
Received button signal: ButtonClicked from button: button2
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
Received slider signal: SliderValueChanged from slider: slider1 with data: -0
Received slider signal: SliderPressed from slider: slider1 with data: -0
Received slider signal: SliderReleased from slider: slider1 with data: -0
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x42dfbad]

goroutine 217 [running]:
image.(*RGBA).Bounds(...)
/usr/local/Cellar/go/1.10.3/libexec/src/image/image.go:72
github.com/goki/gi.(*Viewport2D).ComputeBBox2D(0xc440339000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff)
/Users/thazy/go/src/github.com/goki/gi/viewport2d.go:316 +0x2d
github.com/goki/gi.(*WidgetBase).Move2DBase(0xc440339000, 0x0, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/widget.go:370 +0xf1
github.com/goki/gi.(*Viewport2D).Move2D(0xc440339000, 0x0, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/viewport2d.go:390 +0x6d
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc439b88480, 0x0, 0xffffffffffffffff)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:558 +0x152
github.com/goki/gi.(*WidgetBase).Move2D(0xc439b88480, 0x0, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/widget.go:375 +0x8f
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc442a43088, 0x0, 0xffffffffffffffff)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:558 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc442a43088, 0x0, 0xffffffffffffffff, 0x41d, 0x11a, 0xcc5, 0x781)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1619 +0xd3
github.com/goki/gi.(*PartsWidgetBase).Move2D(0xc442a42c80, 0x0, 0xffffffffffffffff, 0x41d, 0x11a, 0xcc5, 0x781)
/Users/thazy/go/src/github.com/goki/gi/widget.go:755 +0xed
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc429bce000, 0x0, 0xffffffffffffffff)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:558 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc429bce000, 0x0, 0x0, 0x40d, 0xdf, 0xd00, 0x791)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1619 +0xd3
github.com/goki/gi.(*WidgetBase).Move2DTree(0xc429bce000)
/Users/thazy/go/src/github.com/goki/gi/widget.go:391 +0x185
github.com/goki/gi.(*Layout).SetScroll.func1(0x4629220, 0xc429bce000, 0x462af20, 0xc439a26000, 0x0, 0x44c64c0, 0xc42e81e0c8)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1097 +0x8c
github.com/goki/ki.(*Signal).Emit(0xc439a27af8, 0x462af20, 0xc439a26000, 0x0, 0x44c64c0, 0xc42e81e0c8)
/Users/thazy/go/src/github.com/goki/ki/signal.go:157 +0x1b6
github.com/goki/gi.(*SliderBase).SetValueAction(0xc439a26000, 0x3f800000)
/Users/thazy/go/src/github.com/goki/gi/sliders.go:269 +0xd6
github.com/goki/gi.(*Layout).ScrollDelta(0xc429bce000, 0x0, 0x1, 0x462a0a0)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1167 +0xcd
github.com/goki/gi.(*Layout).LayoutScrollEvents.func1(0x4629220, 0xc429bce000, 0x462de40, 0xc42e973100, 0x3, 0x454ea20, 0xc449e1c040)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1488 +0x9b
github.com/goki/gi.(*WinEventRecv).Call(0xc45200bdd0, 0x462de40, 0xc42e973100, 0x3, 0x454ea20, 0xc449e1c040)
/Users/thazy/go/src/github.com/goki/gi/window.go:1081 +0x6d
github.com/goki/gi.(*Window).SendEventSignal(0xc42e973100, 0x4622da0, 0xc449e1c040, 0x2477aa01)
/Users/thazy/go/src/github.com/goki/gi/window.go:1195 +0xc65
github.com/goki/gi.(*Window).EventLoop(0xc42e973100)
/Users/thazy/go/src/github.com/goki/gi/window.go:960 +0xd5a
created by github.com/goki/gi.(*Window).GoStartEventLoop
/Users/thazy/go/src/github.com/goki/gi/window.go:438 +0x3f
thazy@econ1-190-172-dhcp ~/go/src/github.com/goki/gi/examples/widgets$

add detailed optional parameters struct

there are a bunch of parameters throughout code that could optionally be overridden -- but don't want to have the main prefs saving or overwriting those values. I guess just an option on Prefs to edit the "detailed prefs" or something and those are entirely separate. prefs loading can just look for that filename and load if it exists.. need option to reset too. And for main prefs, an option to reset to defaults. pretty much just want those method buttons I guess..

Add RadioButton widget

Just a checkbox with mutex logic (and different default styling) -- easiest to just enforce that mutex holds over all children of the same parent.

Multiple "sure you want to quit?" dialogs

When MacBook pro tried to go to sleep/auto shutdown goki prevented shutdown (good!), but it opened up many, many dialog windows as shown in the "all desktops" view:
img_0147
img_0148

Add some kind of text language translation facility.

Qt requires you to wrap all use of string literals in some magic cookie, in Go it would be something like: tr.Tr("Ok") ?

But might be simpler to just have Label directly take responsibility for translating everything it gets, with a "translate" property that gets set to true by default, but can be turned off? All fixed-content gui elements go through Label eventually so probably that makes sense, and is more automatic and clean.

is there any existing Go infrastructure that would be helpful for this?

impl can simply be a big map of maps or something like that. need to deal with asset issues for the translation database, etc #8

Add ProgressBar widget

should be very simple.. not sure what best style etc to use and whether there is a useful default here -- do some research.. most likely just same rendering as slider.

Windows platform: support for multiple screens is very complex

Can't remember the details and links are in the gi/oswin/driver/windriver files but seems like this api evolved a bit over the years and it isn't straightforward to just get a list of all the current screens and figure out which one a given window is on.

ValueView: support "dirty" / edited flag propagation

Both PrefsView and GoGiEditor would benefit from only prompting to save if some change was made. ValueView should easily support this and just need to have a good mechanism for propagating and collecting the result.

Add thumbwheel widgets

we use these in emergent for zooming, panning 3D display -- seem pretty useful there, but would be good to make sure they don't have same wrap-around and other bugs.

Choosing Value type for CSS style setting caused crash

In WinVP, adding new style setting (?), then changing type (fm string) to Value caused crash:

thazy@macbookpro ~/go/src/github.com/goki/gi/examples/widgets$ ./widgets
Received button signal: ButtonPressed from button: button2
Received button signal: ButtonReleased from button: button2
Received button signal: ButtonClicked from button: button2
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x42def9d]

goroutine 115 [running]:
image.(*RGBA).Bounds(...)
/usr/local/Cellar/go/1.10.3/libexec/src/image/image.go:72
github.com/goki/gi.(*Viewport2D).ComputeBBox2D(0xc4202e7000, 0x0, 0x0, 0x0, 0x0, 0xfffffffffffffc60, 0x0)
/Users/thazy/go/src/github.com/goki/gi/viewport2d.go:316 +0x2d
github.com/goki/gi.(*WidgetBase).Move2DBase(0xc4202e7000, 0xfffffffffffffc60, 0x0, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/widget.go:372 +0xf1
github.com/goki/gi.(*Viewport2D).Move2D(0xc4202e7000, 0xfffffffffffffc60, 0x0, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/viewport2d.go:390 +0x6d
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc42b9cc900, 0xfffffffffffffc60, 0x0)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:555 +0x152
github.com/goki/gi.(*WidgetBase).Move2D(0xc42b9cc900, 0xfffffffffffffc60, 0x0, 0x0, 0x0, 0x0, 0x0)
/Users/thazy/go/src/github.com/goki/gi/widget.go:377 +0x8f
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc42fafdd88, 0xfffffffffffffc60, 0x0)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:555 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc42fafdd88, 0xfffffffffffffc60, 0x0, 0x20, 0x211, 0x533, 0x25e)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1538 +0xd3
github.com/goki/gi.(*PartsWidgetBase).Move2D(0xc42fafd980, 0xfffffffffffffc60, 0x0, 0x20, 0x211, 0x533, 0x25e)
/Users/thazy/go/src/github.com/goki/gi/widget.go:749 +0xed
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc42e806408, 0xfffffffffffffc60, 0x0)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:555 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc42e806408, 0xfffffffffffffc60, 0x0, 0x20, 0x7d, 0x760, 0x539)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1538 +0xd3
github.com/goki/gi.(*PartsWidgetBase).Move2D(0xc42e806000, 0xfffffffffffffc60, 0x0, 0x20, 0x7d, 0x760, 0x539)
/Users/thazy/go/src/github.com/goki/gi/widget.go:749 +0xed
github.com/goki/gi.(*Node2DBase).Move2DChildren(0xc42b89c500, 0xfffffffffffffc60, 0x0)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:555 +0x152
github.com/goki/gi.(*Layout).Move2D(0xc42b89c500, 0x0, 0x0, 0x10, 0x6d, 0x770, 0x5f6)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1538 +0xd3
github.com/goki/gi.(*WidgetBase).Move2DTree(0xc42b89c500)
/Users/thazy/go/src/github.com/goki/gi/widget.go:393 +0x185
github.com/goki/gi.(*Layout).SetScroll.func1(0x461ad40, 0xc42b89c500, 0x461ca40, 0xc429000000, 0x0, 0x44bb8e0, 0xc42b92dd18)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1097 +0x8c
github.com/goki/ki.(*Signal).Emit(0xc429001af8, 0x461ca40, 0xc429000000, 0x0, 0x44bb8e0, 0xc42b92dd18)
/Users/thazy/go/src/github.com/goki/ki/signal.go:157 +0x1b6
github.com/goki/gi.(*SliderBase).SetValueAction(0xc429000000, 0x44680e00)
/Users/thazy/go/src/github.com/goki/gi/sliders.go:269 +0xd6
github.com/goki/gi.(*Layout).ScrollDelta(0xc42b89c500, 0xfffffffffffffffe, 0x1, 0x461bbc0)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1175 +0x84
github.com/goki/gi.(*Layout).LayoutScrollEvents.func1(0x461ad40, 0xc42b89c500, 0x461f960, 0xc4201ff600, 0x3, 0x4543440, 0xc42919ce40)
/Users/thazy/go/src/github.com/goki/gi/layout.go:1407 +0x9b
github.com/goki/gi.(*WinEventRecv).Call(0xc428f19dd0, 0x461f960, 0xc4201ff600, 0x3, 0x4543440, 0xc42919ce40)
/Users/thazy/go/src/github.com/goki/gi/window.go:1081 +0x6d
github.com/goki/gi.(*Window).SendEventSignal(0xc4201ff600, 0x4614b40, 0xc42919ce40, 0x1d50a501)
/Users/thazy/go/src/github.com/goki/gi/window.go:1195 +0xc65
github.com/goki/gi.(*Window).EventLoop(0xc4201ff600)
/Users/thazy/go/src/github.com/goki/gi/window.go:960 +0xd5a
created by github.com/goki/gi.(*Window).GoStartEventLoop
/Users/thazy/go/src/github.com/goki/gi/window.go:438 +0x3f
thazy@macbookpro ~/go/src/github.com/goki/gi/examples/widgets$

ValueView for bitflags

e.g., TypeDecoration in FontStyle. for simplicity, only support case where the type name is used as the bitflag container, even though the "const" values defined are iota ordinal ints defining bit positions -- just requires that the const int value has enough capacity to represent all its bits.

Representation is just a line of checkbox's -- very easy. All the code is in place in kit to get / set the bits by name.

Crashed while just hovering over README link (or very near) in the widget playpen window

thazy@macbookpro ~/go/src/github.com/goki/gi/examples/widgets$ ./widgets
Received button signal: ButtonPressed from button: button2
Received button signal: ButtonReleased from button: button2
Received button signal: ButtonClicked from button: button2
panic: runtime error: index out of range

goroutine 122 [running]:
github.com/goki/gi.(*SpanRender).FindWrapPosLR(0xc42d25da40, 0x44a86f00441aa000, 0x0)
/Users/thazy/go/src/github.com/goki/gi/text.go:395 +0x2cb
github.com/goki/gi.(*TextRender).LayoutStdLR(0xc429869840, 0xc429868f60, 0xc429868ed8, 0xc429868fe8, 0xc1ac0000441aa000, 0x0)
/Users/thazy/go/src/github.com/goki/gi/text.go:1327 +0x3d8
github.com/goki/gi.(*Label).Style2D(0xc429868c80)
/Users/thazy/go/src/github.com/goki/gi/label.go:173 +0x442
github.com/goki/gi.(*Node2DBase).Style2DTree.func1(0x461b820, 0xc429868c80, 0x1, 0x459aec0, 0xc429709400, 0x0)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:469 +0x51
github.com/goki/ki.(*Node).FuncDownMeFirst(0xc429868c80, 0x1, 0x459aec0, 0xc429709400, 0x45cf548, 0xc42d743500)
/Users/thazy/go/src/github.com/goki/ki/node.go:998 +0x6b
github.com/goki/ki.(*Node).FuncDownMeFirst(0xc429709400, 0x1, 0x459aec0, 0xc429709400, 0x45cf548, 0xc42d743501)
/Users/thazy/go/src/github.com/goki/ki/node.go:1007 +0x15c
github.com/goki/gi.(*Node2DBase).Style2DTree(0xc429709400)
/Users/thazy/go/src/github.com/goki/gi/node2d.go:464 +0x82
github.com/goki/gi.PopupTooltip(0xc42ebc49b0, 0x41, 0x46d, 0x1a9, 0xc42042aa80, 0x45afcf3, 0x5, 0x18)
/Users/thazy/go/src/github.com/goki/gi/widget.go:463 +0x55c
github.com/goki/gi.(*Label).LabelEvents.func1(0x461b820, 0xc42016b900, 0x461f960, 0xc420424000, 0x5, 0x45410a0, 0xc42dc2e1b0)
/Users/thazy/go/src/github.com/goki/gi/label.go:220 +0x210
github.com/goki/gi.(*WinEventRecv).Call(0xc420748eb0, 0x461f960, 0xc420424000, 0x5, 0x45410a0, 0xc42dc2e1b0)
/Users/thazy/go/src/github.com/goki/gi/window.go:1081 +0x6d
github.com/goki/gi.(*Window).SendEventSignal(0xc420424000, 0x4614a80, 0xc42dc2e1b0, 0xc428e96101)
/Users/thazy/go/src/github.com/goki/gi/window.go:1195 +0xc65
github.com/goki/gi.(*Window).SendHoverEvent(0xc420424000, 0xc42b9dd1a0)
/Users/thazy/go/src/github.com/goki/gi/window.go:1277 +0xaf
github.com/goki/gi.(*Window).EventLoop.func2()
/Users/thazy/go/src/github.com/goki/gi/window.go:883 +0x5a
created by time.goFunc
/usr/local/Cellar/go/1.10.3/libexec/src/time/sleep.go:172 +0x44
thazy@macbookpro ~/go/src/github.com/goki/gi/examples/widgets$

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.