/* * Copyright (c) 2001-2007, Haiku, Inc. * Distributed under the terms of the MIT license. * * Author: DarkWyrm * Stephan Aßmus */ #include "PatternHandler.h" #include #include const Pattern kSolidHigh(0xFFFFFFFFFFFFFFFFLL); const Pattern kSolidLow((uint64)0); const Pattern kMixedColors(0xAAAAAAAAAAAAAAAALL); const rgb_color kBlack = (rgb_color){ 0, 0, 0, 255 }; const rgb_color kWhite = (rgb_color){ 255, 255, 255, 255 }; /*! \brief Void constructor The pattern is set to B_SOLID_HIGH, high color is set to black, and low color is set to white. */ PatternHandler::PatternHandler(void) : fPattern(kSolidHigh), fHighColor(kBlack), fLowColor(kWhite), fXOffset(0), fYOffset(0) { } /*! \brief Constructor initializes to given pattern \param pat Pattern to use. This initializes to the given pattern or B_SOLID_HIGH if the pattern is NULL. High color is set to black, and low color is set to white. */ PatternHandler::PatternHandler(const int8* pat) : fPattern(pat ? Pattern(pat) : Pattern(kSolidHigh)), fHighColor(kBlack), fLowColor(kWhite), fXOffset(0), fYOffset(0) { } /*! \brief Constructor initializes to given pattern \param pat Pattern to use. This initializes to the given pattern or B_SOLID_HIGH if the pattern is NULL. High color is set to black, and low color is set to white. */ PatternHandler::PatternHandler(const uint64& pat) : fPattern(pat), fHighColor(kBlack), fLowColor(kWhite), fXOffset(0), fYOffset(0) { } /*! \brief Constructor initializes to given pattern \param pat Pattern to use. This initializes to the given Pattern. High color is set to black, and low color is set to white. */ PatternHandler::PatternHandler(const Pattern& pat) : fPattern(pat), fHighColor(kBlack), fLowColor(kWhite), fXOffset(0), fYOffset(0) { } /*! \brief Constructor initializes to given PatternHandler \param other PatternHandler to copy. Copy constructor. */ PatternHandler::PatternHandler(const PatternHandler& other) : fPattern(other.fPattern), fHighColor(other.fHighColor), fLowColor(other.fLowColor), fXOffset(other.fXOffset), fYOffset(other.fYOffset) { } //! Destructor does nothing PatternHandler::~PatternHandler(void) { } /*! \brief Sets the pattern for the handler to the one given \param pat Pattern to use. This initializes to the given pattern or B_SOLID_HIGH if the pattern is NULL. */ void PatternHandler::SetPattern(const int8* pat) { if (pat) fPattern.Set(pat); else fPattern = kSolidHigh; } /*! \brief Sets the pattern for the handler to the one given \param pat Pattern to use. */ void PatternHandler::SetPattern(const uint64& pat) { fPattern = pat; } /*! \brief Sets the pattern for the handler to the one given \param pat Pattern to use. */ void PatternHandler::SetPattern(const Pattern& pat) { fPattern = pat; } /*! \brief Sets the pattern for the handler to the one given \param pat R5 style pattern to use. */ void PatternHandler::SetPattern(const pattern& pat) { fPattern = pat; } /*! \brief Set the colors for the pattern to use \param high High color for the handler \param low Low color for the handler */ void PatternHandler::SetColors(const rgb_color& high, const rgb_color& low) { fHighColor = high; fLowColor = low; } /*! \brief Set the high color for the pattern to use \param color High color for the handler */ void PatternHandler::SetHighColor(const rgb_color& color) { fHighColor = color; } /*! \brief Set the low color for the pattern to use \param color Low color for the handler */ void PatternHandler::SetLowColor(const rgb_color& color) { fLowColor = color; } /*! \brief Obtains the color in the pattern at the specified coordinates \param pt Coordinates to get the color for \return Color for the coordinates */ rgb_color PatternHandler::ColorAt(const BPoint &pt) const { return ColorAt(pt.x, pt.y); } /*! \brief Obtains the color in the pattern at the specified coordinates \param x X coordinate to get the color for \param y Y coordinate to get the color for \return Color for the coordinates */ rgb_color PatternHandler::ColorAt(float x, float y) const { return ColorAt(int(x), int(y)); } /*! \brief Obtains the value of the pattern at the specified coordinates \param pt Coordinates to get the value for \return Value for the coordinates - true if high, false if low. */ bool PatternHandler::IsHighColor(const BPoint &pt) const { return IsHighColor((int)pt.x, (int)pt.y); } /*! \brief Transfers the scrolling offset of a BView to affect the pattern. \param x Positive or negative horizontal offset \param y Positive or negative vertical offset */ void PatternHandler::SetOffsets(int32 x, int32 y) { fXOffset = x & 7; fYOffset = y & 7; }