[LyX/master] Change cursor shape for clickable math insets
Enrico Forestieri
forenr at lyx.org
Thu Apr 1 14:54:19 UTC 2021
commit eeb36e808c9726fd3689926a3c20457e3b801341
Author: Enrico Forestieri <forenr at lyx.org>
Date: Thu Apr 1 16:59:55 2021 +0200
Change cursor shape for clickable math insets
Currently, only InsetMathRef and InsetMathSpace are clickable.
---
src/BufferView.cpp | 38 ++++++++++++++++++++++++++++++++++++++
src/BufferView.h | 3 +++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 308cf7f..ed5a09f 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -2383,12 +2383,50 @@ Inset const * BufferView::getCoveringInset(Text const & text,
}
+Inset const * BufferView::clickableMathInset(InsetMathNest const * inset,
+ CoordCache::Insets const & inset_cache, int x, int y) const
+{
+ for (size_t i = 0; i < inset->nargs(); ++i) {
+ MathData const & ar = inset->cell(i);
+ for (size_t j = 0; j < ar.size(); ++j) {
+ string const name = lyxerr.debugging(Debug::MATHED)
+ ? insetName(ar[j].nucleus()->lyxCode())
+ : string();
+ LYXERR(Debug::MATHED, "Checking inset: " << name);
+ if (ar[j].nucleus()->clickable(*this, x, y)) {
+ if (inset_cache.covers(ar[j].nucleus(), x, y)) {
+ LYXERR(Debug::MATHED, "Clickable inset: "
+ << name);
+ return ar[j].nucleus();
+ }
+ }
+ InsetMathNest const * imn =
+ ar[j].nucleus()->asNestInset();
+ if (imn) {
+ Inset const * inner =
+ clickableMathInset(imn, inset_cache, x, y);
+ if (inner)
+ return inner;
+ }
+ }
+ }
+ return nullptr;
+}
+
+
void BufferView::updateHoveredInset() const
{
// Get inset under mouse, if there is one.
int const x = d->mouse_position_cache_.x_;
int const y = d->mouse_position_cache_.y_;
Inset const * covering_inset = getCoveringInset(buffer_.text(), x, y);
+ if (covering_inset && covering_inset->asInsetMath()) {
+ Inset const * inner_inset = clickableMathInset(
+ covering_inset->asInsetMath()->asNestInset(),
+ coordCache().getInsets(), x, y);
+ if (inner_inset)
+ covering_inset = inner_inset;
+ }
d->clickable_inset_ = covering_inset && covering_inset->clickable(*this, x, y);
diff --git a/src/BufferView.h b/src/BufferView.h
index ab5ba60..88ad636 100644
--- a/src/BufferView.h
+++ b/src/BufferView.h
@@ -164,6 +164,9 @@ public:
/// \return the math inset with a context menu for the given position
Inset const * mathContextMenu(InsetMathNest const * inset,
CoordCache::Insets const & inset_cache, int x, int y) const;
+ /// \return the clickable math inset for the given position
+ Inset const * clickableMathInset(InsetMathNest const * inset,
+ CoordCache::Insets const & inset_cache, int x, int y) const;
/// Save the current position as bookmark.
/// if idx == 0, save to temp_bookmark
More information about the lyx-cvs
mailing list