Launcher: Finally make servers table behave properly when cursor goes outside window

This commit is contained in:
UnknownShadow200 2020-12-27 16:39:56 +11:00
parent 07b0086f9e
commit e26e9887d2
3 changed files with 17 additions and 9 deletions

View File

@ -166,7 +166,7 @@ static void LScreen_MouseMove(struct LScreen* s, int idx, int deltaX, int deltaY
s->HoverWidget(s, over);
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) { }

View File

@ -170,7 +170,7 @@ static void LButton_Draw(void* widget) {
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 */
if (!wasOver) LWidget_Draw(w);
}
@ -994,9 +994,10 @@ static void LTable_KeyDown(void* widget, int key, cc_bool was) {
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;
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) {
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);
LWidget_Draw(w);
} 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;
Math_Clamp(w->columns[col].width, cellMinWidth, w->width - cellMinWidth);
/* Ensure this column doesn't expand past right side of table */
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);
}
}
@ -1042,6 +1048,7 @@ static void LTable_HeadersClick(struct LTable* w, int idx) {
/* clicked on gridline, begin dragging */
if (mouseX >= (x - dragPad) && mouseX < (x + dragPad) && w->columns[i].interactable) {
w->draggingColumn = i - 1;
w->dragXStart = (mouseX - w->x) - w->columns[i - 1].width;
return;
}

View File

@ -18,7 +18,7 @@ struct LWidgetVTABLE {
/* Called when key is pressed and this widget is selected. */
void (*KeyPress)(void* widget, char c);
/* 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. */
void (*MouseLeft)(void* widget);
/* Called when mouse clicks on this widget. */
@ -174,6 +174,7 @@ struct LTable {
/* Index of table column currently being dragged. */
int draggingColumn;
int dragXStart; /* X coordinate column drag started at */
cc_bool draggingScrollbar; /* Is scrollbar is currently being dragged */
int dragYOffset; /* Offset of mouse for scrollbar dragging */