|
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: 6081 (0x17c1) Types: TextFile Names: »ibbitmap.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00« └─⟦de8ce1454⟧ └─⟦this⟧ »contrib/lib/iv/src/bin/ibuild/ibbitmap.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. */ /* * Button component definitions. * $Header: /master/3.0/iv/src/bin/ibuild/RCS/ibbitmap.c,v 1.2 91/09/27 14:05:53 tang Exp $ */ #include "ibbitmap.h" #include "ibclasses.h" #include <Unidraw/catalog.h> #include <Unidraw/manips.h> #include <Unidraw/unidraw.h> #include <Unidraw/creator.h> #include <Unidraw/Tools/tool.h> #include <Unidraw/iterator.h> #include <InterViews/bitmap.h> #include <InterViews/painter.h> #include <InterViews/transformer.h> #include <stream.h> #include <string.h> /*****************************************************************************/ static const int pad = 0; /*****************************************************************************/ BitmapGraphic* BitmapComp::GetBitmapGraphic () { return (BitmapGraphic*) GetGraphic(); } ClassId BitmapComp::GetClassId () { return BITMAP_COMP; } boolean BitmapComp::IsA (ClassId id) { return BITMAP_COMP == id || GraphicComp::IsA(id); } BitmapComp::BitmapComp (BitmapGraphic* g) : GraphicComp(g) {} void BitmapComp::Read (istream& in) { GraphicComp::Read(in); Catalog* catalog = unidraw->GetCatalog(); ClassId id; in >> id; BitmapGraphic* g = (BitmapGraphic*) catalog->GetCreator()->Create(id); g->Read(in); SetGraphic(g); } void BitmapComp::Write (ostream& out) { ClassId id; GraphicComp::Write(out); Catalog* catalog = unidraw->GetCatalog(); BitmapGraphic* g = GetBitmapGraphic(); id = g->GetClassId(); out << " " << id << " "; g->Write(out); } /*****************************************************************************/ BitmapView::BitmapView (BitmapComp* subj) : GraphicView(subj) { } BitmapComp* BitmapView::GetBitmapComp () { return (BitmapComp*) GetSubject(); } ClassId BitmapView::GetClassId () { return BITMAP_VIEW; } boolean BitmapView::IsA (ClassId id) { return BITMAP_VIEW == id || GraphicView::IsA(id); } void BitmapView::Update () { Graphic* bcomp = GetBitmapComp()->GetBitmapGraphic(); Graphic* bview = (BitmapGraphic*) GetGraphic(); IncurDamage(bview); *bview = *bcomp; IncurDamage(bview); EraseHandles(); } Graphic* BitmapView::GetGraphic () { Graphic* g = GraphicView::GetGraphic(); if (g == nil) { g = GetGraphicComp()->GetGraphic()->Copy(); SetGraphic(g); } return g; } /*****************************************************************************/ BitmapGraphic::BitmapGraphic (Graphic* g, char* fg_name) : Graphic(g) { Init(fg_name); } BitmapGraphic::~BitmapGraphic () { if (_fg_name != nil) { delete _fg_name; } } void BitmapGraphic::getExtent ( float& l, float& b, float& cx, float& cy, float& tol, Graphic* gs ) { int w, h; w = _fg_map->pwidth(); h = _fg_map->pheight(); CalcExtent(w, h, l, b, cx, cy, tol, gs); tol = 0; } void BitmapGraphic::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 BitmapGraphic::Init (char* fg_name) { _fg_map = nil; _fg_name = nil; if (fg_name != nil && *fg_name != '\0') { _fg_map = Bitmap::open(fg_name); _fg_map->Reference(); _fg_name = strnew(fg_name); } } Graphic* BitmapGraphic::Copy () { return new BitmapGraphic(this, _fg_name); } void BitmapGraphic::Read (istream& in) { Catalog* catalog = unidraw->GetCatalog(); char* fg_name; 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); fg_name = catalog->ReadString(in); Init(fg_name); delete fg_name; } void BitmapGraphic::Write (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); catalog->WriteString(_fg_name, out); } ClassId BitmapGraphic::GetClassId () { return BITMAP_GRAPHIC; } PSPattern* BitmapGraphic::GetPattern () { return pssolid; } void BitmapGraphic::draw (Canvas* c, Graphic* gs) { int w, h; w = _fg_map->pwidth(); h = _fg_map->pheight(); update(gs); _p->ClearRect(c, 0, 0, w, h); _p->Stencil(c, pad/2, pad/2, _fg_map); } void BitmapGraphic::drawClipped ( Canvas* c, Coord l, Coord b, Coord r, Coord t, Graphic* gs ) { Graphic::drawClipped(c, l, b, r, t, gs); }