From c5b749f9837effff08f766e9405b5175cefb4306 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sat, 26 Jan 2008 20:55:04 +0000 Subject: (svn r11988) -Codechange: Add a generic way of changing a widget's size and adjust the widgets around it to suit. --- src/build_vehicle_gui.cpp | 23 +++++------------------ src/widget.cpp | 18 ++++++++++++++++++ src/window_gui.h | 4 ++++ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 50655df53..d524b0770 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -958,23 +958,6 @@ void DrawEngineList(VehicleType type, int x, int y, const EngineList eng_list, u } } -static void ExpandPurchaseInfoWidget(Window *w, int expand_by) -{ - Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL]; - - SetWindowDirty(w); - wi->bottom += expand_by; - - for (uint i = BUILD_VEHICLE_WIDGET_BUILD; i < BUILD_VEHICLE_WIDGET_END; i++) { - wi = &w->widget[i]; - wi->top += expand_by; - wi->bottom += expand_by; - } - - w->height += expand_by; - SetWindowDirty(w); -} - static void DrawBuildVehicleWindow(Window *w) { const buildvehicle_d *bv = &WP(w, buildvehicle_d); @@ -996,7 +979,11 @@ static void DrawBuildVehicleWindow(Window *w) const Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL]; int text_end = DrawVehiclePurchaseInfo(2, wi->top + 1, wi->right - wi->left - 2, bv->sel_engine); - if (text_end > wi->bottom) ExpandPurchaseInfoWidget(w, text_end - wi->bottom); + if (text_end > wi->bottom) { + SetWindowDirty(w); + ResizeWindowForWidget(w, BUILD_VEHICLE_WIDGET_PANEL, 0, text_end - wi->bottom); + SetWindowDirty(w); + } } DrawSortButtonState(w, BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING, bv->descending_sort_order ? SBS_DOWN : SBS_UP); diff --git a/src/widget.cpp b/src/widget.cpp index 3bd140ea1..d505f9f0b 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -583,6 +583,24 @@ void ResizeButtons(Window *w, byte left, byte right) } } +void ResizeWindowForWidget(Window *w, int widget, int delta_x, int delta_y) +{ + int right = w->widget[widget].right; + int bottom = w->widget[widget].bottom; + + for (uint i = 0; i < w->widget_count; i++) { + if (w->widget[i].left >= right) w->widget[i].left += delta_x; + if (w->widget[i].right >= right) w->widget[i].right += delta_x; + if (w->widget[i].top >= bottom) w->widget[i].top += delta_y; + if (w->widget[i].bottom >= bottom) w->widget[i].bottom += delta_y; + } + + w->width += delta_x; + w->height += delta_y; + w->resize.width += delta_x; + w->resize.height += delta_y; +} + /** Draw a sort button's up or down arrow symbol. * @param w Window of widget * @param widget Sort button widget diff --git a/src/window_gui.h b/src/window_gui.h index e8f5d7e7a..d83ee950d 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -630,6 +630,10 @@ void ScrollbarClickHandler(Window *w, const Widget *wi, int x, int y); */ void ResizeButtons(Window *w, byte left, byte right); +/** Resize a widget an shuffle other widgets around to fit. + */ +void ResizeWindowForWidget(Window *w, int widget, int delta_x, int delta_y); + /** * Sets the enabled/disabled status of a widget. -- cgit v1.2.3-70-g09d2