a99a45703281cf32d314bc5d75c71b740377d2d1
[ardour.git] / libs / gtkmm2ext / cursors.cc
1 /*
2     Copyright (C) 2014 Paul Davis
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include <sstream>
21 #include <fstream>
22
23 #include "gtkmm2ext/cursors.h"
24
25 using namespace Gtkmm2ext;
26
27 CursorInfo::Infos CursorInfo::infos;
28
29 CursorInfo::CursorInfo (const std::string& n, int hotspot_x, int hotspot_y)
30         : name (n)
31         , x (hotspot_x)
32         , y (hotspot_y)
33 {
34 }
35
36 int
37 CursorInfo::load_cursor_info (const std::string& path)
38 {
39         std::ifstream infofile (path.c_str());
40
41         if (!infofile) {
42                 return -1;
43         }
44
45         std::stringstream s;
46         std::string name;
47         int x;
48         int y;
49
50         do {
51                 s << infofile;
52                 if (!infofile) {
53                         break;
54                 }
55                 s >> name;
56                 s >> x;
57                 s >> y;
58                 if (!s) {
59                         break;
60                 }
61                 
62                 CursorInfo* ci = new CursorInfo (name, x, y);
63                 infos[name] = ci;
64
65         } while (true);
66
67         return 0;
68 }
69
70 void
71 CursorInfo::drop_cursor_info ()
72 {
73         infos.clear ();
74 }
75
76 CursorInfo*
77 CursorInfo::lookup_cursor_info (const std::string& name)
78 {
79         Infos::iterator i = infos.find (name);
80
81         if (i == infos.end()) {
82                 return 0;
83         }
84         return i->second;
85 }