Diff
diff --git a/events/main.go b/events/main.go
index d7eaf46..f663776 100644
--- a/events/main.go
+++ b/events/main.go
@@ -135,9 +135,2 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- insideX := (self.X < float32(data.Position[0]) && self.X+self.Width > float32(data.Position[0]))
- insideY := (self.Y < float32(data.Position[1]) && self.Y+self.Height > float32(data.Position[1]))
- inside := (insideX && insideY)
-
- arrowScroll := 0
-
- if isFocused {
- // This allows for arrow scrolling when off the element and typing
- if m.Focus.SoftFocused != nil {
+ if m.Focus.SoftFocused != nil {
+ if isFocused {
@@ -146 +139 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- arrowScroll += 20
+ data.Scroll += 20
@@ -149,12 +142 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- arrowScroll -= 20
- }
- }
- // Get the keycode of the pressed key
- if data.Key != 0 {
- if n.ContentEditable {
- // Sync the innertext and value but idk
- n.Value = n.InnerText
- ProcessKeyEvent(n, int(data.Key))
-
- n.InnerText = n.Value
- eventList = append(eventList, "keypress")
+ data.Scroll -= 20
@@ -163,20 +144,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
-
- if data.Key == 258 && data.KeyState && !m.Focus.LastClickWasFocused {
- // Tab
- mfsLen := len(m.Focus.Nodes)
- if mfsLen > 0 {
- store := m.Focus.Selected
- m.Focus.Selected += 1
- if m.Focus.Selected >= mfsLen {
- m.Focus.Selected = 0
- }
- if store != m.Focus.Selected {
- if store > -1 {
- m.Focus.Nodes[store].Blur()
- }
- m.Focus.Nodes[m.Focus.Selected].Focus()
- m.Focus.LastClickWasFocused = true
- }
- }
-
- }
@@ -185,12 +147,6 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if inside || isFocused {
- // Mouse is over element
- isMouseOver = true
- if !slices.Contains(n.ClassList.Classes, ":hover") {
- n.ClassList.Add(":hover")
- }
-
- if data.Click && !evt.MouseDown {
- evt.MouseDown = true
- evt.MouseUp = false
- if n.OnMouseDown != nil {
- n.OnMouseDown(evt)
+ if (self.X < float32(data.Position[0]) && self.X+self.Width > float32(data.Position[0])) || isFocused {
+ if (self.Y < float32(data.Position[1]) && self.Y+self.Height > float32(data.Position[1])) || isFocused {
+ // Mouse is over element
+ isMouseOver = true
+ if !slices.Contains(n.ClassList.Classes, ":hover") {
+ n.ClassList.Add(":hover")
@@ -198,2 +153,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- eventList = append(eventList, "mousedown")
- }
@@ -201,6 +155,7 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if !data.Click && !evt.MouseUp {
- evt.MouseUp = true
- evt.MouseDown = false
- evt.Click = false
- if n.OnMouseUp != nil {
- n.OnMouseUp(evt)
+ if data.Click && !evt.MouseDown {
+ evt.MouseDown = true
+ evt.MouseUp = false
+ if n.OnMouseDown != nil {
+ n.OnMouseDown(evt)
+ }
+ eventList = append(eventList, "mousedown")
@@ -208,2 +162,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- eventList = append(eventList, "mouseup")
- }
@@ -211,2 +164,9 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if data.Click && !evt.Click {
- evt.Click = true
+ if !data.Click && !evt.MouseUp {
+ evt.MouseUp = true
+ evt.MouseDown = false
+ evt.Click = false
+ if n.OnMouseUp != nil {
+ n.OnMouseUp(evt)
+ }
+ eventList = append(eventList, "mouseup")
+ }
@@ -214,10 +174,14 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if n.TabIndex > -1 {
- if m.Focus.Selected > -1 {
- if m.Focus.Nodes[m.Focus.Selected].Properties.Id != n.Properties.Id {
- m.Focus.Nodes[m.Focus.Selected].Blur()
- for i, v := range m.Focus.Nodes {
- if v.Properties.Id == n.Properties.Id {
- m.Focus.Selected = i
- n.Focus()
- m.Focus.LastClickWasFocused = true
- break
+ if data.Click && !evt.Click {
+ evt.Click = true
+
+ if n.TabIndex > -1 {
+ if m.Focus.Selected > -1 {
+ if m.Focus.Nodes[m.Focus.Selected].Properties.Id != n.Properties.Id {
+ m.Focus.Nodes[m.Focus.Selected].Blur()
+ for i, v := range m.Focus.Nodes {
+ if v.Properties.Id == n.Properties.Id {
+ m.Focus.Selected = i
+ n.Focus()
+ m.Focus.LastClickWasFocused = true
+ break
+ }
@@ -224,0 +189,2 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
+ } else {
+ m.Focus.LastClickWasFocused = true
@@ -227,22 +193 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- m.Focus.LastClickWasFocused = true
- }
- } else {
- selectedIndex := -1
- for i, v := range m.Focus.Nodes {
- if v.Properties.Id == n.Properties.Id {
- selectedIndex = i
- }
- }
- if selectedIndex == -1 {
- if n.TabIndex == 9999999 {
- // Add the last digits of the properties.id to make the elements sort in order
- numStr := strings.TrimFunc(n.Properties.Id, func(r rune) bool {
- return !unicode.IsDigit(r) // Remove non-digit characters
- })
- prid, _ := strconv.Atoi(numStr)
- n.TabIndex += prid
- }
- m.Focus.Nodes = append([]*element.Node{n}, m.Focus.Nodes...)
- sort.Slice(m.Focus.Nodes, func(i, j int) bool {
- return m.Focus.Nodes[i].TabIndex < m.Focus.Nodes[j].TabIndex // Ascending order by TabIndex
- })
+ selectedIndex := -1
@@ -253,0 +199,23 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
+ if selectedIndex == -1 {
+ if n.TabIndex == 9999999 {
+ // Add the last digits of the properties.id to make the elements sort in order
+ numStr := strings.TrimFunc(n.Properties.Id, func(r rune) bool {
+ return !unicode.IsDigit(r) // Remove non-digit characters
+ })
+ prid, _ := strconv.Atoi(numStr)
+ n.TabIndex += prid
+ }
+ m.Focus.Nodes = append([]*element.Node{n}, m.Focus.Nodes...)
+ sort.Slice(m.Focus.Nodes, func(i, j int) bool {
+ return m.Focus.Nodes[i].TabIndex < m.Focus.Nodes[j].TabIndex // Ascending order by TabIndex
+ })
+ for i, v := range m.Focus.Nodes {
+ if v.Properties.Id == n.Properties.Id {
+ selectedIndex = i
+ }
+ }
+ }
+
+ m.Focus.Selected = selectedIndex
+ n.Focus()
+ m.Focus.LastClickWasFocused = true
@@ -256,3 +224,5 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- m.Focus.Selected = selectedIndex
- n.Focus()
- m.Focus.LastClickWasFocused = true
+ } else if m.Focus.Selected > -1 {
+ if m.Focus.Nodes[m.Focus.Selected].Properties.Id != n.Properties.Id && !m.Focus.LastClickWasFocused {
+ m.Focus.Nodes[m.Focus.Selected].Blur()
+ m.Focus.Selected = -1
+ }
@@ -260,5 +230,2 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
-
- } else if m.Focus.Selected > -1 {
- if m.Focus.Nodes[m.Focus.Selected].Properties.Id != n.Properties.Id && !m.Focus.LastClickWasFocused {
- m.Focus.Nodes[m.Focus.Selected].Blur()
- m.Focus.Selected = -1
+ if n.OnClick != nil {
+ n.OnClick(evt)
@@ -265,0 +233,5 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
+ // Regardless set soft focus to trigger events to the selected element: when non is set default body???
+ if m.Focus.SoftFocused == nil {
+ m.Focus.SoftFocused = n
+ }
+ eventList = append(eventList, "click")
@@ -267,9 +238,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if n.OnClick != nil {
- n.OnClick(evt)
- }
- // Regardless set soft focus to trigger events to the selected element: when non is set default body???
- if m.Focus.SoftFocused == nil {
- m.Focus.SoftFocused = n
- }
- eventList = append(eventList, "click")
- }
@@ -277,4 +240,6 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if data.Context {
- evt.ContextMenu = true
- if n.OnContextMenu != nil {
- n.OnContextMenu(evt)
+ if data.Context {
+ evt.ContextMenu = true
+ if n.OnContextMenu != nil {
+ n.OnContextMenu(evt)
+ }
+ eventList = append(eventList, "contextmenu")
@@ -282,2 +246,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- eventList = append(eventList, "contextmenu")
- }
@@ -285,5 +248,18 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- // el.ScrollY = 0
- if (data.Scroll != 0 && (inside)) || arrowScroll != 0 {
- // !TODO: for now just emit a event, will have to add el.scrollX
- data.Scroll += arrowScroll
- styledEl, _ := m.CSS.GetStyles(n)
+ // el.ScrollY = 0
+ if data.Scroll != 0 {
+ // !TODO: for now just emit a event, will have to add el.scrollX
+
+ styledEl, _ := m.CSS.GetStyles(n)
+
+ // !TODO: Add scrolling for dragging over the scroll bar and arrow keys if it is focused
+ // + Working on the focus part, the dragging part will be hard as events has no context of the scrollbars
+
+ if hasAutoOrScroll(styledEl) {
+ n.ScrollTop = int(n.ScrollTop + (-data.Scroll))
+ if n.ScrollTop > n.ScrollHeight {
+ n.ScrollTop = n.ScrollHeight
+ }
+
+ if n.ScrollTop <= 0 {
+ n.ScrollTop = 0
+ }
@@ -291,2 +267,3 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- // !TODO: Add scrolling for dragging over the scroll bar
- // + the dragging part will be hard as events has no context of the scrollbars
+ if n.OnScroll != nil {
+ n.OnScroll(evt)
+ }
@@ -294,4 +271,2 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if hasAutoOrScroll(styledEl) {
- n.ScrollTop = int(n.ScrollTop + (-data.Scroll))
- if n.ScrollTop > n.ScrollHeight {
- n.ScrollTop = n.ScrollHeight
+ data.Scroll = 0
+ eventList = append(eventList, "scroll")
@@ -300,2 +275,11 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if n.ScrollTop <= 0 {
- n.ScrollTop = 0
+ }
+
+ if !evt.MouseEnter {
+ evt.MouseEnter = true
+ evt.MouseOver = true
+ evt.MouseLeave = false
+ if n.OnMouseEnter != nil {
+ n.OnMouseEnter(evt)
+ }
+ if n.OnMouseOver != nil {
+ n.OnMouseEnter(evt)
@@ -302,0 +287,9 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
+ eventList = append(eventList, "mouseenter")
+ eventList = append(eventList, "mouseover")
+
+ // Let the adapter know the cursor has changed
+ m.Adapter.DispatchEvent(element.Event{
+ Name: "cursor",
+ Data: self.Cursor,
+ })
+ }
@@ -304,2 +297,5 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if n.OnScroll != nil {
- n.OnScroll(evt)
+ if evt.X != int(data.Position[0]) && evt.Y != int(data.Position[1]) {
+ evt.X = int(data.Position[0])
+ evt.Y = int(data.Position[1])
+ if n.OnMouseMove != nil {
+ n.OnMouseMove(evt)
@@ -306,0 +303,2 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
+ eventList = append(eventList, "mousemove")
+ }
@@ -308,2 +306,13 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- data.Scroll = 0
- eventList = append(eventList, "scroll")
+ // Get the keycode of the pressed key
+ // !ISSUE: need to only add the text data and events to focused elements
+ // + but the event still gets added to the element like keydown but not innertext or value... maybe
+ // + probally done with soft focus only here bc the rest fire anywhere
+ if data.Key != 0 {
+ if n.ContentEditable {
+ // Sync the innertext and value but idk
+ n.Value = n.InnerText
+ ProcessKeyEvent(n, int(data.Key))
+
+ n.InnerText = n.Value
+ eventList = append(eventList, "keypress")
+ }
@@ -312 +321,17 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- }
+ if data.Key == 258 && data.KeyState && !m.Focus.LastClickWasFocused {
+ // Tab
+ mfsLen := len(m.Focus.Nodes)
+ if mfsLen > 0 {
+ store := m.Focus.Selected
+ m.Focus.Selected += 1
+ if m.Focus.Selected >= mfsLen {
+ m.Focus.Selected = 0
+ }
+ if store != m.Focus.Selected {
+ if store > -1 {
+ m.Focus.Nodes[store].Blur()
+ }
+ m.Focus.Nodes[m.Focus.Selected].Focus()
+ m.Focus.LastClickWasFocused = true
+ }
+ }
@@ -314,9 +338,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if !evt.MouseEnter {
- evt.MouseEnter = true
- evt.MouseOver = true
- evt.MouseLeave = false
- if n.OnMouseEnter != nil {
- n.OnMouseEnter(evt)
- }
- if n.OnMouseOver != nil {
- n.OnMouseEnter(evt)
@@ -324,9 +339,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- eventList = append(eventList, "mouseenter")
- eventList = append(eventList, "mouseover")
-
- // Let the adapter know the cursor has changed
- m.Adapter.DispatchEvent(element.Event{
- Name: "cursor",
- Data: self.Cursor,
- })
- }
@@ -334,5 +341,4 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- if evt.X != int(data.Position[0]) && evt.Y != int(data.Position[1]) {
- evt.X = int(data.Position[0])
- evt.Y = int(data.Position[1])
- if n.OnMouseMove != nil {
- n.OnMouseMove(evt)
+ } else {
+ isMouseOver = false
+ if slices.Contains(n.ClassList.Classes, ":hover") {
+ n.ClassList.Remove(":hover")
@@ -340 +345,0 @@ func (m *Monitor) CalcEvents(n *element.Node, data *EventData) {
- eventList = append(eventList, "mousemove")