diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/hyper/titlebar.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/hyper/titlebar.pamphlet')
-rw-r--r-- | src/hyper/titlebar.pamphlet | 398 |
1 files changed, 398 insertions, 0 deletions
diff --git a/src/hyper/titlebar.pamphlet b/src/hyper/titlebar.pamphlet new file mode 100644 index 00000000..1808cc63 --- /dev/null +++ b/src/hyper/titlebar.pamphlet @@ -0,0 +1,398 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/titlebar} +\author{The Axiom Team} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{titlebar.h} +<<titlebar.h>>= +<<license>> +#ifndef _TITLEBAR_H_ +#define _TITLEBAR_H_ 1 + +#include "hyper.h" + +extern int twwidth, twheight; /* the width and height for all windows in the */ + /* title bar */ + +#endif +@ +\section{titlebar.c} +<<titlebar.c>>= +/****************************************************************************** + * + * titlebar.c: Produces HyperDoc titlebar + * + * Copyright The Numerical Algorithms Group Limited 1991, 1992, 1993. + * + ****************************************************************************/ +#define _TITLEBAR_C +#include "axiom-c-macros.h" +#include "useproto.h" +#include "debug.h" + +#include <stdlib.h> + +#include "titlebar.h" +#include "display.h" +#include "group.h" +#include "initx.h" +#include "show-types.h" +#include "parse.h" + +#include "all_hyper_proto.H1" + +extern int y_off; /* y offset for scrolling regions */ + +/* Images for the title bar windows */ + +static XImage *tw1image = NULL, + *tw2image = NULL, + *tw3image = NULL, + *tw4image = NULL, + *noopimage = NULL; + +/* #undef BITMAPS2D to get old style 2d effect */ + +#ifdef BITMAPS2D + +static char *tw1file = "exit.bitmap"; +static char *tw2file = "help2.bitmap"; +static char *tw3file = "return3.bitmap"; +static char *tw4file = "up3.bitmap"; +static char *noopfile = "noop.bitmap"; + +#define BACKCOLOR gBackgroundColor +#define BUTTGC fStandardGC + +#else + +static char *tw1file = "exit3d.bitmap"; +static char *tw2file = "help3d.bitmap"; +static char *tw3file = "home3d.bitmap"; +static char *tw4file = "up3d.bitmap"; +static char *noopfile = "noop3d.bitmap"; + +#define BACKCOLOR gControlBackgroundColor +#define BUTTGC fControlGC + +#endif + + +int twwidth, twheight; /* the width and height for all windows in the */ + /* title bar */ + +void +makeTitleBarWindows(void) +{ + XSetWindowAttributes at; + unsigned long valuemask = 0L; + + /* read the images if we don't have them already */ + + if (tw1image == NULL) + readTitleBarImages(); + + /* set the window attributes */ + + at.cursor = gActiveCursor; + valuemask |= CWCursor; + at.event_mask = ButtonPress; + valuemask |= CWEventMask; + + /* create the windows for the buttons */ + + gWindow->fTitleBarButton1 = XCreateSimpleWindow(gXDisplay, gWindow->fMainWindow, + 1, 1, twwidth, twheight, + 0, gBorderColor, BACKCOLOR); + XChangeWindowAttributes(gXDisplay, gWindow->fTitleBarButton1, valuemask, &at); + + gWindow->fTitleBarButton2 = XCreateSimpleWindow(gXDisplay, gWindow->fMainWindow, + 1, 1, twwidth, twheight, + 0, gBorderColor, BACKCOLOR); + XChangeWindowAttributes(gXDisplay, gWindow->fTitleBarButton2, valuemask, &at); + + gWindow->fTitleBarButton3 = XCreateSimpleWindow(gXDisplay, gWindow->fMainWindow, + 1, 1, twwidth, twheight, + 0, gBorderColor, BACKCOLOR); + XChangeWindowAttributes(gXDisplay, gWindow->fTitleBarButton3, valuemask, &at); + + gWindow->fTitleBarButton4 = XCreateSimpleWindow(gXDisplay, gWindow->fMainWindow, + 1, 1, twwidth, twheight, + 0, gBorderColor, BACKCOLOR); + XChangeWindowAttributes(gXDisplay, gWindow->fTitleBarButton4, valuemask, &at); +} + +void +showTitleBar(void) +{ + XWindowChanges wc; + int height, hbw = (int) gWindow->border_width / 2; + XImage *image; + + /* + * the first thing we do is pop up all the windows and + * place them properly + */ + + if (gWindow->page->title->height != twheight) + height = gWindow->page->title->height; + else + height = twheight; + + push_active_group(); + + /* configure and map button number 1 */ + + wc.x = 0; + wc.y = 0; + wc.height = twheight; + wc.width = twwidth; + XConfigureWindow(gXDisplay, gWindow->fTitleBarButton1, CWX | CWY | CWHeight | CWWidth, &wc); + XMapWindow(gXDisplay, gWindow->fTitleBarButton1); + + image = tw1image; + XPutImage(gXDisplay, gWindow->fTitleBarButton1, gWindow->BUTTGC, + image, 0, 0, 0, 0, + image->width, + image->height); + + /* configure and map button number 2 */ + + wc.x += twwidth + gWindow->border_width; + XConfigureWindow(gXDisplay, gWindow->fTitleBarButton2, CWX | CWY | CWHeight | CWWidth, &wc); + XMapWindow(gXDisplay, gWindow->fTitleBarButton2); + + image = need_help_button ? tw2image : noopimage; + XPutImage(gXDisplay, gWindow->fTitleBarButton2, gWindow->BUTTGC, + image, 0, 0, 0, 0, + image->width, + image->height); + + /* configure and map button number 4 */ + + wc.x = gWindow->width - twwidth; + XConfigureWindow(gXDisplay, gWindow->fTitleBarButton4, CWX | CWY | CWHeight | CWWidth, &wc); + XMapWindow(gXDisplay, gWindow->fTitleBarButton4); + + image = need_up_button ? tw4image : noopimage; + XPutImage(gXDisplay, gWindow->fTitleBarButton4, gWindow->BUTTGC, + image, 0, 0, 0, 0, + image->width, + image->height); + + /* configure and map button number 3 */ + + wc.x = wc.x - twwidth - gWindow->border_width; + XConfigureWindow(gXDisplay, gWindow->fTitleBarButton3, CWX | CWY | CWHeight | CWWidth, &wc); + XMapWindow(gXDisplay, gWindow->fTitleBarButton3); + + image = need_return_button ? tw3image : noopimage; + XPutImage(gXDisplay, gWindow->fTitleBarButton3, gWindow->BUTTGC, + image, 0, 0, 0, 0, + image->width, + image->height); + + gWindow->fDisplayedWindow = gWindow->fMainWindow; + gDisplayRegion = Title; + gRegionOffset = 0; + y_off = 0; + + pop_group_stack(); + + show_text(gWindow->page->title->next, Endheader); + + /* Now draw the box around the title */ + + line_top_group(); + +#if BITMAPS2D + XDrawRectangle(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, gWindow->page->title->x, + -hbw, + wc.x - gWindow->page->title->x - hbw, + height + 2 * hbw); +#endif + + XDrawLine(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, 0, height + hbw, + gWindow->width, height + hbw); + +#if BITMAPS2D + /* Now draw the lines down the middle */ + + XDrawLine(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, + twwidth + hbw, 0, + twwidth + hbw, height); + XDrawLine(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, + gWindow->width - twwidth - hbw, 0, + gWindow->width - twwidth - hbw, height); +#endif + + pop_group_stack(); + +#if BITMAPS2D + /* now fill the areas under the bitmaps if we have to */ + + if (gWindow->page->title->height > twheight) { + push_active_group(); + height = height - twheight; + + XFillRectangle(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, 0, + twheight, twwidth, height); + XFillRectangle(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, + twwidth + gWindow->border_width, + twheight, twwidth, height); + XFillRectangle(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, + gWindow->width - 2 * twwidth - gWindow->border_width, + twheight, twwidth, height); + XFillRectangle(gXDisplay, gWindow->fMainWindow, gWindow->fStandardGC, + gWindow->width - twwidth, + twheight, twwidth, height); + pop_group_stack(); + } +#endif +} + +void +linkTitleBarWindows(void) +{ + HyperLink *tw1link = (HyperLink *) halloc(sizeof(HyperLink), "HyperLink"), + *tw2link = (HyperLink *) halloc(sizeof(HyperLink), "HyperLink"), + *tw3link = (HyperLink *) halloc(sizeof(HyperLink), "HyperLink"), + *tw4link = (HyperLink *) halloc(sizeof(HyperLink), "HyperLink"); + + tw1link->win = gWindow->fTitleBarButton1; + tw1link->type = Quitbutton; + tw1link->reference.node = NULL; + tw1link->x = tw1link->y = 0; + + tw2link->win = gWindow->fTitleBarButton2; + tw2link->type = Helpbutton; + tw2link->reference.node = NULL; + tw2link->x = tw2link->y = 0; + + tw3link->win = gWindow->fTitleBarButton3; + tw3link->type = Returnbutton; + tw3link->reference.node = NULL; + tw3link->x = tw3link->y = 0; + + tw4link->win = gWindow->fTitleBarButton4; + tw4link->type = Upbutton; + tw4link->reference.node = NULL; + tw4link->x = tw4link->y = 0; + + hash_insert(gLinkHashTable, (char *)tw1link,(char *) &tw1link->win); + hash_insert(gLinkHashTable, (char *)tw2link,(char *) &tw2link->win); + hash_insert(gLinkHashTable, (char *)tw3link,(char *) &tw3link->win); + hash_insert(gLinkHashTable, (char *)tw4link,(char *) &tw4link->win); +} + +static void +readTitleBarImages(void) +{ + int w, h; + char filename[128]; + char *axiomEnvVar = NULL; + + axiomEnvVar = getenv("AXIOM"); + + if (axiomEnvVar) + sprintf(filename, "%s/share/hypertex/bitmaps/%s", axiomEnvVar, tw1file); + else + sprintf(filename, "%s", tw1file); + tw1image = HTReadBitmapFile(gXDisplay, gXScreenNumber, filename, + &twwidth, &twheight); + + if (axiomEnvVar) + sprintf(filename, "%s/share/hypertex/bitmaps/%s", axiomEnvVar, tw2file); + else + sprintf(filename, "%s", tw2file); + tw2image = HTReadBitmapFile(gXDisplay, gXScreenNumber, filename, + &w, &h); + twwidth = ((twwidth >= w) ? (twwidth) : (w)); + + if (axiomEnvVar) + sprintf(filename, "%s/share/hypertex/bitmaps/%s", axiomEnvVar, tw3file); + else + sprintf(filename, "%s", tw3file); + tw3image = HTReadBitmapFile(gXDisplay, gXScreenNumber, filename, + &w, &h); + twwidth = ((twwidth >= w) ? (twwidth) : (w)); + + if (axiomEnvVar) + sprintf(filename, "%s/share/hypertex/bitmaps/%s", axiomEnvVar, tw4file); + else + sprintf(filename, "%s", tw4file); + tw4image = HTReadBitmapFile(gXDisplay, gXScreenNumber, filename, + &w, &h); + twwidth = ((twwidth >= w) ? (twwidth) : (w)); + + + if (axiomEnvVar) + sprintf(filename, "%s/share/hypertex/bitmaps/%s", axiomEnvVar, noopfile); + else + sprintf(filename, "%s", noopfile); + noopimage = HTReadBitmapFile(gXDisplay, gXScreenNumber, filename, + &twwidth, &twheight); +} + +void +getTitleBarMinimumSize(int *width, int *height) +{ + (*width) = 4 * twwidth + 40; + (*height) = twheight + 2; +} +@ +\section{License} +<<license>>= +/* +Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of The Numerical ALgorithms Group Ltd. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +@ +<<*>>= +<<license>> +<<titlebar.c>> +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} + + + + |