1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- 2 // Texture.hh for Blackbox - an X11 Window manager 3 // Copyright (c) 2001 - 2005 Sean 'Shaleh' Perry <shaleh@debian.org> 4 // Copyright (c) 1997 - 2000, 2002 - 2005 5 // Bradley T Hughes <bhughes at trolltech.com> 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a 8 // copy of this software and associated documentation files (the "Software"), 9 // to deal in the Software without restriction, including without limitation 10 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 // and/or sell copies of the Software, and to permit persons to whom the 12 // Software is furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 // DEALINGS IN THE SOFTWARE. 24 25 #ifndef __Texture_hh 26 #define __Texture_hh 27 28 #include "Color.hh" 29 #include "Util.hh" 30 31 namespace bt { 32 33 // forward declarations 34 class Rect; 35 class Resource; 36 class Texture; 37 38 void drawTexture(unsigned int screen, 39 const Texture &texture, 40 Drawable drawable, 41 const Rect &trect, 42 const Rect &urect, 43 Pixmap pixmap = 0ul); 44 45 /* 46 If 'name.appearance' cannot be found, a flat solid texture in the 47 defaultColor is returned; otherwise, the texture is read. All 48 missing colors are set to the defaultColor. 49 */ 50 Texture 51 textureResource(const Display &display, 52 unsigned int screen, 53 const Resource &resource, 54 const std::string &name, 55 const std::string &className, 56 const std::string &defaultColor = "black"); 57 58 /* 59 If 'name.appearance' cannot be found, the defaultTexture is 60 returned; otherwise, the above function is called with the passed 61 arguments. 62 */ 63 Texture 64 textureResource(const Display &display, 65 unsigned int screen, 66 const Resource &resource, 67 const std::string &name, 68 const std::string &className, 69 const Texture &defaultTexture); 70 71 class Texture { 72 public: 73 enum Type { 74 // bevel options 75 Flat = (1l<<0), 76 Sunken = (1l<<1), 77 Raised = (1l<<2), 78 // textures 79 Solid = (1l<<3), 80 Gradient = (1l<<4), 81 // gradients 82 Horizontal = (1l<<5), 83 Vertical = (1l<<6), 84 Diagonal = (1l<<7), 85 CrossDiagonal = (1l<<8), 86 Rectangle = (1l<<9), 87 Pyramid = (1l<<10), 88 PipeCross = (1l<<11), 89 Elliptic = (1l<<12), 90 // parent relative image 91 Parent_Relative = (1l<<13), 92 // fake interlaced image 93 Interlaced = (1l<<14), 94 // border around image 95 Border = (1l<<15) 96 }; 97 Texture(void)98 inline Texture(void) 99 : t(0ul), bw(0u) 100 { } Texture(const Texture & tt)101 inline Texture(const Texture &tt) 102 { *this = tt; } 103 description(void) const104 inline const std::string &description(void) const 105 { return descr; } 106 void setDescription(const std::string &d); 107 108 void setColor1(const Color &new_color); setColor2(const Color & new_color)109 inline void setColor2(const Color &new_color) 110 { c2 = new_color; } setBorderColor(const Color & new_borderColor)111 inline void setBorderColor(const Color &new_borderColor) 112 { bc = new_borderColor; } 113 color1(void) const114 inline const Color &color1(void) const 115 { return c1; } color2(void) const116 inline const Color &color2(void) const 117 { return c2; } borderColor(void) const118 inline const Color &borderColor(void) const 119 { return bc; } lightColor(void) const120 inline const Color &lightColor(void) const 121 { return lc; } shadowColor(void) const122 inline const Color &shadowColor(void) const 123 { return sc; } 124 texture(void) const125 inline unsigned long texture(void) const 126 { return t; } setTexture(unsigned long _texture)127 inline void setTexture(unsigned long _texture) 128 { t = _texture; } addTexture(unsigned long _texture)129 inline void addTexture(unsigned long _texture) 130 { t |= _texture; } 131 borderWidth(void) const132 inline unsigned int borderWidth(void) const 133 { return bw; } setBorderWidth(unsigned int new_bw)134 inline void setBorderWidth(unsigned int new_bw) 135 { bw = new_bw; } 136 137 Texture &operator=(const Texture &tt); operator ==(const Texture & tt) const138 inline bool operator==(const Texture &tt) const { 139 return (c1 == tt.c1 && c2 == tt.c2 && bc == tt.bc && 140 lc == tt.lc && sc == tt.sc && t == tt.t && bw == tt.bw); 141 } operator !=(const Texture & tt) const142 inline bool operator!=(const Texture &tt) const 143 { return (!operator==(tt)); } 144 145 private: 146 std::string descr; 147 Color c1, c2, bc, lc, sc; 148 unsigned long t; 149 unsigned int bw; 150 }; 151 152 } // namespace bt 153 154 #endif // __Texture_hh 155