/* * Copyright (c) 1991 David A. Curry * Copyright (c) 1996 Michael J. Hammel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * template.c - code for the plaid widget. * * You can get David A. Curry's original public domain version on : * ftp://ftp.ers.ibm.com/pub/davy/xpostit3.3.2.tar.gz * */ #include #include #include "plaid.h" #define plaid_width 22 #define plaid_height 22 /* * The bits representing the plaid background. */ static char plaid_bits[] = { 0x75, 0xfd, 0x3f, 0xaa, 0xfa, 0x3e, 0x75, 0xfd, 0x3f, 0xaa, 0xfa, 0x3e, 0x75, 0xfd, 0x3f, 0xff, 0x57, 0x15, 0x75, 0xfd, 0x3f, 0xaa, 0xfa, 0x3e, 0x75, 0xfd, 0x3f, 0xaa, 0xfa, 0x3e, 0x75, 0xfd, 0x3f, 0x20, 0xa8, 0x2b, 0x20, 0x50, 0x15, 0x20, 0xa8, 0x2b, 0x20, 0x50, 0x15, 0x20, 0xa8, 0x2b, 0xff, 0xff, 0x3f, 0x20, 0xa8, 0x2b, 0x20, 0x50, 0x15, 0x20, 0xa8, 0x2b, 0x20, 0x50, 0x15, 0x20, 0xa8, 0x2b }; /* * The resources specific to the plaid widget. */ static XtResource resources[] = { #define offset(field) XtOffset(PlaidWidget,plaid.field) { XtNlowerCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), offset(lower_callback), XtRCallback, NULL }, { XtNraiseCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), offset(raise_callback), XtRCallback, NULL }, { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), offset(foreground), XtRString, "XtDefaultForeground" } #undef offset }; /***************************************************************************** * Plaid Widget Routines *****************************************************************************/ /* * RaiseAction - called when raise button is pressed. */ static void RaiseAction(w, event, params, num_params) Cardinal *num_params; /* unused */ String *params; /* unused */ XEvent *event; Widget w; { /* * Just pass it off to the user's callback function. */ XtCallCallbacks(w, XtNraiseCallback, (caddr_t) event); } /* * LowerAction - called when lower button is pressed. */ static void LowerAction(w, event, params, num_params) Cardinal *num_params; /* unused */ String *params; /* unused */ XEvent *event; Widget w; { /* * Just pass it off to the user's callback function. */ XtCallCallbacks(w, XtNlowerCallback, (caddr_t) event); } /* * RealizePlaid - realize the window by creating it, and by creating the * plaid background pixmap. */ static void RealizePlaid(w, value_mask, attributes) XSetWindowAttributes *attributes; Mask *value_mask; Widget w; { Pixmap p; Window window; Display *display; PlaidWidget plaidw; plaidw = (PlaidWidget) w; /* * Create the window. */ XtCreateWindow(w, (unsigned int) InputOutput, (Visual *) CopyFromParent, *value_mask, attributes); display = XtDisplay(w); window = XtWindow(w); /* * Create the plaid pixmap. */ p = XCreatePixmapFromBitmapData(display, window, plaid_bits, plaid_width, plaid_height, plaidw->plaid.foreground, w->core.background_pixel, w->core.depth); /* * Tile the window. */ XSetWindowBackgroundPixmap(display, window, p); /* * Now save the pixmap in the core widget. */ w->core.background_pixmap = p; } /* * DestroyPlaid - free up server resources when widget is destroyed. */ static void DestroyPlaid(w) Widget w; { /* * All we need to do is get rid of the pixmap we created. */ XFreePixmap(XtDisplay(w), w->core.background_pixmap); } /***************************************************************************** * Plaid Widget definitions *****************************************************************************/ /* * Action table. We're only interested in button presses. */ static XtActionsRec actions[] = { { "raise", RaiseAction }, { "lower", LowerAction } }; /* * Translation table. We're only interested in button presses. */ static char translations[] = ": XawPositionSimpleMenu(Menu) MenuPopup(Menu) \n\ : lower() \n\ : raise() \n\ "; /* * The plaid widget class record. Initialization of values. */ PlaidClassRec plaidClassRec = { { /* core fields */ /* superclass */ (WidgetClass) &widgetClassRec, /* class_name */ "Plaid", /* widget_size */ sizeof(PlaidRec), /* class_initialize */ NULL, /* class_part_initialize */ NULL, /* class_inited */ FALSE, /* initialize */ NULL, /* initialize_hook */ NULL, /* realize */ RealizePlaid, /* actions */ actions, /* num_actions */ XtNumber(actions), /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ TRUE, /* compress_exposure */ TRUE, /* compress_enterleave */ TRUE, /* visible_interest */ FALSE, /* destroy */ DestroyPlaid, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_private */ NULL, /* tm_table */ translations, /* query_geometry */ XtInheritQueryGeometry, /* display_accelerator */ XtInheritDisplayAccelerator, /* extension */ NULL }, { /* plaid fields */ /* empty */ 0 } }; /* * The class declaration. */ WidgetClass plaidWidgetClass = (WidgetClass)&plaidClassRec;