|
|
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: 3952 (0xf70)
Types: TextFile
Names: »ibrubrect.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5
└─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00«
└─⟦de8ce1454⟧
└─⟦this⟧ »contrib/lib/iv/src/bin/ibuild/ibrubrect.c«
/*
* Copyright (c) 1987, 1988, 1989 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.
*/
/*
* Rubberbanding rectangles.
*/
#include "ibrubrect.h"
#include <InterViews/minmax.h>
#include <InterViews/painter.h>
#include <math.h>
#include <stdlib.h>
/**************************************************************************/
ConstrainRect::ConstrainRect (
Painter* p, Canvas* c, Coord x0, Coord y0, Coord x1, Coord y1,
Coord offx, Coord offy, int xcon, int ycon
) : RubberRect(p, c, x0, y0, x1, y1, offx, offy) {
_xcon = xcon;
_ycon = ycon;
}
void ConstrainRect::GetCurrent (Coord& l, Coord& b, Coord& r, Coord& t) {
if (trackx > fixedx && tracky > fixedy) {
NorthEast(trackx, tracky);
} else if (trackx > fixedx && tracky < fixedy) {
SouthEast(trackx, tracky);
} else if (trackx < fixedx && tracky > fixedy) {
NorthWest(trackx, tracky);
} else {
SouthWest(trackx, tracky);
}
RubberRect::GetCurrent(l, b, r, t);
}
void ConstrainRect::NorthEast(Coord x, Coord y) {
trackx = ((x-fixedx) > _xcon ) ? x : fixedx + _xcon;
tracky = ((y-fixedy) > _ycon ) ? y : fixedy + _ycon;
}
void ConstrainRect::SouthEast(Coord x, Coord y) {
trackx = ((x-fixedx) > _xcon ) ? x : fixedx + _xcon;
tracky = ((fixedy-y) > _ycon ) ? y : fixedy - _ycon;
}
void ConstrainRect::NorthWest(Coord x, Coord y) {
trackx = ((fixedx-x) > _xcon ) ? x : fixedx - _xcon;
tracky = ((y-fixedy) > _ycon ) ? y : fixedy + _ycon;
}
void ConstrainRect::SouthWest(Coord x, Coord y) {
trackx = ((fixedx-x) > _xcon ) ? x : fixedx - _xcon;
tracky = ((fixedy-y) > _ycon ) ? y : fixedy - _ycon;
}
/**************************************************************************/
ConstrainScaleRect::ConstrainScaleRect (
Painter* p, Canvas* c, Coord x0, Coord y0, Coord x1, Coord y1,
Coord cx, Coord cy, Coord offx, Coord offy
) : ScalingRect(p, c, x0, y0, x1, y1, cx, cy, offx, offy) {}
void ConstrainScaleRect::GetCurrent (
Coord& x0, Coord& y0, Coord& x1, Coord& y1
) {
double xfactor = XScaling();
double yfactor = YScaling();
xfactor = (xfactor < 1.0) ? 1.0 : xfactor;
yfactor = (yfactor < 1.0) ? 1.0 : yfactor;
x0 = round(double(fixedx - centerx) * xfactor) + centerx;
y0 = round(double(fixedy - centery) * yfactor) + centery;
x1 = round(double(movingx - centerx) * xfactor) + centerx;
y1 = round(double(movingy - centery) * yfactor) + centery;
}
float ConstrainScaleRect::XScaling () {
Coord dx;
double factor = 1;
dx = abs(trackx - centerx);
if (width != 0) {
factor = double(2 * dx) / double(width);
}
return factor;
}
float ConstrainScaleRect::YScaling () {
Coord dy;
double factor = 1;
dy = abs(tracky - centery);
if (height != 0) {
factor = double(2 * dy) / double(height);
}
return factor;
}