summaryrefslogtreecommitdiffstats
path: root/krdc/vnc/threads.h
blob: 6b4d154e55f7167cfe3954b26cf30fc8d997d9b9 (plain)
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
/***************************************************************************
                          threads.h  -  threads for kvncview
                             -------------------
    begin                : Thu May 09 16:01:42 CET 2002
    copyright            : (C) 2015 Timothy Pearson <kb9vqf@pearsoncomputing.net>
                           (C) 2002 by Tim Jansen
    email                : tim@tjansen.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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 THREADS_H
#define THREADS_H

#include <tqthread.h>
#include <tqregion.h>
#include <tqrect.h>
#include <tqmutex.h>
#include <tqwaitcondition.h>
#include <tqevent.h>
#include <tqvaluelist.h>
#include <tqdatetime.h>
#include <tqimage.h>

#include <stdlib.h> 

#include "events.h"

extern "C" {
#include <rfb/rfbclient.h>
}

class KVncView;

enum EventType {
	MouseEventType,
	KeyEventType
};


struct MouseEvent {
	int x, y, buttons;
};

struct KeyEvent {
	unsigned int k;
	bool down;
};

struct InputEvent {
	EventType type;
	union {
		MouseEvent m;
		KeyEvent k;
	} e;
};

class ControllerThreadObject : public TQObject {
	Q_OBJECT

	public:
		ControllerThreadObject(KVncView *v, volatile bool &quitFlag);
		~ControllerThreadObject();

		enum RemoteViewStatus status();	

		void setImage(const TQImage &img);
		const TQImage image(int x = 0, int y = 0, int w = 0, int h = 0);
		void authenticationResults(int resultCode);
		void networkStatus(int statusCode);

		void setScaling(int w, int h);
		void queueDrawRegion(int x, int y, int w, int h);

		rfbClient *cl;
	
	public slots:
		void run();
	
	public:
		void queueMouseEvent(int x, int y, int buttonMask);
		void queueKeyEvent(unsigned int k, bool down);
		void queueClientCut(const TQString &text);

	private:
		KVncView *m_view;
		TQImage m_image;
		TQImage m_scaledImage;
		TQMutex mutex;
		enum RemoteViewStatus m_status;
		volatile bool &m_quitFlag;

		bool m_scaling;
		int m_scalingWidth;
		int m_scalingHeight;
		bool m_resizeEntireFrame;
	
		// all things that can be send follow:
		TQValueList<InputEvent> m_inputEvents; // list of unsent input events
	
		void changeStatus(RemoteViewStatus s);
		void sendFatalError(ErrorCode s);
};



#endif