
looking up the color in the pattern, this is needed because before, patterns were always drawn with the virtual origin in screen coordinate space, but they need to be drawn with view coordinate origin taken into account (will be implemented in a forthcomming commit) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21639 a95241bf-73f2-0310-859d-f6bbb57e9c96
261 lines
5.3 KiB
C++
261 lines
5.3 KiB
C++
/*
|
|
* 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 RGBColor& high, const RGBColor& 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 RGBColor& color)
|
|
{
|
|
fHighColor = color;
|
|
}
|
|
|
|
/*!
|
|
\brief Set the low color for the pattern to use
|
|
\param color Low color for the handler
|
|
*/
|
|
void
|
|
PatternHandler::SetLowColor(const RGBColor& color)
|
|
{
|
|
fLowColor = color;
|
|
}
|
|
|
|
/*!
|
|
\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
|
|
*/
|
|
RGBColor
|
|
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
|
|
*/
|
|
RGBColor
|
|
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;
|
|
}
|
|
|