From e920871d67e9b4cd06675eebbf2f1ef16788508d Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 8 Jun 2018 22:57:29 +0200 Subject: [PATCH] Fix #7601: Always-researched items not rendered with inset. (#7638) This re-introduces the use of buffers to work around colours not being set properly. For clipping strings, we also now manually invoke `gfx_clip_string` instead of relying on `gfx_draw_string_left_clipped` to do it for us. The latter resets the current font, meaning it prevents the use of `MEDIUM_EXTRA_DARK` bases. This issue should be addressed in a later commit. --- .../windows/EditorInventionsList.cpp | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 090cabd775..c9127b14bf 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -773,39 +773,52 @@ static void window_editor_inventions_list_scrollpaint(rct_window *w, rct_drawpix if (researchItem == _editorInventionsListDraggedItem) continue; - uint8 colourFlags = 0; + utf8 groupNameBuffer[256], vehicleNameBuffer[256]; + utf8* groupNamePtr = groupNameBuffer; + utf8* vehicleNamePtr = vehicleNameBuffer; + + uint8 colour; if (research_item_is_always_researched(researchItem)) { - if (_editorInventionsListDraggedItem == nullptr) + if (w->research_item == researchItem && _editorInventionsListDraggedItem == nullptr) gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM_EXTRA_DARK; else gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM_DARK; - colourFlags = COLOUR_FLAG_INSET; + colour = w->colours[1] | COLOUR_FLAG_INSET; } else + { + // TODO: this is actually just a black colour. + colour = COLOUR_BRIGHT_GREEN | COLOUR_FLAG_TRANSLUCENT; gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM; + groupNamePtr = utf8_write_codepoint(groupNamePtr, colour); + vehicleNamePtr = utf8_write_codepoint(vehicleNamePtr, colour); + } + rct_string_id itemNameId = research_item_get_name(researchItem); - sint32 left = 1; - sint32 top = itemY; if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE && !RideGroupManager::RideTypeIsIndependent(researchItem->baseRideType)) { const rct_string_id rideGroupName = get_ride_naming(researchItem->baseRideType, get_ride_entry(researchItem->entryIndex)).name; - rct_string_id args[] = { - STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME, - rideGroupName, - }; - - // Group name - gfx_draw_string_left_clipped(dpi, STR_BLACK_STRING, &args, colourFlags, left, top, columnSplitOffset); - - // Vehicle name - gfx_draw_string_left_clipped(dpi, STR_BLACK_STRING, &itemNameId, colourFlags, left + columnSplitOffset, top, columnSplitOffset); + format_string(groupNamePtr, sizeof(groupNameBuffer), STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME, (void*) &rideGroupName); + format_string(vehicleNamePtr, sizeof(vehicleNamePtr), itemNameId, nullptr); } else { - gfx_draw_string_left_clipped(dpi, STR_BLACK_STRING, &itemNameId, colourFlags, left, top, boxWidth); + format_string(groupNamePtr, sizeof(groupNameBuffer), itemNameId, nullptr); + vehicleNamePtr = nullptr; + } + + // Draw group name + gfx_clip_string(groupNameBuffer, columnSplitOffset); + gfx_draw_string(dpi, groupNameBuffer, colour, 1, itemY); + + // Draw vehicle name + if (vehicleNamePtr) + { + gfx_clip_string(vehicleNameBuffer, columnSplitOffset); + gfx_draw_string(dpi, vehicleNameBuffer, colour, columnSplitOffset + 1, itemY); } } while (researchItem++->rawValue != researchItemEndMarker);