From: terencehill Date: Mon, 6 May 2013 16:55:05 +0000 (+0200) Subject: Optimize label code by avoiding to exec recalcPositionWithText every frame. It fixes... X-Git-Tag: xonotic-v0.7.0~56^2~1 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=522a3cc6235fa08549edf3bad875e0cf1de5e246;p=xonotic%2Fxonotic-data.pk3dir.git Optimize label code by avoiding to exec recalcPositionWithText every frame. It fixes msg spam in developer mode "NOTE: label text %s too wide for label, condensed by factor %f" caused by sliders with long strings (e.g. Velocity Zoom). --- diff --git a/qcsrc/menu/item/label.c b/qcsrc/menu/item/label.c index 378e74adb..5d0e7437f 100644 --- a/qcsrc/menu/item/label.c +++ b/qcsrc/menu/item/label.c @@ -8,6 +8,7 @@ CLASS(Label) EXTENDS(Item) METHOD(Label, recalcPositionWithText, void(entity, string)) ATTRIB(Label, isBold, float, 0) ATTRIB(Label, text, string, string_null) + ATTRIB(Label, currentText, string, string_null) ATTRIB(Label, fontSize, float, 8) ATTRIB(Label, align, float, 0.5) ATTRIB(Label, allowCut, float, 0) @@ -39,7 +40,13 @@ string Label_toString(entity me) void Label_setText(entity me, string txt) { me.text = txt; - me.recalcPos = 1; + if(txt != me.currentText) + { + if(me.currentText) + strunzone(me.currentText); + me.currentText = strzone(txt); + me.recalcPos = 1; + } } void Label_recalcPositionWithText(entity me, string t) { @@ -146,7 +153,13 @@ void Label_draw(entity me) if(me.textEntity) { t = me.textEntity.toString(me.textEntity); - me.recalcPos = 1; + if(t != me.currentText) + { + if(me.currentText) + strunzone(me.currentText); + me.currentText = strzone(t); + me.recalcPos = 1; + } } else t = me.text;