1 /* 2 * Copyright (c) 2001-2007, Haiku, Inc. 3 * Distributed under the terms of the MIT license. 4 * 5 * Author: DarkWyrm <bpmagic@columbus.rr.com> 6 * Stephan Aßmus <superstippi@gmx.de> 7 */ 8 9 #include "PatternHandler.h" 10 11 #include <stdio.h> 12 13 #include <Point.h> 14 15 const Pattern kSolidHigh(0xFFFFFFFFFFFFFFFFLL); 16 const Pattern kSolidLow((uint64)0); 17 const Pattern kMixedColors(0xAAAAAAAAAAAAAAAALL); 18 19 const rgb_color kBlack = (rgb_color){ 0, 0, 0, 255 }; 20 const rgb_color kWhite = (rgb_color){ 255, 255, 255, 255 }; 21 22 /*! 23 \brief Void constructor 24 25 The pattern is set to B_SOLID_HIGH, high color is set to black, and 26 low color is set to white. 27 */ 28 PatternHandler::PatternHandler(void) 29 : fPattern(kSolidHigh), 30 fHighColor(kBlack), 31 fLowColor(kWhite), 32 fXOffset(0), 33 fYOffset(0) 34 { 35 } 36 37 /*! 38 \brief Constructor initializes to given pattern 39 \param pat Pattern to use. 40 41 This initializes to the given pattern or B_SOLID_HIGH if the pattern 42 is NULL. High color is set to black, and low color is set to white. 43 */ 44 PatternHandler::PatternHandler(const int8* pat) 45 : fPattern(pat ? Pattern(pat) : Pattern(kSolidHigh)), 46 fHighColor(kBlack), 47 fLowColor(kWhite), 48 fXOffset(0), 49 fYOffset(0) 50 { 51 } 52 53 /*! 54 \brief Constructor initializes to given pattern 55 \param pat Pattern to use. 56 57 This initializes to the given pattern or B_SOLID_HIGH if the pattern 58 is NULL. High color is set to black, and low color is set to white. 59 */ 60 PatternHandler::PatternHandler(const uint64& pat) 61 : fPattern(pat), 62 fHighColor(kBlack), 63 fLowColor(kWhite), 64 fXOffset(0), 65 fYOffset(0) 66 { 67 } 68 69 /*! 70 \brief Constructor initializes to given pattern 71 \param pat Pattern to use. 72 73 This initializes to the given Pattern. 74 High color is set to black, and low color is set to white. 75 */ 76 PatternHandler::PatternHandler(const Pattern& pat) 77 : fPattern(pat), 78 fHighColor(kBlack), 79 fLowColor(kWhite), 80 fXOffset(0), 81 fYOffset(0) 82 { 83 } 84 85 /*! 86 \brief Constructor initializes to given PatternHandler 87 \param other PatternHandler to copy. 88 89 Copy constructor. 90 */ 91 PatternHandler::PatternHandler(const PatternHandler& other) 92 : fPattern(other.fPattern), 93 fHighColor(other.fHighColor), 94 fLowColor(other.fLowColor), 95 fXOffset(other.fXOffset), 96 fYOffset(other.fYOffset) 97 { 98 } 99 100 //! Destructor does nothing 101 PatternHandler::~PatternHandler(void) 102 { 103 } 104 105 /*! 106 \brief Sets the pattern for the handler to the one given 107 \param pat Pattern to use. 108 109 This initializes to the given pattern or B_SOLID_HIGH if the pattern 110 is NULL. 111 */ 112 void 113 PatternHandler::SetPattern(const int8* pat) 114 { 115 if (pat) 116 fPattern.Set(pat); 117 else 118 fPattern = kSolidHigh; 119 } 120 121 /*! 122 \brief Sets the pattern for the handler to the one given 123 \param pat Pattern to use. 124 */ 125 void 126 PatternHandler::SetPattern(const uint64& pat) 127 { 128 fPattern = pat; 129 } 130 131 /*! 132 \brief Sets the pattern for the handler to the one given 133 \param pat Pattern to use. 134 */ 135 void 136 PatternHandler::SetPattern(const Pattern& pat) 137 { 138 fPattern = pat; 139 } 140 141 /*! 142 \brief Sets the pattern for the handler to the one given 143 \param pat R5 style pattern to use. 144 */ 145 void 146 PatternHandler::SetPattern(const pattern& pat) 147 { 148 fPattern = pat; 149 } 150 151 /*! 152 \brief Set the colors for the pattern to use 153 \param high High color for the handler 154 \param low Low color for the handler 155 */ 156 void 157 PatternHandler::SetColors(const rgb_color& high, const rgb_color& low) 158 { 159 fHighColor = high; 160 fLowColor = low; 161 } 162 163 /*! 164 \brief Set the high color for the pattern to use 165 \param color High color for the handler 166 */ 167 void 168 PatternHandler::SetHighColor(const rgb_color& color) 169 { 170 fHighColor = color; 171 } 172 173 /*! 174 \brief Set the low color for the pattern to use 175 \param color Low color for the handler 176 */ 177 void 178 PatternHandler::SetLowColor(const rgb_color& color) 179 { 180 fLowColor = color; 181 } 182 183 /*! 184 \brief Obtains the color in the pattern at the specified coordinates 185 \param pt Coordinates to get the color for 186 \return Color for the coordinates 187 */ 188 rgb_color 189 PatternHandler::ColorAt(const BPoint &pt) const 190 { 191 return ColorAt(pt.x, pt.y); 192 } 193 194 /*! 195 \brief Obtains the color in the pattern at the specified coordinates 196 \param x X coordinate to get the color for 197 \param y Y coordinate to get the color for 198 \return Color for the coordinates 199 */ 200 rgb_color 201 PatternHandler::ColorAt(float x, float y) const 202 { 203 return ColorAt(int(x), int(y)); 204 } 205 206 /*! 207 \brief Obtains the value of the pattern at the specified coordinates 208 \param pt Coordinates to get the value for 209 \return Value for the coordinates - true if high, false if low. 210 */ 211 bool 212 PatternHandler::IsHighColor(const BPoint &pt) const 213 { 214 return IsHighColor((int)pt.x, (int)pt.y); 215 } 216 217 /*! 218 \brief Transfers the scrolling offset of a BView to affect the pattern. 219 \param x Positive or negative horizontal offset 220 \param y Positive or negative vertical offset 221 */ 222 void 223 PatternHandler::SetOffsets(int32 x, int32 y) 224 { 225 fXOffset = x & 7; 226 fYOffset = y & 7; 227 } 228 229