mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 09:06:55 -04:00
Launcher: Finally make servers table behave properly when cursor goes outside window
This commit is contained in:
parent
07b0086f9e
commit
e26e9887d2
@ -166,7 +166,7 @@ static void LScreen_MouseMove(struct LScreen* s, int idx, int deltaX, int deltaY
|
|||||||
s->HoverWidget(s, over);
|
s->HoverWidget(s, over);
|
||||||
|
|
||||||
if (!over->VTABLE->MouseMove) return;
|
if (!over->VTABLE->MouseMove) return;
|
||||||
over->VTABLE->MouseMove(over, idx, deltaX, deltaY, overSame);
|
over->VTABLE->MouseMove(over, idx, overSame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void LScreen_MouseWheel(struct LScreen* s, float delta) { }
|
static void LScreen_MouseWheel(struct LScreen* s, float delta) { }
|
||||||
|
@ -170,7 +170,7 @@ static void LButton_Draw(void* widget) {
|
|||||||
Launcher_MarkDirty(w->x, w->y, w->width, w->height);
|
Launcher_MarkDirty(w->x, w->y, w->width, w->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LButton_Hover(void* w, int idx, int x, int y, cc_bool wasOver) {
|
static void LButton_Hover(void* w, int idx, cc_bool wasOver) {
|
||||||
/* only need to redraw when changing from unhovered to hovered */
|
/* only need to redraw when changing from unhovered to hovered */
|
||||||
if (!wasOver) LWidget_Draw(w);
|
if (!wasOver) LWidget_Draw(w);
|
||||||
}
|
}
|
||||||
@ -994,9 +994,10 @@ static void LTable_KeyDown(void* widget, int key, cc_bool was) {
|
|||||||
LTable_SetSelectedTo(w, index);
|
LTable_SetSelectedTo(w, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LTable_MouseMove(void* widget, int idx, int deltaX, int deltaY, cc_bool wasOver) {
|
static void LTable_MouseMove(void* widget, int idx, cc_bool wasOver) {
|
||||||
struct LTable* w = (struct LTable*)widget;
|
struct LTable* w = (struct LTable*)widget;
|
||||||
int x = Pointers[idx].x - w->x, y = Pointers[idx].y - w->y, col;
|
int x = Pointers[idx].x - w->x, y = Pointers[idx].y - w->y;
|
||||||
|
int i, col, width, maxW;
|
||||||
|
|
||||||
if (w->draggingScrollbar) {
|
if (w->draggingScrollbar) {
|
||||||
float scale = w->height / (float)w->rowsCount;
|
float scale = w->height / (float)w->rowsCount;
|
||||||
@ -1008,11 +1009,16 @@ static void LTable_MouseMove(void* widget, int idx, int deltaX, int deltaY, cc_b
|
|||||||
LTable_ClampTopRow(w);
|
LTable_ClampTopRow(w);
|
||||||
LWidget_Draw(w);
|
LWidget_Draw(w);
|
||||||
} else if (w->draggingColumn >= 0) {
|
} else if (w->draggingColumn >= 0) {
|
||||||
if (!deltaX || x >= w->x + w->width - cellMinWidth) return;
|
col = w->draggingColumn;
|
||||||
col = w->draggingColumn;
|
width = x - w->dragXStart;
|
||||||
|
|
||||||
w->columns[col].width += deltaX;
|
/* Ensure this column doesn't expand past right side of table */
|
||||||
Math_Clamp(w->columns[col].width, cellMinWidth, w->width - cellMinWidth);
|
maxW = w->width;
|
||||||
|
for (i = 0; i < col; i++) maxW -= w->columns[i].width;
|
||||||
|
|
||||||
|
Math_Clamp(width, cellMinWidth, maxW - cellMinWidth);
|
||||||
|
if (width == w->columns[col].width) return;
|
||||||
|
w->columns[col].width = width;
|
||||||
LWidget_Draw(w);
|
LWidget_Draw(w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1042,6 +1048,7 @@ static void LTable_HeadersClick(struct LTable* w, int idx) {
|
|||||||
/* clicked on gridline, begin dragging */
|
/* clicked on gridline, begin dragging */
|
||||||
if (mouseX >= (x - dragPad) && mouseX < (x + dragPad) && w->columns[i].interactable) {
|
if (mouseX >= (x - dragPad) && mouseX < (x + dragPad) && w->columns[i].interactable) {
|
||||||
w->draggingColumn = i - 1;
|
w->draggingColumn = i - 1;
|
||||||
|
w->dragXStart = (mouseX - w->x) - w->columns[i - 1].width;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ struct LWidgetVTABLE {
|
|||||||
/* Called when key is pressed and this widget is selected. */
|
/* Called when key is pressed and this widget is selected. */
|
||||||
void (*KeyPress)(void* widget, char c);
|
void (*KeyPress)(void* widget, char c);
|
||||||
/* Called when mouse hovers/moves over this widget. */
|
/* Called when mouse hovers/moves over this widget. */
|
||||||
void (*MouseMove)(void* widget, int idx, int deltaX, int deltaY, cc_bool wasOver);
|
void (*MouseMove)(void* widget, int idx, cc_bool wasOver);
|
||||||
/* Called when mouse moves away from this widget. */
|
/* Called when mouse moves away from this widget. */
|
||||||
void (*MouseLeft)(void* widget);
|
void (*MouseLeft)(void* widget);
|
||||||
/* Called when mouse clicks on this widget. */
|
/* Called when mouse clicks on this widget. */
|
||||||
@ -174,6 +174,7 @@ struct LTable {
|
|||||||
|
|
||||||
/* Index of table column currently being dragged. */
|
/* Index of table column currently being dragged. */
|
||||||
int draggingColumn;
|
int draggingColumn;
|
||||||
|
int dragXStart; /* X coordinate column drag started at */
|
||||||
cc_bool draggingScrollbar; /* Is scrollbar is currently being dragged */
|
cc_bool draggingScrollbar; /* Is scrollbar is currently being dragged */
|
||||||
int dragYOffset; /* Offset of mouse for scrollbar dragging */
|
int dragYOffset; /* Offset of mouse for scrollbar dragging */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user