mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-30 23:50:05 +00:00 
			
		
		
		
	Refactor tooltip display
This commit is contained in:
		
							parent
							
								
									9ebc859756
								
							
						
					
					
						commit
						0badf01a92
					
				
					 8 changed files with 87 additions and 28 deletions
				
			
		|  | @ -224,7 +224,8 @@ set(HDR_UTIL source/scwx/qt/util/color.hpp | ||||||
|              source/scwx/qt/util/texture_atlas.hpp |              source/scwx/qt/util/texture_atlas.hpp | ||||||
|              source/scwx/qt/util/q_file_buffer.hpp |              source/scwx/qt/util/q_file_buffer.hpp | ||||||
|              source/scwx/qt/util/q_file_input_stream.hpp |              source/scwx/qt/util/q_file_input_stream.hpp | ||||||
|              source/scwx/qt/util/time.hpp) |              source/scwx/qt/util/time.hpp | ||||||
|  |              source/scwx/qt/util/tooltip.hpp) | ||||||
| set(SRC_UTIL source/scwx/qt/util/color.cpp | set(SRC_UTIL source/scwx/qt/util/color.cpp | ||||||
|              source/scwx/qt/util/file.cpp |              source/scwx/qt/util/file.cpp | ||||||
|              source/scwx/qt/util/font.cpp |              source/scwx/qt/util/font.cpp | ||||||
|  | @ -237,7 +238,8 @@ set(SRC_UTIL source/scwx/qt/util/color.cpp | ||||||
|              source/scwx/qt/util/texture_atlas.cpp |              source/scwx/qt/util/texture_atlas.cpp | ||||||
|              source/scwx/qt/util/q_file_buffer.cpp |              source/scwx/qt/util/q_file_buffer.cpp | ||||||
|              source/scwx/qt/util/q_file_input_stream.cpp |              source/scwx/qt/util/q_file_input_stream.cpp | ||||||
|              source/scwx/qt/util/time.cpp) |              source/scwx/qt/util/time.cpp | ||||||
|  |              source/scwx/qt/util/tooltip.cpp) | ||||||
| set(HDR_VIEW source/scwx/qt/view/level2_product_view.hpp | set(HDR_VIEW source/scwx/qt/view/level2_product_view.hpp | ||||||
|              source/scwx/qt/view/level3_product_view.hpp |              source/scwx/qt/view/level3_product_view.hpp | ||||||
|              source/scwx/qt/view/level3_radial_view.hpp |              source/scwx/qt/view/level3_radial_view.hpp | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #include <scwx/qt/gl/draw/placefile_icons.hpp> | #include <scwx/qt/gl/draw/placefile_icons.hpp> | ||||||
| #include <scwx/qt/util/imgui.hpp> |  | ||||||
| #include <scwx/qt/util/maplibre.hpp> | #include <scwx/qt/util/maplibre.hpp> | ||||||
| #include <scwx/qt/util/texture_atlas.hpp> | #include <scwx/qt/util/texture_atlas.hpp> | ||||||
|  | #include <scwx/qt/util/tooltip.hpp> | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
| 
 | 
 | ||||||
| #include <execution> | #include <execution> | ||||||
|  | @ -685,7 +685,7 @@ void PlacefileIcons::Impl::Update(bool textureAtlasChanged) | ||||||
| bool PlacefileIcons::RunMousePicking( | bool PlacefileIcons::RunMousePicking( | ||||||
|    const QMapLibreGL::CustomLayerRenderParameters& params, |    const QMapLibreGL::CustomLayerRenderParameters& params, | ||||||
|    const QPointF& /* mouseLocalPos */, |    const QPointF& /* mouseLocalPos */, | ||||||
|    const QPointF& /* mouseGlobalPos */, |    const QPointF&   mouseGlobalPos, | ||||||
|    const glm::vec2& mouseCoords) |    const glm::vec2& mouseCoords) | ||||||
| { | { | ||||||
|    std::unique_lock lock {p->iconMutex_}; |    std::unique_lock lock {p->iconMutex_}; | ||||||
|  | @ -774,7 +774,7 @@ bool PlacefileIcons::RunMousePicking( | ||||||
|    if (it != p->currentHoverIcons_.crend()) |    if (it != p->currentHoverIcons_.crend()) | ||||||
|    { |    { | ||||||
|       itemPicked = true; |       itemPicked = true; | ||||||
|       util::ImGui::Instance().DrawTooltip(it->di_->hoverText_); |       util::tooltip::Show(it->di_->hoverText_, mouseGlobalPos); | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    return itemPicked; |    return itemPicked; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #include <scwx/qt/gl/draw/placefile_lines.hpp> | #include <scwx/qt/gl/draw/placefile_lines.hpp> | ||||||
| #include <scwx/qt/util/geographic_lib.hpp> | #include <scwx/qt/util/geographic_lib.hpp> | ||||||
| #include <scwx/qt/util/imgui.hpp> |  | ||||||
| #include <scwx/qt/util/maplibre.hpp> | #include <scwx/qt/util/maplibre.hpp> | ||||||
|  | #include <scwx/qt/util/tooltip.hpp> | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
| 
 | 
 | ||||||
| #include <execution> | #include <execution> | ||||||
|  | @ -498,7 +498,7 @@ void PlacefileLines::Impl::Update() | ||||||
| bool PlacefileLines::RunMousePicking( | bool PlacefileLines::RunMousePicking( | ||||||
|    const QMapLibreGL::CustomLayerRenderParameters& params, |    const QMapLibreGL::CustomLayerRenderParameters& params, | ||||||
|    const QPointF& /* mouseLocalPos */, |    const QPointF& /* mouseLocalPos */, | ||||||
|    const QPointF& /* mouseGlobalPos */, |    const QPointF&   mouseGlobalPos, | ||||||
|    const glm::vec2& mouseCoords) |    const glm::vec2& mouseCoords) | ||||||
| { | { | ||||||
|    std::unique_lock lock {p->lineMutex_}; |    std::unique_lock lock {p->lineMutex_}; | ||||||
|  | @ -589,7 +589,7 @@ bool PlacefileLines::RunMousePicking( | ||||||
|    if (it != p->currentHoverLines_.crend()) |    if (it != p->currentHoverLines_.crend()) | ||||||
|    { |    { | ||||||
|       itemPicked = true; |       itemPicked = true; | ||||||
|       util::ImGui::Instance().DrawTooltip(it->di_->hoverText_); |       util::tooltip::Show(it->di_->hoverText_, mouseGlobalPos); | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    return itemPicked; |    return itemPicked; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include <scwx/qt/gl/draw/placefile_text.hpp> | #include <scwx/qt/gl/draw/placefile_text.hpp> | ||||||
| #include <scwx/qt/util/imgui.hpp> |  | ||||||
| #include <scwx/qt/util/maplibre.hpp> | #include <scwx/qt/util/maplibre.hpp> | ||||||
|  | #include <scwx/qt/util/tooltip.hpp> | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
| 
 | 
 | ||||||
| #include <fmt/format.h> | #include <fmt/format.h> | ||||||
|  | @ -210,7 +210,7 @@ void PlacefileText::Deinitialize() | ||||||
| bool PlacefileText::RunMousePicking( | bool PlacefileText::RunMousePicking( | ||||||
|    const QMapLibreGL::CustomLayerRenderParameters& /* params */, |    const QMapLibreGL::CustomLayerRenderParameters& /* params */, | ||||||
|    const QPointF& /* mouseLocalPos */, |    const QPointF& /* mouseLocalPos */, | ||||||
|    const QPointF& /* mouseGlobalPos */, |    const QPointF& mouseGlobalPos, | ||||||
|    const glm::vec2& /* mouseCoords */) |    const glm::vec2& /* mouseCoords */) | ||||||
| { | { | ||||||
|    bool itemPicked = false; |    bool itemPicked = false; | ||||||
|  | @ -219,7 +219,7 @@ bool PlacefileText::RunMousePicking( | ||||||
|    if (!p->hoverText_.empty()) |    if (!p->hoverText_.empty()) | ||||||
|    { |    { | ||||||
|       itemPicked = true; |       itemPicked = true; | ||||||
|       util::ImGui::Instance().DrawTooltip(p->hoverText_); |       util::tooltip::Show(p->hoverText_, mouseGlobalPos); | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    return itemPicked; |    return itemPicked; | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ | ||||||
| #include <scwx/qt/model/imgui_context_model.hpp> | #include <scwx/qt/model/imgui_context_model.hpp> | ||||||
| #include <scwx/qt/util/file.hpp> | #include <scwx/qt/util/file.hpp> | ||||||
| #include <scwx/qt/util/maplibre.hpp> | #include <scwx/qt/util/maplibre.hpp> | ||||||
|  | #include <scwx/qt/util/tooltip.hpp> | ||||||
| #include <scwx/qt/view/radar_product_view_factory.hpp> | #include <scwx/qt/view/radar_product_view_factory.hpp> | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
| #include <scwx/util/time.hpp> | #include <scwx/util/time.hpp> | ||||||
|  | @ -1062,6 +1063,7 @@ void MapWidgetImpl::RunMousePicking() | ||||||
| 
 | 
 | ||||||
|    // For each layer in reverse
 |    // For each layer in reverse
 | ||||||
|    // TODO: All Generic Layers, not just Placefile Layers
 |    // TODO: All Generic Layers, not just Placefile Layers
 | ||||||
|  |    bool itemPicked = false; | ||||||
|    for (auto it = placefileLayers_.rbegin(); it != placefileLayers_.rend(); |    for (auto it = placefileLayers_.rbegin(); it != placefileLayers_.rend(); | ||||||
|         ++it) |         ++it) | ||||||
|    { |    { | ||||||
|  | @ -1070,9 +1072,16 @@ void MapWidgetImpl::RunMousePicking() | ||||||
|              params, lastPos_, lastGlobalPos_, mouseScreenCoordinate)) |              params, lastPos_, lastGlobalPos_, mouseScreenCoordinate)) | ||||||
|       { |       { | ||||||
|          // If a draw item was picked, don't process additional layers
 |          // If a draw item was picked, don't process additional layers
 | ||||||
|  |          itemPicked = true; | ||||||
|          break; |          break; | ||||||
|       } |       } | ||||||
|    } |    } | ||||||
|  | 
 | ||||||
|  |    // If no draw item was picked, hide the tooltip
 | ||||||
|  |    if (!itemPicked) | ||||||
|  |    { | ||||||
|  |       util::tooltip::Hide(); | ||||||
|  |    } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MapWidget::mapChanged(QMapLibreGL::Map::MapChange mapChange) | void MapWidget::mapChanged(QMapLibreGL::Map::MapChange mapChange) | ||||||
|  |  | ||||||
|  | @ -1,12 +1,10 @@ | ||||||
| #include <scwx/qt/util/imgui.hpp> | #include <scwx/qt/util/imgui.hpp> | ||||||
| #include <scwx/qt/manager/resource_manager.hpp> | #include <scwx/qt/manager/resource_manager.hpp> | ||||||
| #include <scwx/qt/manager/settings_manager.hpp> | #include <scwx/qt/manager/settings_manager.hpp> | ||||||
| #include <scwx/qt/settings/text_settings.hpp> |  | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
| 
 | 
 | ||||||
| #include <mutex> | #include <mutex> | ||||||
| 
 | 
 | ||||||
| #include <TextFlow.hpp> |  | ||||||
| #include <imgui.h> | #include <imgui.h> | ||||||
| 
 | 
 | ||||||
| namespace scwx | namespace scwx | ||||||
|  | @ -89,23 +87,9 @@ void ImGui::DrawTooltip(const std::string& hoverText) | ||||||
| { | { | ||||||
|    p->Initialize(); |    p->Initialize(); | ||||||
| 
 | 
 | ||||||
|    std::size_t textWidth = static_cast<std::size_t>( |  | ||||||
|       settings::TextSettings::Instance().hover_text_wrap().GetValue()); |  | ||||||
| 
 |  | ||||||
|    // Wrap text if enabled
 |  | ||||||
|    std::string wrappedText {}; |  | ||||||
|    if (textWidth > 0) |  | ||||||
|    { |  | ||||||
|       wrappedText = TextFlow::Column(hoverText).width(textWidth).toString(); |  | ||||||
|    } |  | ||||||
| 
 |  | ||||||
|    // Display text is either wrapped or unwrapped text (do this to avoid copy
 |  | ||||||
|    // when not wrapping)
 |  | ||||||
|    const std::string& displayText = (textWidth > 0) ? wrappedText : hoverText; |  | ||||||
| 
 |  | ||||||
|    ::ImGui::BeginTooltip(); |    ::ImGui::BeginTooltip(); | ||||||
|    ::ImGui::PushFont(p->monospaceFont_); |    ::ImGui::PushFont(p->monospaceFont_); | ||||||
|    ::ImGui::TextUnformatted(displayText.c_str()); |    ::ImGui::TextUnformatted(hoverText.c_str()); | ||||||
|    ::ImGui::PopFont(); |    ::ImGui::PopFont(); | ||||||
|    ::ImGui::EndTooltip(); |    ::ImGui::EndTooltip(); | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								scwx-qt/source/scwx/qt/util/tooltip.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								scwx-qt/source/scwx/qt/util/tooltip.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | ||||||
|  | #include <scwx/qt/util/tooltip.hpp> | ||||||
|  | #include <scwx/qt/settings/text_settings.hpp> | ||||||
|  | #include <scwx/qt/util/imgui.hpp> | ||||||
|  | 
 | ||||||
|  | #include <TextFlow.hpp> | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace qt | ||||||
|  | { | ||||||
|  | namespace util | ||||||
|  | { | ||||||
|  | namespace tooltip | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | static const std::string logPrefix_ = "scwx::qt::util::tooltip"; | ||||||
|  | 
 | ||||||
|  | void Show(const std::string& text, const QPointF& /* mouseGlobalPos */) | ||||||
|  | { | ||||||
|  |    std::size_t textWidth = static_cast<std::size_t>( | ||||||
|  |       settings::TextSettings::Instance().hover_text_wrap().GetValue()); | ||||||
|  | 
 | ||||||
|  |    // Wrap text if enabled
 | ||||||
|  |    std::string wrappedText {}; | ||||||
|  |    if (textWidth > 0) | ||||||
|  |    { | ||||||
|  |       wrappedText = TextFlow::Column(text).width(textWidth).toString(); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    // Display text is either wrapped or unwrapped text (do this to avoid copy
 | ||||||
|  |    // when not wrapping)
 | ||||||
|  |    const std::string& displayText = (textWidth > 0) ? wrappedText : text; | ||||||
|  | 
 | ||||||
|  |    util::ImGui::Instance().DrawTooltip(displayText); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Hide() {} | ||||||
|  | 
 | ||||||
|  | } // namespace tooltip
 | ||||||
|  | } // namespace util
 | ||||||
|  | } // namespace qt
 | ||||||
|  | } // namespace scwx
 | ||||||
							
								
								
									
										22
									
								
								scwx-qt/source/scwx/qt/util/tooltip.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								scwx-qt/source/scwx/qt/util/tooltip.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <string> | ||||||
|  | 
 | ||||||
|  | #include <QPoint> | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace qt | ||||||
|  | { | ||||||
|  | namespace util | ||||||
|  | { | ||||||
|  | namespace tooltip | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | void Show(const std::string& text, const QPointF& mouseGlobalPos); | ||||||
|  | void Hide(); | ||||||
|  | 
 | ||||||
|  | } // namespace tooltip
 | ||||||
|  | } // namespace util
 | ||||||
|  | } // namespace qt
 | ||||||
|  | } // namespace scwx
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat