void doFrame(int frameNr) override { int scrollPx = dp(frameNr) * 3; int cardIndexOffset = scrollPx / (cardSpacing + cardHeight); int pxOffset = -(scrollPx % (cardSpacing + cardHeight)); TestCanvas canvas( listView->stagingProperties().getWidth(), listView->stagingProperties().getHeight()); for (size_t ci = 0; ci < cards.size(); ci++) { // update card position auto card = cards[(ci + cardIndexOffset) % cards.size()]; int top = ((int)ci) * (cardSpacing + cardHeight) + pxOffset; card->mutateStagingProperties().setLeftTopRightBottom( cardLeft, top, cardLeft + cardWidth, top + cardHeight); card->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y); // draw it to parent DisplayList canvas.drawRenderNode(cards[ci].get()); } listView->setStagingDisplayList(canvas.finishRecording(), nullptr); }
void TestListViewSceneBase::doFrame(int frameNr) { int scrollPx = dp(frameNr) * 3; int itemIndexOffset = scrollPx / (mItemSpacing + mItemHeight); int pxOffset = -(scrollPx % (mItemSpacing + mItemHeight)); std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas( mListView->stagingProperties().getWidth(), mListView->stagingProperties().getHeight(), mListView.get())); for (size_t ci = 0; ci < mListItems.size(); ci++) { // update item position auto listItem = mListItems[(ci + itemIndexOffset) % mListItems.size()]; int top = ((int)ci) * (mItemSpacing + mItemHeight) + pxOffset; listItem->mutateStagingProperties().setLeftTopRightBottom( mItemLeft, top, mItemLeft + mItemWidth, top + mItemHeight); listItem->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y); // draw it to parent DisplayList canvas->drawRenderNode(mListItems[ci].get()); } mListView->setStagingDisplayList(canvas->finishRecording()); }