xref: /haiku/src/apps/screenshot/ScreenshotApp.cpp (revision 7749d0bb0c358a3279b1b9cc76d8376e900130a5)
1 /*
2  * Copyright 2010 Wim van der Meer <WPJvanderMeer@gmail.com>
3  * All rights reserved. Distributed under the terms of the MIT license.
4  *
5  * Authors:
6  *		Wim van der Meer
7  */
8 
9 
10 #include "ScreenshotApp.h"
11 
12 #include <stdlib.h>
13 
14 #include <Bitmap.h>
15 #include <Catalog.h>
16 #include <Locale.h>
17 #include <Roster.h>
18 
19 #include "ScreenshotWindow.h"
20 #include "Utility.h"
21 
22 
23 ScreenshotApp::ScreenshotApp()
24 	:
25 	BApplication("application/x-vnd.haiku-screenshot"),
26 	fUtility(new Utility),
27 	fSilent(false),
28 	fClipboard(false)
29 {
30 }
31 
32 
33 ScreenshotApp::~ScreenshotApp()
34 {
35 	delete fUtility;
36 }
37 
38 
39 void
40 ScreenshotApp::MessageReceived(BMessage* message)
41 {
42 	status_t status = B_OK;
43 	switch (message->what) {
44 		case SS_UTILITY_DATA:
45 		{
46 			BMessage bitmap;
47 			status = message->FindMessage("wholeScreen", &bitmap);
48 			if (status != B_OK)
49 				break;
50 
51 			fUtility->wholeScreen = new BBitmap(&bitmap);
52 
53 			status = message->FindMessage("cursorBitmap", &bitmap);
54 			if (status != B_OK)
55 				break;
56 
57 			fUtility->cursorBitmap = new BBitmap(&bitmap);
58 
59 			status = message->FindMessage("cursorAreaBitmap", &bitmap);
60 			if (status != B_OK)
61 				break;
62 
63 			fUtility->cursorAreaBitmap = new BBitmap(&bitmap);
64 
65 			status = message->FindPoint("cursorPosition",
66 				&fUtility->cursorPosition);
67 			if (status != B_OK)
68 				break;
69 
70 			status = message->FindRect("activeWindowFrame",
71 				&fUtility->activeWindowFrame);
72 			if (status != B_OK)
73 				break;
74 
75 			status = message->FindRect("tabFrame", &fUtility->tabFrame);
76 			if (status != B_OK)
77 				break;
78 
79 			status = message->FindFloat("borderSize", &fUtility->borderSize);
80 			if (status != B_OK)
81 				break;
82 
83 			break;
84 		}
85 
86 		default:
87 			BApplication::MessageReceived(message);
88 			break;
89 	}
90 
91 	if (status != B_OK)
92 		be_app->PostMessage(B_QUIT_REQUESTED);
93 }
94 
95 
96 void
97 ScreenshotApp::ArgvReceived(int32 argc, char** argv)
98 {
99 	for (int32 i = 0; i < argc; i++) {
100 		if (strcmp(argv[i], "-s") == 0
101 			|| strcmp(argv[i], "--silent") == 0)
102 			fSilent = true;
103 		else if (strcmp(argv[i], "-c") == 0
104 			|| strcmp(argv[i], "--clipboard") == 0)
105 			fClipboard = true;
106 	}
107 }
108 
109 
110 void
111 ScreenshotApp::ReadyToRun()
112 {
113 	new ScreenshotWindow(*fUtility, fSilent, fClipboard);
114 }
115 
116 
117 int
118 main()
119 {
120 	ScreenshotApp app;
121 	return app.Run();
122 }
123