⛏️ index : haiku.git

/*
 * Copyright (c) 2001-2007, Haiku, Inc.
 * Distributed under the terms of the MIT license.
 *
 * Author:	DarkWyrm <bpmagic@columbus.rr.com>
 *			Stephan Aßmus <superstippi@gmx.de>
 */

#include "PatternHandler.h"

#include <stdio.h>

#include <Point.h>

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;
}