Source Code (Use browser search to find items of interest.)

Class Index

kpresenter'KPObject (./koffice/kpresenter/kpobject.h:45)

class KPObject
{
public:
    KPObject();

    KPObject &operator=( const KPObject & );

    virtual DCOPObject* dcopObject();
    
    virtual void setSelected( bool _selected )
    { selected = _selected; }
    virtual void rotate( float _angle )
    { angle = _angle; }
    virtual void setSize( QSize _size )
    { setSize( _size.width(), _size.height() ); }
    virtual void setSize( int _width, int _height )
    { ext = QSize( _width > 20 ? _width : 20, _height > 20 ? _height : 20 ); }
    virtual void setOrig( QPoint _point )
    { orig = _point; }
    virtual void setOrig( int _x, int _y )
    { orig = QPoint( _x, _y ); }
    virtual void moveBy( QPoint _point )
    { orig = orig + _point; }
    virtual void moveBy( int _dx, int _dy )
    { orig = orig + QPoint( _dx, _dy ); }
    virtual void resizeBy( QSize _size )
    { resizeBy( _size.width(), _size.height() ); }
    virtual void resizeBy( int _dx, int _dy )
    { ext = ext + QSize( _dx + ext.width() > 20 ? _dx : 0, _dy + ext.height() > 20 ? _dy : 0 ); }
    virtual void setShadowDistance( int _distance )
    { shadowDistance = _distance; }
    virtual void setShadowDirection( ShadowDirection _direction )
    { shadowDirection = _direction; }
    virtual void setShadowColor( QColor _color )
    { shadowColor = _color; }
    virtual void setEffect( Effect _effect )
    { effect = _effect; }
    virtual void setEffect2( Effect2 _effect2 )
    { effect2 = _effect2; }
    virtual void setPresNum( int _presNum )
    { presNum = _presNum; }
    virtual void setDisappear( bool b )
    { disappear = b; }
    virtual void setDisappearNum( int num )
    { disappearNum = num; }
    virtual void setEffect3( Effect3 _effect3)
    { effect3 = _effect3; }

    virtual void save( ostream& /*out*/ )
    {; }
    virtual void load( KOMLParser& /*parser*/, vector<KOMLAttrib>& /*lst*/ )
    {; }

    virtual ObjType getType()
    { return OT_UNDEFINED; }
    virtual QRect getBoundingRect( int _diffx, int _diffy );
    virtual bool isSelected()
    { return selected; }
    virtual float getAngle()
    { return angle; }
    virtual int getShadowDistance()
    { return shadowDistance; }
    virtual ShadowDirection getShadowDirection()
    { return shadowDirection; }
    virtual QColor getShadowColor()
    { return shadowColor; }
    virtual QSize getSize()
    { return ext; }
    virtual QPoint getOrig()
    { return orig; }
    virtual Effect getEffect()
    { return effect; }
    virtual Effect2 getEffect2()
    { return effect2; }
    virtual int getPresNum()
    { return presNum; }
    virtual int getSubPresSteps()
    { return 0; }
    virtual bool getDisappear()
    { return disappear; }
    virtual int getDisappearNum()
    { return disappearNum; }
    virtual Effect3 getEffect3()
    { return effect3; }

    virtual void drawSelection( bool _dSelection )
    { dSelection = _dSelection; }

    virtual void zoom( float _fakt );
    virtual void zoomOrig();
    virtual void setOwnClipping( bool _ownClipping )
    { ownClipping = _ownClipping; }
    virtual void setSubPresStep( int _subPresStep )
    { subPresStep = _subPresStep; }
    virtual void doSpecificEffects( bool _specEffects, bool _onlyCurrStep = true )
    { specEffects = _specEffects; onlyCurrStep = _onlyCurrStep; }

    virtual void draw( QPainter *_painter, int _diffx, int _diffy );

    virtual bool contains( QPoint _point, int _diffx, int _diffy );
    virtual bool intersects( QRect _rect, int _diffx, int _diffy );
    virtual QCursor getCursor( QPoint _point, int _diffx, int _diffy, ModifyType &_modType );

    virtual void activate( QWidget * /*_widget*/, int /*diffx*/, int /*diffy*/ )
    {; }
    virtual void deactivate()
    {; }

    virtual void removeFromObjList()
    { inObjList = false; doDelete(); }
    virtual void addToObjList()
    { inObjList = true; }
    virtual void incCmdRef()
    { cmds++; }
    virtual void decCmdRef()
    { cmds--; doDelete(); }

    virtual void setMove( bool _move )
    { move = _move; }

protected:
    virtual void getShadowCoords( int& _x, int& _y, ShadowDirection _direction, int _distance );
    virtual void paintSelection( QPainter *_painter );
    virtual void doDelete();

    float angle;
    QPoint orig;
    QSize ext;
    int shadowDistance;
    ShadowDirection shadowDirection;
    QColor shadowColor;
    Effect effect;
    Effect2 effect2;
    Effect3 effect3;
    int presNum, disappearNum;
    bool disappear;

    bool selected, dSelection;
    bool zoomed;
    float presFakt;
    QPoint oldOrig;
    QSize oldExt;
    int subPresStep;
    bool specEffects;
    bool onlyCurrStep;
    bool ownClipping;

    bool inObjList;
    int cmds;
    bool move;

    DCOPObject *dcop;

};

kpresenter'KPObject::KPObject() (./koffice/kpresenter/kpobject.cc:46)

KPObject::KPObject()
    : orig(), ext(), shadowColor( Qt::gray )
{
    presNum = 0;
    disappearNum = 1;
    effect = EF_NONE;
    effect2 = EF2_NONE;
    effect3 = EF3_NONE;
    disappear = false;
    angle = 0.0;
    shadowDirection = SD_RIGHT_BOTTOM;
    shadowDistance = 0;
    dSelection = true;
    selected = false;
    presFakt = 0.0;
    zoomed = false;
    ownClipping = true;
    subPresStep = 0;
    specEffects = false;
    onlyCurrStep = true;
    inObjList = true;
    cmds = 0;
    move = false;
    dcop = 0;
}

/*================================================================*/

kpresenter'KPObject::getBoundingRect() (./koffice/kpresenter/kpobject.cc:79)

QRect KPObject::getBoundingRect( int _diffx, int _diffy )
{
    QRect r( orig.x() - _diffx, orig.y() - _diffy,
	     ext.width(), ext.height() );

    if ( shadowDistance > 0 )
    {
	int sx = r.x(), sy = r.y();
	getShadowCoords( sx, sy, shadowDirection, shadowDistance );
	QRect r2( sx, sy, r.width(), r.height() );
	r = r.unite( r2 );
    }

    if ( angle == 0.0 )
	return r;
    else
    {
	QWMatrix mtx;
	mtx.rotate( angle );
	QRect rr = mtx.map( r );

	int diffw = abs( rr.width() - r.width() );
	int diffh = abs( rr.height() - r.height() );

	return QRect( r.x() - diffw, r.y() - diffh,
		      r.width() + diffw * 2, r.height() + diffh * 2 );
    }
}

/*======================== contain point ? =======================*/

kpresenter'KPObject::contains() (./koffice/kpresenter/kpobject.cc:109)

bool KPObject::contains( QPoint _point, int _diffx, int _diffy )
{
    if ( angle == 0.0 )
    {
	QRect r( orig.x() - _diffx, orig.y() - _diffy,
		 ext.width(), ext.height() );
	return r.contains( _point );
    }
    else
    {
	QRect br = QRect( 0, 0, ext.width(), ext.height() );
	int pw = br.width();
	int ph = br.height();
	QRect rr = br;
	int yPos = -rr.y();
	int xPos = -rr.x();
	rr.moveTopLeft( QPoint( -rr.width() / 2, -rr.height() / 2 ) );

	QWMatrix m, mtx, m2;
	mtx.rotate( angle );
	m.translate( pw / 2, ph / 2 );
	m2.translate( rr.left() + xPos, rr.top() + yPos );
	m = m2 * mtx * m;

	QRect r = m.map( br );
	r.moveBy( orig.x() - _diffx, orig.y() - _diffy );

	return r.contains( _point );
    }
}

/*================================================================*/

kpresenter'KPObject::intersects() (./koffice/kpresenter/kpobject.cc:141)

bool KPObject::intersects( QRect _rect, int _diffx, int _diffy )
{
    if ( angle == 0.0 )
    {
	QRect r( orig.x() - _diffx, orig.y() - _diffy,
		 ext.width(), ext.height() );
	return r.intersects( _rect );
    }
    else
    {
	QRect br = QRect( 0, 0, ext.width(), ext.height() );
	int pw = br.width();
	int ph = br.height();
	QRect rr = br;
	int yPos = -rr.y();
	int xPos = -rr.x();
	rr.moveTopLeft( QPoint( -rr.width() / 2, -rr.height() / 2 ) );

	QWMatrix m, mtx, m2;
	mtx.rotate( angle );
	m.translate( pw / 2, ph / 2 );
	m2.translate( rr.left() + xPos, rr.top() + yPos );
	m = m2 * mtx * m;

	QRect r = m.map( br );
	r.moveBy( orig.x() - _diffx, orig.y() - _diffy );

	return r.intersects( _rect );
    }
}

/*======================== get cursor ============================*/

kpresenter'KPObject::getCursor() (./koffice/kpresenter/kpobject.cc:173)

QCursor KPObject::getCursor( QPoint _point, int _diffx, int _diffy, ModifyType &_modType )
{
    int px = _point.x();
    int py = _point.y();

    int ox = orig.x() - _diffx;
    int oy = orig.y() - _diffy;
    int ow = ext.width();
    int oh = ext.height();

    QRect r( ox, oy, ow, oh );

    if ( !r.contains( _point ) )
	return Qt::arrowCursor;

    if ( px >= ox && py >= oy && px <= ox + 6 && py <= oy + 6 )
    {
	_modType = MT_RESIZE_LU;
	return Qt::sizeFDiagCursor;
    }

    if ( px >= ox && py >= oy + oh / 2 - 3 && px <= ox + 6 && py <= oy + oh / 2 + 3 )
    {
	_modType = MT_RESIZE_LF;
	return Qt::sizeHorCursor;
    }

    if ( px >= ox && py >= oy + oh - 6 && px <= ox + 6 && py <= oy + oh )
    {
	_modType = MT_RESIZE_LD;
	return Qt::sizeBDiagCursor;
    }

    if ( px >= ox + ow / 2 - 3 && py >= oy && px <= ox + ow / 2 + 3 && py <= oy + 6 )
    {
	_modType = MT_RESIZE_UP;
	return Qt::sizeVerCursor;
    }

    if ( px >= ox + ow / 2 - 3 && py >= oy + oh - 6 && px <= ox + ow / 2 + 3 && py <= oy + oh )
    {
	_modType = MT_RESIZE_DN;
	return Qt::sizeVerCursor;
    }

    if ( px >= ox + ow - 6 && py >= oy && px <= ox + ow && py <= oy + 6 )
    {
	_modType = MT_RESIZE_RU;
	return Qt::sizeBDiagCursor;
    }

    if ( px >= ox + ow - 6 && py >= oy + oh / 2 - 3 && px <= ox + ow && py <= oy + oh / 2 + 3 )
    {
	_modType = MT_RESIZE_RT;
	return Qt::sizeHorCursor;
    }

    if ( px >= ox + ow - 6 && py >= oy + oh - 6 && px <= ox + ow && py <= oy + oh )
    {
	_modType = MT_RESIZE_RD;
	return Qt::sizeFDiagCursor;
    }

    _modType = MT_MOVE;
    return Qt::sizeAllCursor;
}

/*========================= zoom =================================*/

kpresenter'KPObject::zoom() (./koffice/kpresenter/kpobject.cc:241)

void KPObject::zoom( float _fakt )
{
    presFakt = _fakt;

    zoomed = true;

    oldOrig = orig;
    oldExt = ext;

    orig.setX( static_cast<int>( static_cast<float>( orig.x() ) * presFakt ) );
    orig.setY( static_cast<int>( static_cast<float>( orig.y() ) * presFakt ) );
    ext.setWidth( static_cast<int>( static_cast<float>( ext.width() ) * presFakt ) );
    ext.setHeight( static_cast<int>( static_cast<float>( ext.height() ) * presFakt ) );

    setSize( ext );
    setOrig( orig );
}

/*==================== zoom orig =================================*/

kpresenter'KPObject::zoomOrig() (./koffice/kpresenter/kpobject.cc:260)

void KPObject::zoomOrig()
{
    zoomed = false;

    orig = oldOrig;
    ext = oldExt;

    setSize( ext );
    setOrig( orig );
}

/*======================== draw ==================================*/

kpresenter'KPObject::draw() (./koffice/kpresenter/kpobject.cc:272)

void KPObject::draw( QPainter *_painter, int _diffx, int _diffy )
{
    if ( dSelection )
    {
	_painter->save();
	QRect r = _painter->viewport();

	_painter->setViewport( orig.x() - _diffx, orig.y() - _diffy, r.width(), r.height() );
	paintSelection( _painter );

	_painter->setViewport( r );
	_painter->restore();
    }
}

/*====================== get shadow coordinates ==================*/

kpresenter'KPObject::getShadowCoords() (./koffice/kpresenter/kpobject.cc:288)

void KPObject::getShadowCoords( int& _x, int& _y, ShadowDirection /*_direction*/, int /*_distance*/ )
{
    int sx = 0, sy = 0;

    switch ( shadowDirection )
    {
    case SD_LEFT_UP:
    {
	sx = _x - shadowDistance;
	sy = _y - shadowDistance;
    } break;
    case SD_UP:
    {
	sx = _x;
	sy = _y - shadowDistance;
    } break;
    case SD_RIGHT_UP:
    {
	sx = _x + shadowDistance;
	sy = _y - shadowDistance;
    } break;
    case SD_RIGHT:
    {
	sx = _x + shadowDistance;
	sy = _y;
    } break;
    case SD_RIGHT_BOTTOM:
    {
	sx = _x + shadowDistance;
	sy = _y + shadowDistance;
    } break;
    case SD_BOTTOM:
    {
	sx = _x;
	sy = _y + shadowDistance;
    } break;
    case SD_LEFT_BOTTOM:
    {
	sx = _x - shadowDistance;
	sy = _y + shadowDistance;
    } break;
    case SD_LEFT:
    {
	sx = _x - shadowDistance;
	sy = _y;
    } break;
    }

    _x = sx; _y = sy;
}

/*======================== paint selection =======================*/

kpresenter'KPObject::paintSelection() (./koffice/kpresenter/kpobject.cc:340)

void KPObject::paintSelection( QPainter *_painter )
{
    _painter->save();
    Qt::RasterOp rop = _painter->rasterOp();

    _painter->setRasterOp( Qt::NotROP );

    if ( getType() == OT_TEXT && dynamic_cast<KPTextObject*>( this )->getDrawEditRect() )
    {
	_painter->save();

	if ( angle != 0 )
	{
	    QRect br = QRect( 0, 0, ext.width(), ext.height() );
	    int pw = br.width();
	    int ph = br.height();
	    QRect rr = br;
	    int yPos = -rr.y();
	    int xPos = -rr.x();
	    rr.moveTopLeft( QPoint( -rr.width() / 2, -rr.height() / 2 ) );

	    QWMatrix m, mtx, m2;
	    mtx.rotate( angle );
	    m.translate( pw / 2, ph / 2 );
	    m2.translate( rr.left() + xPos, rr.top() + yPos );
	    m = m2 * mtx * m;

	    _painter->setWorldMatrix( m );
	}

	_painter->setPen( QPen( Qt::black, 1, Qt::DotLine ) );
	_painter->setBrush( Qt::NoBrush );
	_painter->drawRect( 0, 0, ext.width(), ext.height() );

	_painter->restore();
    }

    _painter->setPen( QPen( Qt::black, 1, Qt::SolidLine ) );
    _painter->setBrush( Qt::black );

    if ( selected )
    {
	_painter->fillRect( 0, 0, 6, 6, Qt::black );
	_painter->fillRect( 0, ext.height() / 2 - 3, 6, 6, Qt::black );
	_painter->fillRect( 0, ext.height() - 6, 6, 6, Qt::black );
	_painter->fillRect( ext.width() - 6, 0, 6, 6, Qt::black );
	_painter->fillRect( ext.width() - 6, ext.height() / 2 - 3, 6, 6, Qt::black );
	_painter->fillRect( ext.width() - 6, ext.height() - 6, 6, 6, Qt::black );
	_painter->fillRect( ext.width() / 2 - 3, 0, 6, 6, Qt::black );
	_painter->fillRect( ext.width() / 2 - 3, ext.height() - 6, 6, 6, Qt::black );
    }

    _painter->setRasterOp( rop );
    _painter->restore();
}

/*======================== do delete =============================*/

kpresenter'KPObject::doDelete() (./koffice/kpresenter/kpobject.cc:397)

void KPObject::doDelete()
{
    if ( cmds == 0 && !inObjList )delete this;
}

/*=============================================================*/

kpresenter'KPObject::dcopObject() (./koffice/kpresenter/kpobject.cc:403)

DCOPObject* KPObject::dcopObject()
{
    if ( !dcop )
	dcop = new KPresenterObjectIface( this );

    return dcop;
}