Skip to content

review(morph): cap dope-sheet band height + clip morph diamonds#582

Merged
fernandotonon merged 1 commit into
masterfrom
fix/morph-dope-sheet-bounded-height
May 17, 2026
Merged

review(morph): cap dope-sheet band height + clip morph diamonds#582
fernandotonon merged 1 commit into
masterfrom
fix/morph-dope-sheet-bounded-height

Conversation

@fernandotonon
Copy link
Copy Markdown
Owner

Addresses Codex feedback on PR #580 (merged):

P1 — bounded morph band height

The band's height was count * (rowHeight + 1) with no upper bound. On Mixamo-style rigs (50+ blendshapes) the band could push past the top anchor of rowsView, hiding the bone tracks entirely and making the dope sheet unusable.

Fix: cap the band at 40% of the dope-sheet root height with a floor of one full row. When natural content exceeds the cap, the inner list becomes scrollable via Flickable (plain Flickable + Column instead of ListView so the existing Repeater rows keep working unchanged).

P2 — clip morph key lane

The per-row timeline Item had no clip: true, so off-screen diamonds from pan/zoom could paint outside the lane (into the name strip or neighbouring rows). The bone-track strips clip explicitly; the morph band now matches.

Test plan

  • CI green
  • Manual: import a high-blendshape character (50+ targets) → dope sheet still shows bone rows; morph band caps at ~40% and scrolls internally.
  • Manual: pan a low-count rig hard → diamonds clip cleanly at the lane edge.

🤖 Generated with Claude Code

Addresses Codex feedback on PR #580 (merged):

## P1 — bounded morph band height
The band's height was `count * (rowHeight + 1)` with no upper bound.
On Mixamo-style rigs (50+ blendshapes) the band could push past the
top anchor of `rowsView`, hiding the bone tracks entirely and making
the dope sheet unusable.

Fix: cap the band at 40% of the dope-sheet root height with a floor
of one full row. When natural content exceeds the cap, the inner
list becomes scrollable via Flickable (plain Flickable + Column
instead of ListView so the existing Repeater rows continue to work
unchanged).

## P2 — clip morph key lane
The per-row timeline `Item` had no `clip: true`, so off-screen
diamonds from pan/zoom could paint outside the lane (into the name
strip or neighbouring rows). The bone-track strips clip explicitly;
the morph band now matches.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 17, 2026

Warning

Rate limit exceeded

@fernandotonon has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 3 minutes and 51 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e596e50d-2763-4a72-892d-d61d2b725fa1

📥 Commits

Reviewing files that changed from the base of the PR and between a098b49 and 2d48229.

📒 Files selected for processing (1)
  • qml/AnimationDopeSheet.qml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/morph-dope-sheet-bounded-height

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2d48229cbf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +766 to +773
Flickable {
id: morphList
anchors.left: parent.left
anchors.right: parent.right
anchors.top: morphHeader.bottom
anchors.bottom: parent.bottom
anchors.topMargin: 2
spacing: 1

Repeater {
id: morphRowsRep
model: root.morphRows
clip: true
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Disable morph Flickable drag to preserve timeline marquee

The new Flickable in the morph band is left with default pointer settings, so it consumes left-button drags in that region. timelineArea is the component that implements left-drag marquee selection (and expects empty-track drags to reach it), which worked before this change because the morph rows were plain Column/Items. After this commit, starting a marquee drag over morph lanes no longer reaches timelineArea, so selection behavior regresses whenever the drag starts in the bottom band.

Useful? React with 👍 / 👎.

@sonarqubecloud
Copy link
Copy Markdown

@fernandotonon fernandotonon merged commit be84c10 into master May 17, 2026
20 checks passed
@fernandotonon fernandotonon deleted the fix/morph-dope-sheet-bounded-height branch May 17, 2026 21:57
fernandotonon added a commit that referenced this pull request May 17, 2026
)

Codex follow-up on PR #582 (merged):

The new Flickable in the morph band defaulted to `interactive: true`,
which consumed left-button drags in that region. `timelineArea` (the
root marquee-selection MouseArea) expects empty-row drags to fall
through to it — and they did before the Flickable was added.
Starting a marquee drag over morph lanes was therefore silently
dropped.

Fix: match `rowsView`'s `interactive: false` so left-drags pass
through. Wheel scrolling still works because `scrollByPixels`
(invoked by the root WheelHandler) now also drives the morph list's
`contentY` when its content overflows — same dy as the bone list so
one wheel notch advances both consistently.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant