Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered.

Measurement tooltip was auto-closed as the hover/right-click test for tooltips was not
satisfied in this case. This is fixed by keeping the tooltip visible and instead explicitly
closing the tooltip when the PlaceObject is cancelled/completed.
pull/82/head
peter1138 5 years ago committed by PeterN
parent e3c639a09f
commit 4da83d2f66

@ -724,8 +724,8 @@ struct TooltipsWindow : public Window
* we are dragging the tool. Normal tooltips work with hover or rmb. */ * we are dragging the tool. Normal tooltips work with hover or rmb. */
switch (this->close_cond) { switch (this->close_cond) {
case TCC_RIGHT_CLICK: if (!_right_button_down) delete this; break; case TCC_RIGHT_CLICK: if (!_right_button_down) delete this; break;
case TCC_LEFT_CLICK: if (!_left_button_down) delete this; break;
case TCC_HOVER: if (!_mouse_hovering) delete this; break; case TCC_HOVER: if (!_mouse_hovering) delete this; break;
case TCC_NONE: break;
} }
} }
}; };

@ -2508,12 +2508,17 @@ void UpdateTileSelection()
* @param params (optional) up to 5 pieces of additional information that may be added to a tooltip * @param params (optional) up to 5 pieces of additional information that may be added to a tooltip
* @param close_cond Condition for closing this tooltip. * @param close_cond Condition for closing this tooltip.
*/ */
static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_LEFT_CLICK) static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_NONE)
{ {
if (!_settings_client.gui.measure_tooltip) return; if (!_settings_client.gui.measure_tooltip) return;
GuiShowTooltips(_thd.GetCallbackWnd(), str, paramcount, params, close_cond); GuiShowTooltips(_thd.GetCallbackWnd(), str, paramcount, params, close_cond);
} }
void HideMeasurementTooltips()
{
DeleteWindowById(WC_TOOLTIPS, 0);
}
/** highlighting tiles while only going over them with the mouse */ /** highlighting tiles while only going over them with the mouse */
void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process) void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process)
{ {
@ -2569,7 +2574,11 @@ void VpSetPresizeRange(TileIndex from, TileIndex to)
_thd.next_drawstyle = HT_RECT; _thd.next_drawstyle = HT_RECT;
/* show measurement only if there is any length to speak of */ /* show measurement only if there is any length to speak of */
if (distance > 1) ShowMeasurementTooltips(STR_MEASURE_LENGTH, 1, &distance, TCC_HOVER); if (distance > 1) {
ShowMeasurementTooltips(STR_MEASURE_LENGTH, 1, &distance);
} else {
HideMeasurementTooltips();
}
} }
static void VpStartPreSizing() static void VpStartPreSizing()
@ -3221,7 +3230,10 @@ void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowC
* this function might in some cases reset the newly set object to * this function might in some cases reset the newly set object to
* place or not properly reset the original selection. */ * place or not properly reset the original selection. */
_thd.window_class = WC_INVALID; _thd.window_class = WC_INVALID;
if (w != NULL) w->OnPlaceObjectAbort(); if (w != NULL) {
w->OnPlaceObjectAbort();
HideMeasurementTooltips();
}
} }
/* Mark the old selection dirty, in case the selection shape or colour changes */ /* Mark the old selection dirty, in case the selection shape or colour changes */

@ -873,8 +873,8 @@ void RelocateAllWindows(int neww, int newh);
/* misc_gui.cpp */ /* misc_gui.cpp */
enum TooltipCloseCondition { enum TooltipCloseCondition {
TCC_RIGHT_CLICK, TCC_RIGHT_CLICK,
TCC_LEFT_CLICK,
TCC_HOVER, TCC_HOVER,
TCC_NONE,
}; };
void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER); void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER);

Loading…
Cancel
Save