Merge lp:~widelands-dev/widelands/fh1-scenario-groundwork-emp1 into lp:widelands
- fh1-scenario-groundwork-emp1
- Merge into trunk
Status: | Merged |
---|---|
Merged at revision: | 8552 |
Proposed branch: | lp:~widelands-dev/widelands/fh1-scenario-groundwork-emp1 |
Merge into: | lp:widelands |
Diff against target: |
498 lines (+158/-58) 8 files modified
data/campaigns/emp01.wmf/scripting/texts.lua (+7/-8) data/scripting/format_scenario.lua (+85/-0) data/scripting/messages.lua (+5/-4) data/scripting/richtext.lua (+17/-15) data/scripting/richtext_scenarios.lua (+31/-30) src/graphic/text/rt_parse.cc (+1/-0) src/graphic/text/rt_render.cc (+1/-0) src/wui/game_objectives_menu.cc (+11/-1) |
To merge this branch: | bzr merge lp:~widelands-dev/widelands/fh1-scenario-groundwork-emp1 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
kaputtnik (community) | Needs Fixing | ||
Review via email: mp+335294@code.launchpad.net |
Commit message
Started converting scenarios to new font renderer
- Story Message Box and Objectives now try to use the new font renderer before falling back to the old one.
- Added version of scenario formatting for the new renderer.
- Converted Empire Scenario 1 to new font renderer
- Atlantean campaign now uses the campaign_
Description of the change
Finished the needed C++ programming for converting the scenarios to the new font renderer. Using Tutorial 1 and Empire 1 as test cases.
When testing, all story messages and objectives need to be looked at, to make sure that there's no broken markup.
https:/
bunnybot (widelandsofficial) wrote : | # |
kaputtnik (franku) wrote : | # |
I guessed the issue i found also in current trunk will be fixed when converting to the new font renderer, but when opening the first tutorial with this branch i get the same messages in terminal for each message box:
Story Message Box: falling back to OLD font renderer:
[..]
Syntax error at 1:20: expected an allowed attribute, got 'font-size'. String continues with: '=18 font-weight=bold font-color=
or:
Syntax error at 1:23: expected an allowed attribute, got 'line-spacing'. String continues with: '=3 font-size=12>First, I’ll left-click on the symbol where I want the lumberjack’s hut to be bui'
There is also one with 'image'
Is this a new bug?
GunChleoc (gunchleoc) wrote : | # |
Actually, that should not happen with the first tutorial - looks like I missed something while converting the scenario.
For all other scenarios, that message is expected.
GunChleoc (gunchleoc) wrote : | # |
Seems like my changes for Tutorial1 didn't land in the branch, so they're lost now. Will have to redo those in another branch.
Is the empire scenario clean?
kaputtnik (franku) wrote : | # |
The text in the first message does not use the available width below the image. The text appears all on the right side. In trunk the text uses the whole width of the message box below the image if the text block is taller than the height of the image.
All other looks good, imho.
Sorry for posting in the wrong merge request :-S
kaputtnik (franku) wrote : | # |
Some nitpicking in the comments
GunChleoc (gunchleoc) wrote : | # |
Thanks for the review :)
Needs a quick retest before merging.
kaputtnik (franku) wrote : | # |
Looks like there was a merge conflict wich is not solved in scenario/
The scenario does not even load:
Trying to run: map:scripting/
FATAL ERROR - game crashed. Attempting emergency save.
GunChleoc (gunchleoc) wrote : | # |
Hopefully fixed now.
kaputtnik (franku) wrote : | # |
No, see diff comment.
bunnybot (widelandsofficial) wrote : | # |
Continuous integration builds have changed state:
Travis build 3027. State: errored. Details: https:/
Appveyor build 2835. State: success. Details: https:/
GunChleoc (gunchleoc) wrote : | # |
Good thing Travis errored - I hate not being able to compile. Should be fixed now.
GunChleoc (gunchleoc) wrote : | # |
@bunnybot merge
kaputtnik (franku) wrote : | # |
The text of the first message does not yet slip below the image which i have tried to explain in https:/
bunnybot (widelandsofficial) wrote : | # |
Continuous integration builds have changed state:
Travis build 3033. State: failed. Details: https:/
Appveyor build 2841. State: success. Details: https:/
bunnybot (widelandsofficial) wrote : | # |
Refusing to merge, since Travis is not green. Use @bunnybot merge force for merging anyways.
Travis build 3033. State: failed. Details: https:/
GunChleoc (gunchleoc) wrote : | # |
No, it hasn't, since that's already known - it will take come non-trivial coding to add the feature to the new font renderer too. There is some stuff the new renderer can do that the old one can't - e.g. proper bullet-point lists - and vice versa.
I still think that converting everything now is important though, since our Korean translator can see only blank squares.
Is everything else OK in this branch now?
kaputtnik (franku) wrote : | # |
It's not a show stopper, and everything else looks good, so get this in now :-)
@bunnybot merge force
GunChleoc (gunchleoc) wrote : | # |
Thanks for the review :)
Preview Diff
1 | === modified file 'data/campaigns/emp01.wmf/scripting/texts.lua' |
2 | --- data/campaigns/emp01.wmf/scripting/texts.lua 2016-05-17 16:40:22 +0000 |
3 | +++ data/campaigns/emp01.wmf/scripting/texts.lua 2018-01-06 11:27:52 +0000 |
4 | @@ -2,8 +2,7 @@ |
5 | -- Some formating functions |
6 | -- ========================= |
7 | |
8 | -include "scripting/formatting.lua" |
9 | -include "scripting/format_scenario.lua" |
10 | +include "scripting/richtext_scenarios.lua" |
11 | |
12 | function lutius(title, text) |
13 | return speech("map:Lutius.png", "2F9131", title, text) |
14 | @@ -28,7 +27,7 @@ |
15 | title=_"Build a blockhouse", |
16 | number = 1, |
17 | body = objective_text(_"Blockhouse", |
18 | - listitem_bullet(_[[Build a blockhouse at the red house symbol on the east side of the forests, to the right of your provisional headquarters.]]) |
19 | + li(_[[Build a blockhouse at the red house symbol on the east side of the forests, to the right of your provisional headquarters.]]) |
20 | ), |
21 | } |
22 | |
23 | @@ -37,7 +36,7 @@ |
24 | title=_"Build a lumberjack’s house", |
25 | number = 1, |
26 | body = objective_text(_"Lumberjack’s House", |
27 | - listitem_bullet(_[[Build a lumberjack’s house at the red house symbol, south of your provisional headquarters.]]) |
28 | + li(_[[Build a lumberjack’s house at the red house symbol, south of your provisional headquarters.]]) |
29 | ), |
30 | } |
31 | |
32 | @@ -46,7 +45,7 @@ |
33 | title=_"Build 2 lumberjack’s houses and a sawmill", |
34 | number = 3, |
35 | body = objective_text(_"Two Lumberjack’s Houses and a Sawmill", |
36 | - listitem_bullet(_[[Build two more lumberjack’s houses and a sawmill as soon as there is enough space for them.]]) |
37 | + li(_[[Build two more lumberjack’s houses and a sawmill as soon as there is enough space for them.]]) |
38 | ), |
39 | } |
40 | |
41 | @@ -55,7 +54,7 @@ |
42 | title=_"Build a forester’s house", |
43 | number = 1, |
44 | body = objective_text(_"Forester’s House", |
45 | - listitem_bullet(_[[Build a forester’s house to preserve the wood resources of this island.]]) |
46 | + li(_[[Build a forester’s house to preserve the wood resources of this island.]]) |
47 | ), |
48 | } |
49 | |
50 | @@ -64,8 +63,8 @@ |
51 | title=_"Build a quarry", |
52 | number = 5, |
53 | body = objective_text(_"Quarry", |
54 | - listitem_bullet(_[[Build a quarry in the south to cut some granite and marble out of the rocks.]]) .. |
55 | - listitem_arrow(_[[These might be used for future buildings.]]) |
56 | + li(_[[Build a quarry in the south to cut some granite and marble out of the rocks.]]) .. |
57 | + li_arrow(_[[These might be used for future buildings.]]) |
58 | ), |
59 | } |
60 | |
61 | |
62 | === added file 'data/scripting/format_scenario.lua' |
63 | --- data/scripting/format_scenario.lua 1970-01-01 00:00:00 +0000 |
64 | +++ data/scripting/format_scenario.lua 2018-01-06 11:27:52 +0000 |
65 | @@ -0,0 +1,85 @@ |
66 | +-- RST |
67 | +-- format_scenario.lua |
68 | +-- ------------------- |
69 | +-- |
70 | +-- Function to simplify and unique text formatting in scenarios. Most of these |
71 | +-- functions are simple wrapper functions that make working with widelands rich |
72 | +-- text formatting system more bearable. |
73 | + |
74 | + |
75 | +-- RST |
76 | +-- .. function:: speech(img, clr, title, text) |
77 | +-- |
78 | +-- Formats a text as spoken by one person in a scenario. Use it as follows: |
79 | +-- |
80 | +-- .. code-block:: lua |
81 | +-- |
82 | +-- function jundlina(title, text) |
83 | +-- return speech("map:princess.png", "2F9131", title, text) |
84 | +-- end |
85 | +-- |
86 | +-- :arg img: name of the image to use for this speaker |
87 | +-- :arg clr: a valid 6 char hex color to use for the name of this speaker |
88 | +-- :arg title: Title of this text. |
89 | +-- :arg text: The text itself. If this is nil, :const:`title` is used as text |
90 | +-- instead and there will not be any title. |
91 | +-- :returns: the formatted text. |
92 | + |
93 | +function speech(img, clr, g_title, g_text) |
94 | + local title, text = g_title, g_text |
95 | + if not text then |
96 | + title = nil |
97 | + text = g_title |
98 | + end |
99 | + |
100 | + -- Surround the text with translatable "," |
101 | + text = (_'“%s”'):format(text) |
102 | + |
103 | + local s = "" |
104 | + if title then |
105 | + s = rt("<p font-size=20 font-weight=bold font-face=serif " .. |
106 | + ("font-color=%s>"):format(clr) .. title .. |
107 | + "</p><p font-size=8> <br></p>" |
108 | + ) |
109 | + end |
110 | + |
111 | + return s .. rt(("image=%s"):format(img), p(text)) |
112 | +end |
113 | + |
114 | + |
115 | +-- RST |
116 | +-- .. function:: objective_text(heading, body) |
117 | +-- |
118 | +-- Provides nice formatting for objective texts. |
119 | +-- |
120 | +-- :returns: a rich text object that contains the formatted |
121 | +-- objective text. |
122 | +-- |
123 | +function objective_text(heading, body) |
124 | + return rt(h2(heading) .. p(body)) |
125 | +end |
126 | + |
127 | + |
128 | +-- RST |
129 | +-- Append an objective text with a header to a dialog box in a nice fashion. |
130 | +-- For displaying objectives with an extra title when an advisor is talking |
131 | +-- |
132 | +-- Provides nice formatting for objective texts. |
133 | +-- the following arguments will be parsed: |
134 | +-- number: the number of objectives described in the body |
135 | +-- body: the objective text, e.g. created with function objective_text(heading, body) |
136 | +-- |
137 | +-- :returns: a rich text object that contains the formatted |
138 | +-- objective text & title. |
139 | +-- |
140 | +function new_objectives(...) |
141 | + local sum = 0 |
142 | + local s = "" |
143 | + for idx,obj in ipairs{...} do |
144 | + s = s .. obj.body |
145 | + sum = sum + obj.number |
146 | + end |
147 | + return rt("<p font-size=10> <br></p>" .. |
148 | + "<p font=serif font-size=18 font-weight=bold font-color=D1D1D1>" |
149 | + .. ngettext("New Objective", "New Objectives", sum) .. "</p>") .. s |
150 | +end |
151 | |
152 | === modified file 'data/scripting/messages.lua' |
153 | --- data/scripting/messages.lua 2017-05-12 09:43:57 +0000 |
154 | +++ data/scripting/messages.lua 2018-01-06 11:27:52 +0000 |
155 | @@ -5,6 +5,7 @@ |
156 | -- Functions to send messages to the player and to add objectives to campaigns. |
157 | |
158 | include "scripting/coroutine.lua" |
159 | +include "scripting/richtext.lua" |
160 | include "scripting/table.lua" |
161 | include "scripting/ui.lua" |
162 | |
163 | @@ -51,7 +52,7 @@ |
164 | -- While the message box is shown, the user cannot do anything else anyway. |
165 | local user_input = wl.ui.get_user_input_allowed() |
166 | wl.ui.set_user_input_allowed(true) |
167 | - player:message_box(title, body, parameters) |
168 | + player:message_box(title, rt(body), parameters) |
169 | wl.ui.set_user_input_allowed(user_input) |
170 | end |
171 | |
172 | @@ -83,9 +84,9 @@ |
173 | -- |
174 | function add_campaign_objective(objective) |
175 | if objective.obj_name then |
176 | - return wl.Game().players[1]:add_objective(objective.obj_name, objective.obj_title, objective.obj_body) |
177 | + return wl.Game().players[1]:add_objective(objective.obj_name, objective.obj_title, rt(objective.obj_body)) |
178 | else |
179 | - return wl.Game().players[1]:add_objective(objective.name, objective.title, objective.body) |
180 | + return wl.Game().players[1]:add_objective(objective.name, objective.title, rt(objective.body)) |
181 | end |
182 | end |
183 | |
184 | @@ -160,7 +161,7 @@ |
185 | -- message_box takes care of this, but player:message_box does not |
186 | local user_input = wl.ui.get_user_input_allowed() |
187 | wl.ui.set_user_input_allowed(true) |
188 | - player:message_box(message.title, message.body, message) |
189 | + player:message_box(message.title, rt(message.body), message) |
190 | wl.ui.set_user_input_allowed(user_input) |
191 | else |
192 | message_box(plr, message.title, message.body, message) |
193 | |
194 | === modified file 'data/scripting/richtext.lua' |
195 | --- data/scripting/richtext.lua 2018-01-04 14:29:21 +0000 |
196 | +++ data/scripting/richtext.lua 2018-01-06 11:27:52 +0000 |
197 | @@ -73,7 +73,7 @@ |
198 | -- :arg text: the text to be enclosed in rich text tags. |
199 | -- :type text: :class:`string` |
200 | -- :returns: the wrapped rich text. |
201 | --- |
202 | + |
203 | function rt(text_or_attributes, text) |
204 | if text then |
205 | return "<rt " .. text_or_attributes .. ">" .. text .. "</rt>" |
206 | @@ -99,7 +99,7 @@ |
207 | -- ref: TODO(GunChleoc): I have no idea what it does. |
208 | -- |
209 | -- :returns: the img tag. |
210 | --- |
211 | + |
212 | function img(src, attributes) |
213 | if attributes then |
214 | return "<img src=" .. src .." " .. attributes .. ">" |
215 | @@ -148,7 +148,7 @@ |
216 | -- Like :func:`h2` but smaller. |
217 | -- |
218 | -- :returns: A paragraph with text formatted as heading. |
219 | --- |
220 | + |
221 | function h3(text) |
222 | return p_font("", "size=13 color=D1D1D1", vspace(6) .. text .. vspace(1)) |
223 | end |
224 | @@ -160,7 +160,7 @@ |
225 | -- Like :func:`h3` but smaller. |
226 | -- |
227 | -- :returns: A paragraph with text formatted as heading. |
228 | --- |
229 | + |
230 | function h4(text) |
231 | return p_font("", "size=12 italic=1 color=D1D1D1", text) |
232 | end |
233 | @@ -233,7 +233,7 @@ |
234 | -- |
235 | -- :returns: The closing tags for a paragraph |
236 | function close_p(t) |
237 | - return vspace(6) .. "</font></p>" |
238 | + return vspace(6) .. "</font>" .. vspace(6) .. "</p>" |
239 | end |
240 | |
241 | -- RST |
242 | @@ -252,7 +252,7 @@ |
243 | -- ref: TODO(GunChleoc): I don't know what this does. |
244 | -- |
245 | -- :returns: The text wrapped in font tags with the given attributes |
246 | --- |
247 | + |
248 | function font(attributes, text) |
249 | return ("<font %s>"):format(attributes) .. text .. "</font>" |
250 | end |
251 | @@ -264,7 +264,7 @@ |
252 | -- :arg gap: the size of the space as pixels. |
253 | -- |
254 | -- :returns: a space tag |
255 | --- |
256 | + |
257 | function space(gap) |
258 | return "<space gap="..gap..">" |
259 | end |
260 | @@ -276,7 +276,7 @@ |
261 | -- :arg gap: the size of the space as pixels. |
262 | -- |
263 | -- :returns: a vspace tag |
264 | --- |
265 | + |
266 | function vspace(gap) |
267 | return "<vspace gap="..gap..">" |
268 | end |
269 | @@ -290,7 +290,7 @@ |
270 | -- :arg dd: "description data", will be rendered normally. |
271 | -- |
272 | -- :returns: a p tag containing the formatted text |
273 | --- |
274 | + |
275 | function dl(dt, dd) |
276 | return p(b(dt) .. " " .. dd) |
277 | end |
278 | @@ -305,6 +305,7 @@ |
279 | -- :arg text: the text of the list item |
280 | -- |
281 | -- :returns: a p tag containing the formatted text |
282 | + |
283 | function li(text_or_symbol, text) |
284 | if text then |
285 | return div(p(text_or_symbol)) .. div(p(space(6))) .. div("width=*", p(text .. vspace(6))) |
286 | @@ -336,6 +337,7 @@ |
287 | -- :arg text: the text to be placed next to the image |
288 | -- |
289 | -- :returns: the text wrapped in a paragraph and placed next to the image, the outer tag is a div. |
290 | + |
291 | function li_image(imagepath, text) |
292 | return |
293 | div("width=100%", |
294 | @@ -353,7 +355,7 @@ |
295 | -- :arg link: the text to format |
296 | -- |
297 | -- :returns: a font tag containing the underlined text |
298 | --- |
299 | + |
300 | function a(link) |
301 | return font("underline=1", link) |
302 | end |
303 | @@ -366,7 +368,7 @@ |
304 | -- :arg link: the text to format |
305 | -- |
306 | -- :returns: a font tag containing the bold text |
307 | --- |
308 | + |
309 | function b(text) |
310 | return font("bold=1", text) |
311 | end |
312 | @@ -379,7 +381,7 @@ |
313 | -- :arg link: the text to format |
314 | -- |
315 | -- :returns: a font tag containing the italic text |
316 | --- |
317 | + |
318 | function i(text) |
319 | return font("italic=1", text) |
320 | end |
321 | @@ -391,7 +393,7 @@ |
322 | -- :arg link: the text to format |
323 | -- |
324 | -- :returns: a font tag containing the underlined text |
325 | --- |
326 | + |
327 | function u(text) |
328 | return font("underline=1", text) |
329 | end |
330 | @@ -416,7 +418,7 @@ |
331 | -- :arg text: the text to be enclosed in div tags. |
332 | -- :type text: :class:`string` |
333 | -- :returns: the text wrapped in a div tag. |
334 | --- |
335 | + |
336 | function div(text_or_attributes, text) |
337 | if text then |
338 | return ("<div %s>"):format(text_or_attributes) .. text .. "</div>" |
339 | @@ -433,7 +435,7 @@ |
340 | -- :arg t1: text in h3 format. |
341 | -- :arg t2: text in p format. |
342 | -- :returns: header text followed by normal text. |
343 | --- |
344 | + |
345 | function inline_header(header, text) |
346 | return |
347 | div("width=100%", vspace(8)) .. |
348 | |
349 | === renamed file 'data/scripting/format_scenario.lua' => 'data/scripting/richtext_scenarios.lua' |
350 | --- data/scripting/format_scenario.lua 2016-10-19 09:00:29 +0000 |
351 | +++ data/scripting/richtext_scenarios.lua 2018-01-06 11:27:52 +0000 |
352 | @@ -1,12 +1,13 @@ |
353 | +include "scripting/richtext.lua" |
354 | + |
355 | -- RST |
356 | --- format_scenario.lua |
357 | --- ------------------- |
358 | +-- richtext_scenarios.lua |
359 | +-- ---------------------- |
360 | -- |
361 | -- Function to simplify and unique text formatting in scenarios. Most of these |
362 | -- functions are simple wrapper functions that make working with widelands rich |
363 | -- text formatting system more bearable. |
364 | |
365 | - |
366 | -- RST |
367 | -- .. function:: speech(img, clr, title, text) |
368 | -- |
369 | @@ -20,31 +21,33 @@ |
370 | -- |
371 | -- :arg img: name of the image to use for this speaker |
372 | -- :arg clr: a valid 6 char hex color to use for the name of this speaker |
373 | --- :arg title: Title of this text. |
374 | --- :arg text: The text itself. If this is nil, :const:`title` is used as text |
375 | --- instead and there will not be any title. |
376 | +-- :arg title: Title of this text. Use empty string if you don't want any. |
377 | +-- :arg text: The text itself. |
378 | -- :returns: the formatted text. |
379 | --- |
380 | -function speech(img, clr, g_title, g_text) |
381 | - local title, text = g_title, g_text |
382 | - if not text then |
383 | - title = nil |
384 | - text = g_title |
385 | + |
386 | +function speech(img, clr, title, text) |
387 | + if title ~= "" then |
388 | + title = h1(clr, title) |
389 | end |
390 | |
391 | -- Surround the text with translatable "," |
392 | text = (_'“%s”'):format(text) |
393 | |
394 | - local s = "" |
395 | - if title then |
396 | - s = rt("<p font-size=20 font-weight=bold font-face=serif " .. |
397 | - ("font-color=%s>"):format(clr) .. title .. |
398 | - "</p><p font-size=8> <br></p>" |
399 | - ) |
400 | - end |
401 | - |
402 | - return s .. rt(("image=%s"):format(img), p(text)) |
403 | -end |
404 | + return title .. li_image(img, p(text)) |
405 | +end |
406 | + |
407 | +-- RST |
408 | +-- .. function:: paragraphdivider() |
409 | +-- |
410 | +-- Closes a paragraph and opens a new paragraph. Use this when you format a string with the speech function |
411 | +-- and need to divide the speech into multiple paragraphs. |
412 | +-- |
413 | +-- :returns: close_p() .. open_p() |
414 | + |
415 | +function paragraphdivider() |
416 | + return close_p() .. open_p() |
417 | +end |
418 | + |
419 | |
420 | |
421 | -- RST |
422 | @@ -54,9 +57,9 @@ |
423 | -- |
424 | -- :returns: a rich text object that contains the formatted |
425 | -- objective text. |
426 | --- |
427 | + |
428 | function objective_text(heading, body) |
429 | - return rt(h2(heading) .. p(body)) |
430 | + return h2(heading) .. p(body) |
431 | end |
432 | |
433 | |
434 | @@ -71,15 +74,13 @@ |
435 | -- |
436 | -- :returns: a rich text object that contains the formatted |
437 | -- objective text & title. |
438 | --- |
439 | + |
440 | function new_objectives(...) |
441 | local sum = 0 |
442 | - local s = "" |
443 | + local text = "" |
444 | for idx,obj in ipairs{...} do |
445 | - s = s .. obj.body |
446 | + text = text .. obj.body |
447 | sum = sum + obj.number |
448 | end |
449 | - return rt("<p font-size=10> <br></p>" .. |
450 | - "<p font=serif font-size=18 font-weight=bold font-color=D1D1D1>" |
451 | - .. ngettext("New Objective", "New Objectives", sum) .. "</p>") .. s |
452 | + return h1(ngettext("New Objective", "New Objectives", sum)) .. text |
453 | end |
454 | |
455 | === modified file 'src/graphic/text/rt_parse.cc' |
456 | --- src/graphic/text/rt_parse.cc 2017-12-06 06:47:34 +0000 |
457 | +++ src/graphic/text/rt_parse.cc 2018-01-06 11:27:52 +0000 |
458 | @@ -256,6 +256,7 @@ |
459 | |
460 | tc.allowed_children.insert("font"); |
461 | tc.allowed_children.insert("space"); |
462 | + tc.allowed_children.insert("vspace"); |
463 | tc.allowed_children.insert("br"); |
464 | tc.allowed_children.insert("img"); |
465 | tc.allowed_children.insert("div"); |
466 | |
467 | === modified file 'src/graphic/text/rt_render.cc' |
468 | --- src/graphic/text/rt_render.cc 2017-12-28 14:57:00 +0000 |
469 | +++ src/graphic/text/rt_render.cc 2018-01-06 11:27:52 +0000 |
470 | @@ -828,6 +828,7 @@ |
471 | for (std::shared_ptr<RenderNode> n : nodes_to_render_) { |
472 | // TODO(GunChleoc): With div width=*, we are getting newline nodes here, which should have |
473 | // been consumed |
474 | + // https://bugs.launchpad.net/widelands/+bug/1738760 |
475 | const auto& renderme = n->render(texture_cache); |
476 | for (auto& rendered_rect : renderme->rects) { |
477 | if (rendered_rect->was_visited()) { |
478 | |
479 | === modified file 'src/wui/game_objectives_menu.cc' |
480 | --- src/wui/game_objectives_menu.cc 2017-02-23 17:58:25 +0000 |
481 | +++ src/wui/game_objectives_menu.cc 2018-01-06 11:27:52 +0000 |
482 | @@ -86,5 +86,15 @@ |
483 | * An entry in the objectives menu has been selected |
484 | */ |
485 | void GameObjectivesMenu::selected(uint32_t const t) { |
486 | - objectivetext.set_text(t == ListType::no_selection_index() ? std::string() : list[t].descr()); |
487 | + const std::string text = t == ListType::no_selection_index() ? "" : list[t].descr(); |
488 | + // TODO(GunChleoc): When all campaigns, scenarios and win conditions have been converted, simply add the text above. |
489 | + try { |
490 | + objectivetext.force_new_renderer(); |
491 | + objectivetext.set_text(text); |
492 | + log("Objectives: using NEW font renderer.\n"); |
493 | + } catch (const std::exception& e) { |
494 | + log("Objectives: falling back to OLD font renderer:\n%s\n%s\n", text.c_str(), e.what()); |
495 | + objectivetext.force_new_renderer(false); |
496 | + objectivetext.set_text(text); |
497 | + } |
498 | } |
Continuous integration builds have changed state:
Travis build 2974. State: failed. Details: https:/ /travis- ci.org/ widelands/ widelands/ builds/ 317654212. /ci.appveyor. com/project/ widelands- dev/widelands/ build/_ widelands_ dev_widelands_ fh1_scenario_ groundwork_ emp1-2783.
Appveyor build 2783. State: success. Details: https:/