1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// rubbertext.C
/******************************************************************************
*
* MiXViews - an X window system based sound & data editor/processor
*
* Copyright (c) 1993, 1994 Regents of the University of California
*
* Author: Douglas Scott
* Date: December 13, 1994
*
* Permission to use, copy and modify this software and its documentation
* for research and/or educational purposes and without fee is hereby granted,
* provided that the above copyright notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation. The author reserves the right to distribute this
* software and its documentation. The University of California and the author
* make no representations about the suitability of this software for any
* purpose, and in no event shall University of California be liable for any
* damage, loss of data, or profits resulting from its use.
* It is provided "as is" without express or implied warranty.
*
******************************************************************************/
#ifdef __GNUG__
#pragma implementation
#endif
#include <InterViews/painter.h>
#include "rubbertext.h"
static const int MaxRubberTextLen = 64;
inline void
RubberText::setText(const char *t) {
strcpy(oldstring, string);
strcpy(string, t);
}
RubberText::RubberText(Painter *p, Canvas *c, Coord x, Coord y,
const char *text) : Rubberband(p, c, x, y), erasing(false) {
string = new char[MaxRubberTextLen];
*string = '\0';
oldstring = new char[MaxRubberTextLen];
setText(text ? text : "");
}
RubberText::~RubberText() {
delete [] string;
delete [] oldstring;
}
void
RubberText::SetPainter(Painter* p) {
Rubberband::SetPainter(p);
}
void
RubberText::Draw() {
if (!drawn) {
output->Text(canvas, erasing ? oldstring : string,
trackx+offx, tracky+offy);
drawn = true;
}
}
void
RubberText::Erase() {
erasing = true;
Rubberband::Erase();
erasing = false;
}
void
RubberText::Track(const char *t, Coord x, Coord y) {
trackx = -1000; tracky = -1000; // reset to allow redraw without motion
setText(t);
Rubberband::Track(x, y);
}
|