void MovementPacket::respondServer() const { PlayerActor *actor = ServerWorldInstance::current().getUserActor(sender()); if (!actor) { SERIALIZATION_EXCEPTION( "Received a movement packet from " << sender().username() << " when no actor is assigned."); } BOOST_FOREACH(const MovementUpdate& update, movement()) { if (update.id != actor->id()) { SERIALIZATION_EXCEPTION( "Received a movement packet from " << sender().username() << " for a non-player actor " << update.id << "."); } if (actor->getUpdateTime() < timestamp()) { // TODO: Verify that the movement is feasible (avoid teleport hacks). actor->setUpdateTime(timestamp()); double time = FrameTimer::current().frameTime() - timestamp(); Vector2D position = referencePoint() + update.displacement + update.velocity * time; Vector2D move = position - actor->getPosition(); Rect r = actor->getCollisionRect(); actor->setSize(.5 * r.dim()); actor->move(move); actor->setSize(r.dim()); actor->setVelocity(update.velocity); } } }
AffineTransform RenderSVGResourceMarker::markerTransformation(const FloatPoint& origin, float autoAngle, float strokeWidth) const { float markerAngle = angle(); bool useStrokeWidth = markerElement().markerUnits() == SVGMarkerUnitsStrokeWidth; AffineTransform transform; transform.translate(origin.x(), origin.y()); transform.rotate(markerAngle == -1 ? autoAngle : markerAngle); transform = markerContentTransformation(transform, referencePoint(), useStrokeWidth ? strokeWidth : -1); return transform; }
AffineTransform LayoutSVGResourceMarker::markerTransformation(const FloatPoint& origin, float autoAngle, float strokeWidth) const { SVGMarkerElement* marker = toSVGMarkerElement(element()); ASSERT(marker); float markerAngle = angle(); bool useStrokeWidth = marker->markerUnits()->currentValue()->enumValue() == SVGMarkerUnitsStrokeWidth; AffineTransform transform; transform.translate(origin.x(), origin.y()); transform.rotate(markerAngle == -1 ? autoAngle : markerAngle); transform = markerContentTransformation(transform, referencePoint(), useStrokeWidth ? strokeWidth : -1); return transform; }
AffineTransform RenderSVGResourceMarker::markerTransformation(const FloatPoint& origin, float autoAngle, float strokeWidth) const { SVGMarkerElement* marker = static_cast<SVGMarkerElement*>(node()); ASSERT(marker); float markerAngle = angle(); bool useStrokeWidth = (marker->markerUnits() == SVGMarkerElement::SVG_MARKERUNITS_STROKEWIDTH); AffineTransform transform; transform.translate(origin.x(), origin.y()); transform.rotate(markerAngle == -1 ? autoAngle : markerAngle); transform = markerContentTransformation(transform, referencePoint(), useStrokeWidth ? strokeWidth : -1); return transform; }
void KDoubleNumInput::setRange(double lower, double upper, double step, bool slider) { if( m_slider ) { // don't update the slider to avoid an endless recursion QSpinBox * spin = d->spin; disconnect(spin, SIGNAL(valueChanged(int)), m_slider, SLOT(setValue(int)) ); } d->spin->setRange( lower, upper, step, d->spin->precision() ); if(slider) { // upcast to base type to get the min/maxValue in int form: QSpinBox * spin = d->spin; int slmax = spin->maxValue(); int slmin = spin->minValue(); int slvalue = spin->value(); int slstep = spin->lineStep(); if (m_slider) { m_slider->setRange(slmin, slmax); m_slider->setLineStep(slstep); m_slider->setValue(slvalue); } else { m_slider = new QSlider(slmin, slmax, slstep, slvalue, QSlider::Horizontal, this); m_slider->setTickmarks(QSlider::Below); // feedback line: when one moves, the other moves, too: connect(m_slider, SIGNAL(valueChanged(int)), SLOT(sliderMoved(int)) ); } connect(spin, SIGNAL(valueChanged(int)), m_slider, SLOT(setValue(int)) ); // calculate ( slmax - slmin ) / 10 without overflowing ints: int major = calcDiffByTen( slmax, slmin ); if ( !major ) major = slstep; // ### needed? m_slider->setTickInterval(major); } else { delete m_slider; m_slider = 0; } setReferencePoint( referencePoint() ); layout(true); updateLegacyMembers(); }
AffineTransform LayoutSVGResourceMarker::markerTransformation( const FloatPoint& origin, float autoAngle, float strokeWidth) const { // Apply scaling according to markerUnits ('strokeWidth' or 'userSpaceOnUse'.) float markerScale = markerUnits() == SVGMarkerUnitsStrokeWidth ? strokeWidth : 1; AffineTransform transform; transform.translate(origin.x(), origin.y()); transform.rotate(orientType() == SVGMarkerOrientAngle ? angle() : autoAngle); transform.scale(markerScale); // The 'origin' coordinate maps to SVGs refX/refY, given in coordinates // relative to the viewport established by the marker. FloatPoint mappedReferencePoint = viewportTransform().mapPoint(referencePoint()); transform.translate(-mappedReferencePoint.x(), -mappedReferencePoint.y()); return transform; }
void KIntNumInput::setRange(int lower, int upper, int step, bool slider) { upper = kMax(upper, lower); lower = kMin(upper, lower); m_spin->setMinValue(lower); m_spin->setMaxValue(upper); m_spin->setLineStep(step); step = m_spin->lineStep(); // maybe QRangeControl didn't like out lineStep? if(slider) { if (m_slider) m_slider->setRange(lower, upper); else { m_slider = new QSlider(lower, upper, step, m_spin->value(), QSlider::Horizontal, this); m_slider->setTickmarks(QSlider::Below); connect(m_slider, SIGNAL(valueChanged(int)), m_spin, SLOT(setValue(int))); } // calculate (upper-lower)/10 without overflowing int's: int major = calcDiffByTen( upper, lower ); if ( major==0 ) major = step; // #### workaround Qt bug in 2.1-beta4 m_slider->setSteps(step, major); m_slider->setTickInterval(major); } else { delete m_slider; m_slider = 0; } // check that reference point is still inside valid range: setReferencePoint( referencePoint() ); layout(true); }
QPointF PrerenderedLabel::referencePointLocation() const { return referencePointLocation( referencePoint() ); }