Mercurial > hg > openttd
changeset 12875:e78169f1844c draft
(svn r17367) -Codechange: make the autoreplace, bridge and build vehicle GUIs use the scrollbar wrappers
author | rubidium <rubidium@openttd.org> |
---|---|
date | Wed, 02 Sep 2009 07:17:15 +0000 |
parents | f46ccd4ad157 |
children | 6f97f7fe9a93 |
files | src/autoreplace_gui.cpp src/bridge_gui.cpp src/build_vehicle_gui.cpp src/window_gui.h |
diffstat | 4 files changed, 38 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -176,7 +176,7 @@ if (this->update_left == true) { /* We need to rebuild the left list */ GenerateReplaceVehList(this, true); - SetVScrollCount(this, this->list[0].Length()); + this->vscroll.SetCount(this->list[0].Length()); if (this->init_lists && this->sel_engine[0] == INVALID_ENGINE && this->list[0].Length() != 0) { this->sel_engine[0] = this->list[0][0]; } @@ -190,7 +190,7 @@ this->sel_engine[1] = INVALID_ENGINE; } else { GenerateReplaceVehList(this, false); - SetVScroll2Count(this, this->list[1].Length()); + this->vscroll2.SetCount(this->list[1].Length()); if (this->init_lists && this->sel_engine[1] == INVALID_ENGINE && this->list[1].Length() != 0) { this->sel_engine[1] = this->list[1][0]; } @@ -213,10 +213,10 @@ this->sel_engine[1] = INVALID_ENGINE; this->resize.step_height = GetVehicleListHeight(vehicletype); - this->vscroll.cap = this->resize.step_height == 14 ? 8 : 4; + this->vscroll.SetCapacity(this->resize.step_height == 14 ? 8 : 4); Widget *widget = this->widget; - widget[RVW_WIDGET_LEFT_MATRIX].data = widget[RVW_WIDGET_RIGHT_MATRIX].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); + widget[RVW_WIDGET_LEFT_MATRIX].data = widget[RVW_WIDGET_RIGHT_MATRIX].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START); if (vehicletype != VEH_TRAIN) { /* Since it's not a train we will hide the train only widgets. */ @@ -229,7 +229,7 @@ WIDGET_LIST_END); } - ResizeWindow(this, 0, this->resize.step_height * this->vscroll.cap); + ResizeWindow(this, 0, this->resize.step_height * this->vscroll.GetCapacity()); /* Set the minimum window size to the current window size */ this->resize.width = this->width; @@ -237,7 +237,7 @@ this->owner = _local_company; this->sel_group = id_g; - this->vscroll2.cap = this->vscroll.cap; // these two are always the same + this->vscroll2.SetCapacity(this->vscroll.GetCapacity()); // these two are always the same this->FindWindowPlacementAndResize(desc); } @@ -311,8 +311,8 @@ for (byte i = 0; i < 2; i++) { uint widget = (i == 0) ? RVW_WIDGET_LEFT_MATRIX : RVW_WIDGET_RIGHT_MATRIX; GUIEngineList *list = &this->list[i]; // which list to draw - EngineID start = i == 0 ? this->vscroll.pos : this->vscroll2.pos; // what is the offset for the start (scrolling) - EngineID end = min((i == 0 ? this->vscroll.cap : this->vscroll2.cap) + start, list->Length()); + EngineID start = i == 0 ? this->vscroll.GetPosition() : this->vscroll2.GetPosition(); // what is the offset for the start (scrolling) + EngineID end = min((i == 0 ? this->vscroll.GetCapacity() : this->vscroll2.GetCapacity()) + start, list->Length()); /* Do the actual drawing */ DrawEngineList((VehicleType)this->window_number, this->widget[widget].left + 2, this->widget[widget].right, this->widget[widget].top + 1, list, start, end, this->sel_engine[i], i == 0 ? this->widget[RVW_WIDGET_LEFT_MATRIX].right - 2 : 0, selected_group); @@ -374,8 +374,8 @@ case RVW_WIDGET_LEFT_MATRIX: case RVW_WIDGET_RIGHT_MATRIX: { uint i = (pt.y - 14) / this->resize.step_height; - uint16 click_scroll_pos = widget == RVW_WIDGET_LEFT_MATRIX ? this->vscroll.pos : this->vscroll2.pos; - uint16 click_scroll_cap = widget == RVW_WIDGET_LEFT_MATRIX ? this->vscroll.cap : this->vscroll2.cap; + uint16 click_scroll_pos = widget == RVW_WIDGET_LEFT_MATRIX ? this->vscroll.GetPosition() : this->vscroll2.GetPosition(); + uint16 click_scroll_cap = widget == RVW_WIDGET_LEFT_MATRIX ? this->vscroll.GetCapacity() : this->vscroll2.GetCapacity(); byte click_side = widget == RVW_WIDGET_LEFT_MATRIX ? 0 : 1; size_t engine_count = this->list[click_side].Length(); @@ -401,8 +401,8 @@ if (temp == sel_railtype) return; // we didn't select a new one. No need to change anything sel_railtype = temp; /* Reset scrollbar positions */ - this->vscroll.pos = 0; - this->vscroll2.pos = 0; + this->vscroll.SetPosition(0); + this->vscroll2.SetPosition(0); /* Rebuild the lists */ this->update_left = true; this->update_right = true; @@ -411,12 +411,12 @@ } virtual void OnResize(Point delta) { - this->vscroll.cap += delta.y / (int)this->resize.step_height; - this->vscroll2.cap += delta.y / (int)this->resize.step_height; + this->vscroll.UpdateCapacity(delta.y / (int)this->resize.step_height); + this->vscroll2.UpdateCapacity(delta.y / (int)this->resize.step_height); Widget *widget = this->widget; - widget[RVW_WIDGET_LEFT_MATRIX].data = widget[RVW_WIDGET_RIGHT_MATRIX].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); + widget[RVW_WIDGET_LEFT_MATRIX].data = widget[RVW_WIDGET_RIGHT_MATRIX].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START); if (delta.x != 0) { /* We changed the width of the window so we have to resize the lists.
--- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -143,16 +143,16 @@ this->bridges->NeedResort(); this->SortBridgeList(); - this->vscroll.count = bl->Length(); - this->vscroll.cap = this->nested_array[BBSW_BRIDGE_LIST]->current_y / this->resize.step_height; - if (this->last_size < this->vscroll.cap) this->last_size = this->vscroll.cap; - if (this->last_size > this->vscroll.count) this->last_size = this->vscroll.count; + this->vscroll.SetCount(bl->Length()); + this->vscroll.SetCapacity(this->nested_array[BBSW_BRIDGE_LIST]->current_y / this->resize.step_height); + if (this->last_size < this->vscroll.GetCapacity()) this->last_size = this->vscroll.GetCapacity(); + if (this->last_size > this->vscroll.GetCount()) this->last_size = this->vscroll.GetCount(); /* Resize the bridge selection window if we used a bigger one the last time. */ - if (this->last_size > this->vscroll.cap) { - ResizeWindow(this, 0, (this->last_size - this->vscroll.cap) * this->resize.step_height); - this->vscroll.cap = this->last_size; + if (this->last_size > this->vscroll.GetCapacity()) { + ResizeWindow(this, 0, (this->last_size - this->vscroll.GetCapacity()) * this->resize.step_height); + this->vscroll.SetCapacity(this->last_size); } - this->nested_array[BBSW_BRIDGE_LIST]->widget_data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); + this->nested_array[BBSW_BRIDGE_LIST]->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START); } ~BuildBridgeWindow() @@ -220,7 +220,7 @@ case BBSW_BRIDGE_LIST: { uint y = r.top; - for (int i = this->vscroll.pos; i < this->vscroll.cap + this->vscroll.pos && i < (int)this->bridges->Length(); i++) { + for (int i = this->vscroll.GetPosition(); this->vscroll.IsVisible(i) && i < (int)this->bridges->Length(); i++) { const BridgeSpec *b = this->bridges->Get(i)->spec; SetDParam(2, this->bridges->Get(i)->cost); @@ -254,8 +254,8 @@ default: break; case BBSW_BRIDGE_LIST: { uint i = ((int)pt.y - this->nested_array[BBSW_BRIDGE_LIST]->pos_y) / this->resize.step_height; - if (i < this->vscroll.cap) { - i += this->vscroll.pos; + if (i < this->vscroll.GetCapacity()) { + i += this->vscroll.GetPosition(); if (i < this->bridges->Length()) { this->BuildBridge(i); delete this; @@ -285,11 +285,10 @@ virtual void OnResize(Point delta) { - this->vscroll.cap += delta.y / (int)this->resize.step_height; - this->nested_array[BBSW_BRIDGE_LIST]->widget_data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); - SetVScrollCount(this, this->bridges->Length()); + this->vscroll.UpdateCapacity(delta.y / (int)this->resize.step_height); + this->nested_array[BBSW_BRIDGE_LIST]->widget_data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START); - this->last_size = max(this->vscroll.cap, this->last_size); + this->last_size = max(this->vscroll.GetCapacity(), this->last_size); } };
--- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -785,7 +785,7 @@ ResizeWindow(this, 0, vlh - 14); this->resize.step_height = vlh; - this->vscroll.cap = 1; + this->vscroll.SetCapacity(1); this->widget[BUILD_VEHICLE_WIDGET_LIST].data = (1 << MAT_ROW_START) | (1 << MAT_COL_START); this->resize.width = this->width; @@ -1052,7 +1052,7 @@ break; case BUILD_VEHICLE_WIDGET_LIST: { - uint i = (pt.y - this->widget[BUILD_VEHICLE_WIDGET_LIST].top) / GetVehicleListHeight(this->vehicle_type) + this->vscroll.pos; + uint i = (pt.y - this->widget[BUILD_VEHICLE_WIDGET_LIST].top) / GetVehicleListHeight(this->vehicle_type) + this->vscroll.GetPosition(); size_t num_items = this->eng_list.Length(); this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE; this->SetDirty(); @@ -1104,9 +1104,9 @@ { this->GenerateBuildList(); - uint max = min(this->vscroll.pos + this->vscroll.cap, this->eng_list.Length()); + uint max = min(this->vscroll.GetPosition() + this->vscroll.GetCapacity(), this->eng_list.Length()); - SetVScrollCount(this, this->eng_list.Length()); + this->vscroll.SetCount(this->eng_list.Length()); if (this->vehicle_type == VEH_TRAIN) { if (this->filter.railtype == RAILTYPE_END) { SetDParam(0, STR_BUILD_VEHICLE_TRAIN_ALL_CAPTION); @@ -1124,7 +1124,7 @@ this->DrawWidgets(); - DrawEngineList(this->vehicle_type, this->widget[BUILD_VEHICLE_WIDGET_LIST].left + 2, this->widget[BUILD_VEHICLE_WIDGET_LIST].right, this->widget[BUILD_VEHICLE_WIDGET_LIST].top + 1, &this->eng_list, this->vscroll.pos, max, this->sel_engine, 0, DEFAULT_GROUP); + DrawEngineList(this->vehicle_type, this->widget[BUILD_VEHICLE_WIDGET_LIST].left + 2, this->widget[BUILD_VEHICLE_WIDGET_LIST].right, this->widget[BUILD_VEHICLE_WIDGET_LIST].top + 1, &this->eng_list, this->vscroll.GetPosition(), max, this->sel_engine, 0, DEFAULT_GROUP); if (this->sel_engine != INVALID_ENGINE) { const Widget *wi = &this->widget[BUILD_VEHICLE_WIDGET_PANEL]; @@ -1186,8 +1186,8 @@ } if (delta.y == 0) return; - this->vscroll.cap += delta.y / (int)GetVehicleListHeight(this->vehicle_type); - this->widget[BUILD_VEHICLE_WIDGET_LIST].data = (this->vscroll.cap << MAT_ROW_START) + (1 << MAT_COL_START); + this->vscroll.UpdateCapacity(delta.y / (int)GetVehicleListHeight(this->vehicle_type)); + this->widget[BUILD_VEHICLE_WIDGET_LIST].data = (this->vscroll.GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START); } };
--- a/src/window_gui.h +++ b/src/window_gui.h @@ -264,6 +264,7 @@ */ void UpdateCapacity(int difference) { + if (difference == 0) return; this->SetCapacity(this->cap + difference); } @@ -285,6 +286,7 @@ */ void UpdatePosition(int difference) { + if (difference == 0) return; this->SetPosition(Clamp(this->pos + difference, 0, this->count - this->cap)); } };