diff options
-rw-r--r-- | widget.c | 25 | ||||
-rw-r--r-- | window.c | 8 | ||||
-rw-r--r-- | window.h | 26 |
3 files changed, 18 insertions, 41 deletions
@@ -132,16 +132,17 @@ void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y) */ int GetWidgetFromPos(const Window *w, int x, int y) { - const Widget *wi; - int index, found_index = -1; + uint index; + int found_index = -1; // Go through the widgets and check if we find the widget that the coordinate is // inside. - for (index = 0,wi = w->widget; wi->type != WWT_LAST; index++, wi++) { + for (index = 0; index < w->widget_count; index++) { + const Widget *wi = &w->widget[index]; if (wi->type == WWT_EMPTY || wi->type == WWT_FRAME) continue; if (x >= wi->left && x <= wi->right && y >= wi->top && y <= wi->bottom && - !IsWidgetHidden(wi)) { + !IsWindowWidgetHidden(w, index)) { found_index = index; } } @@ -184,21 +185,19 @@ void DrawFrameRect(int left, int top, int right, int bottom, int ctab, FrameFlag void DrawWindowWidgets(const Window *w) { - const Widget *wi; const DrawPixelInfo* dpi = _cur_dpi; Rect r; - int i = 0; + uint i; - wi = w->widget; - - do { - bool clicked = IsWindowWidgetLowered((Window*)w, i); + for (i = 0; i < w->widget_count; i++) { + const Widget *wi = &w->widget[i]; + bool clicked = IsWindowWidgetLowered(w, i); if (dpi->left > (r.right=/*w->left + */wi->right) || dpi->left + dpi->width <= (r.left=wi->left/* + w->left*/) || dpi->top > (r.bottom=/*w->top +*/ wi->bottom) || dpi->top + dpi->height <= (r.top = /*w->top +*/ wi->top) || - IsWidgetHidden(wi)) { + IsWindowWidgetHidden(w, i)) { continue; } @@ -457,12 +456,12 @@ void DrawWindowWidgets(const Window *w) DrawStringCenteredTruncated(r.left + 2, r.right - 2, r.top+2, wi->data, 0x84); draw_default:; - if (IsWidgetDisabled(wi)) { + if (IsWindowWidgetDisabled(w, i)) { GfxFillRect(r.left+1, r.top+1, r.right-1, r.bottom-1, _colour_gradient[wi->color&0xF][2] | PALETTE_MODIFIER_GREYOUT); } } } - } while (i++, (++wi)->type != WWT_LAST); + } if (w->flags4 & WF_WHITE_BORDER_MASK) { @@ -100,10 +100,10 @@ static void DispatchLeftClickEvent(Window *w, int x, int y) e.we.click.widget = GetWidgetFromPos(w, x, y); if (e.we.click.widget < 0) return; /* exit if clicked outside of widgets */ - wi = &w->widget[e.we.click.widget]; - /* don't allow any interaction if the button has been disabled */ - if (IsWidgetDisabled(wi)) return; + if (IsWindowWidgetDisabled(w, e.we.click.widget)) return; + + wi = &w->widget[e.we.click.widget]; if (wi->type & WWB_MASK) { /* special widget handling for buttons*/ @@ -1741,7 +1741,7 @@ void InvalidateWidget(const Window *w, byte widget_index) const Widget *wi = &w->widget[widget_index]; /* Don't redraw the window if the widget is invisible or of no-type */ - if (wi->type == WWT_EMPTY || IsWidgetHidden(wi)) return; + if (wi->type == WWT_EMPTY || IsWindowWidgetHidden(w, widget_index)) return; SetDirtyBlocks(w->left + wi->left, w->top + wi->top, w->left + wi->right + 1, w->top + wi->bottom + 1); } @@ -667,17 +667,6 @@ static inline void EnableWindowWidget(Window *w, byte widget_index) /** * Gets the enabled/disabled status of a widget. - * This is the same as IsWindowWidgetDisabled, only working on direct widget, instead of an index - * @param wi : Widget to get the status from - * @return status of the widget ie: disabled = true, enabled = false - */ -static inline bool IsWidgetDisabled(const Widget *wi) -{ - return HASBIT(wi->display_flags, WIDG_DISABLED); -} - -/** - * Gets the enabled/disabled status of a widget. * @param w : Window on which the widget is located * @param widget_index : index of this widget in the window * @return status of the widget ie: disabled = true, enabled = false @@ -685,7 +674,7 @@ static inline bool IsWidgetDisabled(const Widget *wi) static inline bool IsWindowWidgetDisabled(const Window *w, byte widget_index) { assert(widget_index < w->widget_count); - return IsWidgetDisabled(&w->widget[widget_index]); + return HASBIT(w->widget[widget_index].display_flags, WIDG_DISABLED); } /** @@ -724,17 +713,6 @@ static inline void ShowWindowWidget(Window *w, byte widget_index) /** * Gets the visibility of a widget. - * Works directly on a widget, instead of an index - * @param wi Widget to get the status from - * @return status of the widget ie. hidden = true, visible = false - */ -static inline bool IsWidgetHidden(const Widget *wi) -{ - return HASBIT(wi->display_flags, WIDG_HIDDEN); -} - -/** - * Gets the visibility of a widget. * @param w : Window on which the widget is located * @param widget_index : index of this widget in the window * @return status of the widget ie: hidden = true, visible = false @@ -742,7 +720,7 @@ static inline bool IsWidgetHidden(const Widget *wi) static inline bool IsWindowWidgetHidden(const Window *w, byte widget_index) { assert(widget_index < w->widget_count); - return IsWidgetHidden(&w->widget[widget_index]); + return HASBIT(w->widget[widget_index].display_flags, WIDG_HIDDEN); } /** |