18940f93cSStephan Aßmus// MallocBuffer.h
28940f93cSStephan Aßmus
38940f93cSStephan Aßmus#include <malloc.h>
48940f93cSStephan Aßmus
58940f93cSStephan Aßmus#include "MallocBuffer.h"
68940f93cSStephan Aßmus
78940f93cSStephan Aßmus// TODO: maybe this class could be more flexible by taking
88940f93cSStephan Aßmus// a color_space argument in the constructor
98940f93cSStephan Aßmus// the hardcoded width * 4 (because that's how it's used now anyways)
108940f93cSStephan Aßmus// could be avoided, but I'm in a hurry... :-)
118940f93cSStephan Aßmus
128940f93cSStephan Aßmus// constructor
138940f93cSStephan AßmusMallocBuffer::MallocBuffer(uint32 width,
148940f93cSStephan Aßmus						   uint32 height)
158940f93cSStephan Aßmus	: fBuffer(NULL),
168940f93cSStephan Aßmus	  fWidth(width),
178940f93cSStephan Aßmus	  fHeight(height)
188940f93cSStephan Aßmus{
198940f93cSStephan Aßmus	if (fWidth > 0 && fHeight > 0) {
208940f93cSStephan Aßmus		fBuffer = malloc((fWidth * 4) * fHeight);
218940f93cSStephan Aßmus	}
228940f93cSStephan Aßmus}
238940f93cSStephan Aßmus
248940f93cSStephan Aßmus// destructor
258940f93cSStephan AßmusMallocBuffer::~MallocBuffer()
268940f93cSStephan Aßmus{
278940f93cSStephan Aßmus	if (fBuffer)
288940f93cSStephan Aßmus		free(fBuffer);
298940f93cSStephan Aßmus}
308940f93cSStephan Aßmus
318940f93cSStephan Aßmus// InitCheck
328940f93cSStephan Aßmusstatus_t
338940f93cSStephan AßmusMallocBuffer::InitCheck() const
348940f93cSStephan Aßmus{
358940f93cSStephan Aßmus	return fBuffer ? B_OK : B_NO_MEMORY;
368940f93cSStephan Aßmus}
378940f93cSStephan Aßmus
388940f93cSStephan Aßmus// ColorSpace
398940f93cSStephan Aßmuscolor_space
408940f93cSStephan AßmusMallocBuffer::ColorSpace() const
418940f93cSStephan Aßmus{
428940f93cSStephan Aßmus	return B_RGBA32;
438940f93cSStephan Aßmus}
448940f93cSStephan Aßmus
458940f93cSStephan Aßmus// Bits
468940f93cSStephan Aßmusvoid*
478940f93cSStephan AßmusMallocBuffer::Bits() const
488940f93cSStephan Aßmus{
498940f93cSStephan Aßmus	if (InitCheck() >= B_OK)
508940f93cSStephan Aßmus		return fBuffer;
518940f93cSStephan Aßmus	return NULL;
528940f93cSStephan Aßmus}
538940f93cSStephan Aßmus
548940f93cSStephan Aßmus// BytesPerRow
558940f93cSStephan Aßmusuint32
568940f93cSStephan AßmusMallocBuffer::BytesPerRow() const
578940f93cSStephan Aßmus{
588940f93cSStephan Aßmus	if (InitCheck() >= B_OK)
598940f93cSStephan Aßmus		return fWidth * 4;
608940f93cSStephan Aßmus	return 0;
618940f93cSStephan Aßmus}
628940f93cSStephan Aßmus
638940f93cSStephan Aßmus// Width
648940f93cSStephan Aßmusuint32
658940f93cSStephan AßmusMallocBuffer::Width() const
668940f93cSStephan Aßmus{
678940f93cSStephan Aßmus	if (InitCheck() >= B_OK)
688940f93cSStephan Aßmus		return fWidth;
698940f93cSStephan Aßmus	return 0;
708940f93cSStephan Aßmus}
718940f93cSStephan Aßmus
728940f93cSStephan Aßmus// Height
738940f93cSStephan Aßmusuint32
748940f93cSStephan AßmusMallocBuffer::Height() const
758940f93cSStephan Aßmus{
768940f93cSStephan Aßmus	if (InitCheck() >= B_OK)
778940f93cSStephan Aßmus		return fHeight;
788940f93cSStephan Aßmus	return 0;
798940f93cSStephan Aßmus}
808940f93cSStephan Aßmus