|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T i
Length: 5462 (0x1556)
Types: TextFile
Names: »ibgraphic.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5
└─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00«
└─⟦de8ce1454⟧
└─⟦this⟧ »contrib/lib/iv/src/bin/ibuild/ibgraphic.c«
/*
* Copyright (c) 1991 Stanford University
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Stanford not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. Stanford makes no representations about
* the suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
* IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* User interface builder-specific structured graphics implementations.
* $Header: /master/3.0/iv/src/bin/ibuild/RCS/ibgraphic.c,v 1.2 91/09/27 14:10:37 tang Exp $
*/
#include "ibgraphic.h"
#include "ibvars.h"
#include <Unidraw/catalog.h>
#include <Unidraw/iterator.h>
#include <Unidraw/unidraw.h>
#include <InterViews/shape.h>
#include <InterViews/transformer.h>
/*****************************************************************************/
IBGraphic::IBGraphic (CanvasVar* c, Graphic* g) : Picture(g) { _canvasVar = c;}
Graphic* IBGraphic::Copy () {
Iterator i;
Graphic* copy = new IBGraphic(nil, this);
for (First(i); !Done(i); Next(i)) {
copy->Append(GetGraphic(i)->Copy());
}
return copy;
}
void IBGraphic::CalcExtent (
int w, int h,
float& l, float& b, float& cx, float& cy, float& tol, Graphic* gs
) {
transformRect(0, 0, float(w)/2, float(h)/2, l, b, cx, cy, gs);
PSBrush* br = gs->GetBrush();
float width = (br == nil) ? 0 : float(br->Width());
tol = (width > 1) ? width/2 : 0;
}
void IBGraphic::concatGS (Graphic* a, Graphic* b, Graphic* dest) {
int fill;
PSColor* fg, *bg;
PSFont* font;
PSBrush* br;
PSPattern* pat;
if (a == nil) {
*dest = *b;
return;
} else if (b == nil) {
*dest = *a;
return;
}
if ((fill = a->BgFilled()) == UNDEF) {
fill = b->BgFilled();
}
dest->FillBg(fill);
if ((fg = a->GetFgColor()) == nil) {
fg = b->GetFgColor();
}
if ((bg = a->GetBgColor()) == nil) {
bg = b->GetBgColor();
}
dest->SetColors(fg, bg);
if ((pat = a->GetPattern()) == nil) {
pat = b->GetPattern();
}
dest->SetPattern(pat);
if ((font = a->GetFont()) == nil) {
font = b->GetFont();
}
dest->SetFont(font);
if ((br = a->GetBrush()) == nil) {
br = b->GetBrush();
}
dest->SetBrush(br);
}
boolean IBGraphic::contains (PointObj& po, Graphic* gs) {
return Graphic::contains(po, gs);
}
boolean IBGraphic::intersects (BoxObj& userb, Graphic* gs) {
return Graphic::intersects(userb, gs);
}
void IBGraphic::ReadGS (istream& in) {
Catalog* catalog = unidraw->GetCatalog();
FillBg(catalog->ReadBgFilled(in));
SetBrush(catalog->ReadBrush(in));
PSColor* fg = catalog->ReadColor(in);
PSColor* bg = catalog->ReadColor(in);
SetColors(fg, bg);
SetFont(catalog->ReadFont(in));
SetPattern(catalog->ReadPattern(in));
Transformer* t = catalog->ReadTransformer(in);
SetTransformer(t);
Unref(t);
}
void IBGraphic::WriteGS (ostream& out) {
Catalog* catalog = unidraw->GetCatalog();
catalog->WriteBgFilled(BgFilled(), out);
catalog->WriteBrush(GetBrush(), out);
catalog->WriteColor(GetFgColor(), out);
catalog->WriteColor(GetBgColor(), out);
catalog->WriteFont(GetFont(), out);
catalog->WritePattern(GetPattern(), out);
catalog->WriteTransformer(GetTransformer(), out);
}
/*****************************************************************************/
HVGraphic::HVGraphic (CanvasVar* c, Graphic* g) : IBGraphic(c, g) {
_minorAxisSize = 1;
}
int HVGraphic::MinorAxisSize () { return _minorAxisSize; }
void HVGraphic::SetMinorAxisSize (int w) { _minorAxisSize = w; }
void HVGraphic::Init (int nat, int shr, int str, Orientation o, int w) {
_natural = nat;
_shrink = shr;
_stretch = str;
_orientation = o;
_minorAxisSize = w;
}
void HVGraphic::GetShape (int& nat, int& shr, int& str) {
nat = _natural;
shr = _shrink;
str = _stretch;
}
void HVGraphic::SetShape (int nat, int shr, int str) {
_natural = nat;
_shrink = shr;
_stretch = str;
}
void HVGraphic::getExtent (
float& l, float& b, float& cx, float& cy, float& tol, Graphic* gs
) {
CanvasVar* cvar = GetCanvasVar();
if (cvar == nil) {
if (_orientation == Horizontal) {
CalcExtent(_natural, MinorAxisSize(), l, b, cx, cy, tol, gs);
} else {
CalcExtent(MinorAxisSize(), _natural, l, b, cx, cy, tol, gs);
}
} else {
CalcExtent(cvar->Width(), cvar->Height(), l,b,cx,cy,tol,gs);
}
tol = 0;
}
void HVGraphic::drawClipped (
Canvas* c, Coord l, Coord b, Coord r, Coord t, Graphic* gs
) {
Graphic::drawClipped(c, l, b, r, t, gs);
}