void CardContainer::fillCards(const QList<int> &card_ids, const QList<int> &disabled_ids) { QList<CardItem *> card_items; if (card_ids.isEmpty() && items.isEmpty()) return; else if (card_ids.isEmpty() && !items.isEmpty()) { card_items = items; items.clear(); } else if (!items.isEmpty()) { retained_stack.push(retained()); items_stack.push(items); foreach (CardItem *item, items) item->hide(); items.clear(); } close_button->hide(); if (card_items.isEmpty()) card_items = _createCards(card_ids); int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; QPointF pos1(30 + card_width / 2, 40 + G_COMMON_LAYOUT.m_cardNormalHeight / 2); QPointF pos2(30 + card_width / 2, 184 + G_COMMON_LAYOUT.m_cardNormalHeight / 2); int skip = 102; qreal whole_width = skip * 4; items.append(card_items); int n = items.length(); for (int i = 0; i < n; i++) { QPointF pos; if (n <= 10) { if (i < 5) { pos = pos1; pos.setX(pos.x() + i * skip); } else { pos = pos2; pos.setX(pos.x() + (i - 5) * skip); } } else { int half = (n + 1) / 2; qreal real_skip = whole_width / (half - 1); if (i < half) { pos = pos1; pos.setX(pos.x() + i * real_skip); } else { pos = pos2; pos.setX(pos.x() + (i - half) * real_skip); } } CardItem *item = items[i]; item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); item->setFlag(QGraphicsItem::ItemIsFocusable); if (disabled_ids.contains(item->getCard()->getEffectiveId())) item->setEnabled(false); item->show(); } }
Reader::Reader(const String *string) : Base(), mString(retained(string)), mCurrentIndex(0), mOffset{0, 0} { }
void CardContainer::fillCards(const QList<int> &card_ids, const QList<int> &disabled_ids) { QList<CardItem *> card_items; if (card_ids.isEmpty() && items.isEmpty()) return; else if (card_ids.isEmpty() && !items.isEmpty()) { card_items = items; items.clear(); } else if (!items.isEmpty()) { retained_stack.push(retained()); items_stack.push(items); foreach (CardItem *item, items) item->hide(); items.clear(); } close_button->hide(); if (card_items.isEmpty()) card_items = _createCards(card_ids); items.append(card_items); _repaint(); int n = items.length(); const int blank = 3; int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; int card_height = G_COMMON_LAYOUT.m_cardNormalHeight; bool one_row = true; int width = (card_width + blank) * items.length() - blank + 50; if (width * 1.5 > RoomSceneInstance->sceneRect().width()) { width = (card_width + blank) * ((items.length() + 1) / 2) - blank + 50; one_row = false; } int first_row = one_row ? items.length() : (items.length() + 1) / 2; for (int i = 0; i < n; i++) { QPointF pos; if (i < first_row) { pos.setX(25 + (card_width + blank) * i); pos.setY(45); } else { if (n % 2 == 1) pos.setX(25 + card_width / 2 + blank / 2 + (card_width + blank) * (i - first_row)); else pos.setX(25 + (card_width + blank) * (i - first_row)); pos.setY(45 + card_height + blank); } CardItem *item = items[i]; item->resetTransform(); item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); item->setFlag(QGraphicsItem::ItemIsFocusable); if (disabled_ids.contains(item->getCard()->getEffectiveId())) item->setEnabled(false); item->show(); } }
static std::pair<region_t, region_t> split_region(region_t && r, std::size_t dim, value_type value, bool up) { if ((up && r.box[dim].second <= value) || (!up && r.box[dim].first >= value)) return std::make_pair(region_t(), std::move(r)); if ((up && r.box[dim].first >= value) || (!up && r.box[dim].second <= value)) return std::make_pair(std::move(r), region_t()); region_t retained(std::move(r)); region_t removed(retained); retained.box[dim].first = value; removed.box[dim].second = value; if (up) return std::make_pair(std::move(retained), std::move(removed)); else return std::make_pair(std::move(removed), std::move(retained)); }