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
ScreenshotApp()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
~ScreenshotApp()33 ScreenshotApp::~ScreenshotApp()
34 {
35 delete fUtility;
36 }
37
38
39 void
MessageReceived(BMessage * message)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
ArgvReceived(int32 argc,char ** argv)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
ReadyToRun()111 ScreenshotApp::ReadyToRun()
112 {
113 new ScreenshotWindow(*fUtility, fSilent, fClipboard);
114 }
115
116
117 int
main()118 main()
119 {
120 ScreenshotApp app;
121 return app.Run();
122 }
123