summaryrefslogtreecommitdiffstats
path: root/tksao/util/grid25dbase.C
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 18:59:29 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 18:59:29 (GMT)
commitd4d595fa7fb12903db9227d33d48b2b00120dbd1 (patch)
tree7d18365de0d6d1b29399b6a17c7eb01c2eb3ed49 /tksao/util/grid25dbase.C
parent949f96e29bfe0bd8710d775ce220e597064e2589 (diff)
downloadblt-d4d595fa7fb12903db9227d33d48b2b00120dbd1.zip
blt-d4d595fa7fb12903db9227d33d48b2b00120dbd1.tar.gz
blt-d4d595fa7fb12903db9227d33d48b2b00120dbd1.tar.bz2
Initial commit
Diffstat (limited to 'tksao/util/grid25dbase.C')
-rw-r--r--tksao/util/grid25dbase.C191
1 files changed, 191 insertions, 0 deletions
diff --git a/tksao/util/grid25dbase.C b/tksao/util/grid25dbase.C
new file mode 100644
index 0000000..95faf7f
--- /dev/null
+++ b/tksao/util/grid25dbase.C
@@ -0,0 +1,191 @@
+// Copyright (C) 1999-2016
+// Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+// For conditions of distribution and use, see copyright notice in "copyright"
+
+#include "grid25dbase.h"
+#include "attribute.h"
+#include "widget.h"
+#include "frame3dbase.h"
+
+extern "C" {
+ #include "ast.h"
+ #include "grf.h"
+}
+
+Grid25dBase* astGrid25dPtr = NULL;
+
+Grid25dBase::Grid25dBase(Widget* p) : GridBase(p)
+{}
+
+Grid25dBase::Grid25dBase(Widget* p, const char* o) : GridBase(p,o)
+{}
+
+Grid25dBase::~Grid25dBase()
+{}
+
+int Grid25dBase::gLine(int n, float* x, float* y)
+{
+ Frame3dBase* pp = (Frame3dBase*)parent_;
+ float xx[n];
+ float yy[n];
+
+ for (int ii=0; ii<n; ii++) {
+ Vector vv = pp->mapFromRef(Vector(x[ii],y[ii]),Coord::WIDGET);
+ xx[ii] = vv[0];
+ yy[ii] = vv[1];
+ }
+
+ switch (renderMode_) {
+ case X11:
+ x11Line(n,xx,yy);
+ break;
+ case PS:
+ psLine(n,xx,yy);
+ break;
+ case MACOSX:
+#ifdef MAC_OSX_TK
+ macosxLine(n,xx,yy);
+#endif
+ break;
+ case GWIN32:
+#ifdef __WIN32
+ win32Line(n,xx,yy);
+#endif
+ break;
+ }
+
+ return 1;
+}
+
+int Grid25dBase::gQch(float* chv, float* chh)
+{
+ Tk_Font font =NULL;
+ switch (renderMode_) {
+ case X11:
+ font = text_->tkfont();
+ break;
+ case PS:
+ font = text_->psfont();
+ break;
+ case MACOSX:
+#ifdef MAC_OSX_TK
+ font = text_->tkfont();
+#endif
+ break;
+ case GWIN32:
+#ifdef __WIN32
+ font = text_->tkfont();
+#endif
+ break;
+ }
+
+ if (font) {
+ Tk_FontMetrics metrics;
+ Tk_GetFontMetrics(font, &metrics);
+
+ *chv = (float)metrics.linespace;
+ *chh = (float)metrics.linespace;
+ return 1;
+ }
+ else {
+ *chv = *chh = 0;
+ return 0;
+ }
+}
+
+int Grid25dBase::gText(const char* txt, float x, float y, const char* just,
+ float upx, float upy)
+{
+ if (!(txt && txt[0] && just && just[0] && just[1]))
+ return 0;
+
+ Frame3dBase* pp = (Frame3dBase*)parent_;
+ Vector vv = pp->mapFromRef(Vector(x,y),Coord::WIDGET);
+
+ switch (renderMode_) {
+ case X11:
+ return x11Text(txt,vv[0],vv[1],just,Vector(0,1));
+ case PS:
+ return psText(txt,vv[0],vv[1],just,Vector(0,1));
+ case MACOSX:
+#ifdef MAC_OSX_TK
+ return macosxText(txt,vv[0],vv[1],just,Vector(0,1));
+#endif
+ break;
+ case GWIN32:
+#ifdef __WIN32
+ return win32Text(txt,vv[0],vv[1],just,Vector(0,1));
+#endif
+ break;
+ }
+
+ return 0;
+}
+
+int Grid25dBase::gTxExt(const char* txt, float x, float y, const char* just,
+ float upx, float upy, float* xb, float* yb)
+{
+ if (!(txt && txt[0] && just)) {
+ xb[0] = xb[1] = xb[2] = xb[3] = 0;
+ yb[0] = yb[1] = yb[2] = yb[3] = 0;
+
+ return 0;
+ }
+
+ Tk_Font font =NULL;
+
+ switch (renderMode_) {
+ case X11:
+ font = text_->tkfont();
+ break;
+ case PS:
+ font = text_->psfont();
+ break;
+ case MACOSX:
+#ifdef MAC_OSX_TK
+ font = text_->tkfont();
+#endif
+ break;
+ case GWIN32:
+#ifdef __WIN32
+ font = text_->tkfont();
+#endif
+ break;
+ }
+
+ if (!font)
+ return 0;
+
+ Frame3dBase* pp = (Frame3dBase*)parent_;
+ Vector vv = pp->mapFromRef(Vector(x,y),Coord::WIDGET);
+
+ double angle = 0;
+ Vector cc = vv * calcTextPos(vv, angle, txt, just, Vector(0, 1), font);
+
+ Tk_FontMetrics metrics;
+ Tk_GetFontMetrics(font, &metrics);
+ int width = Tk_TextWidth(font, txt, strlen(txt));
+
+ BBox nn = BBox(Vector(0,-metrics.descent), Vector(width,metrics.ascent));
+ BBox bb = nn * Rotate(angle) * Translate(cc);
+
+ xb[0] = bb.ll[0];
+ yb[0] = bb.ll[1];
+
+ xb[1] = bb.ur[0];
+ yb[1] = bb.ll[1];
+
+ xb[2] = bb.ur[0];
+ yb[2] = bb.ur[1];
+
+ xb[3] = bb.ll[0];
+ yb[3] = bb.ur[1];
+
+ return 1;
+}
+
+int Grid25dBase::gScales(float* alpha, float* beta)
+{
+ return 1;
+}
+