home *** CD-ROM | disk | FTP | other *** search
/ vsiftp.vmssoftware.com / VSIPUBLIC@vsiftp.vmssoftware.com.tar / FREEWARE / FREEWARE40.ZIP / xpaint-247 / size.c < prev    next >
C/C++ Source or Header  |  1997-01-03  |  4KB  |  148 lines

  1. /* +-------------------------------------------------------------------+ */
  2. /* | Copyright 1992, 1993, David Koblas (koblas@netcom.com)           | */
  3. /* |                                       | */
  4. /* | Permission to use, copy, modify, and to distribute this software  | */
  5. /* | and its documentation for any purpose is hereby granted without   | */
  6. /* | fee, provided that the above copyright notice appear in all       | */
  7. /* | copies and that both that copyright notice and this permission    | */
  8. /* | notice appear in supporting documentation.     There is no           | */
  9. /* | representations about the suitability of this software for           | */
  10. /* | any purpose.  this software is provided "as is" without express   | */
  11. /* | or implied warranty.                           | */
  12. /* |                                       | */
  13. /* +-------------------------------------------------------------------+ */
  14.  
  15. /* $Id: size.c,v 1.4 1996/05/31 06:25:37 torsten Exp $ */
  16.  
  17. #include <X11/StringDefs.h>
  18. #include <X11/Intrinsic.h>
  19. #include <X11/Shell.h>
  20. #ifndef VMS
  21. #include <X11/Xaw/Dialog.h>
  22. #include <X11/Xaw/Command.h>
  23. #include <X11/Xaw/Toggle.h>
  24. #include <X11/Xaw/Form.h>
  25. #include <X11/Xaw/Label.h>
  26. #include <X11/Xaw/AsciiText.h>
  27. #include <X11/Xaw/Text.h>
  28. #else
  29. #include <X11Xaw/Dialog.h>
  30. #include <X11Xaw/Command.h>
  31. #include <X11Xaw/Toggle.h>
  32. #include <X11Xaw/Form.h>
  33. #include <X11Xaw/Label.h>
  34. #include <X11Xaw/AsciiText.h>
  35. #include <X11Xaw/Text.h>
  36. #endif
  37. #include <stdio.h>
  38.  
  39. #ifndef NOSTDHDRS
  40. #include <stdlib.h>
  41. #include <unistd.h>
  42. #endif
  43.  
  44. #include "Paint.h"
  45. #include "misc.h"
  46. #include "text.h"
  47.  
  48.  
  49. typedef struct {
  50.     Widget widget, paint;
  51.     int w, h;
  52.     int z;
  53.     void (*func) (Widget, int, int, int);
  54. } arg_t;
  55.  
  56. static void 
  57. cancelSizeCallback(Widget w, XtPointer arg, XtPointer junk)
  58. {
  59.     XtFree((XtPointer) arg);
  60. }
  61.  
  62. static void 
  63. sureCallback(Widget w, XtPointer argArg, XtPointer junk)
  64. {
  65.     arg_t *arg = (arg_t *) argArg;
  66.     XtVaSetValues(arg->paint, XtNdrawWidth, arg->w, XtNdrawHeight, arg->h,
  67.           XtNdirty, True, NULL);
  68.     FatbitsUpdate(arg->paint, -1);
  69.     XtFree((XtPointer) arg);
  70. }
  71.  
  72. static void 
  73. okSizeCallback(Widget w, XtPointer argArg, XtPointer infoArg)
  74. {
  75.     arg_t *arg = (arg_t *) argArg;
  76.     TextPromptInfo *info = (TextPromptInfo *) infoArg;
  77.     int width, height;
  78.  
  79.     arg->w = atoi(info->prompts[0].rstr);
  80.     arg->h = atoi(info->prompts[1].rstr);
  81.     if (arg->paint == None)
  82.     arg->z = atoi(info->prompts[2].rstr);
  83.  
  84.     if (arg->paint != None)
  85.     XtVaGetValues(arg->paint, XtNdrawWidth, &width,
  86.               XtNdrawHeight, &height,
  87.               NULL);
  88.  
  89.     if (arg->w <= 0) {
  90.     Notice(w, "Invalid width");
  91.     } else if (arg->h <= 0) {
  92.     Notice(w, "Invalid height");
  93.     } else if (arg->paint == None) {
  94.     arg->func(arg->widget, arg->w, arg->h, arg->z);
  95.     } else if (arg->w != width || arg->h != height) {
  96.     AlertBox(GetShell(arg->paint),
  97.          "Warning: this operation cannot be undone\nContinue?",
  98.          sureCallback, cancelSizeCallback, arg);
  99.     /* don't free */
  100.     return;
  101.     }
  102.     XtFree((XtPointer) arg);
  103. }
  104.  
  105. void 
  106. SizeSelect(Widget w, Widget paint, void (*func) (Widget, int, int, int))
  107. {
  108.     static TextPromptInfo info;
  109.     static struct textPromptInfo values[4];
  110.     int width, height, zoom;
  111.     arg_t *arg = XtNew(arg_t);
  112.     char bufA[16], bufB[16], bufC[16];
  113.  
  114.     info.prompts = values;
  115.     info.nprompt = (paint == None) ? 3 : 2;
  116.     info.title = "Enter the desired image size:";
  117.  
  118.     values[0].prompt = "Width:";
  119.     values[0].str = bufA;
  120.     values[0].len = 5;
  121.     values[1].prompt = "Height:";
  122.     values[1].str = bufB;
  123.     values[1].len = 5;
  124.     values[2].prompt = "Zoom:";
  125.     values[2].str = bufC;
  126.     values[2].len = 5;
  127.  
  128.     if (paint != None) {
  129.     XtVaGetValues(paint, XtNdrawWidth, &width,
  130.               XtNdrawHeight, &height,
  131.               XtNzoom, &zoom,
  132.               NULL);
  133.     } else {
  134.     GetDefaultWH(&width, &height);
  135.     zoom = 1;
  136.     }
  137.  
  138.     sprintf(bufA, "%d", (int) width);
  139.     sprintf(bufB, "%d", (int) height);
  140.     sprintf(bufC, "%d", (int) zoom);
  141.  
  142.     arg->widget = w;
  143.     arg->paint = paint;
  144.     arg->func = func;
  145.  
  146.     TextPrompt(w, "sizeselect", &info, okSizeCallback, cancelSizeCallback, arg);
  147. }
  148.