The mouse wheel scrolls an open combobox list (headless).
The mouse wheel scrolls an open combobox list (headless). An open combobox with more items than it shows has a scrollbar, and the wheel over its items has to move the list, as it does in every desktop toolkit. It used to step the highlight instead, one item a notch, and the list only moved once the highlight reached its edge; a pointer resting on an item put the highlight back under it, so the wheel ran over the visible items and the rest stayed out of reach. Reported from AfterAPro's plugin list: "working fine for what's visible but does not scroll".
Each check opens the list, turns the wheel with the pointer on one row and then clicks that same row: the item that click selects is the one the row shows, which says how far the list scrolled.
#define ALLEGRO_UNSTABLE 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CB_X 10
#define CB_Y 10
#define CB_W 200
#define CB_H 30
#define ITEMS 9
if (!cond) {
} else {
}
}
ALLEGRO_EVENT ev;
memset(&ev, 0, sizeof(ev));
ev.type = (
unsigned int)
type;
ev.mouse.x = x;
ev.mouse.y = y;
ev.mouse.dz = dz;
ev.mouse.button = 1;
return ev;
}
}
}
int i = 0;
for (i = 0; i < abs(notches); i++)
}
int win, cb, i;
char name[16];
if (!al_init() || !al_init_font_addon()) {
return 1;
}
font = al_create_builtin_font();
return 1;
}
return 1;
}
for (i = 0; i <
ITEMS; i++) {
snprintf(name, sizeof(name), "item %d", i);
}
return 1;
}
return 0;
}
static void expect_true(const char *label, int cond)
static ALLEGRO_EVENT mouse_event(int type, int x, int y, int dz)
Build a left-button mouse event at (x, y).
#define CB_W
Where the combobox is and how tall one row of it is.
static int wheel_then_click(N_GUI_CTX *gui, int cb, int row, int notches)
Open the list, turn the wheel over one row, then click that row.
static int row_y(int row)
The screen y of the middle of one row of the open list.
#define CB_Y
Where the combobox is and how tall one row of it is.
static void click_at(N_GUI_CTX *gui, int x, int y)
Move to (x, y) and click there.
#define CB_H
Where the combobox is and how tall one row of it is.
#define CB_X
Where the combobox is and how tall one row of it is.
#define ITEMS
How many items: more than the six it shows.
static void type(N_GUI_CTX *gui, const char *s)
Type a whole string into whatever has focus.
static const char * row(N_GUI_TREE *tree, int index)
the text of a visible row, "" past the end
FONT * font
the default 8x8 font, valid after allegro_init()
void n_gui_set_display_size(N_GUI_CTX *ctx, float w, float h)
set the display (viewport) size so global scrollbars can be computed.
int n_gui_process_event(N_GUI_CTX *ctx, ALLEGRO_EVENT event)
Process an allegro event through the GUI system.
int n_gui_combobox_add_item(N_GUI_CTX *ctx, int widget_id, const char *text)
add an item to a combo box
#define N_GUI_WIN_FRAMELESS
frameless window: no title bar drawn, drag via window body unless N_GUI_WIN_FIXED_POSITION is also se...
int n_gui_add_combobox(N_GUI_CTX *ctx, int window_id, float x, float y, float w, float h, void(*on_select)(int, int, void *), void *user_data)
Add a combo box widget (dropdown selector).
int n_gui_add_window(N_GUI_CTX *ctx, const char *title, float x, float y, float w, float h)
Add a new pseudo-window to the context.
N_GUI_CTX * n_gui_new_ctx(ALLEGRO_FONT *default_font)
Create a new GUI context.
void n_gui_destroy_ctx(N_GUI_CTX **ctx)
Destroy a GUI context and all its windows/widgets.
void n_gui_open_window(N_GUI_CTX *ctx, int window_id)
Open (show) a window.
int n_gui_combobox_get_selected(N_GUI_CTX *ctx, int widget_id)
get the selected item index in a combobox widget
void n_gui_window_set_flags(N_GUI_CTX *ctx, int window_id, int flags)
Set feature flags on a window.
void n_gui_combobox_set_selected(N_GUI_CTX *ctx, int widget_id, int index)
set the selected item in a combobox widget
The top-level GUI context that holds all windows.
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
#define LOG_ERR
error conditions
void set_log_level(const int log_level)
Set the global log level value ( static int LOG_LEVEL ).
#define LOG_NOTICE
normal but significant condition
#define LOG_INFO
informational
Common headers and low-level functions & define.
GUI system: buttons, sliders, text areas, checkboxes, scrollbars, dropdown menus, windows.