File: te_scrolling_layout.h

package info (click to toggle)
scummvm 2.7.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 363,784 kB
  • sloc: cpp: 3,622,060; asm: 27,410; python: 10,528; sh: 10,241; xml: 6,752; java: 5,579; perl: 2,570; yacc: 1,635; javascript: 1,016; lex: 539; makefile: 398; ansic: 378; awk: 275; objc: 82; sed: 11; php: 1
file content (149 lines) | stat: -rw-r--r-- 4,441 bytes parent folder | download | duplicates (3)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * 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 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef TETRAEDGE_TE_TE_SCROLLING_LAYOUT_H
#define TETRAEDGE_TE_TE_SCROLLING_LAYOUT_H

#include "tetraedge/te/te_animation.h"
#include "tetraedge/te/te_curve_anim2.h"
#include "tetraedge/te/te_layout.h"
#include "tetraedge/te/te_timer.h"
#include "tetraedge/te/te_signal.h"

namespace Tetraedge {

class TeScrollingLayout : public TeLayout {
public:
	TeScrollingLayout();
	virtual ~TeScrollingLayout();

	void setInertiaAnimationDuration(int duration) {
		_inertiaAnimationDuration = duration;
	}
	void setInertiaAnimationCurve(const Common::Array<float> &curve) {
		_inertiaAnimationCurve = curve;
	}
	void setAutoScrollDelay(uint val) {
		_autoScrollDelay = val;
	}
	void setAutoScrollLoop(int loop) {
		_autoScrollLoop = loop;
	}
	void setAutoScrollAnimation1Speed(float speed) {
		_autoScrollAnimation1Speed = speed;
	}
	void setAutoScrollAnimation2Speed(float speed) {
		_autoScrollAnimation2Speed = speed;
	}
	void setAutoScrollAnimation1Enabled(bool enabled) {
		_autoScrollAnimation1Enabled = enabled;
	}
	void setAutoScrollAnimation2Enabled(bool enabled) {
		_autoScrollAnimation2Enabled = enabled;
	}
	void setAutoScrollAnimation1Delay(int delay) {
		_autoScrollAnimation1Delay = delay;
	}
	void setAutoScrollAnimation2Delay(int delay) {
		_autoScrollAnimation2Delay = delay;
	}
	void setAutoScrollAnimation1Curve(const Common::Array<float> &curve) {
		_autoScrollAnimation1Curve = curve;
	}
	void setAutoScrollAnimation2Curve(const Common::Array<float> &curve) {
		_autoScrollAnimation2Curve = curve;
	}
	const TeVector3f32 &direction() const {
		return _direction;
	}
	void setDirection(const TeVector3f32 &dir) {
		_direction = dir;
	}
	void setMouseControl(bool val) {
		_mouseControl = val;
	}
	void setEnclose(bool val) {
		_enclose = val;
	}
	void setContentLayout(TeLayout *layout);
	void setSpeed(const TeVector3f32 &speed);

	bool onAutoScrollDelayTimer();
	bool onAutoScrollAnimation1DelayTimer();
	bool onAutoScrollAnimation2DelayTimer();
	bool onAutoScrollAnimation1Finished();
	bool onAutoScrollAnimation2Finished();
	bool onMouseMove(const Common::Point &pt);
	bool onSlideButtonDown();
	bool onMouseLeftUp(const Common::Point &pt);

	void playAutoScrollAnimation1();
	void playAutoScrollAnimation2();

	void resetScrollPosition();
	void playAutoScroll();
	TeVector3f32 scrollPosition();
	void setScrollPosition(const TeVector3f32 &newpos);

private:
	int _inertiaAnimationDuration;
	Common::Array<float> _inertiaAnimationCurve;
	TeCurveAnim2<TeScrollingLayout, TeVector3f32> _inertiaAnimation;

	int _autoScrollLoop;
	int _currentScrollLoopNo;

	uint _autoScrollDelay;
	TeTimer _autoScrollDelayTimer;

	float _autoScrollAnimation1Speed;
	float _autoScrollAnimation2Speed;
	bool _autoScrollAnimation1Enabled;
	bool _autoScrollAnimation2Enabled;
	int _autoScrollAnimation1Delay;
	int _autoScrollAnimation2Delay;
	TeTimer _autoScrollAnimation1Timer;
	TeTimer _autoScrollAnimation2Timer;
	Common::Array<float> _autoScrollAnimation1Curve;
	Common::Array<float> _autoScrollAnimation2Curve;
	TeCurveAnim2<TeScrollingLayout, TeVector3f32> _autoScrollAnimation1;
	TeCurveAnim2<TeScrollingLayout, TeVector3f32> _autoScrollAnimation2;

	TeVector3f32 _direction;
	TeVector3f32 _speed;
	TeTimer _scrollTimer;
	bool _mouseControl;
	bool _enclose;
	TeLayout *_contentLayout;
	TeVector3f32 _contentLayoutUserPos;

	TeVector2s32 _slideDownMousePos;
	float _mouseMoveThreshold;

	TeVector3f32 _lastMouseDownPos;
	bool _insideMouseThreshold;

	TeSignal0Param _posUpdatedSignal;
};

} // end namespace Tetraedge

#endif // TETRAEDGE_TE_TE_SCROLLING_LAYOUT_H