]>
Dogcows Code - chaz/openbox/blob - src/Texture.cc
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2 // Texture.cc for Blackbox - an X11 Window manager
3 // Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh at debian.org>
4 // Copyright (c) 1997 - 2000, 2002 Bradley T Hughes <bhughes at trolltech.com>
6 // Permission is hereby granted, free of charge, to any person obtaining a
7 // copy of this software and associated documentation files (the "Software"),
8 // to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 // and/or sell copies of the Software, and to permit persons to whom the
11 // Software is furnished to do so, subject to the following conditions:
13 // The above copyright notice and this permission notice shall be included in
14 // all copies or substantial portions of the Software.
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 // DEALINGS IN THE SOFTWARE.
25 # include "../config.h"
26 #endif // HAVE_CONFIG_H
38 #include "BaseDisplay.hh"
41 #include "blackbox.hh"
46 BTexture::BTexture(const BaseDisplay
* const _display
,
47 unsigned int _screen
, BImageControl
* _ctrl
)
48 : c(_display
, _screen
), ct(_display
, _screen
),
49 lc(_display
, _screen
), sc(_display
, _screen
), t(0),
50 dpy(_display
), ctrl(_ctrl
), scrn(_screen
) { }
53 BTexture::BTexture(const string
&d
, const BaseDisplay
* const _display
,
54 unsigned int _screen
, BImageControl
* _ctrl
)
55 : c(_display
, _screen
), ct(_display
, _screen
),
56 lc(_display
, _screen
), sc(_display
, _screen
), t(0),
57 dpy(_display
), ctrl(_ctrl
), scrn(_screen
) {
62 void BTexture::setColor(const BColor
&cc
) {
64 c
.setDisplay(display(), screen());
66 unsigned char r
, g
, b
, rr
, gg
, bb
;
68 // calculate the light color
78 lc
= BColor(rr
, gg
, bb
, display(), screen());
80 // calculate the shadow color
84 rr
= (r
>> 2) + (r
>> 1);
85 gg
= (g
>> 2) + (g
>> 1);
86 bb
= (b
>> 2) + (b
>> 1);
90 sc
= BColor(rr
, gg
, bb
, display(), screen());
94 void BTexture::setDescription(const string
&d
) {
96 descr
.reserve(d
.length());
98 string::const_iterator it
= d
.begin(), end
= d
.end();
99 for (; it
!= end
; ++it
)
100 descr
+= tolower(*it
);
102 if (descr
.find("parentrelative") != string::npos
) {
103 setTexture(BTexture::Parent_Relative
);
107 if (descr
.find("gradient") != string::npos
) {
108 addTexture(BTexture::Gradient
);
109 if (descr
.find("crossdiagonal") != string::npos
)
110 addTexture(BTexture::CrossDiagonal
);
111 else if (descr
.find("rectangle") != string::npos
)
112 addTexture(BTexture::Rectangle
);
113 else if (descr
.find("pyramid") != string::npos
)
114 addTexture(BTexture::Pyramid
);
115 else if (descr
.find("pipecross") != string::npos
)
116 addTexture(BTexture::PipeCross
);
117 else if (descr
.find("elliptic") != string::npos
)
118 addTexture(BTexture::Elliptic
);
119 else if (descr
.find("horizontal") != string::npos
)
120 addTexture(BTexture::Horizontal
);
121 else if (descr
.find("vertical") != string::npos
)
122 addTexture(BTexture::Vertical
);
124 addTexture(BTexture::Diagonal
);
126 addTexture(BTexture::Solid
);
129 if (descr
.find("sunken") != string::npos
)
130 addTexture(BTexture::Sunken
);
131 else if (descr
.find("flat") != string::npos
)
132 addTexture(BTexture::Flat
);
134 addTexture(BTexture::Raised
);
136 if (! (texture() & BTexture::Flat
)) {
137 if (descr
.find("bevel2") != string::npos
)
138 addTexture(BTexture::Bevel2
);
140 addTexture(BTexture::Bevel1
);
143 if (descr
.find("interlaced") != string::npos
)
144 addTexture(BTexture::Interlaced
);
148 void BTexture::setDisplay(const BaseDisplay
* const _display
,
149 const unsigned int _screen
) {
150 if (_display
== display() && _screen
== screen()) {
157 c
.setDisplay(_display
, _screen
);
158 ct
.setDisplay(_display
, _screen
);
159 lc
.setDisplay(_display
, _screen
);
160 sc
.setDisplay(_display
, _screen
);
164 BTexture
& BTexture::operator=(const BTexture
&tt
) {
179 Pixmap
BTexture::render(const unsigned int width
, const unsigned int height
,
181 assert(display() != 0);
183 if (texture() == (BTexture::Flat
| BTexture::Solid
))
185 if (texture() == BTexture::Parent_Relative
)
186 return ParentRelative
;
188 if (screen() == ~(0u))
189 scrn
= DefaultScreen(display()->getXDisplay());
192 Pixmap ret
= ctrl
->renderImage(width
, height
, *this);
195 ctrl
->removeImage(old
);
This page took 0.042879 seconds and 4 git commands to generate.