Add cursor position (screen coordinates) to mouse picking

This commit is contained in:
Dan Paulat 2023-09-08 22:57:30 -05:00
parent f158c4174c
commit 9ebc859756
13 changed files with 55 additions and 23 deletions

View file

@ -55,7 +55,9 @@ void DrawItem::Render(const QMapLibreGL::CustomLayerRenderParameters& params,
bool DrawItem::RunMousePicking(
const QMapLibreGL::CustomLayerRenderParameters& /* params */,
const glm::vec2& /* mousePos */)
const QPointF& /* mouseLocalPos */,
const QPointF& /* mouseGlobalPos */,
const glm::vec2& /* mouseCoords */)
{
// By default, the draw item is not picked
return false;

View file

@ -38,13 +38,17 @@ public:
* @brief Run mouse picking on the draw item.
*
* @param [in] params Custom layer render parameters
* @param [in] mousePos Mouse cursor location in map screen coordinates
* @param [in] mouseLocalPos Mouse cursor widget position
* @param [in] mouseGlobalPos Mouse cursor screen position
* @param [in] mouseCoords Mouse cursor location in map screen coordinates
*
* @return true if the draw item was picked, otherwise false
*/
virtual bool
RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const glm::vec2& mousePos);
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords);
protected:
void

View file

@ -684,7 +684,9 @@ void PlacefileIcons::Impl::Update(bool textureAtlasChanged)
bool PlacefileIcons::RunMousePicking(
const QMapLibreGL::CustomLayerRenderParameters& params,
const glm::vec2& mousePos)
const QPointF& /* mouseLocalPos */,
const QPointF& /* mouseGlobalPos */,
const glm::vec2& mouseCoords)
{
std::unique_lock lock {p->iconMutex_};
@ -716,7 +718,7 @@ bool PlacefileIcons::RunMousePicking(
std::execution::par_unseq,
p->currentHoverIcons_.crbegin(),
p->currentHoverIcons_.crend(),
[&mapDistance, &selectedTime, &mapMatrix, &mousePos](const auto& icon)
[&mapDistance, &selectedTime, &mapMatrix, &mouseCoords](const auto& icon)
{
if ((
// Placefile is thresholded
@ -766,7 +768,7 @@ bool PlacefileIcons::RunMousePicking(
tr += otr;
// Test point against polygon bounds
return util::maplibre::IsPointInPolygon({tl, bl, br, tr}, mousePos);
return util::maplibre::IsPointInPolygon({tl, bl, br, tr}, mouseCoords);
});
if (it != p->currentHoverIcons_.crend())

View file

@ -36,7 +36,9 @@ public:
void Deinitialize() override;
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const glm::vec2& mousePos) override;
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
/**
* Resets and prepares the draw item for adding a new set of icons.

View file

@ -497,7 +497,9 @@ void PlacefileLines::Impl::Update()
bool PlacefileLines::RunMousePicking(
const QMapLibreGL::CustomLayerRenderParameters& params,
const glm::vec2& mousePos)
const QPointF& /* mouseLocalPos */,
const QPointF& /* mouseGlobalPos */,
const glm::vec2& mouseCoords)
{
std::unique_lock lock {p->lineMutex_};
@ -529,7 +531,7 @@ bool PlacefileLines::RunMousePicking(
std::execution::par_unseq,
p->currentHoverLines_.crbegin(),
p->currentHoverLines_.crend(),
[&mapDistance, &selectedTime, &mapMatrix, &mousePos](const auto& line)
[&mapDistance, &selectedTime, &mapMatrix, &mouseCoords](const auto& line)
{
if ((
// Placefile is thresholded
@ -581,7 +583,7 @@ bool PlacefileLines::RunMousePicking(
// TODO: X/Y offsets
// Test point against polygon bounds
return util::maplibre::IsPointInPolygon({tl, bl, br, tr}, mousePos);
return util::maplibre::IsPointInPolygon({tl, bl, br, tr}, mouseCoords);
});
if (it != p->currentHoverLines_.crend())

View file

@ -33,7 +33,9 @@ public:
void Deinitialize() override;
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const glm::vec2& mousePos) override;
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
/**
* Resets and prepares the draw item for adding a new set of lines.

View file

@ -209,7 +209,9 @@ void PlacefileText::Deinitialize()
bool PlacefileText::RunMousePicking(
const QMapLibreGL::CustomLayerRenderParameters& /* params */,
const glm::vec2& /* mousePos */)
const QPointF& /* mouseLocalPos */,
const QPointF& /* mouseGlobalPos */,
const glm::vec2& /* mouseCoords */)
{
bool itemPicked = false;

View file

@ -35,7 +35,9 @@ public:
void Deinitialize() override;
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const glm::vec2& mousePos) override;
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
/**
* Resets and prepares the draw item for adding a new set of text.