[BACK]Return to GnuView.m CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / NeXT

Annotation of OpenXM_contrib/gnuplot/NeXT/GnuView.m, Revision 1.1

1.1     ! maekawa     1: #import "GnuView.h"
        !             2:
        !             3:
        !             4: @implementation GnuView
        !             5:
        !             6: static NXCoord xsize= NEXT_XMAX;
        !             7: static NXCoord ysize= NEXT_YMAX;
        !             8:
        !             9: static int printing;
        !            10: static void setprintsize();
        !            11:
        !            12: - initFrame: (NXRect *)rects
        !            13: {
        !            14:     [super initFrame:rects];
        !            15:
        !            16:        PSstring = NULL;
        !            17:        [self display];
        !            18:
        !            19:        return self;
        !            20: }
        !            21:
        !            22:
        !            23:        /* This is here to fix NeXT bug # 21973:  failure to free D.O. memory */
        !            24:        /* Note:  personally I don't think this fixes it. */
        !            25: - free
        !            26: {
        !            27:        if (PSstring) free(PSstring);
        !            28:        [super free];
        !            29:
        !            30:        return self;
        !            31:
        !            32: }
        !            33:
        !            34: - executePS:(char *) PStext
        !            35: {
        !            36:        if (PSstring) free(PSstring);
        !            37:        PSstring = PStext;
        !            38:
        !            39:        [window makeKeyAndOrderFront:self];
        !            40:
        !            41:        [self display];
        !            42:
        !            43:        return self;
        !            44: }
        !            45:
        !            46:
        !            47: - drawSelf:(const NXRect *) rects : (int) rectCount
        !            48: {
        !            49:     DPSContext d;
        !            50:
        !            51:     d = DPSGetCurrentContext();
        !            52:
        !            53:        if (!printing) {
        !            54:                                                        /* Clear Screen */
        !            55:                PSsetgray(NX_WHITE);
        !            56:                NXRectFill(&bounds);
        !            57:                                                        /* scale to gnuplot coords */
        !            58:                [self setDrawSize:xsize:ysize];
        !            59:        }
        !            60:        else {
        !            61:                setprintsize();
        !            62:        }
        !            63:
        !            64:        if (PSstring) DPSWritePostScript(d, PSstring, strlen(PSstring));
        !            65:
        !            66:     DPSFlushContext(d);
        !            67:
        !            68:        return self;
        !            69: }
        !            70:
        !            71:
        !            72: - printPSCode: sender
        !            73: {
        !            74:        printing = 1;
        !            75:        [super printPSCode:sender];
        !            76:        printing = 0;
        !            77:
        !            78:        return self;
        !            79: }
        !            80:
        !            81: static void setprintsize()
        !            82: {
        !            83:        DPSContext d;
        !            84:        NXRect *paperRect;
        !            85:        float width, height;
        !            86:        id prInfo;
        !            87:        float xscale, yscale;
        !            88:
        !            89:     d = DPSGetCurrentContext();
        !            90:        prInfo = [NXApp printInfo];
        !            91:        paperRect = (NXRect *) [prInfo paperRect];
        !            92:
        !            93:        width = paperRect->size.width;
        !            94:        height = paperRect->size.height;
        !            95:
        !            96:                                                        /* Leave margins on paper */
        !            97:
        !            98:        DPSPrintf(d, "grestore\ngrestore\ngrestore\n");
        !            99:
        !           100:
        !           101:        if ([prInfo orientation] == NX_LANDSCAPE) {
        !           102:                DPSPrintf(d, "-90 rotate\n");
        !           103:                DPSPrintf(d, "%g 0 translate\n", -1 * paperRect->size.width);
        !           104:                DPSPrintf(d, "0 %g translate\n", paperRect->size.height/100);
        !           105:
        !           106:                xscale = width/NEXT_XMAX*0.95;
        !           107:                yscale = height/NEXT_YMAX*0.9;
        !           108:                DPSPrintf(d, "%g %g scale\n", xscale, yscale);
        !           109:        }
        !           110:        else {
        !           111:                xscale = width/NEXT_XMAX*0.95;
        !           112:                yscale = height/NEXT_YMAX*0.95;
        !           113:                DPSPrintf(d, "%g %g scale\n", xscale, yscale);
        !           114:                DPSPrintf(d, "0 %g translate\n", paperRect->size.height/100);
        !           115:        }
        !           116:
        !           117:        DPSPrintf(d, "gsave\ngsave\n");
        !           118:
        !           119:     DPSFlushContext(d);
        !           120:
        !           121:        return;
        !           122: }
        !           123:
        !           124:
        !           125:
        !           126: @end
        !           127:
        !           128:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>