blob: aea0efea836fb03b513259d2152576704fae3057 [file] [log] [blame]
george825e7af742005-03-10 14:26:00 +00001/* Copyright (C) 2004 TightVNC Team. All Rights Reserved.
2 *
3 * This is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This software is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 * USA.
17 */
18
19// -=- PlayerOptions class
20
21#include <rfbplayer/PlayerOptions.h>
22
23using namespace rfb::win32;
24
25PlayerOptions::PlayerOptions() {
26 writeDefaults();
27};
28
29void PlayerOptions::readFromRegistry() {
30 try {
31 RegKey regKey;
32 regKey.createKey(HKEY_CURRENT_USER, _T("Software\\TightVnc\\RfbPlayer"));
33 autoPlay = regKey.getBool(_T("AutoPlay"), DEFAULT_AUTOPLAY);
34 pixelFormat = regKey.getInt(_T("PixelFormat"), DEFAULT_PF);
35 acceptBell = regKey.getBool(_T("AcceptBell"), DEFAULT_ACCEPT_BELL);
36 acceptCutText = regKey.getBool(_T("AcceptCutText"), DEFAULT_ACCEPT_CUT_TEXT);
37 autoStoreSettings = regKey.getBool(_T("AutoStoreSettings"), DEFAULT_STORE_SETTINGS);
38 autoPlay = regKey.getBool(_T("AutoPlay"), DEFAULT_AUTOPLAY);
39 loopPlayback = regKey.getBool(_T("LoopPlayback"), DEFAULT_LOOP_PLAYBACK);
40 askPixelFormat = regKey.getBool(_T("AskPixelFormat"), DEFAULT_ASK_PF);
41 } catch (rdr::Exception e) {
42 MessageBox(0, e.str(), e.type(), MB_OK | MB_ICONERROR);
43 }
44}
45
46void PlayerOptions::writeToRegistry() {
47 try {
48 RegKey regKey;
49 regKey.createKey(HKEY_CURRENT_USER, _T("Software\\TightVnc\\RfbPlayer"));
50 regKey.setBool(_T("AutoPlay"), autoPlay);
51 regKey.setInt(_T("PixelFormat"), pixelFormat);
52 regKey.setBool(_T("AcceptBell"), acceptBell);
53 regKey.setBool(_T("AcceptCutText"), acceptCutText);
54 regKey.setBool(_T("AutoStoreSettings"), autoStoreSettings);
55 regKey.setBool(_T("AutoPlay"), autoPlay);
56 regKey.setBool(_T("LoopPlayback"), loopPlayback);
57 regKey.setBool(_T("AskPixelFormat"), askPixelFormat);
58 } catch (rdr::Exception e) {
59 MessageBox(0, e.str(), e.type(), MB_OK | MB_ICONERROR);
60 }
61}
62
63void PlayerOptions::writeDefaults() {
64 initTime = DEFAULT_INIT_TIME;
65 playbackSpeed = DEFAULT_SPEED;
66 pixelFormat = PF_AUTO;
67 frameScale = DEFAULT_FRAME_SCALE;
68 autoPlay = DEFAULT_AUTOPLAY;
69 fullScreen = DEFAULT_FULL_SCREEN;
70 acceptBell = DEFAULT_ACCEPT_BELL;
71 acceptCutText = DEFAULT_ACCEPT_CUT_TEXT;
72 loopPlayback = DEFAULT_LOOP_PLAYBACK;
73 askPixelFormat = DEFAULT_ASK_PF;
74 autoStoreSettings = DEFAULT_STORE_SETTINGS;
george827b1ebae2005-03-16 16:07:47 +000075}
76
77void PlayerOptions::setPF(PixelFormat *newPF) {
78 memcpy(&PF, newPF, sizeof(PixelFormat));
79}
80
81bool PlayerOptions::setPF(int rgb_order, int rm, int gm, int bm, bool big_endian) {
82 PixelFormat newPF;
83
84 // Calculate the colour bits per pixel
85 int bpp = rm + gm + bm;
86 if (bpp < 0) {
87 return false;
88 } else if (bpp <= 8 ) {
89 newPF.bpp = 8;
90 } else if (bpp <= 16) {
91 newPF.bpp = 16;
92 } else if (bpp <= 32) {
93 newPF.bpp = 32;
94 } else {
95 return false;
96 }
97 newPF.depth = bpp;
98
99 // Calculate the r, g and b bits shifts
100 switch (rgb_order) {
101 case RGB_ORDER:
102 newPF.redShift = gm + bm;
103 newPF.greenShift = bm;
104 newPF.blueShift = 0;
105 break;
106 case RBG_ORDER:
107 newPF.redShift = bm + gm;
108 newPF.blueShift = gm;
109 newPF.greenShift = 0;
110 break;
111 case GRB_ORDER:
112 newPF.greenShift = rm + bm;
113 newPF.redShift = bm;
114 newPF.blueShift = 0;
115 break;
116 case GBR_ORDER:
117 newPF.greenShift = bm + rm;
118 newPF.blueShift = rm;
119 newPF.redShift = 0;
120 break;
121 case BGR_ORDER:
122 newPF.blueShift = gm + rm;
123 newPF.greenShift = rm;
124 newPF.redShift = 0;
125 break;
126 case BRG_ORDER:
127 newPF.blueShift = rm + gm;
128 newPF.redShift = gm;
129 newPF.greenShift = 0;
130 break;
131 default:
132 return false;
133 }
134
135 newPF.trueColour = true;
136 newPF.bigEndian = big_endian;
137 newPF.redMax = (1 << rm) - 1;
138 newPF.greenMax = (1 << gm) - 1;
139 newPF.blueMax = (1 << bm) - 1;
140 setPF(&newPF);
141 return true;
george825e7af742005-03-10 14:26:00 +0000142}