mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r7352) -Codechange: add widget_count parameter to the window.
-Codechange: check whether widget indices are valid for all the (Set|Is)WindowWidget(Disabled|Lowered|Hidden) and related functions.
This commit is contained in:
parent
7086936bab
commit
c02e39945e
4
window.c
4
window.c
|
@ -316,6 +316,7 @@ void DeleteWindow(Window *w)
|
||||||
SetWindowDirty(w);
|
SetWindowDirty(w);
|
||||||
free(w->widget);
|
free(w->widget);
|
||||||
w->widget = NULL;
|
w->widget = NULL;
|
||||||
|
w->widget_count = 0;
|
||||||
|
|
||||||
/* Find the window in the z-array, and effectively remove it
|
/* Find the window in the z-array, and effectively remove it
|
||||||
* by moving all windows after it one to the left */
|
* by moving all windows after it one to the left */
|
||||||
|
@ -519,8 +520,10 @@ void AssignWidgetToWindow(Window *w, const Widget *widget)
|
||||||
|
|
||||||
w->widget = realloc(w->widget, sizeof(*w->widget) * index);
|
w->widget = realloc(w->widget, sizeof(*w->widget) * index);
|
||||||
memcpy(w->widget, widget, sizeof(*w->widget) * index);
|
memcpy(w->widget, widget, sizeof(*w->widget) * index);
|
||||||
|
w->widget_count = index - 1;
|
||||||
} else {
|
} else {
|
||||||
w->widget = NULL;
|
w->widget = NULL;
|
||||||
|
w->widget_count = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -877,6 +880,7 @@ void UnInitWindowSystem(void)
|
||||||
FOR_ALL_WINDOWS(wz) {
|
FOR_ALL_WINDOWS(wz) {
|
||||||
free((*wz)->widget);
|
free((*wz)->widget);
|
||||||
(*wz)->widget = NULL;
|
(*wz)->widget = NULL;
|
||||||
|
(*wz)->widget_count = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
window.h
8
window.h
|
@ -331,6 +331,7 @@ struct Window {
|
||||||
ViewPort *viewport;
|
ViewPort *viewport;
|
||||||
const Widget *original_widget;
|
const Widget *original_widget;
|
||||||
Widget *widget;
|
Widget *widget;
|
||||||
|
uint widget_count;
|
||||||
uint32 desc_flags;
|
uint32 desc_flags;
|
||||||
|
|
||||||
WindowMessage message;
|
WindowMessage message;
|
||||||
|
@ -640,6 +641,7 @@ void DrawWindowViewport(const Window *w);
|
||||||
*/
|
*/
|
||||||
static inline void SetWindowWidgetDisabledState(Window *w, byte widget_index, bool disab_stat)
|
static inline void SetWindowWidgetDisabledState(Window *w, byte widget_index, bool disab_stat)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
SB(w->widget[widget_index].display_flags, WIDG_DISABLED, 1, !!disab_stat);
|
SB(w->widget[widget_index].display_flags, WIDG_DISABLED, 1, !!disab_stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -682,6 +684,7 @@ static inline bool IsWidgetDisabled(const Widget *wi)
|
||||||
*/
|
*/
|
||||||
static inline bool IsWindowWidgetDisabled(Window *w, byte widget_index)
|
static inline bool IsWindowWidgetDisabled(Window *w, byte widget_index)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
return IsWidgetDisabled(&w->widget[widget_index]);
|
return IsWidgetDisabled(&w->widget[widget_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,6 +698,7 @@ static inline bool IsWindowWidgetDisabled(Window *w, byte widget_index)
|
||||||
*/
|
*/
|
||||||
static inline void SetWindowWidgetHiddenState(Window *w, byte widget_index, bool hidden_stat)
|
static inline void SetWindowWidgetHiddenState(Window *w, byte widget_index, bool hidden_stat)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
SB(w->widget[widget_index].display_flags, WIDG_HIDDEN, 1, !!hidden_stat);
|
SB(w->widget[widget_index].display_flags, WIDG_HIDDEN, 1, !!hidden_stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,6 +741,7 @@ static inline bool IsWidgetHidden(const Widget *wi)
|
||||||
*/
|
*/
|
||||||
static inline bool IsWindowWidgetHidden(Window *w, byte widget_index)
|
static inline bool IsWindowWidgetHidden(Window *w, byte widget_index)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
return IsWidgetHidden(&w->widget[widget_index]);
|
return IsWidgetHidden(&w->widget[widget_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -748,6 +753,7 @@ static inline bool IsWindowWidgetHidden(Window *w, byte widget_index)
|
||||||
*/
|
*/
|
||||||
static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, bool lowered_stat)
|
static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, bool lowered_stat)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
SB(w->widget[widget_index].display_flags, WIDG_LOWERED, 1, !!lowered_stat);
|
SB(w->widget[widget_index].display_flags, WIDG_LOWERED, 1, !!lowered_stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -758,6 +764,7 @@ static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, boo
|
||||||
*/
|
*/
|
||||||
static inline void ToggleWidgetLoweredState(Window *w, byte widget_index)
|
static inline void ToggleWidgetLoweredState(Window *w, byte widget_index)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
TOGGLEBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
|
TOGGLEBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -789,6 +796,7 @@ static inline void RaiseWindowWidget(Window *w, byte widget_index)
|
||||||
*/
|
*/
|
||||||
static inline bool IsWindowWidgetLowered(Window *w, byte widget_index)
|
static inline bool IsWindowWidgetLowered(Window *w, byte widget_index)
|
||||||
{
|
{
|
||||||
|
assert(widget_index < w->widget_count);
|
||||||
return HASBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
|
return HASBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue