Changeset - r28031:a4b8eb9ccfbb
[Not reviewed]
master
0 5 0
Peter Nelson - 14 months ago 2023-10-19 18:58:43
peter1138@openttd.org
Codechange: Use unified NWidgetContainer methods instead of duplicating.

Most NWidgetContainer derivatives implemented Draw() and GetWidgetFromPos()
the same way. Move this these to NWidgetContainer itself to avoid repeating.
5 files changed with 22 insertions and 69 deletions:
0 comments (0 inline, 0 general)
src/network/network_gui.cpp
Show inline comments
 
@@ -161,24 +161,6 @@ public:
 
			}
 
		}
 
	}
 

	
 
	void Draw(const Window *w) override
 
	{
 
		for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
			child_wid->Draw(w);
 
		}
 
	}
 

	
 
	NWidgetCore *GetWidgetFromPos(int x, int y) override
 
	{
 
		if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
 

	
 
		for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
			NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
 
			if (nwid != nullptr) return nwid;
 
		}
 
		return nullptr;
 
	}
 
};
 

	
 
class NetworkGameWindow : public Window {
src/smallmap_gui.cpp
Show inline comments
 
@@ -1763,21 +1763,6 @@ public:
 
		display->AssignSizePosition(ST_RESIZE, x, y, given_width, display_height, rtl);
 
		bar->AssignSizePosition(ST_RESIZE, x, y + display_height, given_width, bar_height, rtl);
 
	}
 

	
 
	NWidgetCore *GetWidgetFromPos(int x, int y) override
 
	{
 
		if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
 
		for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
			NWidgetCore *widget = child_wid->GetWidgetFromPos(x, y);
 
			if (widget != nullptr) return widget;
 
		}
 
		return nullptr;
 
	}
 

	
 
	void Draw(const Window *w) override
 
	{
 
		for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) child_wid->Draw(w);
 
	}
 
};
 

	
 
/** Widget parts of the smallmap display. */
src/toolbar_gui.cpp
Show inline comments
 
@@ -1477,21 +1477,7 @@ public:
 
		GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1, PC_VERY_DARK_RED);
 
		GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1, PC_DARK_RED, FILLRECT_CHECKER);
 

	
 
		bool rtl = _current_text_dir == TD_RTL;
 
		for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != nullptr; child_wid = rtl ? child_wid->prev : child_wid->next) {
 
			child_wid->Draw(w);
 
		}
 
	}
 

	
 
	NWidgetCore *GetWidgetFromPos(int x, int y) override
 
	{
 
		if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
 

	
 
		for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
			NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
 
			if (nwid != nullptr) return nwid;
 
		}
 
		return nullptr;
 
		this->NWidgetContainer::Draw(w);
 
	}
 

	
 
	/**
src/widget.cpp
Show inline comments
 
@@ -1303,6 +1303,24 @@ void NWidgetContainer::FillNestedArray(N
 
	}
 
}
 

	
 
void NWidgetContainer::Draw(const Window *w)
 
{
 
	for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
		child_wid->Draw(w);
 
	}
 
}
 

	
 
NWidgetCore *NWidgetContainer::GetWidgetFromPos(int x, int y)
 
{
 
	if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
 

	
 
	for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
		NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
 
		if (nwid != nullptr) return nwid;
 
	}
 
	return nullptr;
 
}
 

	
 
/**
 
 * Widgets stacked on top of each other.
 
 */
 
@@ -1465,24 +1483,6 @@ void NWidgetPIPContainer::SetPIP(uint8_t
 
	this->pip_post = ScaleGUITrad(this->uz_pip_post);
 
}
 

	
 
void NWidgetPIPContainer::Draw(const Window *w)
 
{
 
	for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
		child_wid->Draw(w);
 
	}
 
}
 

	
 
NWidgetCore *NWidgetPIPContainer::GetWidgetFromPos(int x, int y)
 
{
 
	if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr;
 

	
 
	for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) {
 
		NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y);
 
		if (nwid != nullptr) return nwid;
 
	}
 
	return nullptr;
 
}
 

	
 
/** Horizontal container widget. */
 
NWidgetHorizontal::NWidgetHorizontal(NWidContainerFlags flags) : NWidgetPIPContainer(NWID_HORIZONTAL, flags)
 
{
src/widget_type.h
Show inline comments
 
@@ -412,6 +412,9 @@ public:
 
	void Add(NWidgetBase *wid);
 
	void FillNestedArray(NWidgetBase **array, uint length) override;
 

	
 
	void Draw(const Window *w) override;
 
	NWidgetCore *GetWidgetFromPos(int x, int y) override;
 

	
 
	/** Return whether the container is empty. */
 
	inline bool IsEmpty() { return head == nullptr; }
 

	
 
@@ -480,9 +483,6 @@ public:
 
	void AdjustPaddingForZoom() override;
 
	void SetPIP(uint8_t pip_pre, uint8_t pip_inter, uint8_t pip_post);
 

	
 
	void Draw(const Window *w) override;
 
	NWidgetCore *GetWidgetFromPos(int x, int y) override;
 

	
 
protected:
 
	NWidContainerFlags flags; ///< Flags of the container.
 
	uint8_t pip_pre;            ///< Amount of space before first widget.
0 comments (0 inline, 0 general)