File: imageview.h

package info (click to toggle)
fraqtive 0.4.3-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 988 kB
  • ctags: 1,249
  • sloc: cpp: 8,387; sh: 103; makefile: 45
file content (116 lines) | stat: -rw-r--r-- 2,807 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**************************************************************************
* This file is part of the Fraqtive program
* Copyright (C) 2004-2008 Michał Męciński
*
* 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.
**************************************************************************/

#ifndef IMAGEVIEW_H
#define IMAGEVIEW_H

#include <QWidget>

#include "abstractview.h"
#include "datastructures.h"

class FractalPresenter;

class ImageView : public QWidget, public AbstractView
{
    Q_OBJECT
public:
    ImageView( QWidget* parent, FractalPresenter* presenter );
    ~ImageView();

public:
    void setInteractive( bool interactive );

    QImage image() const { return m_image; }

public: // AbstractView implementation
    void clearView();

    void transformView( const QMatrix& transform );

    void initialUpdate( const FractalData* data );
    void partialUpdate( const FractalData* data );
    void fullUpdate( const FractalData* data );

    void setColorSettings( const Gradient& gradient, const QColor& backgroundColor, const ColorMapping& mapping );
    void setGradient( const Gradient& gradient );
    void setBackgroundColor( const QColor& color );
    void setColorMapping( const ColorMapping& mapping );

    void setViewSettings( const ViewSettings& settings );

    void setAnimationState( const AnimationState& state );

protected: // overrides
    void resizeEvent( QResizeEvent* e );
    void paintEvent( QPaintEvent* e );

    void mousePressEvent( QMouseEvent* e );
    void mouseMoveEvent( QMouseEvent* e );
    void mouseReleaseEvent( QMouseEvent* e );
    void mouseDoubleClickEvent( QMouseEvent* e );
    void wheelEvent( QWheelEvent* e );
    void leaveEvent( QEvent* e );

    void keyPressEvent( QKeyEvent* e );

private:
    void updateGradient();
    void updateBackground();
    void updateImage();

    void drawImage( const FractalData* data, const QRect& region );

    void calculateScale();

    QMatrix worldMatrix();

private:
    enum Tracking
    {
        NoTracking,
        DragMove,
        DragRotate,
        DragZoomIn,
        DragZoomOut,
        RotateCenter,
        ZoomCenter,
        ZoomPoint
    };

private:
    FractalPresenter* m_presenter;

    bool m_interactive;

    QImage m_image;

    Gradient m_gradient;
    QColor m_backgroundColor;
    ColorMapping m_colorMapping;

    ViewSettings m_settings;

    AnimationState m_animationState;

    QRgb* m_gradientCache;

    QRect m_updatedRegion;

    QMatrix m_scale;
    QMatrix m_invScale;

    Tracking m_tracking;
    QPoint m_trackStart;

    QMatrix m_transform;
};

#endif