Initial revision
This commit is contained in:
63
source/blender/img/IMG_Api.h
Normal file
63
source/blender/img/IMG_Api.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 7, 2001
|
||||
*/
|
||||
#ifndef _H_IMG_API
|
||||
#define _H_IMG_API
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
typedef void* IMG_BrushPtr;
|
||||
typedef void* IMG_CanvasPtr;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
extern IMG_BrushPtr IMG_BrushCreate(unsigned int width, unsigned int height, float red, float green, float blue, float alpha);
|
||||
extern void IMG_BrushDispose(IMG_BrushPtr brush);
|
||||
|
||||
extern IMG_CanvasPtr IMG_CanvasCreate(unsigned int width, unsigned int height);
|
||||
extern IMG_CanvasPtr IMG_CanvasCreateFromPtr(void* imagePtr, unsigned int width, unsigned int height, size_t rowBytes);
|
||||
extern void IMG_CanvasDispose(IMG_CanvasPtr canvas);
|
||||
extern void IMG_CanvasDraw(IMG_CanvasPtr canvas, IMG_BrushPtr brush, unsigned int x, unsigned int y);
|
||||
extern void IMG_CanvasDrawUV(IMG_CanvasPtr canvas, IMG_BrushPtr brush, float u, float v);
|
||||
extern void IMG_CanvasDrawLine(IMG_CanvasPtr canvas, IMG_BrushPtr brush, unsigned int xStart, unsigned int yStart, unsigned int xEns, unsigned int yEnd);
|
||||
extern void IMG_CanvasDrawLineUV(IMG_CanvasPtr canvas, IMG_BrushPtr brush, float uStart, float vStart, float uEnd, float vEnd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _H_IMG_API
|
37
source/blender/img/Makefile
Normal file
37
source/blender/img/Makefile
Normal file
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version. The Blender
|
||||
# Foundation also sells licenses for use in proprietary software under
|
||||
# the Blender License. See http://www.blender.org/BL/ for information
|
||||
# about this.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
# All rights reserved.
|
||||
#
|
||||
# The Original Code is: all of this file.
|
||||
#
|
||||
# Contributor(s): none yet.
|
||||
#
|
||||
# ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
#
|
||||
# Bounces make to subdirectories.
|
||||
|
||||
SOURCEDIR = source/blender/img
|
||||
DIRS = intern
|
||||
|
||||
include nan_subdirs.mk
|
121
source/blender/img/intern/IMG_Api.cpp
Normal file
121
source/blender/img/intern/IMG_Api.cpp
Normal file
@@ -0,0 +1,121 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
#include "../IMG_Api.h"
|
||||
|
||||
#include "IMG_BrushRGBA32.h"
|
||||
#include "IMG_CanvasRGBA32.h"
|
||||
|
||||
|
||||
IMG_BrushPtr IMG_BrushCreate(unsigned int w, unsigned int h, float r, float g, float b, float a)
|
||||
{
|
||||
IMG_BrushPtr brush = 0;
|
||||
try {
|
||||
IMG_ColorRGB c (r, g, b);
|
||||
brush = new IMG_BrushRGBA32 (w, h, c, a);
|
||||
}
|
||||
catch (...) {
|
||||
brush = 0;
|
||||
}
|
||||
return brush;
|
||||
}
|
||||
|
||||
|
||||
void IMG_BrushDispose(IMG_BrushPtr brush)
|
||||
{
|
||||
if (brush) {
|
||||
delete ((IMG_BrushRGBA32*)brush);
|
||||
brush = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IMG_CanvasPtr IMG_CanvasCreate(unsigned int w, unsigned int h)
|
||||
{
|
||||
IMG_CanvasPtr canvas = 0;
|
||||
try {
|
||||
canvas = new IMG_CanvasRGBA32 (w, h);
|
||||
}
|
||||
catch (...) {
|
||||
canvas = 0;
|
||||
}
|
||||
return canvas;
|
||||
}
|
||||
|
||||
|
||||
IMG_CanvasPtr IMG_CanvasCreateFromPtr(void* imagePtr, unsigned int w, unsigned int h, size_t rowBytes)
|
||||
{
|
||||
IMG_CanvasPtr canvas = 0;
|
||||
try {
|
||||
canvas = new IMG_CanvasRGBA32 (imagePtr, w, h, rowBytes);
|
||||
}
|
||||
catch (...) {
|
||||
canvas = 0;
|
||||
}
|
||||
return canvas;
|
||||
}
|
||||
|
||||
void IMG_CanvasDispose(IMG_CanvasPtr canvas)
|
||||
{
|
||||
if (canvas) {
|
||||
delete ((IMG_CanvasRGBA32*)canvas);
|
||||
canvas = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void IMG_CanvasDraw(IMG_CanvasPtr canvas, IMG_BrushPtr brush, unsigned int x, unsigned int y)
|
||||
{
|
||||
if (!(canvas && brush)) return;
|
||||
((IMG_CanvasRGBA32*)canvas)->blendPixmap((TUns32)x, (TUns32)y, *((IMG_BrushRGBA32*)brush));
|
||||
}
|
||||
|
||||
|
||||
void IMG_CanvasDrawUV(IMG_CanvasPtr canvas, IMG_BrushPtr brush, float u, float v)
|
||||
{
|
||||
if (!(canvas && brush)) return;
|
||||
((IMG_CanvasRGBA32*)canvas)->blendPixmap(u, v, *((IMG_BrushRGBA32*)brush));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void IMG_CanvasDrawLine(IMG_CanvasPtr canvas, IMG_BrushPtr brush, unsigned int xStart, unsigned int yStart, unsigned int xEnd, unsigned int yEnd)
|
||||
{
|
||||
if (!(canvas && brush)) return;
|
||||
((IMG_CanvasRGBA32*)canvas)->blendPixmap((TUns32)xStart, (TUns32)yStart, (TUns32)xEnd, (TUns32)yEnd, *((IMG_BrushRGBA32*)brush));
|
||||
}
|
||||
|
||||
|
||||
void IMG_CanvasDrawLineUV(IMG_CanvasPtr canvas, IMG_BrushPtr brush, float uStart, float vStart, float uEnd, float vEnd)
|
||||
{
|
||||
if (!(canvas && brush)) return;
|
||||
((IMG_CanvasRGBA32*)canvas)->blendPixmap(uStart, vStart, uEnd, vEnd, *((IMG_BrushRGBA32*)brush));
|
||||
}
|
132
source/blender/img/intern/IMG_BrushRGBA32.cpp
Normal file
132
source/blender/img/intern/IMG_BrushRGBA32.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
/**
|
||||
* $Id$
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "IMG_BrushRGBA32.h"
|
||||
|
||||
|
||||
#include <math.h>
|
||||
|
||||
|
||||
IMG_BrushRGBA32::IMG_BrushRGBA32(TUns32 w, TUns32 h, const IMG_ColorRGB& c, float a)
|
||||
: IMG_PixmapRGBA32(w, h), m_color(c), m_alpha(a)
|
||||
{
|
||||
m_ro = w < h ? w/2 : h/2;
|
||||
m_ri = m_ro >> 1;
|
||||
updateImage();
|
||||
}
|
||||
|
||||
|
||||
void IMG_BrushRGBA32::setColor(const IMG_ColorRGB& c)
|
||||
{
|
||||
m_color = c;
|
||||
updateImage();
|
||||
}
|
||||
|
||||
|
||||
void IMG_BrushRGBA32::setTransparency(float a)
|
||||
{
|
||||
m_alpha = a;
|
||||
if (m_alpha > 1.f) m_alpha = 1.f;
|
||||
if (m_alpha < 0.f) m_alpha = 0.f;
|
||||
updateImage();
|
||||
}
|
||||
|
||||
|
||||
void IMG_BrushRGBA32::setRadii(TUns32 rI, TUns32 rO)
|
||||
{
|
||||
if ((rI < 2) || (rO < 2)) return;
|
||||
m_ri = rI;
|
||||
m_ro = rO;
|
||||
|
||||
TUns32 w_2 = m_width >> 1;
|
||||
TUns32 h_2 = m_height >> 1;
|
||||
|
||||
/*
|
||||
* Make the brush size smaller than half of the minimum
|
||||
* width or height of the pixmap. Make sure that inner
|
||||
* radius <= outer radius.
|
||||
*/
|
||||
if (m_ro > w_2) m_ro = w_2;
|
||||
if (m_ro > h_2) m_ro = h_2;
|
||||
if (m_ri > m_ro) m_ri = m_ro;
|
||||
|
||||
updateImage();
|
||||
}
|
||||
|
||||
|
||||
void IMG_BrushRGBA32::updateImage()
|
||||
{
|
||||
TUns32 cx = m_width >> 1;
|
||||
TUns32 cy = m_height >> 1;
|
||||
|
||||
// Prepare pixel values for this pixmap
|
||||
IMG_ColorRGBA c (m_color.m_r, m_color.m_g, m_color.m_b, 0.f);
|
||||
TPixelRGBA32 pOut = getPixelValue(c);
|
||||
c.m_a = m_alpha;
|
||||
TPixelRGBA32 pIn = getPixelValue(c);
|
||||
TPixelRGBA32 p = getPixelValue(c);
|
||||
TUns8* pa = & (((TUns8*)&p)[bi_a]);
|
||||
|
||||
// Set the pixels in the destination rectangle
|
||||
for (TUns32 y = 0; y < m_height; y++) {
|
||||
// Park pixel pointer at the start pixels
|
||||
TPixelPtr desPtr = getPixelPtr(0, y);
|
||||
for (TUns32 x = 0; x < m_width; x++) {
|
||||
// Calculate the distance between current pixel and center
|
||||
float dX = (float)((TInt32)x) - ((TInt32)cx);
|
||||
float dY = (float)((TInt32)y) - ((TInt32)cy);
|
||||
float d = (float) ::sqrt(dX*dX + dY*dY);
|
||||
float a;
|
||||
|
||||
if (d <= m_ri) {
|
||||
*desPtr = pIn;
|
||||
}
|
||||
else if ((d < m_ro) && (m_ri < m_ro)) {
|
||||
// Calculate alpha, linear
|
||||
a = (d - m_ri) / (m_ro - m_ri);
|
||||
// Now: 0 <= a <= 1
|
||||
//a = m_alpha + a * (1.f - m_alpha);
|
||||
a = (1.f - a) * m_alpha;
|
||||
// Now: m_alpha <= a <= 1
|
||||
#if 0
|
||||
a = (float)::pow(a, 0.2);
|
||||
#endif
|
||||
// Store pixel
|
||||
*pa = (TUns8)(a * ((float)0xFF));
|
||||
*desPtr = p;
|
||||
}
|
||||
else {
|
||||
*desPtr = pOut;
|
||||
}
|
||||
desPtr++;
|
||||
}
|
||||
}
|
||||
}
|
134
source/blender/img/intern/IMG_BrushRGBA32.h
Normal file
134
source/blender/img/intern/IMG_BrushRGBA32.h
Normal file
@@ -0,0 +1,134 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
#ifndef _H_IMG_BrushRGBA32
|
||||
#define _H_IMG_BrushRGBA32
|
||||
|
||||
#include "IMG_PixmapRGBA32.h"
|
||||
|
||||
|
||||
/**
|
||||
* A brush used for drawing in pixmaps.
|
||||
* The brush is a pixmap as well.
|
||||
* Drawing can be implemented by blending the brush into the pixmap.
|
||||
*
|
||||
* @author Maarten Gribnau
|
||||
* @date March 7, 2001
|
||||
* @todo Check the algorithm
|
||||
*/
|
||||
|
||||
class IMG_BrushRGBA32 : public IMG_PixmapRGBA32 {
|
||||
public:
|
||||
/**
|
||||
* Constructs a brush image with the dimensions and color given.
|
||||
* @param w width of the brush image
|
||||
* @param h height of the brush image
|
||||
* @param c color of the brush
|
||||
* @param a transparency in the center of the brush
|
||||
*/
|
||||
IMG_BrushRGBA32(TUns32 w, TUns32 h, const IMG_ColorRGB& c, float a = 0.8f);
|
||||
|
||||
/**
|
||||
* Sets the color of the brush.
|
||||
* @param c color of the brush
|
||||
*/
|
||||
virtual void setColor(const IMG_ColorRGB& c);
|
||||
|
||||
/**
|
||||
* Returns the color of the brush.
|
||||
* @param c color of the brush
|
||||
*/
|
||||
inline virtual void getColor(IMG_ColorRGB& c) const;
|
||||
|
||||
/**
|
||||
* Sets the transparency of the brush.
|
||||
* @param a transparency of the brush
|
||||
*/
|
||||
virtual void setTransparency(float a);
|
||||
|
||||
/**
|
||||
* Returns the transparency of the brush.
|
||||
* @param a transparency of the brush
|
||||
*/
|
||||
inline virtual float getTransparency() const;
|
||||
|
||||
/**
|
||||
* Sets the shape of the brush from two radii (inner and outer).
|
||||
* This creates a brush with alpha==0 inside the inner radius
|
||||
* and gradually fades to alpha==1 at the outer radius.
|
||||
* Inner radius should be smaller or equal to the outer radius.
|
||||
* If not, the outer radius is made equal to the inner radius.
|
||||
* If the either radius is larger than the bounds of the brush,
|
||||
* they are clipped.
|
||||
* @param rI inner radius
|
||||
* @param rO outer radius
|
||||
*/
|
||||
virtual void setRadii(TUns32 rI, TUns32 rO);
|
||||
|
||||
/**
|
||||
* Returns the radii that determine the shape of the brush.
|
||||
* @param rI inner radius
|
||||
* @param rO outer radius
|
||||
*/
|
||||
inline virtual void setRadii(TUns32& rI, TUns32& rO) const;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Updates the image of this brush.
|
||||
* The image is created using the current color, transparency and shape radii.
|
||||
*/
|
||||
virtual void updateImage();
|
||||
|
||||
IMG_ColorRGB m_color; /** The color of the brush */
|
||||
float m_alpha; /** The transparency of the brush */
|
||||
TUns32 m_ri; /** The inner radius of the brush */
|
||||
TUns32 m_ro; /** The outer radius of the brush */
|
||||
};
|
||||
|
||||
|
||||
inline void IMG_BrushRGBA32::setRadii(TUns32& rI, TUns32& rO) const
|
||||
{
|
||||
rI = m_ri;
|
||||
rO = m_ro;
|
||||
}
|
||||
|
||||
inline float IMG_BrushRGBA32::getTransparency() const
|
||||
{
|
||||
return m_alpha;
|
||||
}
|
||||
|
||||
inline void IMG_BrushRGBA32::getColor(IMG_ColorRGB& c) const
|
||||
{
|
||||
c = m_color;
|
||||
}
|
||||
|
||||
|
||||
#endif // _H_IMG_BrushRGBA32
|
82
source/blender/img/intern/IMG_CanvasRGBA32.cpp
Normal file
82
source/blender/img/intern/IMG_CanvasRGBA32.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* $Id$
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "IMG_CanvasRGBA32.h"
|
||||
|
||||
|
||||
|
||||
IMG_CanvasRGBA32::IMG_CanvasRGBA32(TUns32 width, TUns32 height)
|
||||
: IMG_PixmapRGBA32(width, height)
|
||||
{
|
||||
}
|
||||
|
||||
IMG_CanvasRGBA32::IMG_CanvasRGBA32(void* image, TUns32 width, TUns32 height, TUns32 rowBytes)
|
||||
: IMG_PixmapRGBA32(image, width, height, rowBytes)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void IMG_CanvasRGBA32::blendPixmap(
|
||||
TUns32 xStart, TUns32 yStart, TUns32 xEnd, TUns32 yEnd,
|
||||
const IMG_PixmapRGBA32& pixmap)
|
||||
{
|
||||
// Determine visibility of the line
|
||||
IMG_Line l (xStart, yStart, xEnd, yEnd); // Line used for blending
|
||||
IMG_Rect bnds (0, 0, m_width, m_height); // Bounds of this pixmap
|
||||
TVisibility v = bnds.getVisibility(l);
|
||||
if (v == kNotVisible) return;
|
||||
if (v == kPartiallyVisible) {
|
||||
bnds.clip(l);
|
||||
}
|
||||
|
||||
float numSteps = (((float)l.getLength()) / ((float)pixmap.getWidth() / 4));
|
||||
//numSteps *= 4;
|
||||
numSteps = numSteps ? numSteps : 1;
|
||||
float step = 0.f, stepSize = 1.f / ((float)numSteps);
|
||||
TInt32 x, y;
|
||||
for (TUns32 s = 0; s < numSteps; s++) {
|
||||
l.getPoint(step, x, y);
|
||||
IMG_PixmapRGBA32::blendPixmap((TUns32)x, (TUns32)y, pixmap);
|
||||
step += stepSize;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void IMG_CanvasRGBA32::blendPixmap(
|
||||
float uStart, float vStart, float uEnd, float vEnd,
|
||||
const IMG_PixmapRGBA32& pixmap)
|
||||
{
|
||||
TUns32 xStart, yStart, xEnd, yEnd;
|
||||
getPixelAddress(uStart, vStart, xStart, yStart);
|
||||
getPixelAddress(uEnd, vEnd, xEnd, yEnd);
|
||||
blendPixmap(xStart, yStart, xEnd, yEnd, pixmap);
|
||||
}
|
||||
|
95
source/blender/img/intern/IMG_CanvasRGBA32.h
Normal file
95
source/blender/img/intern/IMG_CanvasRGBA32.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_CanvasRGBA32
|
||||
#define _H_IMG_CanvasRGBA32
|
||||
|
||||
#include "IMG_PixmapRGBA32.h"
|
||||
#include "IMG_BrushRGBA32.h"
|
||||
|
||||
/**
|
||||
* A IMG_PixmapRGBA32 pixmap that allows for drawing with a IMG_BrushRGBA32.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
class IMG_CanvasRGBA32 : public IMG_PixmapRGBA32 {
|
||||
public:
|
||||
/**
|
||||
* Constructor.
|
||||
* @throw <IMG_MemPtr::Size> when an invalid width and/or height is passed.
|
||||
* @throw <IMG_MemPtr::Memory> when a there is not enough memory to allocate the image.
|
||||
* @param width the width in pixels of the image.
|
||||
* @param height the height in pixels of the image.
|
||||
*/
|
||||
IMG_CanvasRGBA32(TUns32 width, TUns32 height);
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* The image data will not be freed upon destruction of this object.
|
||||
* The owner of this object is reponsible for that.
|
||||
* @throw <Size> when an invalid width and/or height is passed.
|
||||
* @param image pointer to the image data.
|
||||
* @param width the width in pixels of the image.
|
||||
* @param height the height in pixels of the image.
|
||||
*/
|
||||
IMG_CanvasRGBA32(void* image, TUns32 width, TUns32 height, TUns32 rowBytes);
|
||||
|
||||
/**
|
||||
* Blends a pixmap into this pixmap over a line.
|
||||
* Repeatedly pastes the given pixmap centered at the given line into this pixmap.
|
||||
* The alpha information in the given image is used to blend.
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @todo update the drawing algorithm.
|
||||
* @param x x-coordinate of the center location of the image.
|
||||
* @param y y-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to blend
|
||||
*/
|
||||
virtual void blendPixmap(TUns32 xStart, TUns32 yStart, TUns32 xEnd, TUns32 yEnd, const IMG_PixmapRGBA32& pixmap);
|
||||
|
||||
/**
|
||||
* Blends a pixmap into this pixmap over a line in (u,v) coordinates.
|
||||
* Pastes the given pixmap centered at the given line into this pixmap.
|
||||
* The alpha information in the given image is used to blend.
|
||||
* @see IMG_PixmapRGBA32::blendPixmap(TUns32 xStart, TUns32 yStart, TUns32 yStart, TUns32 yEnd, const IMG_PixmapRGBA32& pixmap)
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @param u u-coordinate of the center location of the image.
|
||||
* @param v v-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to blend
|
||||
*/
|
||||
virtual void blendPixmap(float uStart, float vStart, float uEnd, float vEnd, const IMG_PixmapRGBA32& pixmap);
|
||||
};
|
||||
|
||||
|
||||
#endif // _H_IMG_CanvasRGBA32
|
149
source/blender/img/intern/IMG_Color.h
Normal file
149
source/blender/img/intern/IMG_Color.h
Normal file
@@ -0,0 +1,149 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 7, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_Color
|
||||
#define _H_IMG_Color
|
||||
|
||||
class IMG_ColorRGBA;
|
||||
|
||||
/**
|
||||
* Implements a color with red, green and blue components.
|
||||
* Components are stored as floats.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 7, 2001
|
||||
*/
|
||||
|
||||
class IMG_ColorRGB {
|
||||
public:
|
||||
/**
|
||||
* Constructs a color with the given values.
|
||||
* @param r requested red component of the color
|
||||
* @param g requested green component of the color
|
||||
* @param b requested blue component of the color
|
||||
*/
|
||||
IMG_ColorRGB(float r=0, float g=0, float b=0)
|
||||
: m_r(r), m_g(g), m_b(b) {}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
* @param c the color to copy.
|
||||
*/
|
||||
IMG_ColorRGB(const IMG_ColorRGB& c)
|
||||
: m_r(c.m_r), m_g(c.m_g), m_b(c.m_b) {}
|
||||
|
||||
/**
|
||||
* Constructs a color without alpha from one with.
|
||||
* @param c the color to copy.
|
||||
*/
|
||||
inline IMG_ColorRGB(const IMG_ColorRGBA& c);
|
||||
|
||||
/** Red component of the color */
|
||||
float m_r;
|
||||
/** Green component of the color */
|
||||
float m_g;
|
||||
/** Blue component of the color */
|
||||
float m_b;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Implements a color with red, green, blue and alpha components.
|
||||
* Components are stored as floats.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
class IMG_ColorRGBA {
|
||||
public:
|
||||
/**
|
||||
* Constructs a color with the given values.
|
||||
* @param r requested red component of the color
|
||||
* @param g requested green component of the color
|
||||
* @param b requested blue component of the color
|
||||
* @param a requested alpha component of the color
|
||||
*/
|
||||
IMG_ColorRGBA(float r=0, float g=0, float b=0, float a=0)
|
||||
: m_r(r), m_g(g), m_b(b), m_a(a) {}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
* @param c the color to copy.
|
||||
*/
|
||||
IMG_ColorRGBA(const IMG_ColorRGBA& c)
|
||||
: m_r(c.m_r), m_g(c.m_g), m_b(c.m_b), m_a(c.m_a) {}
|
||||
|
||||
/**
|
||||
* Constructs a color with alpha from one without.
|
||||
* @param c the color to copy.
|
||||
*/
|
||||
IMG_ColorRGBA(const IMG_ColorRGB& c)
|
||||
: m_r(c.m_r), m_g(c.m_g), m_b(c.m_b), m_a(0) {}
|
||||
|
||||
/**
|
||||
* Blends the given color with this color.
|
||||
* Uses the alpha of the given color for blending.
|
||||
* The alpha of this color is left untouched.
|
||||
* @param c the color to blend
|
||||
*/
|
||||
inline void blendColor(const IMG_ColorRGBA& c);
|
||||
|
||||
/** Red component of the color */
|
||||
float m_r;
|
||||
/** Green component of the color */
|
||||
float m_g;
|
||||
/** Blue component of the color */
|
||||
float m_b;
|
||||
/** Alpha component of the color */
|
||||
float m_a;
|
||||
};
|
||||
|
||||
inline IMG_ColorRGB::IMG_ColorRGB(const IMG_ColorRGBA& c)
|
||||
: m_r(c.m_r), m_g(c.m_g), m_b(c.m_b) {}
|
||||
|
||||
inline void IMG_ColorRGBA::blendColor(const IMG_ColorRGBA& c)
|
||||
{
|
||||
float r1 = 1 - c.m_a; // The reverse of alpha
|
||||
#if IMG_REVERSED_ALPHA
|
||||
m_r = c.m_a * m_r + r1 * c.m_r;
|
||||
m_g = c.m_a * m_g + r1 * c.m_g;
|
||||
m_b = c.m_a * m_b + r1 * c.m_b;
|
||||
#else
|
||||
m_r = r1 * m_r + c.m_a * c.m_r;
|
||||
m_g = r1 * m_g + c.m_a * c.m_g;
|
||||
m_b = r1 * m_b + c.m_a * c.m_b;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif // _H_IMG_Color
|
33
source/blender/img/intern/IMG_Line.cpp
Normal file
33
source/blender/img/intern/IMG_Line.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
#include "IMG_Line.h"
|
||||
|
142
source/blender/img/intern/IMG_Line.h
Normal file
142
source/blender/img/intern/IMG_Line.h
Normal file
@@ -0,0 +1,142 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 12, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_Line
|
||||
#define _H_IMG_Line
|
||||
|
||||
#include "IMG_Types.h"
|
||||
#include <math.h>
|
||||
|
||||
/**
|
||||
* A line from a start to an end point.
|
||||
* Used for drawing lines in images.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
class IMG_Line {
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructs a line with the given values.
|
||||
* @param xs start point x-coordinate
|
||||
* @param ys start point y-coordinate
|
||||
* @param xe end point x-coordinate
|
||||
* @param ye end point y-coordinate
|
||||
*/
|
||||
IMG_Line(TInt32 xs=0, TInt32 ys=0, TInt32 xe=0, TInt32 ye=0)
|
||||
: m_xs(xs), m_ys(ys), m_xe(xe), m_ye(ye) {}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
* @param l line to copy
|
||||
*/
|
||||
IMG_Line(const IMG_Line& l)
|
||||
: m_xs(l.m_xs), m_ys(l.m_ys), m_xe(l.m_xe), m_ye(l.m_ye) {}
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
virtual ~IMG_Line() {};
|
||||
|
||||
/**
|
||||
* Access to line length.
|
||||
* @return length of the line.
|
||||
*/
|
||||
virtual inline float getLength() const;
|
||||
|
||||
/**
|
||||
* Sets all members of the line.
|
||||
* @param xs start point x-coordinate
|
||||
* @param ys start point y-coordinate
|
||||
* @param xe end point x-coordinate
|
||||
* @param ye end point y-coordinate
|
||||
*/
|
||||
virtual inline void set(TInt32 xs, TInt32 ys, TInt32 xe, TInt32 ye);
|
||||
|
||||
/**
|
||||
* Returns whether this line is empty.
|
||||
* Empty line are lines that have length==0.
|
||||
* @return boolean value (true==empty line)
|
||||
*/
|
||||
virtual inline bool isEmpty() const;
|
||||
|
||||
/**
|
||||
* Returns point at given value for line parameter.
|
||||
* Calculates the coordinates of a point on the line.
|
||||
* @param t line parameter value (0<=t<=1) of the point requested.
|
||||
* @param x x-coordinate of the point.
|
||||
* @param y y-coordinate of the point.
|
||||
*/
|
||||
virtual inline void getPoint(float t, TInt32& x, TInt32& y) const;
|
||||
|
||||
/** Start point x-coordinate */
|
||||
TInt32 m_xs;
|
||||
/** Start point y-coordinate */
|
||||
TInt32 m_ys;
|
||||
/** End point x-coordinate */
|
||||
TInt32 m_xe;
|
||||
/** End point y-coordinate */
|
||||
TInt32 m_ye;
|
||||
};
|
||||
|
||||
|
||||
inline float IMG_Line::getLength() const
|
||||
{
|
||||
TInt32 dx = m_xe - m_xs;
|
||||
TInt32 dy = m_ye - m_ys;
|
||||
return ((float)::sqrt(((float)dx)*dx + ((float)dy)*dy));
|
||||
}
|
||||
|
||||
|
||||
inline void IMG_Line::set(TInt32 xs, TInt32 ys, TInt32 xe, TInt32 ye)
|
||||
{
|
||||
m_xs = xs; m_ys = ys; m_xe = xe; m_ye = ye;
|
||||
}
|
||||
|
||||
|
||||
inline bool IMG_Line::isEmpty() const
|
||||
{
|
||||
return (getLength() <= 0);
|
||||
}
|
||||
|
||||
|
||||
inline void IMG_Line::getPoint(float t, TInt32& x, TInt32& y) const
|
||||
{
|
||||
x = (TInt32) (((float)m_xs) + (t * (m_xe - m_xs)));
|
||||
y = (TInt32) (((float)m_ys) + (t * (m_ye - m_ys)));
|
||||
}
|
||||
|
||||
|
||||
#endif // _H_IMG_Line
|
114
source/blender/img/intern/IMG_MemPtr.h
Normal file
114
source/blender/img/intern/IMG_MemPtr.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 8, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_MemPtr
|
||||
#define _H_IMG_MemPtr
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/**
|
||||
* A memory pointer for memory of any type.
|
||||
* It can be used to avoid memory leaks when allocating memory in constructors.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 8, 2001
|
||||
*/
|
||||
|
||||
template <class T> class IMG_MemPtr {
|
||||
public:
|
||||
/** Pointer to the memory */
|
||||
T* m_p;
|
||||
bool m_owned;
|
||||
|
||||
/**
|
||||
* Size exception.
|
||||
* A size exception is thrown when an invalid width and/or height is passed.
|
||||
*/
|
||||
class Size {};
|
||||
/**
|
||||
* Memory exception.
|
||||
* A size exception is thrown when a there is not enough memory to allocate the image.
|
||||
*/
|
||||
class Memory {};
|
||||
|
||||
/**
|
||||
* Constructs a memory pointer.
|
||||
* @param s requested size of the pointer
|
||||
* @throw <Size> when an invalid width and/or height is passed.
|
||||
* @throw <Memory> when a there is not enough memory to allocate the image.
|
||||
*/
|
||||
IMG_MemPtr(size_t s)
|
||||
: m_p(0), m_owned(false)
|
||||
{
|
||||
if (s > 0) {
|
||||
m_p = new T[s];
|
||||
if (!m_p) {
|
||||
throw Memory();
|
||||
}
|
||||
m_owned = true;
|
||||
}
|
||||
else {
|
||||
throw Size();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a memory pointer from a pointer.
|
||||
* @param p the pointer
|
||||
* @param s requested size of the pointer
|
||||
* @throw <Size> when an invalid width and/or height is passed.
|
||||
*/
|
||||
IMG_MemPtr(void* p, size_t s)
|
||||
: m_p(0), m_owned(false)
|
||||
{
|
||||
if (p && (s > 0)) {
|
||||
m_p = (T*)p;
|
||||
}
|
||||
else {
|
||||
throw Size();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
~IMG_MemPtr() { if (m_p && m_owned) { delete [] m_p; m_p = 0; } }
|
||||
|
||||
/**
|
||||
* Access to the memory.
|
||||
* @return pointer to the memory
|
||||
*/
|
||||
operator T*() { return m_p; }
|
||||
};
|
||||
|
||||
#endif // _H_IMG_MemPtr
|
59
source/blender/img/intern/IMG_Pixmap.cpp
Normal file
59
source/blender/img/intern/IMG_Pixmap.cpp
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* $Id$
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "IMG_Pixmap.h"
|
||||
|
||||
|
||||
|
||||
|
||||
IMG_Pixmap::IMG_Pixmap()
|
||||
{
|
||||
m_image = 0;
|
||||
m_width = 0;
|
||||
m_height = 0;
|
||||
m_rowBytes = 0;
|
||||
m_pixelSize = 0;
|
||||
m_pixelType = kPixelTypeRGB32;
|
||||
/*
|
||||
#if OS_MACINTOSH
|
||||
bitOrder = kQ3EndianBig;
|
||||
byteOrder = kQ3EndianBig;
|
||||
#else
|
||||
bitOrder = kQ3EndianLittle;
|
||||
byteOrder = kQ3EndianLittle;
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
IMG_Pixmap::~IMG_Pixmap()
|
||||
{
|
||||
}
|
186
source/blender/img/intern/IMG_Pixmap.h
Normal file
186
source/blender/img/intern/IMG_Pixmap.h
Normal file
@@ -0,0 +1,186 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_Pixmap
|
||||
#define _H_IMG_Pixmap
|
||||
|
||||
#include "IMG_Types.h"
|
||||
#include "IMG_Color.h"
|
||||
#include "IMG_Rect.h"
|
||||
|
||||
|
||||
/**
|
||||
* Base class for pixmaps. Here a more elaborate description of the IMG_Pixmap class should be written.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
class IMG_Pixmap {
|
||||
public:
|
||||
/**
|
||||
* The type of pixels.
|
||||
* The type of pixels that are stored in this pixmap.
|
||||
*/
|
||||
typedef enum {
|
||||
kPixelTypeRGB32 = 0, /**< R:8, G:8, B:8, Ignore:8 */
|
||||
kPixelTypeRGBA32 = 1, /**< R:8, G:8, B:8, Alpha:8 */
|
||||
// kPixelTypeRGB16 = 2, /**< Ignore:1, R:5, G:5, B:5 */
|
||||
// kPixelTypeRGBA16 = 3, /**< Alpha:1, R:5, G:5, B:5 */
|
||||
// kPixelTypeRGB16_565 = 4, /**< R:5, G:6, B:5 */
|
||||
kPixelTypeRGB24 = 5 /**< R:8, G:8, B:8 */
|
||||
} PixelType;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
IMG_Pixmap();
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
virtual ~IMG_Pixmap();
|
||||
|
||||
/**
|
||||
* Access to image data
|
||||
* @return pointer to the image data
|
||||
*/
|
||||
inline void* getImage() const;
|
||||
|
||||
/**
|
||||
* Access to image width.
|
||||
* @return width of the image
|
||||
*/
|
||||
inline TUns32 getWidth() const;
|
||||
|
||||
/**
|
||||
* Access to image height.
|
||||
* @return height of the image
|
||||
*/
|
||||
inline TUns32 getHeight() const;
|
||||
|
||||
/**
|
||||
* Returns the bounds of the pixmap in a rectangle.
|
||||
* @param bounds of the image
|
||||
*/
|
||||
inline void getBounds(IMG_Rect& r) const;
|
||||
|
||||
/**
|
||||
* Access to pixel type.
|
||||
* @return the pixel type
|
||||
*/
|
||||
inline PixelType getPixelType() const;
|
||||
|
||||
/**
|
||||
* Clamps u, v coordinates between 0 and 1.
|
||||
* @param u requested u-coordinate
|
||||
* @param v requested v-coordinate
|
||||
*/
|
||||
inline void clampUV(float& u, float& v) const;
|
||||
|
||||
/**
|
||||
* Converts (u,v) coordinates to pixel addresses.
|
||||
* Assumes that (u,v) coordinates are in the [0,1] range.
|
||||
* @param u requested u-coordinate in the image
|
||||
* @param v requested v-coordinate in the image
|
||||
* @param x calculated x-coordinate in the image
|
||||
* @param y calculated y-coordinate in the image
|
||||
*/
|
||||
inline void getPixelAddress(float u, float v, TUns32& x, TUns32& y) const;
|
||||
|
||||
/**
|
||||
* Fills the rectangle given with the color given.
|
||||
* Performs a bounds check.
|
||||
* @param r requested bounds rectangle in the image
|
||||
* @param c color to use
|
||||
*/
|
||||
virtual void fillRect(const IMG_Rect& r, const IMG_ColorRGBA& c) = 0;
|
||||
|
||||
protected:
|
||||
/** Pointer to the image data */
|
||||
void* m_image;
|
||||
/** Width of the image in pixels */
|
||||
TUns32 m_width;
|
||||
/** Height of the image in pixels */
|
||||
TUns32 m_height;
|
||||
/** Number of bytes for one row in the image. */
|
||||
TUns32 m_rowBytes;
|
||||
/** Size in bits for one pixel */
|
||||
TUns32 m_pixelSize;
|
||||
/** Type of pixels in this image. */
|
||||
PixelType m_pixelType;
|
||||
// TQ3Endian m_bitOrder;
|
||||
// TQ3Endian m_byteOrder;
|
||||
};
|
||||
|
||||
inline void* IMG_Pixmap::getImage() const
|
||||
{
|
||||
return m_image;
|
||||
}
|
||||
|
||||
inline TUns32 IMG_Pixmap::getWidth() const
|
||||
{
|
||||
return m_width;
|
||||
}
|
||||
|
||||
inline TUns32 IMG_Pixmap::getHeight() const
|
||||
{
|
||||
return m_height;
|
||||
}
|
||||
|
||||
inline void IMG_Pixmap::getBounds(IMG_Rect& r) const
|
||||
{
|
||||
r.set(0, 0, m_width, m_height);
|
||||
}
|
||||
|
||||
inline IMG_Pixmap::PixelType IMG_Pixmap::getPixelType() const
|
||||
{
|
||||
return m_pixelType;
|
||||
}
|
||||
|
||||
inline void IMG_Pixmap::clampUV(float& u, float& v) const
|
||||
{
|
||||
if (u < 0.f) u = 0.f;
|
||||
if (u > 1.f) u = 1.f;
|
||||
if (v < 0.f) v = 0.f;
|
||||
if (v > 1.f) v = 1.f;
|
||||
}
|
||||
|
||||
inline void IMG_Pixmap::getPixelAddress(float u, float v, TUns32& x, TUns32& y) const
|
||||
{
|
||||
//MAART TEMP! clampUV(u, v);
|
||||
x = (TUns32)(((float)m_width) * u);
|
||||
y = (TUns32)(((float)m_height) * v);
|
||||
}
|
||||
|
||||
#endif // _H_IMG_Pixmap
|
262
source/blender/img/intern/IMG_PixmapRGBA32.cpp
Normal file
262
source/blender/img/intern/IMG_PixmapRGBA32.cpp
Normal file
@@ -0,0 +1,262 @@
|
||||
/**
|
||||
* $Id$
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "IMG_PixmapRGBA32.h"
|
||||
|
||||
|
||||
|
||||
IMG_PixmapRGBA32::IMG_PixmapRGBA32(TUns32 width, TUns32 height)
|
||||
: IMG_Pixmap(), m_mem(width * height)
|
||||
{
|
||||
m_image = m_mem;
|
||||
m_width = width;
|
||||
m_height = height;
|
||||
m_rowBytes = width * sizeof(TPixelRGBA32);
|
||||
m_pixelSize = 8 * sizeof(TPixelRGBA32);
|
||||
m_pixelType = kPixelTypeRGBA32;
|
||||
}
|
||||
|
||||
|
||||
IMG_PixmapRGBA32::IMG_PixmapRGBA32(void* image, TUns32 width, TUns32 height, TUns32 rowBytes)
|
||||
: IMG_Pixmap(), m_mem(image, width * rowBytes)
|
||||
{
|
||||
m_image = m_mem;
|
||||
m_width = width;
|
||||
m_height = height;
|
||||
m_rowBytes = rowBytes;
|
||||
m_pixelSize = 8 * sizeof(TPixelRGBA32);
|
||||
m_pixelType = kPixelTypeRGBA32;
|
||||
}
|
||||
|
||||
|
||||
void IMG_PixmapRGBA32::fillRect(const IMG_Rect& r, const IMG_ColorRGB& c)
|
||||
{
|
||||
IMG_Rect t_bnds (0, 0, m_width, m_height); // Bounds of this pixmap
|
||||
IMG_Rect r_bnds (r); // Area to set
|
||||
|
||||
// Determine visibility
|
||||
TVisibility v = t_bnds.getVisibility(r_bnds);
|
||||
if (v == kNotVisible) return;
|
||||
if (v == kPartiallyVisible) {
|
||||
// Clip the destination rectangle to the bounds of this pixmap
|
||||
t_bnds.clip(r_bnds);
|
||||
if (r_bnds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Set new pixels using shifting
|
||||
// Prepare the pixel value to set
|
||||
IMG_ColorRGBA ca (c);
|
||||
TPixelRGBA32 pv = getPixelValue(c);
|
||||
// Mask off the alpha bits
|
||||
pv &= 0x00FFFFFF; //0xFFFFFF00;
|
||||
|
||||
// Set the pixels in the destination rectangle
|
||||
for (TInt32 y = r.m_t; y < r.m_b; y++) {
|
||||
// Park pixel pointer at the start pixels
|
||||
TPixelPtr desPtr = getPixelPtr(r_bnds.m_l, y);
|
||||
for (TInt32 x = r.m_l; x < r.m_r; x++) {
|
||||
// Set the new pixel value (retain current alpha)
|
||||
*(desPtr++) = pv | ((*desPtr) & 0xFF000000); //0x000000FF);
|
||||
}
|
||||
}
|
||||
#else
|
||||
// Set new values using byte indexing
|
||||
//IMG_ColorRGBA ca (c);
|
||||
TPixelRGBA32 src = getPixelValue(c);
|
||||
TPixelPtr desPtr;
|
||||
TUns8* srcBytes = (TUns8*) &src;
|
||||
|
||||
// Set the pixels in the destination rectangle
|
||||
for (TInt32 y = r.m_t; y < r.m_b; y++) {
|
||||
// Park pixel pointer at the start pixels
|
||||
desPtr = getPixelPtr(r_bnds.m_l, y);
|
||||
for (TInt32 x = r.m_l; x < r.m_r; x++) {
|
||||
// Set the new pixel value (retain current alpha)
|
||||
((TUns8*)desPtr)[bi_r] = srcBytes[bi_r];
|
||||
((TUns8*)desPtr)[bi_g] = srcBytes[bi_g];
|
||||
((TUns8*)desPtr)[bi_b] = srcBytes[bi_b];
|
||||
desPtr++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void IMG_PixmapRGBA32::fillRect(const IMG_Rect& r, const IMG_ColorRGBA& c)
|
||||
{
|
||||
IMG_Rect t_bnds (0, 0, m_width, m_height); // Bounds of this pixmap
|
||||
IMG_Rect r_bnds (r); // Area to set
|
||||
|
||||
// Determine visibility
|
||||
TVisibility v = t_bnds.getVisibility(r_bnds);
|
||||
if (v == kNotVisible) return;
|
||||
if (v == kPartiallyVisible) {
|
||||
// Clip the destination rectangle to the bounds of this pixmap
|
||||
t_bnds.clip(r_bnds);
|
||||
if (r_bnds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Set the pixels in the destination rectangle
|
||||
TPixelRGBA32 pixel = getPixelValue(c);
|
||||
for (TInt32 y = r.m_t; y < r.m_b; y++) {
|
||||
// Park pixel pointer at the start pixels
|
||||
TPixelPtr desPtr = getPixelPtr(r_bnds.m_l, y);
|
||||
for (TInt32 x = r.m_l; x < r.m_r; x++) {
|
||||
*(desPtr++) = pixel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void IMG_PixmapRGBA32::setPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap, const IMG_Rect& bnds)
|
||||
{
|
||||
IMG_Rect i_bnds (bnds); // Bounds of input pixmap
|
||||
IMG_Rect t_bnds (0, 0, m_width, m_height); // Bounds of this pixmap
|
||||
IMG_Rect p_bnds (bnds); // Bounds of the paste area
|
||||
p_bnds.setCenter(x, y);
|
||||
|
||||
// The next check could be removed if the caller is made responsible for handing us non-empty rectangles
|
||||
if (i_bnds.isEmpty()) {
|
||||
// Nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine visibility of the paste area
|
||||
TVisibility v = t_bnds.getVisibility(p_bnds);
|
||||
if (v == kNotVisible) return;
|
||||
if (v == kPartiallyVisible) {
|
||||
// Clipping is needed
|
||||
if (p_bnds.m_l < 0) {
|
||||
i_bnds.m_l += p_bnds.m_l;
|
||||
p_bnds.m_l = 0;
|
||||
}
|
||||
if (p_bnds.m_t < 0) {
|
||||
i_bnds.m_t += p_bnds.m_t;
|
||||
p_bnds.m_t = 0;
|
||||
}
|
||||
TInt32 d = p_bnds.getWidth();
|
||||
if (p_bnds.m_r > d) {
|
||||
i_bnds.m_t -= d - p_bnds.m_r;
|
||||
p_bnds.m_t = d;
|
||||
}
|
||||
d = p_bnds.getHeight();
|
||||
if (p_bnds.m_b > d) {
|
||||
i_bnds.m_b -= d - p_bnds.m_b;
|
||||
p_bnds.m_b = d;
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate through the rows
|
||||
for (TInt32 r = 0; r < p_bnds.getHeight(); r++) {
|
||||
// Park pixel pointers at the start pixels
|
||||
TPixelPtr srcPtr = getPixelPtr(i_bnds.m_l, i_bnds.m_t + r);
|
||||
TPixelPtr desPtr = getPixelPtr(p_bnds.m_l, p_bnds.m_t + r);
|
||||
// Iterate through the columns
|
||||
for (int c = 0; c < p_bnds.getWidth(); c++) {
|
||||
*(desPtr++) = *(srcPtr++);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void IMG_PixmapRGBA32::blendPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap, const IMG_Rect& bnds)
|
||||
{
|
||||
IMG_Rect i_bnds (bnds); // Bounds of input pixmap
|
||||
IMG_Rect t_bnds (0, 0, m_width, m_height); // Bounds of this pixmap
|
||||
IMG_Rect p_bnds (bnds); // Bounds of the paste area
|
||||
p_bnds.setCenter(x, y);
|
||||
|
||||
// The next check could be removed if the caller is made responsible for handing us non-empty rectangles
|
||||
if (i_bnds.isEmpty()) {
|
||||
// Nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine visibility of the paste area
|
||||
TVisibility v = t_bnds.getVisibility(p_bnds);
|
||||
if (v == kNotVisible) return;
|
||||
if (v == kPartiallyVisible) {
|
||||
// Clipping is needed
|
||||
if (p_bnds.m_l < 0) {
|
||||
i_bnds.m_l += -p_bnds.m_l;
|
||||
p_bnds.m_l = 0;
|
||||
}
|
||||
if (p_bnds.m_t < 0) {
|
||||
i_bnds.m_t += -p_bnds.m_t;
|
||||
p_bnds.m_t = 0;
|
||||
}
|
||||
TInt32 d = t_bnds.getWidth();
|
||||
if (p_bnds.m_r > d) {
|
||||
i_bnds.m_r -= p_bnds.m_r - d;
|
||||
p_bnds.m_r = d;
|
||||
}
|
||||
d = t_bnds.getHeight();
|
||||
if (p_bnds.m_b > d) {
|
||||
i_bnds.m_b -= p_bnds.m_b - d;
|
||||
p_bnds.m_b = d;
|
||||
}
|
||||
}
|
||||
|
||||
IMG_ColorRGBA srcColor;
|
||||
IMG_ColorRGBA desColor;
|
||||
|
||||
// Iterate through the rows
|
||||
for (int r = 0; r < p_bnds.getHeight(); r++) {
|
||||
// Park pixel pointers at the start pixels
|
||||
TPixelPtr srcPtr = pixmap.getPixelPtr(i_bnds.m_l, i_bnds.m_t + r);
|
||||
TPixelPtr desPtr = getPixelPtr(p_bnds.m_l, p_bnds.m_t + r);
|
||||
// Iterate through the columns
|
||||
for (int c = 0; c < p_bnds.getWidth(); c++) {
|
||||
// Retrieve colors from source and destination pixmaps
|
||||
getColor(*srcPtr, srcColor);
|
||||
getColor(*desPtr, desColor);
|
||||
// Blend the colors
|
||||
desColor.blendColor(srcColor);
|
||||
// Write color back to destination pixmap
|
||||
*desPtr = getPixelValue(desColor);
|
||||
srcPtr++;
|
||||
desPtr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void IMG_PixmapRGBA32::blendPixmap(float u, float v, const IMG_PixmapRGBA32& pixmap)
|
||||
{
|
||||
TUns32 x, y;
|
||||
getPixelAddress(u, v, x, y);
|
||||
blendPixmap(x, y, pixmap);
|
||||
}
|
261
source/blender/img/intern/IMG_PixmapRGBA32.h
Normal file
261
source/blender/img/intern/IMG_PixmapRGBA32.h
Normal file
@@ -0,0 +1,261 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_PixmapRGBA32
|
||||
#define _H_IMG_PixmapRGBA32
|
||||
|
||||
#include "IMG_Pixmap.h"
|
||||
#include "IMG_MemPtr.h"
|
||||
|
||||
/**
|
||||
* Pixmap of kPixelTypeRGBA32 type.
|
||||
* A pixmap with 24 bits per pixel in ABGR format.
|
||||
* Provides methods to fill rectangular areas in this image with a color.
|
||||
* Provides methods to paste or blend other pixmaps into this pixmap.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
class IMG_PixmapRGBA32 : public IMG_Pixmap {
|
||||
public:
|
||||
/**
|
||||
* The pixel type in this pixmap.
|
||||
*/
|
||||
typedef TUns32 TPixelRGBA32;
|
||||
|
||||
/** The pixel pointer type of this pixmap. */
|
||||
typedef TPixelRGBA32* TPixelPtr;
|
||||
|
||||
/** Indices of color component byes within a pixel. */
|
||||
typedef enum {
|
||||
bi_r = 0,
|
||||
bi_g = 1,
|
||||
bi_b = 2,
|
||||
bi_a = 3
|
||||
} TPixelIndex;
|
||||
|
||||
/** "Save" memory pointer. */
|
||||
IMG_MemPtr<TPixelRGBA32> m_mem;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates a new pixmap of the kPixelTypeRGBA32 type with the requested dimensions.
|
||||
* @throw <IMG_MemPtr::Size> when an invalid width and/or height is passed.
|
||||
* @throw <IMG_MemPtr::Memory> when a there is not enough memory to allocate the image.
|
||||
* @param width the width in pixels of the image.
|
||||
* @param height the height in pixels of the image.
|
||||
*/
|
||||
IMG_PixmapRGBA32(TUns32 width, TUns32 height);
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates a new pixmap of the kPixelTypeRGBA32 from a pointer to image data.
|
||||
* The image data will not be freed upon destruction of this object.
|
||||
* The owner of this object is reponsible for that.
|
||||
* @throw <Size> when an invalid width and/or height is passed.
|
||||
* @param image pointer to the image data.
|
||||
* @param width the width in pixels of the image.
|
||||
* @param height the height in pixels of the image.
|
||||
*/
|
||||
IMG_PixmapRGBA32(void* image, TUns32 width, TUns32 height, TUns32 rowBytes);
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
virtual ~IMG_PixmapRGBA32();
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Fills the rectangle given with the color given.
|
||||
* Retains the alpha values.
|
||||
* Performs a bounds check.
|
||||
* @param r requested bounds rectangle in the image
|
||||
* @param c color to use
|
||||
*/
|
||||
virtual void fillRect(const IMG_Rect& r, const IMG_ColorRGB& c);
|
||||
|
||||
/**
|
||||
* Fills the rectangle given with the color given.
|
||||
* Sets the alpha values from the color.
|
||||
* Performs a bounds check.
|
||||
* @param r requested bounds rectangle in the image
|
||||
* @param c color to use
|
||||
*/
|
||||
virtual void fillRect(const IMG_Rect& r, const IMG_ColorRGBA& c);
|
||||
|
||||
/**
|
||||
* Pastes a pixmap into this pixmap.
|
||||
* Pastes the given pixmap centered at the given coordinates into this pixmap.
|
||||
* Ignores the alpha information, this is pasted too.
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @param x x-coordinate of the center location of the image.
|
||||
* @param y y-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to paste.
|
||||
*/
|
||||
inline virtual void setPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap);
|
||||
|
||||
/**
|
||||
* Pastes an area in a pixmap into this pixmap.
|
||||
* Pastes an area of the given pixmap centered at the given coordinates into this pixmap.
|
||||
* Ignores the alpha information, this is pasted too.
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @param x x-coordinate of the center location of the image.
|
||||
* @param y y-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to paste.
|
||||
* @param bnds the bounds of the area of the pixmap to paste.
|
||||
*/
|
||||
virtual void setPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap, const IMG_Rect& bnds);
|
||||
|
||||
/**
|
||||
* Blends a pixmap into this pixmap.
|
||||
* Blends the given pixmap centered at the given coordinates into this pixmap.
|
||||
* The alpha information in the given image is used to blend.
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @param x x-coordinate of the center location of the image.
|
||||
* @param y y-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to blend.
|
||||
*/
|
||||
virtual void blendPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap);
|
||||
|
||||
/**
|
||||
* Blends an area of a pixmap into this pixmap.
|
||||
* Blends an area of the given pixmap centered at the given coordinates into this pixmap.
|
||||
* The alpha information in the given image is used to blend.
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @param x x-coordinate of the center location of the image.
|
||||
* @param y y-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to blend.
|
||||
* @param bnds the bounds of the area of the pixmap to blend.
|
||||
*/
|
||||
virtual void blendPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap, const IMG_Rect& bnds);
|
||||
|
||||
/**
|
||||
* Blends a pixmap into this pixmap at (u,v) coordinates.
|
||||
* Pastes the given pixmap centered at the given coordinates into this pixmap.
|
||||
* The alpha information in the given image is used to blend.
|
||||
* @see IMG_PixmapRGBA32::blendPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap)
|
||||
* @todo implement wrapping modes when the pixmap does not fit within the bounds.
|
||||
* @param u u-coordinate of the center location of the image.
|
||||
* @param v v-coordinate of the center location of the image.
|
||||
* @param pixmap the pixmap to blend
|
||||
*/
|
||||
virtual void blendPixmap(float u, float v, const IMG_PixmapRGBA32& pixmap);
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Returns pointer to the pixel.
|
||||
* Returns a pointer of TPixelPtr type to the pixel at the requested coordinates.
|
||||
* Does not perform a bounds check!
|
||||
* @param x column address of the pixel.
|
||||
* @param y row address of the pixel.
|
||||
* @return the pointer calculated.
|
||||
*/
|
||||
inline TPixelPtr getPixelPtr(TUns32 x, TUns32 y) const;
|
||||
|
||||
/**
|
||||
* Returns the pixel value of a color.
|
||||
* @param c the color to convert
|
||||
* @return the pixel value calculated
|
||||
*/
|
||||
inline TPixelRGBA32 getPixelValue(const IMG_ColorRGBA& c) const;
|
||||
|
||||
/**
|
||||
* Returns the color of from a pixel value.
|
||||
* @param p the pixel value
|
||||
* @param c the color calculated
|
||||
*/
|
||||
inline void getColor(TPixelRGBA32 p, IMG_ColorRGBA& c) const;
|
||||
};
|
||||
|
||||
inline void IMG_PixmapRGBA32::setPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap)
|
||||
{
|
||||
IMG_Rect bnds;
|
||||
pixmap.getBounds(bnds);
|
||||
setPixmap(x, y, pixmap, bnds);
|
||||
}
|
||||
|
||||
inline void IMG_PixmapRGBA32::blendPixmap(TUns32 x, TUns32 y, const IMG_PixmapRGBA32& pixmap)
|
||||
{
|
||||
IMG_Rect bnds;
|
||||
pixmap.getBounds(bnds);
|
||||
blendPixmap(x, y, pixmap, bnds);
|
||||
}
|
||||
|
||||
inline IMG_PixmapRGBA32::TPixelPtr IMG_PixmapRGBA32::getPixelPtr(TUns32 x, TUns32 y) const
|
||||
{
|
||||
return (TPixelPtr) (((TUns8*)m_image) + (y*m_rowBytes) + (x*4));
|
||||
}
|
||||
|
||||
|
||||
inline IMG_PixmapRGBA32::TPixelRGBA32 IMG_PixmapRGBA32::getPixelValue(const IMG_ColorRGBA& c) const
|
||||
{
|
||||
#if 0
|
||||
// Obtain pixel value through shifting
|
||||
TPixelRGBA32 p = ((TPixelRGBA32) (((float) 0xFF) * c.m_a)) << 24;
|
||||
p |= ((TPixelRGBA32) (((float) 0xFF) * c.m_b)) << 16;
|
||||
p |= ((TPixelRGBA32) (((float) 0xFF) * c.m_g)) << 8;
|
||||
p |= ((TPixelRGBA32) (((float) 0xFF) * c.m_r));
|
||||
return p;
|
||||
#else
|
||||
// Obtain pixel value through byte indexing
|
||||
TPixelRGBA32 pixel;
|
||||
TUns8* bytes = (TUns8*)&pixel;
|
||||
bytes[bi_r] = (TUns8)(((float) 0xFF) * c.m_r);
|
||||
bytes[bi_g] = (TUns8)(((float) 0xFF) * c.m_g);
|
||||
bytes[bi_b] = (TUns8)(((float) 0xFF) * c.m_b);
|
||||
bytes[bi_a] = (TUns8)(((float) 0xFF) * c.m_a);
|
||||
return pixel;
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void IMG_PixmapRGBA32::getColor(TPixelRGBA32 p, IMG_ColorRGBA& c) const
|
||||
{
|
||||
#if 0
|
||||
// Obtain color value through shifting
|
||||
c.m_a = ((float) ((p >> 24) & 0x00FF)) / ((float) 0xFF);
|
||||
c.m_b = ((float) ((p >> 16) & 0x00FF)) / ((float) 0xFF);
|
||||
c.m_g = ((float) ((p >> 8) & 0x00FF)) / ((float) 0xFF);
|
||||
c.m_r = ((float) ( p & 0x00FF)) / ((float) 0xFF);
|
||||
#else
|
||||
// Obtain color value through byte indexing
|
||||
TUns8* bytes = (TUns8*)&p;
|
||||
c.m_r = ((float)bytes[bi_r]) / ((float) 0xFF);
|
||||
c.m_g = ((float)bytes[bi_g]) / ((float) 0xFF);
|
||||
c.m_b = ((float)bytes[bi_b]) / ((float) 0xFF);
|
||||
c.m_a = ((float)bytes[bi_a]) / ((float) 0xFF);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // _H_IMG_PixmapRGBA32
|
129
source/blender/img/intern/IMG_Rect.cpp
Normal file
129
source/blender/img/intern/IMG_Rect.cpp
Normal file
@@ -0,0 +1,129 @@
|
||||
/**
|
||||
* $Id$
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "IMG_Rect.h"
|
||||
|
||||
|
||||
TVisibility IMG_Rect::getVisibility(IMG_Rect& r) const
|
||||
{
|
||||
bool lt = isInside(r.m_l, r.m_t);
|
||||
bool rt = isInside(r.m_r, r.m_t);
|
||||
bool lb = isInside(r.m_l, r.m_b);
|
||||
bool rb = isInside(r.m_r, r.m_b);
|
||||
TVisibility v;
|
||||
if (lt && rt && lb && rb) {
|
||||
// All points inside, rectangle is inside this
|
||||
v = kFullyVisible;
|
||||
}
|
||||
else if (!(lt || rt || lb || rb)) {
|
||||
// None of the points inside
|
||||
// Check to see whether the rectangle is larger than this one
|
||||
if ((r.m_l < m_l) && (r.m_t < m_t) && (r.m_r > m_r) && (r.m_b > m_b)) {
|
||||
v = kPartiallyVisible;
|
||||
}
|
||||
else {
|
||||
v = kNotVisible;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Some of the points inside, rectangle is partially inside
|
||||
v = kPartiallyVisible;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
TVisibility IMG_Rect::getVisibility(IMG_Line& l) const
|
||||
{
|
||||
bool s = isInside(l.m_xs, l.m_ys);
|
||||
bool e = isInside(l.m_xe, l.m_ye);
|
||||
TVisibility v;
|
||||
if (s && e) {
|
||||
v = kFullyVisible;
|
||||
}
|
||||
else if (s || e) {
|
||||
v = kPartiallyVisible;
|
||||
}
|
||||
else {
|
||||
v = kNotVisible;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
void IMG_Rect::setCenter(TInt32 cx, TInt32 cy)
|
||||
{
|
||||
TInt32 offset = cx - (m_l + (m_r - m_l)/2);
|
||||
m_l += offset;
|
||||
m_r += offset;
|
||||
offset = cy - (m_t + (m_b - m_t)/2);
|
||||
m_t += offset;
|
||||
m_b += offset;
|
||||
}
|
||||
|
||||
void IMG_Rect::setCenter(TInt32 cx, TInt32 cy, TInt32 w, TInt32 h)
|
||||
{
|
||||
long w_2, h_2;
|
||||
|
||||
w_2 = w >> 1;
|
||||
h_2 = h >> 1;
|
||||
m_l = cx - w_2;
|
||||
m_t = cy - h_2;
|
||||
m_r = m_l + w;
|
||||
m_b = m_t + h;
|
||||
}
|
||||
|
||||
bool IMG_Rect::clip(IMG_Rect& r) const
|
||||
{
|
||||
bool clipped = false;
|
||||
if (r.m_l < m_l) {
|
||||
r.m_l = m_l;
|
||||
clipped = true;
|
||||
}
|
||||
if (r.m_t < m_t) {
|
||||
r.m_t = m_t;
|
||||
clipped = true;
|
||||
}
|
||||
if (r.m_r > m_r) {
|
||||
r.m_r = m_r;
|
||||
clipped = true;
|
||||
}
|
||||
if (r.m_b > m_b) {
|
||||
r.m_b = m_b;
|
||||
clipped = true;
|
||||
}
|
||||
return clipped;
|
||||
}
|
||||
|
||||
bool IMG_Rect::clip(IMG_Line& l) const
|
||||
{
|
||||
bool clipped = false;
|
||||
return clipped;
|
||||
}
|
200
source/blender/img/intern/IMG_Rect.h
Normal file
200
source/blender/img/intern/IMG_Rect.h
Normal file
@@ -0,0 +1,200 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 7, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_Rect
|
||||
#define _H_IMG_Rect
|
||||
|
||||
#include "IMG_Types.h"
|
||||
#include "IMG_Line.h"
|
||||
|
||||
/**
|
||||
* Implements rectangle functionality.
|
||||
* Used for bounds in images.
|
||||
* The four extreme coordinates are stored as left, top, right and bottom.
|
||||
* left is assumed to be smaller than or equal to right.
|
||||
* top is assumed to be smaller than or equal to bottom.
|
||||
* @author Maarten Gribnau
|
||||
* @date March 6, 2001
|
||||
*/
|
||||
|
||||
class IMG_Rect {
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructs a rectangle with the given values.
|
||||
* @param l requested left coordinate of the rectangle
|
||||
* @param t requested top coordinate of the rectangle
|
||||
* @param r requested right coordinate of the rectangle
|
||||
* @param b requested bottom coordinate of the rectangle
|
||||
*/
|
||||
IMG_Rect(TInt32 l=0, TInt32 t=0, TInt32 r=0, TInt32 b=0)
|
||||
: m_l(l), m_t(t), m_r(r), m_b(b) {}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
* @param r rectangle to copy
|
||||
*/
|
||||
IMG_Rect(const IMG_Rect& r)
|
||||
: m_l(r.m_l), m_t(r.m_t), m_r(r.m_r), m_b(r.m_b) {}
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
virtual ~IMG_Rect() {};
|
||||
|
||||
/**
|
||||
* Access to rectangle width.
|
||||
* @return width of the rectangle
|
||||
*/
|
||||
virtual inline TInt32 getWidth() const;
|
||||
|
||||
/**
|
||||
* Access to rectangle height.
|
||||
* @return height of the rectangle
|
||||
*/
|
||||
virtual inline TInt32 getHeight() const;
|
||||
|
||||
/**
|
||||
* Sets all members of the rectangle.
|
||||
* @param l requested left coordinate of the rectangle
|
||||
* @param t requested top coordinate of the rectangle
|
||||
* @param r requested right coordinate of the rectangle
|
||||
* @param b requested bottom coordinate of the rectangle
|
||||
*/
|
||||
virtual inline void set(TInt32 l, TInt32 t, TInt32 r, TInt32 b);
|
||||
|
||||
/**
|
||||
* Returns whether this rectangle is empty.
|
||||
* Empty rectangles are rectangles that have width==0 and/or height==0.
|
||||
* @return boolean value (true==empty rectangle)
|
||||
*/
|
||||
virtual inline bool isEmpty() const;
|
||||
|
||||
/**
|
||||
* Returns whether the point is inside this rectangle.
|
||||
* Point on the boundary is considered inside.
|
||||
* @param x x-coordinate of point to test.
|
||||
* @param y y-coordinate of point to test.
|
||||
* @return boolean value (true if point is inside).
|
||||
*/
|
||||
virtual inline bool isInside(TInt32 x, TInt32 y) const;
|
||||
|
||||
/**
|
||||
* Returns whether the rectangle is inside this rectangle.
|
||||
* @param r rectangle to test.
|
||||
* @return visibility (not, partially or fully visible).
|
||||
*/
|
||||
virtual TVisibility getVisibility(IMG_Rect& r) const;
|
||||
|
||||
/**
|
||||
* Returns whether the line is inside this rectangle.
|
||||
* @param l line to test.
|
||||
* @return visibility (not, partially or fully visible).
|
||||
*/
|
||||
virtual TVisibility getVisibility(IMG_Line& l) const;
|
||||
|
||||
/**
|
||||
* Sets rectangle members.
|
||||
* Sets rectangle members such that it is centered at the given location.
|
||||
* @param cx requested center x-coordinate of the rectangle
|
||||
* @param cy requested center y-coordinate of the rectangle
|
||||
*/
|
||||
virtual void setCenter(TInt32 cx, TInt32 cy);
|
||||
|
||||
/**
|
||||
* Sets rectangle members.
|
||||
* Sets rectangle members such that it is centered at the given location,
|
||||
* with the width requested.
|
||||
* @param cx requested center x-coordinate of the rectangle
|
||||
* @param cy requested center y-coordinate of the rectangle
|
||||
* @param w requested width of the rectangle
|
||||
* @param h requested height of the rectangle
|
||||
*/
|
||||
virtual void setCenter(TInt32 cx, TInt32 cy, TInt32 w, TInt32 h);
|
||||
|
||||
/**
|
||||
* Clips a rectangle.
|
||||
* Updates the rectangle given such that it will fit within this one.
|
||||
* This can result in an empty rectangle.
|
||||
* @param r the rectangle to clip
|
||||
* @return whether clipping has occurred
|
||||
*/
|
||||
virtual bool clip(IMG_Rect& r) const;
|
||||
|
||||
/**
|
||||
* Clips a line.
|
||||
* Updates the line given such that it will fit within this rectangle.
|
||||
* This can result in an empty line.
|
||||
* @param l the line to clip
|
||||
* @return whether clipping has occurred
|
||||
*/
|
||||
virtual bool clip(IMG_Line& l) const;
|
||||
|
||||
/** Left coordinate of the rectangle */
|
||||
TInt32 m_l;
|
||||
/** Top coordinate of the rectangle */
|
||||
TInt32 m_t;
|
||||
/** Right coordinate of the rectangle */
|
||||
TInt32 m_r;
|
||||
/** Bottom coordinate of the rectangle */
|
||||
TInt32 m_b;
|
||||
};
|
||||
|
||||
|
||||
inline TInt32 IMG_Rect::getWidth() const
|
||||
{
|
||||
return m_r - m_l;
|
||||
}
|
||||
|
||||
inline TInt32 IMG_Rect::getHeight() const
|
||||
{
|
||||
return m_b - m_t;
|
||||
}
|
||||
|
||||
inline void IMG_Rect::set(TInt32 l, TInt32 t, TInt32 r, TInt32 b)
|
||||
{
|
||||
m_l = l; m_t = t; m_r = r; m_b = b;
|
||||
}
|
||||
|
||||
inline bool IMG_Rect::isEmpty() const
|
||||
{
|
||||
return (getWidth() == 0) || (getHeight() == 0);
|
||||
}
|
||||
|
||||
inline bool IMG_Rect::isInside(TInt32 x, TInt32 y) const
|
||||
{
|
||||
return (x >= m_l) && (x <= m_r) && (y >= m_t) && (y <= m_b);
|
||||
}
|
||||
|
||||
#endif // _H_IMG_Rect
|
48
source/blender/img/intern/IMG_Types.h
Normal file
48
source/blender/img/intern/IMG_Types.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
* All rights reserved.
|
||||
*
|
||||
* The Original Code is: all of this file.
|
||||
*
|
||||
* Contributor(s): none yet.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
* @author Maarten Gribnau
|
||||
* @date March 7, 2001
|
||||
*/
|
||||
|
||||
#ifndef _H_IMG_Types
|
||||
#define _H_IMG_Types
|
||||
|
||||
typedef int TInt32;
|
||||
typedef unsigned char TUns8;
|
||||
typedef unsigned int TUns32;
|
||||
|
||||
typedef enum {
|
||||
kNotVisible = 0,
|
||||
kPartiallyVisible,
|
||||
kFullyVisible
|
||||
} TVisibility;
|
||||
|
||||
#endif // _H_IMG_Types
|
49
source/blender/img/intern/Makefile
Normal file
49
source/blender/img/intern/Makefile
Normal file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version. The Blender
|
||||
# Foundation also sells licenses for use in proprietary software under
|
||||
# the Blender License. See http://www.blender.org/BL/ for information
|
||||
# about this.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
||||
# All rights reserved.
|
||||
#
|
||||
# The Original Code is: all of this file.
|
||||
#
|
||||
# Contributor(s): none yet.
|
||||
#
|
||||
# ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
#
|
||||
#
|
||||
|
||||
LIBNAME = img
|
||||
DIR = $(OCGDIR)/blender/$(LIBNAME)
|
||||
|
||||
include nan_compile.mk
|
||||
|
||||
ifeq ($(OS),$(findstring $(OS), "beos darwin freebsd linux openbsd solaris windows"))
|
||||
CFLAGS += -funsigned-char
|
||||
endif
|
||||
|
||||
CFLAGS += $(LEVEL_1_C_WARNINGS)
|
||||
|
||||
# path to SDNA types
|
||||
CPPFLAGS += -I../../makesdna
|
||||
# path to our own external headerfiles
|
||||
CPPFLAGS += -I..
|
||||
|
Reference in New Issue
Block a user