mirror of https://github.com/JakubMelka/PDF4QT.git
Minor bugfixing
This commit is contained in:
parent
2ff04eb6b5
commit
9b71031ec3
|
@ -1003,7 +1003,7 @@ void PDFAnnotationManager::drawPage(QPainter* painter,
|
|||
|
||||
for (const PageAnnotation& annotation : annotations.annotations)
|
||||
{
|
||||
const PDFAnnotation::Flags annotationFlags = annotation.annotation->getFlags();
|
||||
const PDFAnnotation::Flags annotationFlags = annotation.annotation->getEffectiveFlags();
|
||||
if (annotationFlags.testFlag(PDFAnnotation::Hidden) || // Annotation is completely hidden
|
||||
(m_target == Target::Print && !annotationFlags.testFlag(PDFAnnotation::Print)) || // Target is print and annotation is marked as not printed
|
||||
(m_target == Target::View && annotationFlags.testFlag(PDFAnnotation::NoView)) || // Target is view, and annotation is disabled for screen
|
||||
|
@ -1265,6 +1265,7 @@ void PDFWidgetAnnotationManager::updateFromMouseEvent(QMouseEvent* event)
|
|||
}
|
||||
|
||||
m_tooltip = QString();
|
||||
m_cursor = std::nullopt;
|
||||
bool appearanceChanged = false;
|
||||
|
||||
// We must update appearance states, and update tooltip
|
||||
|
@ -1285,7 +1286,7 @@ void PDFWidgetAnnotationManager::updateFromMouseEvent(QMouseEvent* event)
|
|||
|
||||
const PDFAppeareanceStreams::Appearance oldAppearance = pageAnnotation.appearance;
|
||||
QRectF annotationRect = pageAnnotation.annotation->getRectangle();
|
||||
QMatrix matrix = prepareTransformations(snapshotItem.pageToDeviceMatrix, widget, pageAnnotation.annotation->getFlags(), m_document->getCatalog()->getPage(snapshotItem.pageIndex), annotationRect);
|
||||
QMatrix matrix = prepareTransformations(snapshotItem.pageToDeviceMatrix, widget, pageAnnotation.annotation->getEffectiveFlags(), m_document->getCatalog()->getPage(snapshotItem.pageIndex), annotationRect);
|
||||
QPainterPath path;
|
||||
path.addRect(annotationRect);
|
||||
path = matrix.map(path);
|
||||
|
@ -1320,6 +1321,22 @@ void PDFWidgetAnnotationManager::updateFromMouseEvent(QMouseEvent* event)
|
|||
}
|
||||
}
|
||||
|
||||
const PDFAction* linkAction = nullptr;
|
||||
if (pageAnnotation.annotation->getType() == AnnotationType::Link)
|
||||
{
|
||||
const PDFLinkAnnotation* linkAnnotation = dynamic_cast<const PDFLinkAnnotation*>(pageAnnotation.annotation.data());
|
||||
Q_ASSERT(linkAnnotation);
|
||||
|
||||
// We must check, if user clicked to the link area
|
||||
QPainterPath activationPath = linkAnnotation->getActivationRegion().getPath();
|
||||
activationPath = snapshotItem.pageToDeviceMatrix.map(activationPath);
|
||||
if (activationPath.contains(event->pos()) && linkAnnotation->getAction())
|
||||
{
|
||||
m_cursor = QCursor(Qt::PointingHandCursor);
|
||||
linkAction = linkAnnotation->getAction();
|
||||
}
|
||||
}
|
||||
|
||||
// Generate popup window
|
||||
if (event->type() == QEvent::MouseButtonPress && event->button() == Qt::LeftButton)
|
||||
{
|
||||
|
@ -1346,18 +1363,9 @@ void PDFWidgetAnnotationManager::updateFromMouseEvent(QMouseEvent* event)
|
|||
dialog->exec();
|
||||
}
|
||||
|
||||
if (pageAnnotation.annotation->getType() == AnnotationType::Link)
|
||||
if (linkAction)
|
||||
{
|
||||
const PDFLinkAnnotation* linkAnnotation = dynamic_cast<const PDFLinkAnnotation*>(pageAnnotation.annotation.data());
|
||||
Q_ASSERT(linkAnnotation);
|
||||
|
||||
// We must check, if user clicked to the link area
|
||||
QPainterPath activationPath = linkAnnotation->getActivationRegion().getPath();
|
||||
activationPath = snapshotItem.pageToDeviceMatrix.map(activationPath);
|
||||
if (activationPath.contains(event->pos()) && linkAnnotation->getAction())
|
||||
{
|
||||
emit actionTriggered(linkAnnotation->getAction());
|
||||
}
|
||||
emit actionTriggered(linkAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1634,6 +1642,11 @@ void PDFTextAnnotation::draw(AnnotationDrawParameters& parameters) const
|
|||
parameters.boundingRectangle = rectangle;
|
||||
}
|
||||
|
||||
PDFTextAnnotation::Flags PDFTextAnnotation::getEffectiveFlags() const
|
||||
{
|
||||
return getFlags() | NoZoom | NoRotate;
|
||||
}
|
||||
|
||||
void PDFLineAnnotation::draw(AnnotationDrawParameters& parameters) const
|
||||
{
|
||||
QLineF line = getLine();
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "pdfdocumentdrawinterface.h"
|
||||
#include "pdfrenderer.h"
|
||||
|
||||
#include <QCursor>
|
||||
#include <QPainterPath>
|
||||
|
||||
#include <array>
|
||||
|
@ -485,6 +486,10 @@ public:
|
|||
/// Returns a list of appearance states, which must be created for this annotation
|
||||
virtual std::vector<PDFAppeareanceStreams::Key> getDrawKeys() const;
|
||||
|
||||
/// Returns effective flags (some annotations can behave as they have always
|
||||
/// set some flags, such as NoZoom and NoRotate)
|
||||
virtual Flags getEffectiveFlags() const { return getFlags(); }
|
||||
|
||||
PDFObjectReference getSelfReference() const { return m_selfReference; }
|
||||
const QRectF& getRectangle() const { return m_rectangle; }
|
||||
const QString& getContents() const { return m_contents; }
|
||||
|
@ -672,6 +677,7 @@ public:
|
|||
virtual AnnotationType getType() const override { return AnnotationType::Text; }
|
||||
virtual std::vector<PDFAppeareanceStreams::Key> getDrawKeys() const override;
|
||||
virtual void draw(AnnotationDrawParameters& parameters) const override;
|
||||
virtual Flags getEffectiveFlags() const override;
|
||||
|
||||
bool isOpen() const { return m_open; }
|
||||
const QByteArray& getIconName() const { return m_iconName; }
|
||||
|
@ -1245,7 +1251,8 @@ private:
|
|||
/// Annotation manager manages annotations for document's pages. Each page
|
||||
/// can have multiple annotations, and this object caches them. Also,
|
||||
/// this object builds annotation's appearance streams, if necessary. This
|
||||
/// manager is intended to non-gui rendering.
|
||||
/// manager is intended to non-gui rendering. If widget annotation manager is used,
|
||||
/// then this object is not thread safe.
|
||||
class PDFFORQTLIBSHARED_EXPORT PDFAnnotationManager : public QObject, public IDocumentDrawInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -1409,6 +1416,9 @@ public:
|
|||
/// Returns tooltip generated from annotation
|
||||
const QString& getTooltip() const { return m_tooltip; }
|
||||
|
||||
/// Returns current cursor
|
||||
const std::optional<QCursor>& getCursor() const { return m_cursor;}
|
||||
|
||||
signals:
|
||||
void actionTriggered(const pdf::PDFAction* action);
|
||||
|
||||
|
@ -1435,6 +1445,7 @@ private:
|
|||
|
||||
PDFDrawWidgetProxy* m_proxy;
|
||||
QString m_tooltip;
|
||||
std::optional<QCursor> m_cursor;
|
||||
};
|
||||
|
||||
} // namespace pdf
|
||||
|
|
|
@ -397,6 +397,14 @@ void PDFDrawWidgetBase<BaseWidget>::updateCursor()
|
|||
cursor = toolManager->getCursor();
|
||||
}
|
||||
|
||||
if (!cursor)
|
||||
{
|
||||
if (PDFWidgetAnnotationManager* annotationManager = m_widget->getDrawWidgetProxy()->getAnnotationManager())
|
||||
{
|
||||
cursor = annotationManager->getCursor();
|
||||
}
|
||||
}
|
||||
|
||||
if (!cursor)
|
||||
{
|
||||
switch (m_mouseOperation)
|
||||
|
@ -436,6 +444,7 @@ void PDFDrawWidgetBase<BaseWidget>::wheelEvent(QWheelEvent* event)
|
|||
toolManager->wheelEvent(this, event);
|
||||
if (event->isAccepted())
|
||||
{
|
||||
updateCursor();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,6 +97,9 @@ public:
|
|||
m_object = T();
|
||||
}
|
||||
|
||||
/// Returns true, if cache is dirty
|
||||
inline bool isDirty() const { return m_dirty; }
|
||||
|
||||
private:
|
||||
bool m_dirty;
|
||||
T m_object;
|
||||
|
|
Loading…
Reference in New Issue