You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.3 KiB
142 lines
4.3 KiB
/*************************************************************************** |
|
* Copyright (C) 2004-05 by Enrico Ros <eros.kde@email.it> * |
|
* Copyright (C) 2005 by Piotr Szymanski <niedakh@gmail.com> * |
|
* This program is free software; you can redistribute it and/or modify * |
|
* it under the terms of the GNU General Public License as published by * |
|
* the Free Software Foundation; either version 2 of the License, or * |
|
* (at your option) any later version. * |
|
***************************************************************************/ |
|
#include <qrect.h> |
|
#include <kdebug.h> |
|
#include "link.h" |
|
#include "area.h" |
|
|
|
/** class NormalizedPoint **/ |
|
NormalizedPoint::NormalizedPoint() |
|
: x( 0.0 ), y( 0.0 ) {} |
|
|
|
NormalizedPoint::NormalizedPoint( double dX, double dY ) |
|
: x( dX ), y( dY ) {} |
|
|
|
NormalizedPoint::NormalizedPoint( int iX, int iY, int xScale, int yScale ) |
|
: x( (double)iX / (double)xScale ), y( (double)iY / (double)yScale ) {} |
|
|
|
|
|
/** class NormalizedRect **/ |
|
|
|
NormalizedRect::NormalizedRect() |
|
: left( 0.0 ), top( 0.0 ), right( 0.0 ), bottom( 0.0 ) {} |
|
|
|
NormalizedRect::NormalizedRect( double l, double t, double r, double b ) |
|
// note: check for swapping coords? |
|
: left( l ), top( t ), right( r ), bottom( b ) {} |
|
|
|
NormalizedRect::NormalizedRect( const QRect & r, double xScale, double yScale ) |
|
: left( (double)r.left() / xScale ), top( (double)r.top() / yScale ), |
|
right( (double)r.right() / xScale ), bottom( (double)r.bottom() / yScale ) {} |
|
|
|
NormalizedRect::NormalizedRect( const NormalizedRect & rect ) |
|
: left( rect.left ), top( rect.top ), right( rect.right ), bottom( rect.bottom ) {} |
|
|
|
bool NormalizedRect::isNull() const |
|
{ |
|
return left == 0 && top== 0 && right == 0 && bottom == 0; |
|
} |
|
|
|
bool NormalizedRect::contains( double x, double y ) const |
|
{ |
|
return x >= left && x <= right && y >= top && y <= bottom; |
|
} |
|
|
|
bool NormalizedRect::intersects( const NormalizedRect & r ) const |
|
{ |
|
return (r.left <= right) && (r.right >= left) && (r.top <= bottom) && (r.bottom >= top); |
|
} |
|
|
|
bool NormalizedRect::intersects( const NormalizedRect * r ) const |
|
{ |
|
return (r->left <= right) && (r->right >= left) && (r->top <= bottom) && (r->bottom >= top); |
|
} |
|
|
|
bool NormalizedRect::intersects( double l, double t, double r, double b ) const |
|
{ |
|
return (l <= right) && (r >= left) && (t <= bottom) && (b >= top); |
|
} |
|
|
|
NormalizedRect NormalizedRect::operator| (const NormalizedRect & r) const |
|
{ |
|
NormalizedRect ret; |
|
// todo ! |
|
ret.left=qMin(left,r.left); |
|
ret.top=qMin(top,r.top); |
|
ret.bottom=qMax(bottom,r.bottom); |
|
ret.right=qMax(right,r.right); |
|
return ret; |
|
} |
|
|
|
NormalizedRect& NormalizedRect::operator|= (const NormalizedRect & r) |
|
{ |
|
return ((*this) = (*this) | r ); |
|
} |
|
|
|
NormalizedRect & NormalizedRect::operator=( const NormalizedRect & r ) |
|
{ |
|
left = r.left; |
|
right = r.right; |
|
top = r.top; |
|
bottom = r.bottom; |
|
return *this; |
|
} |
|
|
|
/* |
|
kdbgstream& operator << (kdbgstream& str , const NormalizedRect &r) |
|
{ |
|
str << "[" <<r.left() << "," << r.top() << "] x "<< "[" <<r.right() << "," << r.bottom() << "]"; |
|
return str; |
|
}*/ |
|
|
|
QRect NormalizedRect::geometry( int xScale, int yScale ) const |
|
{ |
|
int l = (int)( left * xScale ), |
|
t = (int)( top * yScale ), |
|
r = (int)( right * xScale ), |
|
b = (int)( bottom * yScale ); |
|
return QRect( l, t, r - l + 1, b - t + 1 ); |
|
} |
|
|
|
HighlightAreaRect::HighlightAreaRect(RegularAreaRect *area) |
|
{ |
|
RegularAreaRect::Iterator i; |
|
for (i=area->begin();i!=area->end();++i) |
|
{ |
|
append(*i); |
|
} |
|
s_id=-1; |
|
color=QColor(); |
|
} |
|
|
|
/** class ObjectRect **/ |
|
|
|
ObjectRect::ObjectRect( double l, double t, double r, double b, ObjectType type, void * pnt ) |
|
// assign coordinates swapping them if negative width or height |
|
: NormalizedRect( r > l ? l : r, b > t ? t : b, r > l ? r : l, b > t ? b : t ), |
|
m_objectType( type ), m_pointer( pnt ) |
|
{ |
|
} |
|
|
|
ObjectRect::ObjectRect( NormalizedRect x, ObjectType type, void * pnt ) |
|
: NormalizedRect( x ), |
|
m_objectType( type ), m_pointer( pnt ) |
|
{ |
|
} |
|
|
|
ObjectRect::~ObjectRect() |
|
{ |
|
if ( !m_pointer ) |
|
return; |
|
|
|
if ( m_objectType == Link ) |
|
delete static_cast<KPDFLink*>( m_pointer ); |
|
else |
|
kDebug() << "Object deletion not implemented for type '" << m_objectType << "' ." << endl; |
|
}
|
|
|