Major overhaul of DisplayDriver API

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6335 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm 2004-01-27 00:39:01 +00:00
parent 06d841d5ea
commit b4fe4d74fe
1 changed files with 171 additions and 0 deletions

View File

@ -0,0 +1,171 @@
//------------------------------------------------------------------------------
// Copyright (c) 2001-2002, OpenBeOS
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
// File Name: LayerData.cpp
// Author: DarkWyrm <bpmagic@columbus.rr.com>
// Adi Oanca <adioanca@mymail.ro>
// Description: Data classes for working with BView states and draw parameters
//
//------------------------------------------------------------------------------
#include "LayerData.h"
#include <Layer.h>
DrawData::DrawData(void)
{
pensize=1.0;
penlocation.Set(0,0);
highcolor.SetColor(0, 0, 0, 255);
lowcolor.SetColor(255, 255, 255, 255);
patt=pat_solidhigh;
draw_mode=B_OP_COPY;
lineCap =B_BUTT_CAP;
lineJoin=B_BEVEL_JOIN;
miterLimit=B_DEFAULT_MITER_LIMIT;
alphaSrcMode=B_PIXEL_ALPHA;
alphaFncMode=B_ALPHA_OVERLAY;
scale=1.0;
fontAliasing=true;
if(fontserver)
font=*(fontserver->GetSystemPlain());
clippReg=NULL;
edelta.space=0;
edelta.nonspace=0;
}
DrawData::~DrawData(void)
{
if (clippReg)
delete clippReg;
}
DrawData::DrawData(const DrawData &data)
{
*this=data;
}
DrawData &DrawData::operator=(const DrawData &from)
{
pensize=from.pensize;
highcolor=from.highcolor;
lowcolor=from.lowcolor;
patt=from.patt;
draw_mode=from.draw_mode;
penlocation=from.penlocation;
lineCap=from.lineCap;
lineJoin=from.lineJoin;
miterLimit=from.miterLimit;
alphaSrcMode=from.alphaSrcMode;
alphaFncMode=from.alphaFncMode;
scale=from.scale;
fontAliasing=from.fontAliasing;
font=from.font;
if(from.clippReg)
{
if(clippReg)
*clippReg=*(from.clippReg);
else
clippReg=new BRegion(*(from.clippReg));
}
edelta=from.edelta;
return *this;
}
LayerData::LayerData(void)
{
coordOrigin.Set(0.0, 0.0);
viewcolor.SetColor(255,255,255,255);
background=NULL;
overlay=NULL;
prevState=NULL;
}
LayerData::LayerData(const LayerData &data)
{
*this=data;
}
LayerData::~LayerData(void)
{
if (prevState)
{
delete prevState;
prevState=NULL;
}
}
LayerData &LayerData::operator=(const LayerData &from)
{
// I'm not sure if the DrawData copy constructor will get called before this one is,
// so I'll just make sure the copy happens. :P
pensize=from.pensize;
highcolor=from.highcolor;
lowcolor=from.lowcolor;
patt=from.patt;
draw_mode=from.draw_mode;
lineCap=from.lineCap;
lineJoin=from.lineJoin;
miterLimit=from.miterLimit;
alphaSrcMode=from.alphaSrcMode;
alphaFncMode=from.alphaFncMode;
scale=from.scale;
fontAliasing=from.fontAliasing;
font=from.font;
if(from.clippReg)
{
if(clippReg)
*clippReg=*(from.clippReg);
else
clippReg=new BRegion(*(from.clippReg));
}
edelta=from.edelta;
// Stuff specific to LayerData
coordOrigin=from.coordOrigin;;
viewcolor=from.viewcolor;
background=from.background;
overlay=from.overlay;
prevState=from.prevState;
return *this;
}