/*! \reimp */ void HbRatingSlider::changeEvent(QEvent *event) { HbWidget::changeEvent(event); switch (event->type()) { case QEvent::LayoutDirectionChange: updatePrimitives(); break; case QEvent::EnabledChange: updatePrimitives(); break; default: break; } }
/*! \reimp */ void HbRatingSlider::setGeometry(const QRectF & rect) { Q_D(HbRatingSlider); HbWidget::setGeometry(rect); updatePrimitives(); d->createLookupTable(); }
/*! \internal[protected][Access Privilage] */ HbComboBox::HbComboBox( HbComboBoxPrivate &dd, QGraphicsItem *parent ) : HbWidget( dd, parent ) { Q_D( HbComboBox ); d->init( ); updatePrimitives( ); }
void HbIndicatorGroup::update(const QList<IndicatorClientInfo> &clientInfo) { Q_D(HbIndicatorGroup); d->updateIndicators(clientInfo); updatePrimitives(); }
/*! \brief sets the item view for the index feedback. Disconnects from the existing item view, then connects to the specified one. If set to NULL the index feedback is simply disconnected. \param itemView The HbAbstractItemView* to provide index feedback for. */ void HbIndexFeedback::setItemView(HbAbstractItemView *itemView) { Q_D( HbIndexFeedback ); if (itemView == d->mItemView) { return; } d->disconnectItemView(); d->mItemView = itemView; if (!d->mItemView) { return; } d->connectScrollBarToIndexFeedback(d->mItemView->horizontalScrollBar()); d->connectScrollBarToIndexFeedback(d->mItemView->verticalScrollBar()); connect(d->mItemView, SIGNAL(destroyed(QObject*)), this, SLOT(_q_itemViewDestroyed())); if (d->mItemView->scene()) { d->mItemView->scene()->addItem(this); d->mItemView->installSceneEventFilter(this); } d->calculatePopupRects(); updatePrimitives(); }
/** * Merges 2 adjacent convex hulls * @param vertex of the left convex hull * @param vertex of the right convex hull */ void ConvexHull::merge2Hulls(int liv0, int riv0) { int liv = liv0; int livr = liv0; // searches the right most vertex of the left convex hull do { liv = kcnxv[liv]; if (hva[livr].x() < hva[liv].x()) { livr = liv; } } while (liv != liv0); int liv1 = livr; int liv2 = livr; int riv1 = riv0; int riv2 = riv0; // searches the common tangent edge searchCTEdge(liv1, kccnxv, riv1, kcnxv , false); searchCTEdge(liv2, kcnxv , riv2, kccnxv, true); kcnxv[liv1] = riv1; kccnxv[riv1] = liv1; kcnxv[riv2] = liv2; kccnxv[liv2] = riv2; int cte = newEdge(); ksv[cte] = liv1; kev[cte] = riv1; kep[cte] = PrimProperty::NEW; // wraps 2 convex hulls in cylindrical wrapInCylindrical(cte); // deletes non convex hull primitives deleteNonHullPrims(liv1, cte, ScanDir::CW); deleteNonHullPrims(riv1, cte, ScanDir::CCW); // updates convex hull primitives updatePrimitives(cte); }
void HbIndicatorGroup::activate(const QList<IndicatorClientInfo> &clientInfo) { Q_D(HbIndicatorGroup); d->addIndicators(clientInfo); updatePrimitives(); d->mIndicatorAdded = false; }
/*! Constructs a new HbComboBox with \a parent. */ HbComboBox::HbComboBox( QGraphicsItem *parent ): HbWidget( *new HbComboBoxPrivate, parent ) { Q_D( HbComboBox ); d->init( ); updatePrimitives( ); setFlag(QGraphicsItem::ItemSendsScenePositionChanges); }
/*! \reimp */ bool HbDateTimePicker::event(QEvent *e) { bool result = HbWidget::event(e); if (e->type()==QEvent::LayoutRequest) { updatePrimitives(); } return result; }
/*! Sets the check state of the view item to state. \sa checkState(). */ void HbAbstractViewItem::setCheckState(Qt::CheckState state) { Q_D(HbAbstractViewItem); if (state != d->mCheckState) { d->mCheckState = state; updatePrimitives(); } }
void HbIndicatorGroup::activateAll(const QList<IndicatorClientInfo> &clientInfo) { Q_D(HbIndicatorGroup); d->mIndicators.clear(); d->addIndicators(clientInfo); updatePrimitives(); }
void HbRatingSlider::setNumberOfIcons(int number) { Q_D(HbRatingSlider); if ( (number <= 0) || (number > MAX_NUMBER_OF_ICONS) ){ return; } d->mNumberOfIcons = number; updatePrimitives(); d->createLookupTable(); }
/*! @beta It sets the rated graphics name.This is the graphics shown when rating is on going. the graphicscan be a single star kind of or multi star image. If it is single star then use setNumberOfIcons for setting number of stars. \param name. The graphics name along with the path. \sa unRatedIconName() */ void HbRatingSlider::setRatedIconName(const QString name) { Q_D(HbRatingSlider); if(d->mRatedIconName != name) { d->mRatedIconName = name; HbStyleOptionRatingSlider option; initStyleOption(&option); updatePrimitives(); } }
/*! \reimp */ void HbComboBox::changeEvent( QEvent *event ) { switch ( event->type( ) ) { case QEvent::EnabledChange: updatePrimitives( ); break; default: break; } HbWidget::changeEvent( event ); }
/*! Constructs a new SnsrOledClockWidget. \param parent Parent object. */ SnsrOledClockWidget::SnsrOledClockWidget(QGraphicsItem* parent): HbWidget(parent), mClockBackground(0), mClockHourHand(0), mClockMinuteHand(0), mClockAmPmLabel(0) { HbStyleLoader::registerFilePath(gOledClockCssFilePath); HbStyleLoader::registerFilePath(gOledClockWidgetMLFilePath); createPrimitives(); updatePrimitives(); }
/*! Sets the value of interactive property. If this value is set to true scrollbar is interactive, the user can change the scroll position by dragging the thumb or pressing the groove. Dragging the thumb emits valueChanged signal and pressing the groove emits valueChangeRequested which means that the widget using scrollbars should handle the value change (for example by animating to the given target value). The default behavior is non interactive, which means that the scrollbar is just indicative. \sa HbScrollBar::isInteractive() */ void HbScrollBar::setInteractive( bool enabled ) { Q_D( HbScrollBar ); if( d->mInteractive != enabled){ d->mInteractive = enabled; if(d->handleItem) { repolish(); updatePrimitives(); } } }
/*! \reimp */ void HbComboBox::keyPressEvent( QKeyEvent *event ) { Q_D( HbComboBox ); if ( !event->isAutoRepeat( ) ) { if ( event->key( ) == Qt::Key_Enter || event->key( ) == Qt::Key_Return ) { d->mIsDown = true; updatePrimitives( ); event->accept( ); } } else { event->accept( ); } }
void HbIndicatorGroup::disappearEffectFinnished(const HbEffect::EffectStatus &status) { Q_D(HbIndicatorGroup); if (status.reason == Hb::EffectFinished || status.reason == Hb::EffectCancelled || status.reason == Hb::EffectNotStarted) { // Reset the positions and transformations and opacity for (int i = 0; i < d->mIcons.size(); ++i) { d->mIcons[i]->resetTransform(); d->mIcons[i]->setOpacity(1.0); d->mIcons[i]->setPos(d->mOriginalPos[i]); } updatePrimitives(); } }
/*! \reimp */ QVariant HbDataGroup::itemChange( GraphicsItemChange change, const QVariant &value ) { switch ( static_cast<HbPrivate::HbItemChangeValues>( change ) ) { case QGraphicsItem::ItemEnabledHasChanged: { updatePrimitives( ); //We are skipping call to abstractviewitem::itemChange here because updateChildItems is //called in that function which will again create data group primitives. return HbWidget::itemChange( change, value ); } default: break; } return HbDataFormViewItem::itemChange( change, value ); }
/*! \reimp */ void HbComboBox::keyReleaseEvent( QKeyEvent *event ) { Q_D( HbComboBox ); if ( !event->isAutoRepeat( ) ){ if ( event->key( ) == Qt::Key_Enter || event->key( ) == Qt::Key_Return ){ d->mIsDown = false; updatePrimitives( ); event->accept( ); d->touchAreaClicked( ); d->mDropDown->mList->setFocus( ); } } else { event->accept( ); } }
/*! \reimp */ void HbRatingSlider::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(HbRatingSlider); if(d->mTouchArea->isUnderMouse()) { if(d->mReadOnly) { event->ignore(); return; } d->mMousePressed = true; event->accept(); updatePrimitives(); } }
/* Update the data for, and show the index feedback (if it's not already shown) */ void HbIndexFeedbackPrivate::showIndexFeedback() { if (!mItemView || mIndexFeedbackPolicy == HbIndexFeedback::IndexFeedbackNone) { return; } QList <HbAbstractViewItem *> visibleItems = mItemView->visibleItems(); QModelIndex targetIndex = visibleItems.first()->modelIndex(); qreal top = visibleItems.first()->mapToItem(mItemView, 0, 0).y(); if (top < 0 && visibleItems.count() > 1) { targetIndex = visibleItems.at(1)->modelIndex(); } if (targetIndex.isValid()) { QVariant data = targetIndex.data(Hb::IndexFeedbackRole); if (data.canConvert<QString>()) { QString testString = displayText(data); if (testString != mPopupContent) { mPopupContent = testString; updatePrimitives(); } if (mTextItem && mTextItem->opacity() == 0.0) { HbEffect::start(mPopupItemList, HB_INDEXFEEDBACK_TYPE, EFFECT_IFAPPEAR); } if (mTextItem) { mTextItem->show(); } if (mPopupItem) { mPopupItem->show(); } if (mDisappearTimer) { mDisappearTimer->stop(); } } else { _q_hideIndexFeedback(); } } }
/*! \reimp */ QVariant HbRatingSlider::itemChange(GraphicsItemChange change, const QVariant &value) { if(change == ItemVisibleHasChanged && value.toBool()){ updatePrimitives(); } #ifdef HB_EFFECTS if(change == QGraphicsItem::ItemVisibleChange){ if(value.toBool()) { HbEffect::start(this, HB_RATINGSLIDER_ITEM_TYPE, "ratingslider_appear"); } else { HbEffect::start(this, HB_RATINGSLIDER_ITEM_TYPE, "ratingslider_disappear"); } } #endif//HB_EFFECTS return HbWidget::itemChange(change,value); }
/*! reimplementation. */ void HbComboBox::gestureEvent(QGestureEvent *event) { Q_D( HbComboBox ); if (!isEnabled()) { return; } if(event->gesture(Qt::TapGesture)) { HbTapGesture *tap = static_cast<HbTapGesture *>(event->gesture(Qt::TapGesture)); switch(tap->state()) { case Qt::GestureStarted: { scene()->setProperty(HbPrivate::OverridingGesture.latin1(),Qt::TapGesture); if (!tap->property(HbPrivate::ThresholdRect.latin1()).toRect().isValid()) { tap->setProperty(HbPrivate::ThresholdRect.latin1(), mapRectToScene(boundingRect()).toRect()); } d->touchAreaPressEvent(); break; } case Qt::GestureCanceled: { scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant()); d->mIsDown = false; updatePrimitives(); setProperty( "state", "normal" ); break; } case Qt::GestureFinished: { scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant()); d->touchAreaReleaseEvent(); break; //TODO :: move else part here } default: break; } } }
/*! \reimp */ void HbRatingSlider::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Q_D(HbRatingSlider); QPointF layoutItemPos = d->mLayoutItem->pos(); QPointF frameItemPos = d->mFrame->pos(); qreal xVal = event->pos().x() - layoutItemPos.x()+ frameItemPos.x(); if(d->mTouchArea->isUnderMouse()) { if(d->mReadOnly) { event->ignore(); return; } if(xVal <0) { setCurrentRating(0); return; } QRectF rect = d->mTouchArea->boundingRect(); int rating=0; if(rect.contains(xVal,0 )) { rating = d->calculateProgressValue(xVal); if(!toolTip().isNull()) { HbToolTip::showText(toolTip(),this); } setCurrentRating(rating); if(d->mCurrentValue) { emit ratingDone (d->mCurrentValue); } event->accept(); d->mMousePressed = false; } updatePrimitives(); } }
void TMXLayer::draw(Renderer *renderer, const Mat4& transform, uint32_t flags) { updateTotalQuads(); if( flags != 0 || _dirty || _quadsDirty ) { Size s = Director::getInstance()->getWinSize(); auto rect = Rect(0, 0, s.width, s.height); Mat4 inv = transform; inv.inverse(); rect = RectApplyTransform(rect, inv); updateTiles(rect); updateIndexBuffer(); updatePrimitives(); _dirty = false; } if(_renderCommands.size() < static_cast<size_t>(_primitives.size())) { _renderCommands.resize(_primitives.size()); } _texture->prepareDraw(); int index = 0; for(const auto& iter : _primitives) { if(iter.second->getCount() > 0) { auto& cmd = _renderCommands[index++]; //修改混合模式,满足美术需求和PS一样 added by tokentong 20150327 cmd.init(iter.first, _texture->getName(), getGLProgramState(), BlendFunc::ALPHA_PREMULTIPLIED, iter.second, _modelViewTransform, flags); renderer->addCommand(&cmd); } } }
/*! Updates child graphics items to represent current state and content. \note It is a good habit to reuse child items as much as possible as this improves performance, especially when item recycling is used. Most of the HbAbstractViewItem derived classes inside Hb library are optimised for performance. Layout files are loaded only if child items are created or deleted. Loading layout files is triggered by calling HbWidget::repolish(). Classes deriving from HbAbstractViewItem outside Hb, should either always call explicitly repolish() or if they are also optimised for performance only when child items are created or deleted in the custom view item. Here is an example of custom view item that reuses its child items. The custom view item does not create or delete child items. \snippet{ultimatecodesnippet/customlistviewitem.cpp,2} \sa HbWidget::polish() */ void HbAbstractViewItem::updateChildItems() { HB_SDD(HbAbstractViewItem); int itemType = d->modelItemType(); if (itemType != d->mModelItemType) { d->mModelItemType = itemType; d->mItemsChanged = true; d->themingPending = true; } /* Summary of background and frame handling: d->mBackground is read from Qt::BackgroundRole of model d->mBackgroundItem is created from d-mBackground (Qt::BackgroundRole), if this is HbIcon or QBrush. If d->mBackgroundItem does not exist, d->mFrame is created from d-mBackground (Qt::BackgroundRole), if this is HbFrameBackground otherwise it either is created from sd->mDefaultFrame, not created at all or from system default. */ // background QVariant currentBackground = d->mIndex.data(Qt::BackgroundRole); if (currentBackground != d->mBackground) { d->mBackground = currentBackground; if (currentBackground.canConvert<HbIcon>() || currentBackground.canConvert<QBrush>()) { if (!d->mBackgroundItem) { d->mItemsChanged = true; d->mBackgroundItem = style()->createPrimitive(HbStyle::P_ItemViewItem_background, this); delete d->mFrame; d->mFrame = 0; } } else if (currentBackground.canConvert<HbFrameBackground>()) { if (!d->mFrame) { d->mItemsChanged = true; d->mFrame = style()->createPrimitive(HbStyle::P_ItemViewItem_frame, this); delete d->mBackgroundItem; d->mBackgroundItem = 0; } } else if (d->mBackgroundItem) { d->mItemsChanged = true; delete d->mBackgroundItem; d->mBackgroundItem = 0; } } // frame if (!d->mBackgroundItem) { if ( d->mModelItemType == Hb::ParentItem || d->mModelItemType == Hb::SeparatorItem || ( d->mModelItemType == Hb::StandardItem && ( d->mBackground.canConvert<HbFrameBackground>() || sd->mDefaultFrame.frameGraphicsName().length() > 0 || sd->mDefaultFrame.isNull()))) { if (!d->mFrame) { d->mItemsChanged = true; d->mFrame = style()->createPrimitive(HbStyle::P_ItemViewItem_frame, this); } } else if (d->mFrame) { d->mItemsChanged = true; delete d->mFrame; d->mFrame = 0; } } GraphicsItemFlags itemFlags = flags(); Qt::ItemFlags indexFlags = d->mIndex.flags(); if ((indexFlags & Qt::ItemIsEnabled) && sd->mItemView && sd->mItemView->isEnabled()) { if (!(itemFlags & QGraphicsItem::ItemIsFocusable)) { itemFlags |= QGraphicsItem::ItemIsFocusable; setFocusPolicy(sd->mPrototype->focusPolicy()); setProperty("state", "normal"); grabGesture(Qt::TapGesture); } } else { if (itemFlags & QGraphicsItem::ItemIsFocusable) { itemFlags &= ~QGraphicsItem::ItemIsFocusable; setFocusPolicy(Qt::NoFocus); setProperty("state", "disabled"); ungrabGesture(Qt::TapGesture); } } // selection HbAbstractItemView::SelectionMode selectionMode = HbAbstractItemView::NoSelection; if (sd->mItemView) { selectionMode = sd->mItemView->selectionMode(); } bool previousSelectable = itemFlags & QGraphicsItem::ItemIsSelectable; bool itemSelectable = false; if (indexFlags & Qt::ItemIsSelectable && selectionMode != HbAbstractItemView::NoSelection && indexFlags & Qt::ItemIsEnabled) { itemFlags |= QGraphicsItem::ItemIsSelectable; itemSelectable = true; } else { itemFlags &= ~QGraphicsItem::ItemIsSelectable; } if (previousSelectable != itemSelectable) { if (itemSelectable) { if (!d->mSelectionItem) { d->mItemsChanged = true; d->mSelectionItem = style()->createPrimitive(HbStyle::P_ItemViewItem_selection, this); } } else { d->mItemsChanged = true; delete d->mSelectionItem; d->mSelectionItem = 0; } } setFlags(itemFlags); // multiselection area if ( itemSelectable && selectionMode == HbAbstractItemView::MultiSelection) { if (!d->mMultiSelectionTouchArea) { d->mItemsChanged = true; d->mMultiSelectionTouchArea = style()->createPrimitive(HbStyle::P_ItemViewItem_touchmultiselection, this); } } else if (d->mMultiSelectionTouchArea) { d->mItemsChanged = true; delete d->mMultiSelectionTouchArea; d->mMultiSelectionTouchArea = 0; } // items visibility or items content has really changed updatePrimitives(); if (!d->mContentChangedSupported || d->mItemsChanged) { updateGeometry(); // ensures that sizehint is calculated again in case items have been created or deleted d->mRepolishRequested = true; // handle QEvent::Polish & QEvent::LayoutRequest event itself in ::sizeHint() as our performance is slightly better // (saving a layoutrequest and going event loop through twice) if (sd->mItemView && sd->mItemView->isScrolling()) { d->mHandlingRepolishSynchronously = true; } repolish(); d->mHandlingRepolishSynchronously = false; } d->mItemsChanged = false; }
void BubbleHeadingWidget::readBubbleHeader(const BubbleHeader& header) { mHeader = &header; updatePrimitives(); }
/*! \reimp */ void HbDateTimePicker::setGeometry(const QRectF &rect) { HbWidget::setGeometry(rect); updatePrimitives(); }
/*! \reimp */ void HbRatingSlider::gestureEvent(QGestureEvent *event) { Q_D (HbRatingSlider); if(event->gesture(Qt::TapGesture)) { HbTapGesture *tap = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture)); switch(tap->state()) { case Qt::GestureStarted: { qreal xVal = mapFromScene(event->mapToGraphicsScene(tap->position( ))).x(); int rating = d->calculateProgressValue(xVal); if(rating == -1) { return; } if(d->mReadOnly) { event->ignore(); return; } QRectF rect = d->mTouchArea->boundingRect(); if(rect.contains(xVal,0 )) { HbWidgetFeedback::triggered(this, Hb::InstantPressed); d->mMousePressed = true; updatePrimitives(); rating = d->calculateProgressValue(xVal); setCurrentRating(rating); event->accept(); } else { event->ignore(); } } break; case Qt::GestureFinished: // Reset state { qreal xVal = mapFromScene(event->mapToGraphicsScene(tap->position( ))).x(); QRectF rect = d->mTouchArea->boundingRect(); int rating=0; if(rect.contains(xVal,0 )) { if(d->mReadOnly) { event->ignore(); return; } if(!d->mMousePressed){ return; } if(xVal <0) { setCurrentRating(0); emit ratingDone (d->mCurrentValue); return; } rating = d->calculateProgressValue(xVal); if(!toolTip().isNull()) { HbToolTip::showText(toolTip(),this); } setCurrentRating(rating); HbWidgetFeedback::triggered(this, Hb::InstantReleased); if(d->mCurrentValue) { emit ratingDone (d->mCurrentValue); } event->accept(); d->mMousePressed = false; updatePrimitives(); } else { d->mMousePressed = false; updatePrimitives(); if(xVal <rect.x() ) { setCurrentRating(0); emit ratingDone (d->mCurrentValue); } } } break; default: break; } }else if(event->gesture(Qt::PanGesture)) { HbPanGesture *pan = qobject_cast<HbPanGesture *>(event->gesture(Qt::PanGesture)); switch(pan->state()) { case Qt::GestureUpdated: { if(!d->mMousePressed) { return; } qreal xVal = mapFromScene(event->mapToGraphicsScene( pan->startPos()+pan->offset())).x(); QRectF rect = d->mTouchArea->boundingRect(); int rating=0; if(rect.contains(xVal,0 )) { if(d->mReadOnly) { event->ignore(); return; } if(xVal <0) { setCurrentRating(0); return; } rating = d->calculateProgressValue(xVal); if(!toolTip().isNull()) { HbToolTip::showText(toolTip(),this); } setCurrentRating(rating); HbWidgetFeedback::continuousTriggered(this, Hb::ContinuousDragged); emit ratingChanged (d->mCurrentValue); event->accept(); } else { setCurrentRating(0); } } break; case Qt::GestureFinished: // Reset state { qreal xVal = mapFromScene(event->mapToGraphicsScene( pan->startPos()+pan->offset())).x(); QRectF rect = d->mTouchArea->boundingRect(); d->mMousePressed = false; updatePrimitives(); int rating=0; if(rect.contains(xVal,0 )) { if(d->mReadOnly) { event->ignore(); return; } } if(xVal <0) { setCurrentRating(0); emit ratingDone (d->mCurrentValue); return; } rating = d->calculateProgressValue(xVal); setCurrentRating(rating); HbWidgetFeedback::triggered(this, Hb::InstantReleased); if(d->mCurrentValue) { emit ratingDone (d->mCurrentValue); } event->accept(); } default: break; } } }