xref: /haiku/src/preferences/screen/ScreenSettings.cpp (revision 0d452c8f34013b611a54c746a71c05e28796eae2)
1 /*
2  * Copyright 2001-2009, Haiku.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Rafael Romo
7  *		Stefano Ceccherini (burton666@libero.it)
8  *		Axel Dörfler, axeld@pinc-software.de
9  */
10 
11 
12 #include <StorageKit.h>
13 #include <Screen.h>
14 
15 #include "ScreenSettings.h"
16 
17 
18 static const char* kSettingsFileName = "Screen_data";
19 
20 
21 ScreenSettings::ScreenSettings()
22 {
23 	BScreen screen(B_MAIN_SCREEN_ID);
24 	BRect screenFrame = screen.Frame();
25 
26 	fWindowFrame.Set(0, 0, 450, 250);
27 
28 	BPath path;
29 	if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
30 		path.Append(kSettingsFileName);
31 
32 		BFile file(path.Path(), B_READ_ONLY);
33 		if (file.InitCheck() == B_OK) {
34 			file.Read(&fWindowFrame, sizeof(BRect));
35 
36 			// make sure the window is visible on screen
37 			if (fWindowFrame.Width() > screenFrame.Width())
38 				fWindowFrame.right = fWindowFrame.left + 450;
39 			if (fWindowFrame.Height() > screenFrame.Height())
40 				fWindowFrame.bottom = fWindowFrame.top + 250;
41 
42 			if (screenFrame.right >= fWindowFrame.left + 40
43 				&& screenFrame.bottom >= fWindowFrame.top + 40
44 				&& screenFrame.left <= fWindowFrame.right - 40
45 				&& screenFrame.top <= fWindowFrame.bottom - 40)
46 				return;
47 		}
48 	}
49 
50 	// Center on screen
51 	fWindowFrame.OffsetTo(
52 		screenFrame.left + (screenFrame.Width() - fWindowFrame.Width()) / 2,
53 		screenFrame.top + (screenFrame.Height() - fWindowFrame.Height()) /2);
54 }
55 
56 
57 ScreenSettings::~ScreenSettings()
58 {
59 	BPath path;
60 	if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) < B_OK)
61 		return;
62 
63 	path.Append(kSettingsFileName);
64 
65 	BFile file(path.Path(), B_WRITE_ONLY | B_CREATE_FILE);
66 	if (file.InitCheck() == B_OK)
67 		file.Write(&fWindowFrame, sizeof(BRect));
68 }
69 
70 
71 void
72 ScreenSettings::SetWindowFrame(BRect frame)
73 {
74 	fWindowFrame = frame;
75 }
76