|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T x
Length: 5031 (0x13a7) Types: TextFile Names: »xbitmap6.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦2ca9b63e1⟧ »./contrib-1/contrib-1.00« └─⟦a8392fb20⟧ └─⟦this⟧ »contrib/examples/OReilly/Vol4/ch04/xbitmap6.c«
/* * Copyright 1989 O'Reilly and Associates, Inc. * See ../Copyright for complete rights and liability information. */ /* * xbitmap6.c */ #include <X11/Intrinsic.h> #include <X11/StringDefs.h> #include <X11/Xaw/Form.h> #include <X11/Xaw/Label.h> #include <X11/Xaw/Box.h> #include <X11/Xaw/Command.h> #include "BitmapEdit.h" #include <stdio.h> #define DRAWN 1 #define UNDRAWN 0 GC draw_gc, undraw_gc; Pixmap normal_bitmap, reverse_bitmap; Widget bigBitmap, showNormalBitmap, showReverseBitmap; Dimension pixmap_width_in_cells, pixmap_height_in_cells; static void cell_toggled(); /* ARGSUSED */ static void Printout(widget, client_data, call_data) Widget widget; XtPointer client_data; /* cast to bigBitmap */ XtPointer call_data; /* unused */ { Widget bigBitmap = (Widget) client_data; int x, y; char *cell; cell = BitmapEditGetArrayString(bigBitmap); (void) putchar('\n'); for (y = 0; y < pixmap_height_in_cells; y++) { for (x = 0; x < pixmap_width_in_cells; x++) (void) putchar(cell[x + y * pixmap_width_in_cells] ? '1' : '0'); (void) putchar('\n'); } (void) putchar('\n'); } static void redraw_small_picture(w) Widget w; { /* Tell Label widget to redraw itself */ XClearArea(XtDisplay(w), XtWindow(w), 0, 0, 10000, 10000, True); } main(argc, argv) int argc; char *argv[]; { XtAppContext app_context; Widget topLevel, form, buttonbox, quit, output; extern exit(); static XrmOptionDescRec table[] = { {"-pw", "*pixmapWidthInCells", XrmoptionSepArg, NULL}, {"-pixmapwidth", "*pixmapWidthInCells", XrmoptionSepArg, NULL}, {"-ph", "*pixmapHeightInCells", XrmoptionSepArg, NULL}, {"-pixmapheight", "*pixmapHeightInCells", XrmoptionSepArg, NULL}, {"-cellsize", "*cellSizeInPixels", XrmoptionSepArg, NULL}, }; topLevel = XtVaAppInitialize( &app_context, /* Application context */ "XBitmap6", /* Application class */ table, XtNumber(table), /* command line option list */ &argc, argv, /* command line args */ NULL, /* for missing app-defaults file */ NULL); /* terminate varargs list */ form = XtCreateManagedWidget("form", formWidgetClass, topLevel, NULL, 0); buttonbox = XtCreateManagedWidget("buttonbox", boxWidgetClass, form, NULL, 0); output = XtCreateManagedWidget("output", commandWidgetClass, buttonbox, NULL, 0); quit = XtCreateManagedWidget("quit", commandWidgetClass, buttonbox, NULL, 0); XtAddCallback(quit, XtNcallback, exit, NULL); bigBitmap = XtCreateManagedWidget("bigBitmap", bitmapEditWidgetClass, form, NULL, 0); XtAddCallback(output, XtNcallback, Printout, bigBitmap); XtAddCallback(bigBitmap, XtNcallback, cell_toggled, NULL); XtVaGetValues(bigBitmap, XtNpixmapHeightInCells, &pixmap_height_in_cells, XtNpixmapWidthInCells, &pixmap_width_in_cells, NULL); set_up_things(topLevel); showNormalBitmap = XtVaCreateManagedWidget("showNormalBitmap", labelWidgetClass, buttonbox, XtNbitmap, normal_bitmap, NULL); showReverseBitmap = XtVaCreateManagedWidget("showReverseBitmap", labelWidgetClass, buttonbox, XtNbitmap, reverse_bitmap, NULL); XtRealizeWidget(topLevel); XtAppMainLoop(app_context); } set_up_things(w) Widget w; { XGCValues values; normal_bitmap = XCreatePixmap(XtDisplay(w), RootWindowOfScreen(XtScreen(w)), pixmap_width_in_cells, pixmap_height_in_cells, 1); reverse_bitmap = XCreatePixmap(XtDisplay(w), RootWindowOfScreen(XtScreen(w)), pixmap_width_in_cells, pixmap_height_in_cells, 1); values.foreground = 1; values.background = 0; /* note that normal_bitmap is used as the drawable because it * is one bit deep. The root window may not be one bit deep */ draw_gc = XCreateGC(XtDisplay(w), normal_bitmap, GCForeground | GCBackground, &values); XFillRectangle(XtDisplay(w), normal_bitmap, draw_gc, 0, 0, pixmap_width_in_cells + 1, pixmap_height_in_cells + 1); values.foreground = 0; values.background = 1; undraw_gc = XCreateGC(XtDisplay(w), reverse_bitmap, GCForeground | GCBackground, &values); XFillRectangle(XtDisplay(w), reverse_bitmap, undraw_gc, 0, 0, pixmap_width_in_cells + 1, pixmap_height_in_cells + 1); } /* ARGSUSED */ static void cell_toggled(w, client_data, info) Widget w; XtPointer client_data; /* unused */ XtPointer info; { BitmapEditPointInfo *cur_info = (BitmapEditPointInfo *) info; /* * Note, BitmapEditPointInfo is defined in BitmapEdit.h */ XDrawPoint(XtDisplay(w), normal_bitmap, ((cur_info->mode == UNDRAWN) ? draw_gc : undraw_gc), cur_info->newx, cur_info->newy); XDrawPoint(XtDisplay(w), reverse_bitmap, ((cur_info->mode == UNDRAWN) ? undraw_gc : draw_gc), cur_info->newx, cur_info->newy); redraw_small_picture(showNormalBitmap); redraw_small_picture(showReverseBitmap); }