~ubuntu-branches/ubuntu/trusty/fluxbox/trusty-proposed

« back to all changes in this revision

Viewing changes to src/ButtonTheme.cc

  • Committer: Bazaar Package Importer
  • Author(s): Dmitry E. Oboukhov
  • Date: 2008-07-01 10:38:14 UTC
  • mfrom: (2.1.12 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080701103814-khx2b6il152x9p93
Tags: 1.0.0+deb1-8
* x-dev has been removed from build-depends (out-of-date package).
* Standards-Version bumped to 3.8.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// ButtonTheme.cc
2
 
// Copyright (c) 2003 - 2005 Henrik Kinnunen (fluxgen at fluxbox dot org)
3
 
//                and Simon Bowden    (rathnor at users.sourceforge.net)
4
 
//
5
 
// Permission is hereby granted, free of charge, to any person obtaining a
6
 
// copy of this software and associated documentation files (the "Software"),
7
 
// to deal in the Software without restriction, including without limitation
8
 
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
 
// and/or sell copies of the Software, and to permit persons to whom the
10
 
// Software is furnished to do so, subject to the following conditions:
11
 
//
12
 
// The above copyright notice and this permission notice shall be included in
13
 
// all copies or substantial portions of the Software.
14
 
//
15
 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
 
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 
// DEALINGS IN THE SOFTWARE.
22
 
 
23
 
// $Id: ButtonTheme.cc 3865 2005-01-24 18:34:57Z mathias $
24
 
 
25
 
#include "ButtonTheme.hh"
26
 
#include "FbTk/App.hh"
27
 
 
28
 
//!! TODO: still missing *.pressed.picColor
29
 
ButtonTheme::ButtonTheme(int screen_num, 
30
 
                         const std::string &name, 
31
 
                         const std::string &alt_name,
32
 
                         const std::string &extra_fallback,
33
 
                         const std::string &extra_fallback_alt):
34
 
    ToolTheme(screen_num, name, alt_name),
35
 
    m_pic_color(*this, name + ".picColor", alt_name + ".PicColor"),
36
 
    m_pressed_texture(*this, name + ".pressed", alt_name + ".Pressed"),
37
 
    m_gc(RootWindow(FbTk::App::instance()->display(), screen_num)),
38
 
    m_scale(*this, name + ".scale", alt_name + ".Scale"),
39
 
    m_name(name),
40
 
    m_fallbackname(extra_fallback), m_altfallbackname(extra_fallback_alt) {
41
 
 
42
 
}
43
 
 
44
 
bool ButtonTheme::fallback(FbTk::ThemeItem_base &item) {
45
 
 
46
 
/* Don't fallback these for theme backwards compatibility
47
 
    if (item.name().find(".borderWidth") != std::string::npos) {
48
 
        return FbTk::ThemeManager::instance().loadItem(item, "borderWidth", "BorderWidth");
49
 
    }
50
 
 
51
 
    if (item.name().find(".borderColor") != std::string::npos) {
52
 
        return FbTk::ThemeManager::instance().loadItem(item, "borderColor", "BorderColor");
53
 
    }
54
 
*/
55
 
    if (item.name() == name()) {
56
 
        // default to the toolbar label style
57
 
        return FbTk::ThemeManager::instance().loadItem(item, 
58
 
                                                       m_fallbackname,
59
 
                                                       m_altfallbackname);
60
 
 
61
 
    } else if (item.name().find(".picColor") != std::string::npos) {
62
 
        // if we've fallen back to alternate name, and it doesn't have a picColor, 
63
 
        // try its text color instead
64
 
        return FbTk::ThemeManager::instance().loadItem(item, 
65
 
                                                       m_fallbackname + ".picColor",
66
 
                                                       m_altfallbackname + ".picColor") ||
67
 
            FbTk::ThemeManager::instance().loadItem(item, 
68
 
                                                    m_fallbackname + ".textColor",
69
 
                                                    m_altfallbackname + ".TextColor");
70
 
    } else if (item.name().find(".pressed") != std::string::npos) {
71
 
        // copy texture
72
 
        *m_pressed_texture = texture();
73
 
        // invert the bevel if it has one!
74
 
        unsigned long type = m_pressed_texture->type();
75
 
        unsigned long bevels = (FbTk::Texture::SUNKEN | FbTk::Texture::RAISED);
76
 
        if ((type & bevels) != 0) {
77
 
            type ^= bevels;
78
 
            m_pressed_texture->setType(type);
79
 
        }
80
 
        return true;
81
 
    }
82
 
 
83
 
    return ToolTheme::fallback(item);
84
 
}
85
 
 
86
 
void ButtonTheme::reconfigTheme() {
87
 
    m_gc.setForeground(*m_pic_color);
88
 
}
89
 
 
90
 
 
91