Hex Artifact Content

Artifact fa36d130505d41abf0173c62323af7a3c7109940:


0000: 2f 2a 20 0a 20 2a 20 74 6b 53 63 72 6f 6c 6c 62  /* . * tkScrollb
0010: 61 72 2e 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a  ar.c (CTk) --. *
0020: 0a 20 2a 09 54 68 69 73 20 6d 6f 64 75 6c 65 20  . *.This module 
0030: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 73 63 72  implements a scr
0040: 6f 6c 6c 62 61 72 20 77 69 64 67 65 74 73 20 66  ollbar widgets f
0050: 6f 72 20 74 68 65 20 43 54 6b 0a 20 2a 09 74 6f  or the CTk. *.to
0060: 6f 6c 6b 69 74 2e 20 20 41 20 73 63 72 6f 6c 6c  olkit.  A scroll
0070: 62 61 72 20 64 69 73 70 6c 61 79 73 20 61 20 73  bar displays a s
0080: 6c 69 64 65 72 20 61 6e 64 20 74 77 6f 20 61 72  lider and two ar
0090: 72 6f 77 73 3b 0a 20 2a 09 6d 6f 75 73 65 20 63  rows;. *.mouse c
00a0: 6c 69 63 6b 73 20 6f 6e 20 66 65 61 74 75 72 65  licks on feature
00b0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 63 72  s within the scr
00c0: 6f 6c 6c 62 61 72 20 63 61 75 73 65 0a 20 2a 09  ollbar cause. *.
00d0: 73 63 72 6f 6c 6c 69 6e 67 20 63 6f 6d 6d 61 6e  scrolling comman
00e0: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
00f0: 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68  .. *. * Copyrigh
0100: 74 20 28 63 29 20 31 39 39 30 2d 31 39 39 34 20  t (c) 1990-1994 
0110: 54 68 65 20 52 65 67 65 6e 74 73 20 6f 66 20 74  The Regents of t
0120: 68 65 20 55 6e 69 76 65 72 73 69 74 79 20 6f 66  he University of
0130: 20 43 61 6c 69 66 6f 72 6e 69 61 2e 0a 20 2a 20   California.. * 
0140: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39  Copyright (c) 19
0150: 39 34 2d 31 39 39 35 20 53 75 6e 20 4d 69 63 72  94-1995 Sun Micr
0160: 6f 73 79 73 74 65 6d 73 2c 20 49 6e 63 2e 0a 20  osystems, Inc.. 
0170: 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20  * Copyright (c) 
0180: 31 39 39 34 2d 31 39 39 35 20 43 6c 65 76 65 6c  1994-1995 Clevel
0190: 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75 6e 64  and Clinic Found
01a0: 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65 65 20  ation. *. * See 
01b0: 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e 73  the file "licens
01c0: 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e 66  e.terms" for inf
01d0: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61 67  ormation on usag
01e0: 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62 75  e and redistribu
01f0: 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69 73 20  tion. * of this 
0200: 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61 20  file, and for a 
0210: 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c  DISCLAIMER OF AL
0220: 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a 20 2a  L WARRANTIES.. *
0230: 0a 20 2a 20 40 28 23 29 20 24 49 64 3a 20 63 74  . * @(#) $Id: ct
0240: 6b 2e 73 68 61 72 2c 76 20 31 2e 35 30 20 31 39  k.shar,v 1.50 19
0250: 39 36 2f 30 31 2f 31 35 20 31 34 3a 34 37 3a 31  96/01/15 14:47:1
0260: 36 20 61 6e 64 72 65 77 6d 20 45 78 70 20 61 6e  6 andrewm Exp an
0270: 64 72 65 77 6d 20 24 0a 20 2a 2f 0a 0a 23 69 6e  drewm $. */..#in
0280: 63 6c 75 64 65 20 22 74 6b 50 6f 72 74 2e 68 22  clude "tkPort.h"
0290: 0a 23 69 6e 63 6c 75 64 65 20 22 64 65 66 61 75  .#include "defau
02a0: 6c 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  lt.h".#include "
02b0: 74 6b 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 20 2a 20  tkInt.h"../*. * 
02c0: 41 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  A data structure
02d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
02e0: 67 20 74 79 70 65 20 69 73 20 6b 65 70 74 20 66  g type is kept f
02f0: 6f 72 20 65 61 63 68 20 73 63 72 6f 6c 6c 62 61  or each scrollba
0300: 72 0a 20 2a 20 77 69 64 67 65 74 20 6d 61 6e 61  r. * widget mana
0310: 67 65 64 20 62 79 20 74 68 69 73 20 66 69 6c 65  ged by this file
0320: 3a 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73  :. */..typedef s
0330: 74 72 75 63 74 20 7b 0a 20 20 20 20 54 6b 5f 57  truct {.    Tk_W
0340: 69 6e 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f 2a  indow tkwin;../*
0350: 20 57 69 6e 64 6f 77 20 74 68 61 74 20 65 6d 62   Window that emb
0360: 6f 64 69 65 73 20 74 68 65 20 73 63 72 6f 6c 6c  odies the scroll
0370: 62 61 72 2e 20 20 4e 55 4c 4c 0a 09 09 09 09 20  bar.  NULL..... 
0380: 2a 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  * means that the
0390: 20 77 69 6e 64 6f 77 20 68 61 73 20 62 65 65 6e   window has been
03a0: 20 64 65 73 74 72 6f 79 65 64 0a 09 09 09 09 20   destroyed..... 
03b0: 2a 20 62 75 74 20 74 68 65 20 64 61 74 61 20 73  * but the data s
03c0: 74 72 75 63 74 75 72 65 73 20 68 61 76 65 6e 27  tructures haven'
03d0: 74 20 79 65 74 20 62 65 65 6e 0a 09 09 09 09 20  t yet been..... 
03e0: 2a 20 63 6c 65 61 6e 65 64 20 75 70 2e 2a 2f 0a  * cleaned up.*/.
03f0: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
0400: 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e 74 65  interp;../* Inte
0410: 72 70 72 65 74 65 72 20 61 73 73 6f 63 69 61 74  rpreter associat
0420: 65 64 20 77 69 74 68 20 73 63 72 6f 6c 6c 62 61  ed with scrollba
0430: 72 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 43 6f  r. */.    Tcl_Co
0440: 6d 6d 61 6e 64 20 77 69 64 67 65 74 43 6d 64 3b  mmand widgetCmd;
0450: 09 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 73 63  ./* Token for sc
0460: 72 6f 6c 6c 62 61 72 27 73 20 77 69 64 67 65 74  rollbar's widget
0470: 20 63 6f 6d 6d 61 6e 64 2e 20 2a 2f 0a 20 20 20   command. */.   
0480: 20 54 6b 5f 55 69 64 20 6f 72 69 65 6e 74 55 69   Tk_Uid orientUi
0490: 64 3b 09 09 2f 2a 20 4f 72 69 65 6e 74 61 74 69  d;../* Orientati
04a0: 6f 6e 20 66 6f 72 20 77 69 6e 64 6f 77 20 28 22  on for window ("
04b0: 76 65 72 74 69 63 61 6c 22 20 6f 72 0a 09 09 09  vertical" or....
04c0: 09 20 2a 20 22 68 6f 72 69 7a 6f 6e 74 61 6c 22  . * "horizontal"
04d0: 29 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 76 65  ). */.    int ve
04e0: 72 74 69 63 61 6c 3b 09 09 2f 2a 20 4e 6f 6e 2d  rtical;../* Non-
04f0: 7a 65 72 6f 20 6d 65 61 6e 73 20 76 65 72 74 69  zero means verti
0500: 63 61 6c 20 6f 72 69 65 6e 74 61 74 69 6f 6e 0a  cal orientation.
0510: 09 09 09 09 20 2a 20 72 65 71 75 65 73 74 65 64  .... * requested
0520: 2c 20 7a 65 72 6f 20 6d 65 61 6e 73 20 68 6f 72  , zero means hor
0530: 69 7a 6f 6e 74 61 6c 2e 20 2a 2f 0a 20 20 20 20  izontal. */.    
0540: 69 6e 74 20 77 69 64 74 68 3b 09 09 09 2f 2a 20  int width;.../* 
0550: 44 65 73 69 72 65 64 20 6e 61 72 72 6f 77 20 64  Desired narrow d
0560: 69 6d 65 6e 73 69 6f 6e 20 6f 66 20 73 63 72 6f  imension of scro
0570: 6c 6c 62 61 72 2c 0a 09 09 09 09 20 2a 20 69 6e  llbar,..... * in
0580: 20 70 69 78 65 6c 73 2e 20 2a 2f 0a 20 20 20 20   pixels. */.    
0590: 63 68 61 72 20 2a 63 6f 6d 6d 61 6e 64 3b 09 09  char *command;..
05a0: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 70 72 65 66 69  /* Command prefi
05b0: 78 20 74 6f 20 75 73 65 20 77 68 65 6e 20 69 6e  x to use when in
05c0: 76 6f 6b 69 6e 67 0a 09 09 09 09 20 2a 20 73 63  voking..... * sc
05d0: 72 6f 6c 6c 69 6e 67 20 63 6f 6d 6d 61 6e 64 73  rolling commands
05e0: 2e 20 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 64 6f  .  NULL means do
05f0: 6e 27 74 0a 09 09 09 09 20 2a 20 69 6e 76 6f 6b  n't..... * invok
0600: 65 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 4d 61 6c  e commands.  Mal
0610: 6c 6f 63 27 65 64 2e 20 2a 2f 0a 20 20 20 20 69  loc'ed. */.    i
0620: 6e 74 20 63 6f 6d 6d 61 6e 64 53 69 7a 65 3b 09  nt commandSize;.
0630: 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f  ./* Number of no
0640: 6e 2d 4e 55 4c 4c 20 62 79 74 65 73 20 69 6e 20  n-NULL bytes in 
0650: 63 6f 6d 6d 61 6e 64 2e 20 2a 2f 0a 0a 20 20 20  command. */..   
0660: 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e 66 6f 72   /*.     * Infor
0670: 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 65 6e  mation used when
0680: 20 64 69 73 70 6c 61 79 69 6e 67 20 77 69 64 67   displaying widg
0690: 65 74 3a 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  et:.     */..   
06a0: 20 69 6e 74 20 62 6f 72 64 65 72 57 69 64 74 68   int borderWidth
06b0: 3b 09 09 2f 2a 20 57 69 64 74 68 20 6f 66 20 62  ;../* Width of b
06c0: 6f 72 64 65 72 20 69 6e 20 70 69 78 65 6c 73 2e  order in pixels.
06d0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 73 6c 69 64   */.    int slid
06e0: 65 72 46 69 72 73 74 3b 09 09 2f 2a 20 43 68 61  erFirst;../* Cha
06f0: 72 61 63 74 65 72 20 63 6f 6f 72 64 69 6e 61 74  racter coordinat
0700: 65 20 6f 66 20 74 6f 70 20 6f 72 20 6c 65 66 74  e of top or left
0710: 20 65 64 67 65 0a 09 09 09 09 20 2a 20 6f 66 20   edge..... * of 
0720: 73 6c 69 64 65 72 20 61 72 65 61 2c 20 69 6e 63  slider area, inc
0730: 6c 75 64 69 6e 67 20 62 6f 72 64 65 72 2e 20 2a  luding border. *
0740: 2f 0a 20 20 20 20 69 6e 74 20 73 6c 69 64 65 72  /.    int slider
0750: 4c 61 73 74 3b 09 09 2f 2a 20 43 6f 6f 72 64 69  Last;../* Coordi
0760: 6e 61 74 65 20 6f 66 20 63 68 61 72 61 63 74 65  nate of characte
0770: 72 20 6a 75 73 74 20 61 66 74 65 72 20 62 6f 74  r just after bot
0780: 74 6f 6d 0a 09 09 09 09 20 2a 20 6f 72 20 72 69  tom..... * or ri
0790: 67 68 74 20 65 64 67 65 20 6f 66 20 73 6c 69 64  ght edge of slid
07a0: 65 72 20 61 72 65 61 2c 20 69 6e 63 6c 75 64 69  er area, includi
07b0: 6e 67 0a 09 09 09 09 20 2a 20 62 6f 72 64 65 72  ng..... * border
07c0: 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  . */..    /*.   
07d0: 20 20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20    * Information 
07e0: 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 61  describing the a
07f0: 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 6c 61 74  pplication relat
0800: 65 64 20 74 6f 20 74 68 65 20 73 63 72 6f 6c 6c  ed to the scroll
0810: 62 61 72 2e 0a 20 20 20 20 20 2a 20 54 68 69 73  bar..     * This
0820: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0830: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
0840: 61 70 70 6c 69 63 61 74 69 6f 6e 20 62 79 20 69  application by i
0850: 6e 76 6f 6b 69 6e 67 20 74 68 65 0a 20 20 20 20  nvoking the.    
0860: 20 2a 20 22 73 65 74 22 20 77 69 64 67 65 74 20   * "set" widget 
0870: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 69  command.  This i
0880: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 20 6e  nformation can n
0890: 6f 77 20 62 65 20 70 72 6f 76 69 64 65 64 20 69  ow be provided i
08a0: 6e 0a 20 20 20 20 20 2a 20 74 77 6f 20 77 61 79  n.     * two way
08b0: 73 3a 20 20 74 68 65 20 22 6f 6c 64 22 20 66 6f  s:  the "old" fo
08c0: 72 6d 20 28 74 6f 74 61 6c 55 6e 69 74 73 2c 20  rm (totalUnits, 
08d0: 77 69 6e 64 6f 77 55 6e 69 74 73 2c 20 66 69 72  windowUnits, fir
08e0: 73 74 55 6e 69 74 2c 0a 20 20 20 20 20 2a 20 61  stUnit,.     * a
08f0: 6e 64 20 6c 61 73 74 55 6e 69 74 29 2c 20 6f 72  nd lastUnit), or
0900: 20 74 68 65 20 22 6e 65 77 22 20 66 6f 72 6d 20   the "new" form 
0910: 28 66 69 72 73 74 46 72 61 63 74 69 6f 6e 20 61  (firstFraction a
0920: 6e 64 20 6c 61 73 74 46 72 61 63 74 69 6f 6e 29  nd lastFraction)
0930: 2e 0a 20 20 20 20 20 2a 20 46 69 72 73 74 46 72  ..     * FirstFr
0940: 61 63 74 69 6f 6e 20 61 6e 64 20 6c 61 73 74 46  action and lastF
0950: 72 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 77  raction will alw
0960: 61 79 73 20 62 65 20 76 61 6c 69 64 2c 20 62 75  ays be valid, bu
0970: 74 0a 20 20 20 20 20 2a 20 74 68 65 20 6f 6c 64  t.     * the old
0980: 2d 73 74 79 6c 65 20 69 6e 66 6f 72 6d 61 74 69  -style informati
0990: 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
09a0: 20 69 66 20 74 68 65 20 4e 45 57 5f 53 54 59 4c   if the NEW_STYL
09b0: 45 5f 43 4f 4d 4d 41 4e 44 53 0a 20 20 20 20 20  E_COMMANDS.     
09c0: 2a 20 66 6c 61 67 20 69 73 20 30 2e 0a 20 20 20  * flag is 0..   
09d0: 20 20 2a 2f 0a 0a 20 20 20 20 69 6e 74 20 74 6f    */..    int to
09e0: 74 61 6c 55 6e 69 74 73 3b 09 09 2f 2a 20 54 6f  talUnits;../* To
09f0: 74 61 6c 20 64 69 6d 65 6e 73 69 6f 6e 20 6f 66  tal dimension of
0a00: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 20 69 6e   application, in
0a10: 0a 09 09 09 09 20 2a 20 75 6e 69 74 73 2e 20 20  ..... * units.  
0a20: 56 61 6c 69 64 20 6f 6e 6c 79 20 69 66 20 74 68  Valid only if th
0a30: 65 20 4e 45 57 5f 53 54 59 4c 45 5f 43 4f 4d 4d  e NEW_STYLE_COMM
0a40: 41 4e 44 53 0a 09 09 09 09 20 2a 20 66 6c 61 67  ANDS..... * flag
0a50: 20 69 73 6e 27 74 20 73 65 74 2e 20 2a 2f 0a 20   isn't set. */. 
0a60: 20 20 20 69 6e 74 20 77 69 6e 64 6f 77 55 6e 69     int windowUni
0a70: 74 73 3b 09 09 2f 2a 20 4d 61 78 69 6d 75 6d 20  ts;../* Maximum 
0a80: 6e 75 6d 62 65 72 20 6f 66 20 75 6e 69 74 73 20  number of units 
0a90: 74 68 61 74 20 63 61 6e 20 62 65 0a 09 09 09 09  that can be.....
0aa0: 20 2a 20 64 69 73 70 6c 61 79 65 64 20 69 6e 20   * displayed in 
0ab0: 74 68 65 20 77 69 6e 64 6f 77 20 61 74 20 6f 6e  the window at on
0ac0: 63 65 2e 20 20 56 61 6c 69 64 0a 09 09 09 09 20  ce.  Valid..... 
0ad0: 2a 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 4e 45  * only if the NE
0ae0: 57 5f 53 54 59 4c 45 5f 43 4f 4d 4d 41 4e 44 53  W_STYLE_COMMANDS
0af0: 20 66 6c 61 67 20 69 73 6e 27 74 0a 09 09 09 09   flag isn't.....
0b00: 20 2a 20 73 65 74 2e 20 2a 2f 0a 20 20 20 20 69   * set. */.    i
0b10: 6e 74 20 66 69 72 73 74 55 6e 69 74 3b 09 09 2f  nt firstUnit;../
0b20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 73 74  * Number of last
0b30: 20 75 6e 69 74 20 76 69 73 69 62 6c 65 20 69 6e   unit visible in
0b40: 0a 09 09 09 09 20 2a 20 61 70 70 6c 69 63 61 74  ..... * applicat
0b50: 69 6f 6e 27 73 20 77 69 6e 64 6f 77 2e 20 20 56  ion's window.  V
0b60: 61 6c 69 64 20 6f 6e 6c 79 20 69 66 20 74 68 65  alid only if the
0b70: 0a 09 09 09 09 20 2a 20 4e 45 57 5f 53 54 59 4c  ..... * NEW_STYL
0b80: 45 5f 43 4f 4d 4d 41 4e 44 53 20 66 6c 61 67 20  E_COMMANDS flag 
0b90: 69 73 6e 27 74 20 73 65 74 2e 20 2a 2f 0a 20 20  isn't set. */.  
0ba0: 20 20 69 6e 74 20 6c 61 73 74 55 6e 69 74 3b 09    int lastUnit;.
0bb0: 09 2f 2a 20 49 6e 64 65 78 20 6f 66 20 6c 61 73  ./* Index of las
0bc0: 74 20 75 6e 69 74 20 76 69 73 69 62 6c 65 20 69  t unit visible i
0bd0: 6e 20 77 69 6e 64 6f 77 2e 0a 09 09 09 09 20 2a  n window...... *
0be0: 20 56 61 6c 69 64 20 6f 6e 6c 79 20 69 66 20 74   Valid only if t
0bf0: 68 65 20 4e 45 57 5f 53 54 59 4c 45 5f 43 4f 4d  he NEW_STYLE_COM
0c00: 4d 41 4e 44 53 0a 09 09 09 09 20 2a 20 66 6c 61  MANDS..... * fla
0c10: 67 20 69 73 6e 27 74 20 73 65 74 2e 20 2a 2f 0a  g isn't set. */.
0c20: 20 20 20 20 64 6f 75 62 6c 65 20 66 69 72 73 74      double first
0c30: 46 72 61 63 74 69 6f 6e 3b 09 2f 2a 20 50 6f 73  Fraction;./* Pos
0c40: 69 74 69 6f 6e 20 6f 66 20 66 69 72 73 74 20 76  ition of first v
0c50: 69 73 69 62 6c 65 20 74 68 69 6e 67 20 69 6e 20  isible thing in 
0c60: 77 69 6e 64 6f 77 2c 0a 09 09 09 09 20 2a 20 73  window,..... * s
0c70: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 66 72  pecified as a fr
0c80: 61 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 30  action between 0
0c90: 20 61 6e 64 0a 09 09 09 09 20 2a 20 31 2e 30 2e   and..... * 1.0.
0ca0: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6c   */.    double l
0cb0: 61 73 74 46 72 61 63 74 69 6f 6e 3b 09 2f 2a 20  astFraction;./* 
0cc0: 50 6f 73 69 74 69 6f 6e 20 6f 66 20 6c 61 73 74  Position of last
0cd0: 20 76 69 73 69 62 6c 65 20 74 68 69 6e 67 20 69   visible thing i
0ce0: 6e 20 77 69 6e 64 6f 77 2c 0a 09 09 09 09 20 2a  n window,..... *
0cf0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
0d00: 66 72 61 63 74 69 6f 6e 20 62 65 74 77 65 65 6e  fraction between
0d10: 20 30 20 61 6e 64 0a 09 09 09 09 20 2a 20 31 2e   0 and..... * 1.
0d20: 30 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20  0. */..    /*.  
0d30: 20 20 20 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f     * Miscellaneo
0d40: 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a  us information:.
0d50: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 63 68 61       */..    cha
0d60: 72 20 2a 74 61 6b 65 46 6f 63 75 73 3b 09 09 2f  r *takeFocus;../
0d70: 2a 20 56 61 6c 75 65 20 6f 66 20 2d 74 61 6b 65  * Value of -take
0d80: 66 6f 63 75 73 20 6f 70 74 69 6f 6e 3b 20 20 6e  focus option;  n
0d90: 6f 74 20 75 73 65 64 20 69 6e 0a 09 09 09 09 20  ot used in..... 
0da0: 2a 20 74 68 65 20 43 20 63 6f 64 65 2c 20 62 75  * the C code, bu
0db0: 74 20 75 73 65 64 20 62 79 20 6b 65 79 62 6f 61  t used by keyboa
0dc0: 72 64 20 74 72 61 76 65 72 73 61 6c 0a 09 09 09  rd traversal....
0dd0: 09 20 2a 20 73 63 72 69 70 74 73 2e 20 20 4d 61  . * scripts.  Ma
0de0: 6c 6c 6f 63 27 65 64 2c 20 62 75 74 20 6d 61 79  lloc'ed, but may
0df0: 20 62 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20   be NULL. */.   
0e00: 20 69 6e 74 20 66 6c 61 67 73 3b 09 09 09 2f 2a   int flags;.../*
0e10: 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 3b 20   Various flags; 
0e20: 20 73 65 65 20 62 65 6c 6f 77 20 66 6f 72 0a 09   see below for..
0e30: 09 09 09 20 2a 20 64 65 66 69 6e 69 74 69 6f 6e  ... * definition
0e40: 73 2e 20 2a 2f 0a 7d 20 53 63 72 6f 6c 6c 62 61  s. */.} Scrollba
0e50: 72 3b 0a 0a 2f 2a 0a 20 2a 20 46 6c 61 67 20 62  r;../*. * Flag b
0e60: 69 74 73 20 66 6f 72 20 73 63 72 6f 6c 6c 62 61  its for scrollba
0e70: 72 73 3a 0a 20 2a 20 0a 20 2a 20 52 45 44 52 41  rs:. * . * REDRA
0e80: 57 5f 50 45 4e 44 49 4e 47 3a 09 09 4e 6f 6e 2d  W_PENDING:..Non-
0e90: 7a 65 72 6f 20 6d 65 61 6e 73 20 61 20 44 6f 57  zero means a DoW
0ea0: 68 65 6e 49 64 6c 65 20 68 61 6e 64 6c 65 72 0a  henIdle handler.
0eb0: 20 2a 09 09 09 09 68 61 73 20 61 6c 72 65 61 64   *....has alread
0ec0: 79 20 62 65 65 6e 20 71 75 65 75 65 64 20 74 6f  y been queued to
0ed0: 20 72 65 64 72 61 77 0a 20 2a 09 09 09 09 74 68   redraw. *....th
0ee0: 69 73 20 77 69 6e 64 6f 77 2e 0a 20 2a 20 4e 45  is window.. * NE
0ef0: 57 5f 53 54 59 4c 45 5f 43 4f 4d 4d 41 4e 44 53  W_STYLE_COMMANDS
0f00: 3a 09 09 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e  :..Non-zero mean
0f10: 73 20 74 68 65 20 6e 65 77 20 73 74 79 6c 65 20  s the new style 
0f20: 6f 66 20 63 6f 6d 6d 61 6e 64 73 0a 20 2a 09 09  of commands. *..
0f30: 09 09 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  ..should be used
0f40: 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
0f50: 77 69 74 68 20 74 68 65 0a 20 2a 09 09 09 09 77  with the. *....w
0f60: 69 64 67 65 74 3a 20 20 22 2e 74 20 79 76 69 65  idget:  ".t yvie
0f70: 77 20 73 63 72 6f 6c 6c 20 32 20 6c 69 6e 65 73  w scroll 2 lines
0f80: 22 2c 20 69 6e 73 74 65 61 64 0a 20 2a 09 09 09  ", instead. *...
0f90: 09 6f 66 20 22 2e 74 20 79 76 69 65 77 20 34 30  .of ".t yview 40
0fa0: 22 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 0a  ", for example..
0fb0: 20 2a 20 47 4f 54 5f 46 4f 43 55 53 3a 09 09 09   * GOT_FOCUS:...
0fc0: 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 74  Non-zero means t
0fd0: 68 69 73 20 77 69 6e 64 6f 77 20 68 61 73 20 74  his window has t
0fe0: 68 65 20 69 6e 70 75 74 0a 20 2a 09 09 09 09 66  he input. *....f
0ff0: 6f 63 75 73 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69  ocus.. */..#defi
1000: 6e 65 20 52 45 44 52 41 57 5f 50 45 4e 44 49 4e  ne REDRAW_PENDIN
1010: 47 09 09 31 0a 23 64 65 66 69 6e 65 20 4e 45 57  G..1.#define NEW
1020: 5f 53 54 59 4c 45 5f 43 4f 4d 4d 41 4e 44 53 09  _STYLE_COMMANDS.
1030: 32 0a 23 64 65 66 69 6e 65 20 47 4f 54 5f 46 4f  2.#define GOT_FO
1040: 43 55 53 09 09 34 0a 0a 2f 2a 0a 20 2a 20 4d 69  CUS..4../*. * Mi
1050: 6e 69 6d 75 6d 20 73 6c 69 64 65 72 20 6c 65 6e  nimum slider len
1060: 67 74 68 20 61 6e 64 20 28 66 69 78 65 64 29 20  gth and (fixed) 
1070: 61 72 72 6f 77 20 6c 65 6e 67 74 68 2c 20 69 6e  arrow length, in
1080: 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 2a 2f   characters.. */
1090: 0a 23 64 65 66 69 6e 65 20 4d 49 4e 5f 53 4c 49  .#define MIN_SLI
10a0: 44 45 52 5f 4c 45 4e 47 54 48 09 31 0a 23 64 65  DER_LENGTH.1.#de
10b0: 66 69 6e 65 20 41 52 52 4f 57 5f 4c 45 4e 47 54  fine ARROW_LENGT
10c0: 48 09 09 31 0a 0a 2f 2a 0a 20 2a 20 49 6e 66 6f  H..1../*. * Info
10d0: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 66 6f 72  rmation used for
10e0: 20 61 72 67 76 20 70 61 72 73 69 6e 67 2e 0a 20   argv parsing.. 
10f0: 2a 2f 0a 73 74 61 74 69 63 20 54 6b 5f 43 6f 6e  */.static Tk_Con
1100: 66 69 67 53 70 65 63 20 63 6f 6e 66 69 67 53 70  figSpec configSp
1110: 65 63 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 54  ecs[] = {.    {T
1120: 4b 5f 43 4f 4e 46 49 47 5f 53 59 4e 4f 4e 59 4d  K_CONFIG_SYNONYM
1130: 2c 20 22 2d 62 64 22 2c 20 22 62 6f 72 64 65 72  , "-bd", "border
1140: 57 69 64 74 68 22 2c 20 28 63 68 61 72 20 2a 29  Width", (char *)
1150: 20 4e 55 4c 4c 2c 0a 09 28 63 68 61 72 20 2a 29   NULL,..(char *)
1160: 20 4e 55 4c 4c 2c 20 30 2c 20 30 7d 2c 0a 20 20   NULL, 0, 0},.  
1170: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58    {TK_CONFIG_PIX
1180: 45 4c 53 2c 20 22 2d 62 6f 72 64 65 72 77 69 64  ELS, "-borderwid
1190: 74 68 22 2c 20 22 62 6f 72 64 65 72 57 69 64 74  th", "borderWidt
11a0: 68 22 2c 20 22 42 6f 72 64 65 72 57 69 64 74 68  h", "BorderWidth
11b0: 22 2c 0a 09 44 45 46 5f 53 43 52 4f 4c 4c 42 41  ",..DEF_SCROLLBA
11c0: 52 5f 42 4f 52 44 45 52 5f 57 49 44 54 48 2c 20  R_BORDER_WIDTH, 
11d0: 54 6b 5f 4f 66 66 73 65 74 28 53 63 72 6f 6c 6c  Tk_Offset(Scroll
11e0: 62 61 72 2c 20 62 6f 72 64 65 72 57 69 64 74 68  bar, borderWidth
11f0: 29 2c 20 30 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43  ), 0},.    {TK_C
1200: 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d  ONFIG_STRING, "-
1210: 63 6f 6d 6d 61 6e 64 22 2c 20 22 63 6f 6d 6d 61  command", "comma
1220: 6e 64 22 2c 20 22 43 6f 6d 6d 61 6e 64 22 2c 0a  nd", "Command",.
1230: 09 44 45 46 5f 53 43 52 4f 4c 4c 42 41 52 5f 43  .DEF_SCROLLBAR_C
1240: 4f 4d 4d 41 4e 44 2c 20 54 6b 5f 4f 66 66 73 65  OMMAND, Tk_Offse
1250: 74 28 53 63 72 6f 6c 6c 62 61 72 2c 20 63 6f 6d  t(Scrollbar, com
1260: 6d 61 6e 64 29 2c 0a 09 54 4b 5f 43 4f 4e 46 49  mand),..TK_CONFI
1270: 47 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20  G_NULL_OK},.    
1280: 7b 54 4b 5f 43 4f 4e 46 49 47 5f 55 49 44 2c 20  {TK_CONFIG_UID, 
1290: 22 2d 6f 72 69 65 6e 74 22 2c 20 22 6f 72 69 65  "-orient", "orie
12a0: 6e 74 22 2c 20 22 4f 72 69 65 6e 74 22 2c 0a 09  nt", "Orient",..
12b0: 44 45 46 5f 53 43 52 4f 4c 4c 42 41 52 5f 4f 52  DEF_SCROLLBAR_OR
12c0: 49 45 4e 54 2c 20 54 6b 5f 4f 66 66 73 65 74 28  IENT, Tk_Offset(
12d0: 53 63 72 6f 6c 6c 62 61 72 2c 20 6f 72 69 65 6e  Scrollbar, orien
12e0: 74 55 69 64 29 2c 20 30 7d 2c 0a 20 20 20 20 7b  tUid), 0},.    {
12f0: 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47  TK_CONFIG_STRING
1300: 2c 20 22 2d 74 61 6b 65 66 6f 63 75 73 22 2c 20  , "-takefocus", 
1310: 22 74 61 6b 65 46 6f 63 75 73 22 2c 20 22 54 61  "takeFocus", "Ta
1320: 6b 65 46 6f 63 75 73 22 2c 0a 09 44 45 46 5f 53  keFocus",..DEF_S
1330: 43 52 4f 4c 4c 42 41 52 5f 54 41 4b 45 5f 46 4f  CROLLBAR_TAKE_FO
1340: 43 55 53 2c 20 54 6b 5f 4f 66 66 73 65 74 28 53  CUS, Tk_Offset(S
1350: 63 72 6f 6c 6c 62 61 72 2c 20 74 61 6b 65 46 6f  crollbar, takeFo
1360: 63 75 73 29 2c 0a 09 54 4b 5f 43 4f 4e 46 49 47  cus),..TK_CONFIG
1370: 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b  _NULL_OK},.    {
1380: 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58 45 4c 53  TK_CONFIG_PIXELS
1390: 2c 20 22 2d 77 69 64 74 68 22 2c 20 22 77 69 64  , "-width", "wid
13a0: 74 68 22 2c 20 22 57 69 64 74 68 22 2c 0a 09 44  th", "Width",..D
13b0: 45 46 5f 53 43 52 4f 4c 4c 42 41 52 5f 57 49 44  EF_SCROLLBAR_WID
13c0: 54 48 2c 20 54 6b 5f 4f 66 66 73 65 74 28 53 63  TH, Tk_Offset(Sc
13d0: 72 6f 6c 6c 62 61 72 2c 20 77 69 64 74 68 29 2c  rollbar, width),
13e0: 20 30 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e   0},.    {TK_CON
13f0: 46 49 47 5f 45 4e 44 2c 20 28 63 68 61 72 20 2a  FIG_END, (char *
1400: 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29  ) NULL, (char *)
1410: 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20   NULL, (char *) 
1420: 4e 55 4c 4c 2c 0a 09 28 63 68 61 72 20 2a 29 20  NULL,..(char *) 
1430: 4e 55 4c 4c 2c 20 30 2c 20 30 7d 0a 7d 3b 0a 0a  NULL, 0, 0}.};..
1440: 2f 2a 0a 20 2a 20 46 6f 72 77 61 72 64 20 64 65  /*. * Forward de
1450: 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 70  clarations for p
1460: 72 6f 63 65 64 75 72 65 73 20 64 65 66 69 6e 65  rocedures define
1470: 64 20 6c 61 74 65 72 20 69 6e 20 74 68 69 73 20  d later in this 
1480: 66 69 6c 65 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69  file:. */..stati
1490: 63 20 76 6f 69 64 09 09 43 6f 6d 70 75 74 65 53  c void..ComputeS
14a0: 63 72 6f 6c 6c 62 61 72 47 65 6f 6d 65 74 72 79  crollbarGeometry
14b0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 09   _ANSI_ARGS_((..
14c0: 09 09 20 20 20 20 53 63 72 6f 6c 6c 62 61 72 20  ..    Scrollbar 
14d0: 2a 73 63 72 6f 6c 6c 50 74 72 29 29 3b 0a 73 74  *scrollPtr));.st
14e0: 61 74 69 63 20 69 6e 74 09 09 43 6f 6e 66 69 67  atic int..Config
14f0: 75 72 65 53 63 72 6f 6c 6c 62 61 72 20 5f 41 4e  ureScrollbar _AN
1500: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e  SI_ARGS_((Tcl_In
1510: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 09 09  terp *interp,...
1520: 09 20 20 20 20 53 63 72 6f 6c 6c 62 61 72 20 2a  .    Scrollbar *
1530: 73 63 72 6f 6c 6c 50 74 72 2c 20 69 6e 74 20 61  scrollPtr, int a
1540: 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
1550: 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 66 6c 61  ,....    int fla
1560: 67 73 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69  gs));.static voi
1570: 64 09 09 44 65 73 74 72 6f 79 53 63 72 6f 6c 6c  d..DestroyScroll
1580: 62 61 72 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  bar _ANSI_ARGS_(
1590: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65  (ClientData clie
15a0: 6e 74 44 61 74 61 29 29 3b 0a 73 74 61 74 69 63  ntData));.static
15b0: 20 76 6f 69 64 09 09 44 69 73 70 6c 61 79 53 63   void..DisplaySc
15c0: 72 6f 6c 6c 62 61 72 20 5f 41 4e 53 49 5f 41 52  rollbar _ANSI_AR
15d0: 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20  GS_((ClientData 
15e0: 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a 73 74  clientData));.st
15f0: 61 74 69 63 20 76 6f 69 64 09 09 45 76 65 6e 74  atic void..Event
1600: 75 61 6c 6c 79 52 65 64 72 61 77 20 5f 41 4e 53  uallyRedraw _ANS
1610: 49 5f 41 52 47 53 5f 28 28 53 63 72 6f 6c 6c 62  I_ARGS_((Scrollb
1620: 61 72 20 2a 73 63 72 6f 6c 6c 50 74 72 29 29 3b  ar *scrollPtr));
1630: 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 53 63  .static void..Sc
1640: 72 6f 6c 6c 62 61 72 43 6d 64 44 65 6c 65 74 65  rollbarCmdDelete
1650: 64 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53  dProc _ANSI_ARGS
1660: 5f 28 28 0a 09 09 09 20 20 20 20 43 6c 69 65 6e  _((....    Clien
1670: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1680: 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09  ));.static void.
1690: 09 53 63 72 6f 6c 6c 62 61 72 45 76 65 6e 74 50  .ScrollbarEventP
16a0: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  roc _ANSI_ARGS_(
16b0: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65  (ClientData clie
16c0: 6e 74 44 61 74 61 2c 0a 09 09 09 20 20 20 20 43  ntData,....    C
16d0: 74 6b 5f 45 76 65 6e 74 20 2a 65 76 65 6e 74 50  tk_Event *eventP
16e0: 74 72 29 29 3b 0a 73 74 61 74 69 63 20 69 6e 74  tr));.static int
16f0: 09 09 53 63 72 6f 6c 6c 62 61 72 57 69 64 67 65  ..ScrollbarWidge
1700: 74 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53 5f  tCmd _ANSI_ARGS_
1710: 28 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69  ((ClientData cli
1720: 65 6e 74 44 61 74 61 2c 0a 09 09 09 20 20 20 20  entData,....    
1730: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 2c 20 69 6e  Tcl_Interp *, in
1740: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
1750: 72 67 76 29 29 3b 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  rgv));.../*. *--
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
17a0: 20 2a 20 54 6b 5f 53 63 72 6f 6c 6c 62 61 72 43   * Tk_ScrollbarC
17b0: 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73  md --. *. *.This
17c0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e   procedure is in
17d0: 76 6f 6b 65 64 20 74 6f 20 70 72 6f 63 65 73 73  voked to process
17e0: 20 74 68 65 20 22 73 63 72 6f 6c 6c 62 61 72 22   the "scrollbar"
17f0: 20 54 63 6c 0a 20 2a 09 63 6f 6d 6d 61 6e 64 2e   Tcl. *.command.
1800: 20 20 53 65 65 20 74 68 65 20 75 73 65 72 20 64    See the user d
1810: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1820: 20 64 65 74 61 69 6c 73 20 6f 6e 20 77 68 61 74   details on what
1830: 0a 20 2a 09 69 74 20 64 6f 65 73 2e 0a 20 2a 0a  . *.it does.. *.
1840: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41   * Results:. *.A
1850: 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65   standard Tcl re
1860: 73 75 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  sult.. *. * Side
1870: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 53 65 65   effects:. *.See
1880: 20 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65   the user docume
1890: 6e 74 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d  ntation.. *. *--
18a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
18e0: 0a 0a 69 6e 74 0a 54 6b 5f 53 63 72 6f 6c 6c 62  ..int.Tk_Scrollb
18f0: 61 72 43 6d 64 28 63 6c 69 65 6e 74 44 61 74 61  arCmd(clientData
1900: 2c 20 69 6e 74 65 72 70 2c 20 61 72 67 63 2c 20  , interp, argc, 
1910: 61 72 67 76 29 0a 20 20 20 20 43 6c 69 65 6e 74  argv).    Client
1920: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b  Data clientData;
1930: 09 2f 2a 20 4d 61 69 6e 20 77 69 6e 64 6f 77 20  ./* Main window 
1940: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
1950: 09 09 09 09 20 2a 20 69 6e 74 65 72 70 72 65 74  .... * interpret
1960: 65 72 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 49  er. */.    Tcl_I
1970: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09  nterp *interp;..
1980: 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72  /* Current inter
1990: 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20 69  preter. */.    i
19a0: 6e 74 20 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75  nt argc;.../* Nu
19b0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
19c0: 73 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  s. */.    char *
19d0: 2a 61 72 67 76 3b 09 09 2f 2a 20 41 72 67 75 6d  *argv;../* Argum
19e0: 65 6e 74 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a  ent strings. */.
19f0: 7b 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20  {.    Tk_Window 
1a00: 74 6b 77 69 6e 20 3d 20 28 54 6b 5f 57 69 6e 64  tkwin = (Tk_Wind
1a10: 6f 77 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a  ow) clientData;.
1a20: 20 20 20 20 72 65 67 69 73 74 65 72 20 53 63 72      register Scr
1a30: 6f 6c 6c 62 61 72 20 2a 73 63 72 6f 6c 6c 50 74  ollbar *scrollPt
1a40: 72 3b 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77  r;.    Tk_Window
1a50: 20 6e 65 77 3b 0a 0a 20 20 20 20 69 66 20 28 61   new;..    if (a
1a60: 72 67 63 20 3c 20 32 29 20 7b 0a 09 54 63 6c 5f  rgc < 2) {..Tcl_
1a70: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1a80: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1a90: 67 73 3a 20 20 73 68 6f 75 6c 64 20 62 65 20 5c  gs:  should be \
1aa0: 22 22 2c 0a 09 09 61 72 67 76 5b 30 5d 2c 20 22  "",...argv[0], "
1ab0: 20 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74 69 6f   pathName ?optio
1ac0: 6e 73 3f 5c 22 22 2c 20 28 63 68 61 72 20 2a 29  ns?\"", (char *)
1ad0: 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e 20   NULL);..return 
1ae0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  TCL_ERROR;.    }
1af0: 0a 0a 20 20 20 20 6e 65 77 20 3d 20 54 6b 5f 43  ..    new = Tk_C
1b00: 72 65 61 74 65 57 69 6e 64 6f 77 46 72 6f 6d 50  reateWindowFromP
1b10: 61 74 68 28 69 6e 74 65 72 70 2c 20 74 6b 77 69  ath(interp, tkwi
1b20: 6e 2c 20 61 72 67 76 5b 31 5d 2c 20 28 63 68 61  n, argv[1], (cha
1b30: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  r *) NULL);.    
1b40: 69 66 20 28 6e 65 77 20 3d 3d 20 4e 55 4c 4c 29  if (new == NULL)
1b50: 20 7b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45   {..return TCL_E
1b60: 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  RROR;.    }..   
1b70: 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e 69 74 69   /*.     * Initi
1b80: 61 6c 69 7a 65 20 66 69 65 6c 64 73 20 74 68 61  alize fields tha
1b90: 74 20 77 6f 6e 27 74 20 62 65 20 69 6e 69 74 69  t won't be initi
1ba0: 61 6c 69 7a 65 64 20 62 79 20 43 6f 6e 66 69 67  alized by Config
1bb0: 75 72 65 53 63 72 6f 6c 6c 62 61 72 2c 0a 20 20  ureScrollbar,.  
1bc0: 20 20 20 2a 20 6f 72 20 77 68 69 63 68 20 43 6f     * or which Co
1bd0: 6e 66 69 67 75 72 65 53 63 72 6f 6c 6c 62 61 72  nfigureScrollbar
1be0: 20 65 78 70 65 63 74 73 20 74 6f 20 68 61 76 65   expects to have
1bf0: 20 72 65 61 73 6f 6e 61 62 6c 65 20 76 61 6c 75   reasonable valu
1c00: 65 73 0a 20 20 20 20 20 2a 20 28 65 2e 67 2e 20  es.     * (e.g. 
1c10: 72 65 73 6f 75 72 63 65 20 70 6f 69 6e 74 65 72  resource pointer
1c20: 73 29 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  s)..     */..   
1c30: 20 73 63 72 6f 6c 6c 50 74 72 20 3d 20 28 53 63   scrollPtr = (Sc
1c40: 72 6f 6c 6c 62 61 72 20 2a 29 20 63 6b 61 6c 6c  rollbar *) ckall
1c50: 6f 63 28 73 69 7a 65 6f 66 28 53 63 72 6f 6c 6c  oc(sizeof(Scroll
1c60: 62 61 72 29 29 3b 0a 20 20 20 20 73 63 72 6f 6c  bar));.    scrol
1c70: 6c 50 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 6e 65  lPtr->tkwin = ne
1c80: 77 3b 0a 20 20 20 20 73 63 72 6f 6c 6c 50 74 72  w;.    scrollPtr
1c90: 2d 3e 69 6e 74 65 72 70 20 3d 20 69 6e 74 65 72  ->interp = inter
1ca0: 70 3b 0a 20 20 20 20 73 63 72 6f 6c 6c 50 74 72  p;.    scrollPtr
1cb0: 2d 3e 77 69 64 67 65 74 43 6d 64 20 3d 20 54 63  ->widgetCmd = Tc
1cc0: 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  l_CreateCommand(
1cd0: 69 6e 74 65 72 70 2c 0a 09 20 20 20 20 54 6b 5f  interp,..    Tk_
1ce0: 50 61 74 68 4e 61 6d 65 28 73 63 72 6f 6c 6c 50  PathName(scrollP
1cf0: 74 72 2d 3e 74 6b 77 69 6e 29 2c 20 53 63 72 6f  tr->tkwin), Scro
1d00: 6c 6c 62 61 72 57 69 64 67 65 74 43 6d 64 2c 0a  llbarWidgetCmd,.
1d10: 09 20 20 20 20 28 43 6c 69 65 6e 74 44 61 74 61  .    (ClientData
1d20: 29 20 73 63 72 6f 6c 6c 50 74 72 2c 20 53 63 72  ) scrollPtr, Scr
1d30: 6f 6c 6c 62 61 72 43 6d 64 44 65 6c 65 74 65 64  ollbarCmdDeleted
1d40: 50 72 6f 63 29 3b 0a 20 20 20 20 73 63 72 6f 6c  Proc);.    scrol
1d50: 6c 50 74 72 2d 3e 6f 72 69 65 6e 74 55 69 64 20  lPtr->orientUid 
1d60: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 73 63 72 6f  = NULL;.    scro
1d70: 6c 6c 50 74 72 2d 3e 76 65 72 74 69 63 61 6c 20  llPtr->vertical 
1d80: 3d 20 30 3b 0a 20 20 20 20 73 63 72 6f 6c 6c 50  = 0;.    scrollP
1d90: 74 72 2d 3e 77 69 64 74 68 20 3d 20 30 3b 0a 20  tr->width = 0;. 
1da0: 20 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 63 6f     scrollPtr->co
1db0: 6d 6d 61 6e 64 20 3d 20 4e 55 4c 4c 3b 0a 20 20  mmand = NULL;.  
1dc0: 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 63 6f 6d    scrollPtr->com
1dd0: 6d 61 6e 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20  mandSize = 0;.  
1de0: 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 62 6f 72    scrollPtr->bor
1df0: 64 65 72 57 69 64 74 68 20 3d 20 30 3b 0a 20 20  derWidth = 0;.  
1e00: 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69    scrollPtr->sli
1e10: 64 65 72 46 69 72 73 74 20 3d 20 30 3b 0a 20 20  derFirst = 0;.  
1e20: 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69    scrollPtr->sli
1e30: 64 65 72 4c 61 73 74 20 3d 20 30 3b 0a 20 20 20  derLast = 0;.   
1e40: 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6f 74 61   scrollPtr->tota
1e50: 6c 55 6e 69 74 73 20 3d 20 30 3b 0a 20 20 20 20  lUnits = 0;.    
1e60: 73 63 72 6f 6c 6c 50 74 72 2d 3e 77 69 6e 64 6f  scrollPtr->windo
1e70: 77 55 6e 69 74 73 20 3d 20 30 3b 0a 20 20 20 20  wUnits = 0;.    
1e80: 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 69 72 73 74  scrollPtr->first
1e90: 55 6e 69 74 20 3d 20 30 3b 0a 20 20 20 20 73 63  Unit = 0;.    sc
1ea0: 72 6f 6c 6c 50 74 72 2d 3e 6c 61 73 74 55 6e 69  rollPtr->lastUni
1eb0: 74 20 3d 20 30 3b 0a 20 20 20 20 73 63 72 6f 6c  t = 0;.    scrol
1ec0: 6c 50 74 72 2d 3e 66 69 72 73 74 46 72 61 63 74  lPtr->firstFract
1ed0: 69 6f 6e 20 3d 20 30 2e 30 3b 0a 20 20 20 20 73  ion = 0.0;.    s
1ee0: 63 72 6f 6c 6c 50 74 72 2d 3e 6c 61 73 74 46 72  crollPtr->lastFr
1ef0: 61 63 74 69 6f 6e 20 3d 20 30 2e 30 3b 0a 20 20  action = 0.0;.  
1f00: 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 61 6b    scrollPtr->tak
1f10: 65 46 6f 63 75 73 20 3d 20 4e 55 4c 4c 3b 0a 20  eFocus = NULL;. 
1f20: 20 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 6c     scrollPtr->fl
1f30: 61 67 73 20 3d 20 30 3b 0a 0a 20 20 20 20 54 6b  ags = 0;..    Tk
1f40: 5f 53 65 74 43 6c 61 73 73 28 73 63 72 6f 6c 6c  _SetClass(scroll
1f50: 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 22 53 63 72  Ptr->tkwin, "Scr
1f60: 6f 6c 6c 62 61 72 22 29 3b 0a 20 20 20 20 54 6b  ollbar");.    Tk
1f70: 5f 43 72 65 61 74 65 45 76 65 6e 74 48 61 6e 64  _CreateEventHand
1f80: 6c 65 72 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 74  ler(scrollPtr->t
1f90: 6b 77 69 6e 2c 0a 20 20 20 20 09 20 20 20 20 43  kwin,.    .    C
1fa0: 54 4b 5f 45 58 50 4f 53 45 5f 45 56 45 4e 54 5f  TK_EXPOSE_EVENT_
1fb0: 4d 41 53 4b 7c 43 54 4b 5f 46 4f 43 55 53 5f 45  MASK|CTK_FOCUS_E
1fc0: 56 45 4e 54 5f 4d 41 53 4b 7c 43 54 4b 5f 4d 41  VENT_MASK|CTK_MA
1fd0: 50 5f 45 56 45 4e 54 5f 4d 41 53 4b 0a 20 20 20  P_EVENT_MASK.   
1fe0: 20 09 20 20 20 20 7c 43 54 4b 5f 44 45 53 54 52   .    |CTK_DESTR
1ff0: 4f 59 5f 45 56 45 4e 54 5f 4d 41 53 4b 2c 0a 09  OY_EVENT_MASK,..
2000: 20 20 20 20 53 63 72 6f 6c 6c 62 61 72 45 76 65      ScrollbarEve
2010: 6e 74 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74 44  ntProc, (ClientD
2020: 61 74 61 29 20 73 63 72 6f 6c 6c 50 74 72 29 3b  ata) scrollPtr);
2030: 0a 20 20 20 20 69 66 20 28 43 6f 6e 66 69 67 75  .    if (Configu
2040: 72 65 53 63 72 6f 6c 6c 62 61 72 28 69 6e 74 65  reScrollbar(inte
2050: 72 70 2c 20 73 63 72 6f 6c 6c 50 74 72 2c 20 61  rp, scrollPtr, a
2060: 72 67 63 2d 32 2c 20 61 72 67 76 2b 32 2c 20 30  rgc-2, argv+2, 0
2070: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  ) != TCL_OK) {..
2080: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 20 20 20  goto error;.    
2090: 7d 0a 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  }..    Tcl_SetRe
20a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 54 6b 5f 50  sult(interp,Tk_P
20b0: 61 74 68 4e 61 6d 65 28 73 63 72 6f 6c 6c 50 74  athName(scrollPt
20c0: 72 2d 3e 74 6b 77 69 6e 29 2c 54 43 4c 5f 56 4f  r->tkwin),TCL_VO
20d0: 4c 41 54 49 4c 45 29 3b 0a 20 20 20 20 72 65 74  LATILE);.    ret
20e0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 20 20 20  urn TCL_OK;..   
20f0: 20 65 72 72 6f 72 3a 0a 20 20 20 20 54 6b 5f 44   error:.    Tk_D
2100: 65 73 74 72 6f 79 57 69 6e 64 6f 77 28 73 63 72  estroyWindow(scr
2110: 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e 29 3b 0a  ollPtr->tkwin);.
2120: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2130: 52 52 4f 52 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d  RROR;.}.../*. *-
2140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
2180: 0a 20 2a 20 53 63 72 6f 6c 6c 62 61 72 57 69 64  . * ScrollbarWid
2190: 67 65 74 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09  getCmd --. *. *.
21a0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69  This procedure i
21b0: 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 70 72 6f  s invoked to pro
21c0: 63 65 73 73 20 74 68 65 20 54 63 6c 20 63 6f 6d  cess the Tcl com
21d0: 6d 61 6e 64 0a 20 2a 09 74 68 61 74 20 63 6f 72  mand. *.that cor
21e0: 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 77 69  responds to a wi
21f0: 64 67 65 74 20 6d 61 6e 61 67 65 64 20 62 79 20  dget managed by 
2200: 74 68 69 73 20 6d 6f 64 75 6c 65 2e 0a 20 2a 09  this module.. *.
2210: 53 65 65 20 74 68 65 20 75 73 65 72 20 64 6f 63  See the user doc
2220: 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 64  umentation for d
2230: 65 74 61 69 6c 73 20 6f 6e 20 77 68 61 74 20 69  etails on what i
2240: 74 20 64 6f 65 73 2e 0a 20 2a 0a 20 2a 20 52 65  t does.. *. * Re
2250: 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74 61 6e  sults:. *.A stan
2260: 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e  dard Tcl result.
2270: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
2280: 63 74 73 3a 0a 20 2a 09 53 65 65 20 74 68 65 20  cts:. *.See the 
2290: 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 69  user documentati
22a0: 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  on.. *. *-------
22b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22e0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
22f0: 74 69 63 20 69 6e 74 0a 53 63 72 6f 6c 6c 62 61  tic int.Scrollba
2300: 72 57 69 64 67 65 74 43 6d 64 28 63 6c 69 65 6e  rWidgetCmd(clien
2310: 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20 61  tData, interp, a
2320: 72 67 63 2c 20 61 72 67 76 29 0a 20 20 20 20 43  rgc, argv).    C
2330: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
2340: 44 61 74 61 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d  Data;../* Inform
2350: 61 74 69 6f 6e 20 61 62 6f 75 74 20 73 63 72 6f  ation about scro
2360: 6c 6c 62 61 72 0a 09 09 09 09 09 20 2a 20 77 69  llbar...... * wi
2370: 64 67 65 74 2e 20 2a 2f 0a 20 20 20 20 54 63 6c  dget. */.    Tcl
2380: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
2390: 09 09 09 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e  .../* Current in
23a0: 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20  terpreter. */.  
23b0: 20 20 69 6e 74 20 61 72 67 63 3b 09 09 09 09 2f    int argc;..../
23c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
23d0: 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 63 68  ments. */.    ch
23e0: 61 72 20 2a 2a 61 72 67 76 3b 09 09 09 2f 2a 20  ar **argv;.../* 
23f0: 41 72 67 75 6d 65 6e 74 20 73 74 72 69 6e 67 73  Argument strings
2400: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69 73  . */.{.    regis
2410: 74 65 72 20 53 63 72 6f 6c 6c 62 61 72 20 2a 73  ter Scrollbar *s
2420: 63 72 6f 6c 6c 50 74 72 20 3d 20 28 53 63 72 6f  crollPtr = (Scro
2430: 6c 6c 62 61 72 20 2a 29 20 63 6c 69 65 6e 74 44  llbar *) clientD
2440: 61 74 61 3b 0a 20 20 20 20 69 6e 74 20 72 65 73  ata;.    int res
2450: 75 6c 74 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20  ult = TCL_OK;.  
2460: 20 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b    size_t length;
2470: 0a 20 20 20 20 69 6e 74 20 63 3b 0a 0a 20 20 20  .    int c;..   
2480: 20 69 66 20 28 61 72 67 63 20 3c 20 32 29 20 7b   if (argc < 2) {
2490: 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75  ..Tcl_AppendResu
24a0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
24b0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
24c0: 20 62 65 20 5c 22 22 2c 0a 09 09 61 72 67 76 5b   be \"",...argv[
24d0: 30 5d 2c 20 22 20 6f 70 74 69 6f 6e 20 3f 61 72  0], " option ?ar
24e0: 67 20 61 72 67 20 2e 2e 2e 3f 5c 22 22 2c 20 28  g arg ...?\"", (
24f0: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
2500: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2510: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 6b 5f 50  ;.    }.    Tk_P
2520: 72 65 73 65 72 76 65 28 28 43 6c 69 65 6e 74 44  reserve((ClientD
2530: 61 74 61 29 20 73 63 72 6f 6c 6c 50 74 72 29 3b  ata) scrollPtr);
2540: 0a 20 20 20 20 63 20 3d 20 61 72 67 76 5b 31 5d  .    c = argv[1]
2550: 5b 30 5d 3b 0a 20 20 20 20 6c 65 6e 67 74 68 20  [0];.    length 
2560: 3d 20 73 74 72 6c 65 6e 28 61 72 67 76 5b 31 5d  = strlen(argv[1]
2570: 29 3b 0a 20 20 20 20 69 66 20 28 28 63 20 3d 3d  );.    if ((c ==
2580: 20 27 61 27 29 20 26 26 20 28 73 74 72 6e 63 6d   'a') && (strncm
2590: 70 28 61 72 67 76 5b 31 5d 2c 20 22 61 63 74 69  p(argv[1], "acti
25a0: 76 61 74 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d  vate", length) =
25b0: 3d 20 30 29 29 20 7b 0a 20 20 20 20 20 20 20 20  = 0)) {.        
25c0: 72 65 73 75 6c 74 20 3d 20 43 74 6b 5f 55 6e 73  result = Ctk_Uns
25d0: 75 70 70 6f 72 74 65 64 28 69 6e 74 65 72 70 2c  upported(interp,
25e0: 20 22 73 63 72 6f 6c 6c 62 61 72 20 61 63 74 69   "scrollbar acti
25f0: 76 61 74 65 22 29 3b 0a 20 20 20 20 7d 20 65 6c  vate");.    } el
2600: 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 63 27  se if ((c == 'c'
2610: 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72  ) && (strncmp(ar
2620: 67 76 5b 31 5d 2c 20 22 63 67 65 74 22 2c 20 6c  gv[1], "cget", l
2630: 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09 20 20  ength) == 0)..  
2640: 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20    && (length >= 
2650: 32 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20  2)) {..if (argc 
2660: 21 3d 20 33 29 20 7b 0a 09 20 20 20 20 54 63 6c  != 3) {..    Tcl
2670: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2680: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2690: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
26a0: 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30  "",...    argv[0
26b0: 5d 2c 20 22 20 63 67 65 74 20 6f 70 74 69 6f 6e  ], " cget option
26c0: 5c 22 22 2c 0a 09 09 20 20 20 20 28 63 68 61 72  \"",...    (char
26d0: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20   *) NULL);..    
26e0: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09  goto error;..}..
26f0: 72 65 73 75 6c 74 20 3d 20 54 6b 5f 43 6f 6e 66  result = Tk_Conf
2700: 69 67 75 72 65 56 61 6c 75 65 28 69 6e 74 65 72  igureValue(inter
2710: 70 2c 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b  p, scrollPtr->tk
2720: 77 69 6e 2c 20 63 6f 6e 66 69 67 53 70 65 63 73  win, configSpecs
2730: 2c 0a 09 09 28 63 68 61 72 20 2a 29 20 73 63 72  ,...(char *) scr
2740: 6f 6c 6c 50 74 72 2c 20 61 72 67 76 5b 32 5d 2c  ollPtr, argv[2],
2750: 20 30 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20   0);.    } else 
2760: 69 66 20 28 28 63 20 3d 3d 20 27 63 27 29 20 26  if ((c == 'c') &
2770: 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b  & (strncmp(argv[
2780: 31 5d 2c 20 22 63 6f 6e 66 69 67 75 72 65 22 2c  1], "configure",
2790: 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09   length) == 0)..
27a0: 20 20 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e      && (length >
27b0: 3d 20 32 29 29 20 7b 0a 09 69 66 20 28 61 72 67  = 2)) {..if (arg
27c0: 63 20 3d 3d 20 32 29 20 7b 0a 09 20 20 20 20 72  c == 2) {..    r
27d0: 65 73 75 6c 74 20 3d 20 54 6b 5f 43 6f 6e 66 69  esult = Tk_Confi
27e0: 67 75 72 65 49 6e 66 6f 28 69 6e 74 65 72 70 2c  gureInfo(interp,
27f0: 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69   scrollPtr->tkwi
2800: 6e 2c 20 63 6f 6e 66 69 67 53 70 65 63 73 2c 0a  n, configSpecs,.
2810: 09 09 20 20 20 20 28 63 68 61 72 20 2a 29 20 73  ..    (char *) s
2820: 63 72 6f 6c 6c 50 74 72 2c 20 28 63 68 61 72 20  crollPtr, (char 
2830: 2a 29 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 7d 20  *) NULL, 0);..} 
2840: 65 6c 73 65 20 69 66 20 28 61 72 67 63 20 3d 3d  else if (argc ==
2850: 20 33 29 20 7b 0a 09 20 20 20 20 72 65 73 75 6c   3) {..    resul
2860: 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72 65  t = Tk_Configure
2870: 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 73 63 72  Info(interp, scr
2880: 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63  ollPtr->tkwin, c
2890: 6f 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 20 20  onfigSpecs,...  
28a0: 20 20 28 63 68 61 72 20 2a 29 20 73 63 72 6f 6c    (char *) scrol
28b0: 6c 50 74 72 2c 20 61 72 67 76 5b 32 5d 2c 20 30  lPtr, argv[2], 0
28c0: 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  );..} else {..  
28d0: 20 20 72 65 73 75 6c 74 20 3d 20 43 6f 6e 66 69    result = Confi
28e0: 67 75 72 65 53 63 72 6f 6c 6c 62 61 72 28 69 6e  gureScrollbar(in
28f0: 74 65 72 70 2c 20 73 63 72 6f 6c 6c 50 74 72 2c  terp, scrollPtr,
2900: 20 61 72 67 63 2d 32 2c 20 61 72 67 76 2b 32 2c   argc-2, argv+2,
2910: 0a 09 09 20 20 20 20 54 4b 5f 43 4f 4e 46 49 47  ...    TK_CONFIG
2920: 5f 41 52 47 56 5f 4f 4e 4c 59 29 3b 0a 09 7d 0a  _ARGV_ONLY);..}.
2930: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
2940: 63 20 3d 3d 20 27 64 27 29 20 26 26 20 28 73 74  c == 'd') && (st
2950: 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22  rncmp(argv[1], "
2960: 64 65 6c 74 61 22 2c 20 6c 65 6e 67 74 68 29 20  delta", length) 
2970: 3d 3d 20 30 29 29 20 7b 0a 09 69 6e 74 20 78 44  == 0)) {..int xD
2980: 65 6c 74 61 2c 20 79 44 65 6c 74 61 2c 20 70 69  elta, yDelta, pi
2990: 78 65 6c 73 2c 20 6c 65 6e 67 74 68 3b 0a 09 64  xels, length;..d
29a0: 6f 75 62 6c 65 20 66 72 61 63 74 69 6f 6e 3b 0a  ouble fraction;.
29b0: 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20 34 29  ..if (argc != 4)
29c0: 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65   {..    Tcl_Appe
29d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
29e0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
29f0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09  should be \"",..
2a00: 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22 20  .    argv[0], " 
2a10: 64 65 6c 74 61 20 78 44 65 6c 74 61 20 79 44 65  delta xDelta yDe
2a20: 6c 74 61 5c 22 22 2c 20 28 63 68 61 72 20 2a 29  lta\"", (char *)
2a30: 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74   NULL);..    got
2a40: 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 69 66 20  o error;..}..if 
2a50: 28 28 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ((Tcl_GetInt(int
2a60: 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 78  erp, argv[2], &x
2a70: 44 65 6c 74 61 29 20 21 3d 20 54 43 4c 5f 4f 4b  Delta) != TCL_OK
2a80: 29 0a 09 09 7c 7c 20 28 54 63 6c 5f 47 65 74 49  )...|| (Tcl_GetI
2a90: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
2aa0: 33 5d 2c 20 26 79 44 65 6c 74 61 29 20 21 3d 20  3], &yDelta) != 
2ab0: 54 43 4c 5f 4f 4b 29 29 20 7b 0a 09 20 20 20 20  TCL_OK)) {..    
2ac0: 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09  goto error;..}..
2ad0: 69 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 76  if (scrollPtr->v
2ae0: 65 72 74 69 63 61 6c 29 20 7b 0a 09 20 20 20 20  ertical) {..    
2af0: 70 69 78 65 6c 73 20 3d 20 79 44 65 6c 74 61 3b  pixels = yDelta;
2b00: 0a 09 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 54  ..    length = T
2b10: 6b 5f 48 65 69 67 68 74 28 73 63 72 6f 6c 6c 50  k_Height(scrollP
2b20: 74 72 2d 3e 74 6b 77 69 6e 29 20 2d 20 31 0a 09  tr->tkwin) - 1..
2b30: 09 20 20 20 20 2d 20 32 2a 28 41 52 52 4f 57 5f  .    - 2*(ARROW_
2b40: 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c 6c 50  LENGTH + scrollP
2b50: 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 29  tr->borderWidth)
2b60: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  ;..} else {..   
2b70: 20 70 69 78 65 6c 73 20 3d 20 78 44 65 6c 74 61   pixels = xDelta
2b80: 3b 0a 09 20 20 20 20 6c 65 6e 67 74 68 20 3d 20  ;..    length = 
2b90: 54 6b 5f 57 69 64 74 68 28 73 63 72 6f 6c 6c 50  Tk_Width(scrollP
2ba0: 74 72 2d 3e 74 6b 77 69 6e 29 20 2d 20 31 0a 09  tr->tkwin) - 1..
2bb0: 09 20 20 20 20 2d 20 32 2a 28 41 52 52 4f 57 5f  .    - 2*(ARROW_
2bc0: 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c 6c 50  LENGTH + scrollP
2bd0: 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 29  tr->borderWidth)
2be0: 3b 0a 09 7d 0a 09 69 66 20 28 6c 65 6e 67 74 68  ;..}..if (length
2bf0: 20 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20 66 72   == 0) {..    fr
2c00: 61 63 74 69 6f 6e 20 3d 20 30 2e 30 3b 0a 09 7d  action = 0.0;..}
2c10: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 66 72 61   else {..    fra
2c20: 63 74 69 6f 6e 20 3d 20 28 28 64 6f 75 62 6c 65  ction = ((double
2c30: 29 20 70 69 78 65 6c 73 20 2f 20 28 64 6f 75 62  ) pixels / (doub
2c40: 6c 65 29 20 6c 65 6e 67 74 68 29 3b 0a 09 7d 0a  le) length);..}.
2c50: 09 7b 0a 09 20 20 63 68 61 72 20 62 75 66 66 65  .{..  char buffe
2c60: 72 5b 33 30 5d 3b 0a 09 20 20 73 70 72 69 6e 74  r[30];..  sprint
2c70: 66 28 62 75 66 66 65 72 2c 20 22 25 67 22 2c 20  f(buffer, "%g", 
2c80: 66 72 61 63 74 69 6f 6e 29 3b 0a 09 20 20 54 63  fraction);..  Tc
2c90: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
2ca0: 72 70 2c 62 75 66 66 65 72 2c 54 43 4c 5f 56 4f  rp,buffer,TCL_VO
2cb0: 4c 41 54 49 4c 45 29 3b 0a 09 7d 0a 20 20 20 20  LATILE);..}.    
2cc0: 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d  } else if ((c ==
2cd0: 20 27 66 27 29 20 26 26 20 28 73 74 72 6e 63 6d   'f') && (strncm
2ce0: 70 28 61 72 67 76 5b 31 5d 2c 20 22 66 72 61 63  p(argv[1], "frac
2cf0: 74 69 6f 6e 22 2c 20 6c 65 6e 67 74 68 29 20 3d  tion", length) =
2d00: 3d 20 30 29 29 20 7b 0a 09 69 6e 74 20 78 2c 20  = 0)) {..int x, 
2d10: 79 2c 20 70 6f 73 2c 20 6c 65 6e 67 74 68 3b 0a  y, pos, length;.
2d20: 09 64 6f 75 62 6c 65 20 66 72 61 63 74 69 6f 6e  .double fraction
2d30: 3b 0a 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20  ;...if (argc != 
2d40: 34 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70  4) {..    Tcl_Ap
2d50: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2d60: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
2d70: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
2d80: 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20  ...    argv[0], 
2d90: 22 20 66 72 61 63 74 69 6f 6e 20 78 20 79 5c 22  " fraction x y\"
2da0: 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  ", (char *) NULL
2db0: 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72  );..    goto err
2dc0: 6f 72 3b 0a 09 7d 0a 09 69 66 20 28 28 54 63 6c  or;..}..if ((Tcl
2dd0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
2de0: 61 72 67 76 5b 32 5d 2c 20 26 78 29 20 21 3d 20  argv[2], &x) != 
2df0: 54 43 4c 5f 4f 4b 29 0a 09 09 7c 7c 20 28 54 63  TCL_OK)...|| (Tc
2e00: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
2e10: 20 61 72 67 76 5b 33 5d 2c 20 26 79 29 20 21 3d   argv[3], &y) !=
2e20: 20 54 43 4c 5f 4f 4b 29 29 20 7b 0a 09 20 20 20   TCL_OK)) {..   
2e30: 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a   goto error;..}.
2e40: 09 69 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e  .if (scrollPtr->
2e50: 76 65 72 74 69 63 61 6c 29 20 7b 0a 09 20 20 20  vertical) {..   
2e60: 20 70 6f 73 20 3d 20 79 20 2d 20 28 41 52 52 4f   pos = y - (ARRO
2e70: 57 5f 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c  W_LENGTH + scrol
2e80: 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74  lPtr->borderWidt
2e90: 68 29 3b 0a 09 20 20 20 20 6c 65 6e 67 74 68 20  h);..    length 
2ea0: 3d 20 54 6b 5f 48 65 69 67 68 74 28 73 63 72 6f  = Tk_Height(scro
2eb0: 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e 29 20 2d 20  llPtr->tkwin) - 
2ec0: 31 0a 09 09 20 20 20 20 2d 20 32 2a 28 41 52 52  1...    - 2*(ARR
2ed0: 4f 57 5f 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f  OW_LENGTH + scro
2ee0: 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64  llPtr->borderWid
2ef0: 74 68 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  th);..} else {..
2f00: 20 20 20 20 70 6f 73 20 3d 20 78 20 2d 20 28 41      pos = x - (A
2f10: 52 52 4f 57 5f 4c 45 4e 47 54 48 20 2b 20 73 63  RROW_LENGTH + sc
2f20: 72 6f 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57  rollPtr->borderW
2f30: 69 64 74 68 29 3b 0a 09 20 20 20 20 6c 65 6e 67  idth);..    leng
2f40: 74 68 20 3d 20 54 6b 5f 57 69 64 74 68 28 73 63  th = Tk_Width(sc
2f50: 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e 29 20  rollPtr->tkwin) 
2f60: 2d 20 31 0a 09 09 20 20 20 20 2d 20 32 2a 28 41  - 1...    - 2*(A
2f70: 52 52 4f 57 5f 4c 45 4e 47 54 48 20 2b 20 73 63  RROW_LENGTH + sc
2f80: 72 6f 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57  rollPtr->borderW
2f90: 69 64 74 68 29 3b 0a 09 7d 0a 09 69 66 20 28 6c  idth);..}..if (l
2fa0: 65 6e 67 74 68 20 3d 3d 20 30 29 20 7b 0a 09 20  ength == 0) {.. 
2fb0: 20 20 20 66 72 61 63 74 69 6f 6e 20 3d 20 30 2e     fraction = 0.
2fc0: 30 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  0;..} else {..  
2fd0: 20 20 66 72 61 63 74 69 6f 6e 20 3d 20 28 28 64    fraction = ((d
2fe0: 6f 75 62 6c 65 29 20 70 6f 73 20 2f 20 28 64 6f  ouble) pos / (do
2ff0: 75 62 6c 65 29 20 6c 65 6e 67 74 68 29 3b 0a 09  uble) length);..
3000: 7d 0a 09 69 66 20 28 66 72 61 63 74 69 6f 6e 20  }..if (fraction 
3010: 3c 20 30 29 20 7b 0a 09 20 20 20 20 66 72 61 63  < 0) {..    frac
3020: 74 69 6f 6e 20 3d 20 30 3b 0a 09 7d 20 65 6c 73  tion = 0;..} els
3030: 65 20 69 66 20 28 66 72 61 63 74 69 6f 6e 20 3e  e if (fraction >
3040: 20 31 2e 30 29 20 7b 0a 09 20 20 20 20 66 72 61   1.0) {..    fra
3050: 63 74 69 6f 6e 20 3d 20 31 2e 30 3b 0a 09 7d 0a  ction = 1.0;..}.
3060: 09 7b 0a 09 20 20 63 68 61 72 20 62 75 66 66 65  .{..  char buffe
3070: 72 5b 33 30 5d 3b 0a 09 20 20 73 70 72 69 6e 74  r[30];..  sprint
3080: 66 28 62 75 66 66 65 72 2c 20 22 25 67 22 2c 20  f(buffer, "%g", 
3090: 66 72 61 63 74 69 6f 6e 29 3b 0a 09 20 20 54 63  fraction);..  Tc
30a0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
30b0: 72 70 2c 62 75 66 66 65 72 2c 54 43 4c 5f 56 4f  rp,buffer,TCL_VO
30c0: 4c 41 54 49 4c 45 29 3b 0a 09 7d 0a 20 20 20 20  LATILE);..}.    
30d0: 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d  } else if ((c ==
30e0: 20 27 67 27 29 20 26 26 20 28 73 74 72 6e 63 6d   'g') && (strncm
30f0: 70 28 61 72 67 76 5b 31 5d 2c 20 22 67 65 74 22  p(argv[1], "get"
3100: 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29  , length) == 0))
3110: 20 7b 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20   {..if (argc != 
3120: 32 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70  2) {..    Tcl_Ap
3130: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
3140: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
3150: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
3160: 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20  ...    argv[0], 
3170: 22 20 67 65 74 5c 22 22 2c 20 28 63 68 61 72 20  " get\"", (char 
3180: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67  *) NULL);..    g
3190: 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 69  oto error;..}..i
31a0: 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 6c  f (scrollPtr->fl
31b0: 61 67 73 20 26 20 4e 45 57 5f 53 54 59 4c 45 5f  ags & NEW_STYLE_
31c0: 43 4f 4d 4d 41 4e 44 53 29 20 7b 0a 09 20 20 20  COMMANDS) {..   
31d0: 20 63 68 61 72 20 66 69 72 73 74 5b 54 43 4c 5f   char first[TCL_
31e0: 44 4f 55 42 4c 45 5f 53 50 41 43 45 5d 2c 20 6c  DOUBLE_SPACE], l
31f0: 61 73 74 5b 54 43 4c 5f 44 4f 55 42 4c 45 5f 53  ast[TCL_DOUBLE_S
3200: 50 41 43 45 5d 3b 0a 0a 09 20 20 20 20 54 63 6c  PACE];...    Tcl
3210: 5f 50 72 69 6e 74 44 6f 75 62 6c 65 28 69 6e 74  _PrintDouble(int
3220: 65 72 70 2c 20 73 63 72 6f 6c 6c 50 74 72 2d 3e  erp, scrollPtr->
3230: 66 69 72 73 74 46 72 61 63 74 69 6f 6e 2c 20 66  firstFraction, f
3240: 69 72 73 74 29 3b 0a 09 20 20 20 20 54 63 6c 5f  irst);..    Tcl_
3250: 50 72 69 6e 74 44 6f 75 62 6c 65 28 69 6e 74 65  PrintDouble(inte
3260: 72 70 2c 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 6c  rp, scrollPtr->l
3270: 61 73 74 46 72 61 63 74 69 6f 6e 2c 20 6c 61 73  astFraction, las
3280: 74 29 3b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  t);..    Tcl_App
3290: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
32a0: 2c 20 66 69 72 73 74 2c 20 22 20 22 2c 20 6c 61  , first, " ", la
32b0: 73 74 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c  st, (char *) NUL
32c0: 4c 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20  L);..} else {.. 
32d0: 20 20 20 63 68 61 72 20 62 75 66 66 65 72 5b 31     char buffer[1
32e0: 30 30 5d 3b 0a 09 20 20 20 20 73 70 72 69 6e 74  00];..    sprint
32f0: 66 28 62 75 66 66 65 72 2c 20 22 25 64 20 25 64  f(buffer, "%d %d
3300: 20 25 64 20 25 64 22 2c 20 73 63 72 6f 6c 6c 50   %d %d", scrollP
3310: 74 72 2d 3e 74 6f 74 61 6c 55 6e 69 74 73 2c 0a  tr->totalUnits,.
3320: 09 09 20 20 20 20 73 63 72 6f 6c 6c 50 74 72 2d  ..    scrollPtr-
3330: 3e 77 69 6e 64 6f 77 55 6e 69 74 73 2c 20 73 63  >windowUnits, sc
3340: 72 6f 6c 6c 50 74 72 2d 3e 66 69 72 73 74 55 6e  rollPtr->firstUn
3350: 69 74 2c 0a 09 09 20 20 20 20 73 63 72 6f 6c 6c  it,...    scroll
3360: 50 74 72 2d 3e 6c 61 73 74 55 6e 69 74 29 3b 0a  Ptr->lastUnit);.
3370: 09 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75  .    Tcl_SetResu
3380: 6c 74 28 69 6e 74 65 72 70 2c 20 62 75 66 66 65  lt(interp, buffe
3390: 72 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29  r, TCL_VOLATILE)
33a0: 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20  ;..}.    } else 
33b0: 69 66 20 28 28 63 20 3d 3d 20 27 69 27 29 20 26  if ((c == 'i') &
33c0: 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b  & (strncmp(argv[
33d0: 31 5d 2c 20 22 69 64 65 6e 74 69 66 79 22 2c 20  1], "identify", 
33e0: 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b  length) == 0)) {
33f0: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20  .        result 
3400: 3d 20 43 74 6b 5f 55 6e 73 75 70 70 6f 72 74 65  = Ctk_Unsupporte
3410: 64 28 69 6e 74 65 72 70 2c 20 22 73 63 72 6f 6c  d(interp, "scrol
3420: 6c 62 61 72 20 69 64 65 6e 74 69 66 79 22 29 3b  lbar identify");
3430: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
3440: 28 63 20 3d 3d 20 27 73 27 29 20 26 26 20 28 73  (c == 's') && (s
3450: 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20  trncmp(argv[1], 
3460: 22 73 65 74 22 2c 20 6c 65 6e 67 74 68 29 20 3d  "set", length) =
3470: 3d 20 30 29 29 20 7b 0a 09 69 6e 74 20 74 6f 74  = 0)) {..int tot
3480: 61 6c 55 6e 69 74 73 2c 20 77 69 6e 64 6f 77 55  alUnits, windowU
3490: 6e 69 74 73 2c 20 66 69 72 73 74 55 6e 69 74 2c  nits, firstUnit,
34a0: 20 6c 61 73 74 55 6e 69 74 3b 0a 0a 09 69 66 20   lastUnit;...if 
34b0: 28 61 72 67 63 20 3d 3d 20 34 29 20 7b 0a 09 20  (argc == 4) {.. 
34c0: 20 20 20 64 6f 75 62 6c 65 20 66 69 72 73 74 2c     double first,
34d0: 20 6c 61 73 74 3b 0a 0a 09 20 20 20 20 69 66 20   last;...    if 
34e0: 28 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 28 69  (Tcl_GetDouble(i
34f0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20  nterp, argv[2], 
3500: 26 66 69 72 73 74 29 20 21 3d 20 54 43 4c 5f 4f  &first) != TCL_O
3510: 4b 29 20 7b 0a 09 09 67 6f 74 6f 20 65 72 72 6f  K) {...goto erro
3520: 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69  r;..    }..    i
3530: 66 20 28 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f (Tcl_GetDouble
3540: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 33 5d  (interp, argv[3]
3550: 2c 20 26 6c 61 73 74 29 20 21 3d 20 54 43 4c 5f  , &last) != TCL_
3560: 4f 4b 29 20 7b 0a 09 09 67 6f 74 6f 20 65 72 72  OK) {...goto err
3570: 6f 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  or;..    }..    
3580: 69 66 20 28 66 69 72 73 74 20 3c 20 30 29 20 7b  if (first < 0) {
3590: 0a 09 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 69  ...scrollPtr->fi
35a0: 72 73 74 46 72 61 63 74 69 6f 6e 20 3d 20 30 3b  rstFraction = 0;
35b0: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  ..    } else if 
35c0: 28 66 69 72 73 74 20 3e 20 31 2e 30 29 20 7b 0a  (first > 1.0) {.
35d0: 09 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 69 72  ..scrollPtr->fir
35e0: 73 74 46 72 61 63 74 69 6f 6e 20 3d 20 31 2e 30  stFraction = 1.0
35f0: 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ;..    } else {.
3600: 09 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 69 72  ..scrollPtr->fir
3610: 73 74 46 72 61 63 74 69 6f 6e 20 3d 20 66 69 72  stFraction = fir
3620: 73 74 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  st;..    }..    
3630: 69 66 20 28 6c 61 73 74 20 3c 20 73 63 72 6f 6c  if (last < scrol
3640: 6c 50 74 72 2d 3e 66 69 72 73 74 46 72 61 63 74  lPtr->firstFract
3650: 69 6f 6e 29 20 7b 0a 09 09 73 63 72 6f 6c 6c 50  ion) {...scrollP
3660: 74 72 2d 3e 6c 61 73 74 46 72 61 63 74 69 6f 6e  tr->lastFraction
3670: 20 3d 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 69   = scrollPtr->fi
3680: 72 73 74 46 72 61 63 74 69 6f 6e 3b 0a 09 20 20  rstFraction;..  
3690: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6c 61 73    } else if (las
36a0: 74 20 3e 20 31 2e 30 29 20 7b 0a 09 09 73 63 72  t > 1.0) {...scr
36b0: 6f 6c 6c 50 74 72 2d 3e 6c 61 73 74 46 72 61 63  ollPtr->lastFrac
36c0: 74 69 6f 6e 20 3d 20 31 2e 30 3b 0a 09 20 20 20  tion = 1.0;..   
36d0: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 63 72 6f   } else {...scro
36e0: 6c 6c 50 74 72 2d 3e 6c 61 73 74 46 72 61 63 74  llPtr->lastFract
36f0: 69 6f 6e 20 3d 20 6c 61 73 74 3b 0a 09 20 20 20  ion = last;..   
3700: 20 7d 0a 09 20 20 20 20 73 63 72 6f 6c 6c 50 74   }..    scrollPt
3710: 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 4e 45 57 5f  r->flags |= NEW_
3720: 53 54 59 4c 45 5f 43 4f 4d 4d 41 4e 44 53 3b 0a  STYLE_COMMANDS;.
3730: 09 7d 20 65 6c 73 65 20 69 66 20 28 61 72 67 63  .} else if (argc
3740: 20 3d 3d 20 36 29 20 7b 0a 09 20 20 20 20 69 66   == 6) {..    if
3750: 20 28 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74   (Tcl_GetInt(int
3760: 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 74  erp, argv[2], &t
3770: 6f 74 61 6c 55 6e 69 74 73 29 20 21 3d 20 54 43  otalUnits) != TC
3780: 4c 5f 4f 4b 29 20 7b 0a 09 09 67 6f 74 6f 20 65  L_OK) {...goto e
3790: 72 72 6f 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20  rror;..    }..  
37a0: 20 20 69 66 20 28 74 6f 74 61 6c 55 6e 69 74 73    if (totalUnits
37b0: 20 3c 20 30 29 20 7b 0a 09 09 74 6f 74 61 6c 55   < 0) {...totalU
37c0: 6e 69 74 73 20 3d 20 30 3b 0a 09 20 20 20 20 7d  nits = 0;..    }
37d0: 0a 09 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65  ..    if (Tcl_Ge
37e0: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
37f0: 76 5b 33 5d 2c 20 26 77 69 6e 64 6f 77 55 6e 69  v[3], &windowUni
3800: 74 73 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ts) != TCL_OK) {
3810: 0a 09 09 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09  ...goto error;..
3820: 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28 77      }..    if (w
3830: 69 6e 64 6f 77 55 6e 69 74 73 20 3c 20 30 29 20  indowUnits < 0) 
3840: 7b 0a 09 09 77 69 6e 64 6f 77 55 6e 69 74 73 20  {...windowUnits 
3850: 3d 20 30 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20  = 0;..    }..   
3860: 20 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 28   if (Tcl_GetInt(
3870: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 34 5d 2c  interp, argv[4],
3880: 20 26 66 69 72 73 74 55 6e 69 74 29 20 21 3d 20   &firstUnit) != 
3890: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 67 6f 74 6f  TCL_OK) {...goto
38a0: 20 65 72 72 6f 72 3b 0a 09 20 20 20 20 7d 0a 09   error;..    }..
38b0: 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74 49      if (Tcl_GetI
38c0: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
38d0: 35 5d 2c 20 26 6c 61 73 74 55 6e 69 74 29 20 21  5], &lastUnit) !
38e0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 67 6f  = TCL_OK) {...go
38f0: 74 6f 20 65 72 72 6f 72 3b 0a 09 20 20 20 20 7d  to error;..    }
3900: 0a 09 20 20 20 20 69 66 20 28 74 6f 74 61 6c 55  ..    if (totalU
3910: 6e 69 74 73 20 3e 20 30 29 20 7b 0a 09 09 69 66  nits > 0) {...if
3920: 20 28 6c 61 73 74 55 6e 69 74 20 3c 20 66 69 72   (lastUnit < fir
3930: 73 74 55 6e 69 74 29 20 7b 0a 09 09 20 20 20 20  stUnit) {...    
3940: 6c 61 73 74 55 6e 69 74 20 3d 20 66 69 72 73 74  lastUnit = first
3950: 55 6e 69 74 3b 0a 09 09 7d 0a 09 20 20 20 20 7d  Unit;...}..    }
3960: 20 65 6c 73 65 20 7b 0a 09 09 66 69 72 73 74 55   else {...firstU
3970: 6e 69 74 20 3d 20 6c 61 73 74 55 6e 69 74 20 3d  nit = lastUnit =
3980: 20 30 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20   0;..    }..    
3990: 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6f 74 61 6c  scrollPtr->total
39a0: 55 6e 69 74 73 20 3d 20 74 6f 74 61 6c 55 6e 69  Units = totalUni
39b0: 74 73 3b 0a 09 20 20 20 20 73 63 72 6f 6c 6c 50  ts;..    scrollP
39c0: 74 72 2d 3e 77 69 6e 64 6f 77 55 6e 69 74 73 20  tr->windowUnits 
39d0: 3d 20 77 69 6e 64 6f 77 55 6e 69 74 73 3b 0a 09  = windowUnits;..
39e0: 20 20 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 66      scrollPtr->f
39f0: 69 72 73 74 55 6e 69 74 20 3d 20 66 69 72 73 74  irstUnit = first
3a00: 55 6e 69 74 3b 0a 09 20 20 20 20 73 63 72 6f 6c  Unit;..    scrol
3a10: 6c 50 74 72 2d 3e 6c 61 73 74 55 6e 69 74 20 3d  lPtr->lastUnit =
3a20: 20 6c 61 73 74 55 6e 69 74 3b 0a 09 20 20 20 20   lastUnit;..    
3a30: 69 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 74  if (scrollPtr->t
3a40: 6f 74 61 6c 55 6e 69 74 73 20 3d 3d 20 30 29 20  otalUnits == 0) 
3a50: 7b 0a 09 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 66  {...scrollPtr->f
3a60: 69 72 73 74 46 72 61 63 74 69 6f 6e 20 3d 20 30  irstFraction = 0
3a70: 2e 30 3b 0a 09 09 73 63 72 6f 6c 6c 50 74 72 2d  .0;...scrollPtr-
3a80: 3e 6c 61 73 74 46 72 61 63 74 69 6f 6e 20 3d 20  >lastFraction = 
3a90: 31 2e 30 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65  1.0;..    } else
3aa0: 20 7b 0a 09 09 73 63 72 6f 6c 6c 50 74 72 2d 3e   {...scrollPtr->
3ab0: 66 69 72 73 74 46 72 61 63 74 69 6f 6e 20 3d 20  firstFraction = 
3ac0: 28 28 64 6f 75 62 6c 65 29 20 66 69 72 73 74 55  ((double) firstU
3ad0: 6e 69 74 29 2f 74 6f 74 61 6c 55 6e 69 74 73 3b  nit)/totalUnits;
3ae0: 0a 09 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 6c 61  ...scrollPtr->la
3af0: 73 74 46 72 61 63 74 69 6f 6e 20 3d 20 28 28 64  stFraction = ((d
3b00: 6f 75 62 6c 65 29 20 28 6c 61 73 74 55 6e 69 74  ouble) (lastUnit
3b10: 2b 31 29 29 2f 74 6f 74 61 6c 55 6e 69 74 73 3b  +1))/totalUnits;
3b20: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 63 72  ..    }..    scr
3b30: 6f 6c 6c 50 74 72 2d 3e 66 6c 61 67 73 20 26 3d  ollPtr->flags &=
3b40: 20 7e 4e 45 57 5f 53 54 59 4c 45 5f 43 4f 4d 4d   ~NEW_STYLE_COMM
3b50: 41 4e 44 53 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  ANDS;..} else {.
3b60: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3b70: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3b80: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3b90: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20  uld be \"",...  
3ba0: 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 73 65 74    argv[0], " set
3bb0: 20 66 69 72 73 74 46 72 61 63 74 69 6f 6e 20 6c   firstFraction l
3bc0: 61 73 74 46 72 61 63 74 69 6f 6e 5c 22 20 6f 72  astFraction\" or
3bd0: 20 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76   \"",...    argv
3be0: 5b 30 5d 2c 0a 09 09 20 20 20 20 22 20 73 65 74  [0],...    " set
3bf0: 20 74 6f 74 61 6c 55 6e 69 74 73 20 77 69 6e 64   totalUnits wind
3c00: 6f 77 55 6e 69 74 73 20 66 69 72 73 74 55 6e 69  owUnits firstUni
3c10: 74 20 6c 61 73 74 55 6e 69 74 5c 22 22 2c 0a 09  t lastUnit\"",..
3c20: 09 20 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55  .    (char *) NU
3c30: 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20 65  LL);..    goto e
3c40: 72 72 6f 72 3b 0a 09 7d 0a 09 43 6f 6d 70 75 74  rror;..}..Comput
3c50: 65 53 63 72 6f 6c 6c 62 61 72 47 65 6f 6d 65 74  eScrollbarGeomet
3c60: 72 79 28 73 63 72 6f 6c 6c 50 74 72 29 3b 0a 09  ry(scrollPtr);..
3c70: 45 76 65 6e 74 75 61 6c 6c 79 52 65 64 72 61 77  EventuallyRedraw
3c80: 28 73 63 72 6f 6c 6c 50 74 72 29 3b 0a 20 20 20  (scrollPtr);.   
3c90: 20 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c 5f 41   } else {..Tcl_A
3ca0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
3cb0: 72 70 2c 20 22 62 61 64 20 6f 70 74 69 6f 6e 20  rp, "bad option 
3cc0: 5c 22 22 2c 20 61 72 67 76 5b 31 5d 2c 0a 09 09  \"", argv[1],...
3cd0: 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 61 63 74  "\": must be act
3ce0: 69 76 61 74 65 2c 20 63 67 65 74 2c 20 63 6f 6e  ivate, cget, con
3cf0: 66 69 67 75 72 65 2c 20 64 65 6c 74 61 2c 20 66  figure, delta, f
3d00: 72 61 63 74 69 6f 6e 2c 20 22 2c 0a 09 09 22 67  raction, ",..."g
3d10: 65 74 2c 20 69 64 65 6e 74 69 66 79 2c 20 6f 72  et, identify, or
3d20: 20 73 65 74 22 2c 20 28 63 68 61 72 20 2a 29 20   set", (char *) 
3d30: 4e 55 4c 4c 29 3b 0a 09 67 6f 74 6f 20 65 72 72  NULL);..goto err
3d40: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 6b  or;.    }.    Tk
3d50: 5f 52 65 6c 65 61 73 65 28 28 43 6c 69 65 6e 74  _Release((Client
3d60: 44 61 74 61 29 20 73 63 72 6f 6c 6c 50 74 72 29  Data) scrollPtr)
3d70: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 65 73  ;.    return res
3d80: 75 6c 74 3b 0a 0a 20 20 20 20 65 72 72 6f 72 3a  ult;..    error:
3d90: 0a 20 20 20 20 54 6b 5f 52 65 6c 65 61 73 65 28  .    Tk_Release(
3da0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 73 63 72  (ClientData) scr
3db0: 6f 6c 6c 50 74 72 29 3b 0a 20 20 20 20 72 65 74  ollPtr);.    ret
3dc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d  urn TCL_ERROR;.}
3dd0: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
3de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
3e20: 2a 0a 20 2a 20 44 65 73 74 72 6f 79 53 63 72 6f  *. * DestroyScro
3e30: 6c 6c 62 61 72 20 2d 2d 0a 20 2a 0a 20 2a 09 54  llbar --. *. *.T
3e40: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
3e50: 20 69 6e 76 6f 6b 65 64 20 62 79 20 54 6b 5f 45   invoked by Tk_E
3e60: 76 65 6e 74 75 61 6c 6c 79 46 72 65 65 20 6f 72  ventuallyFree or
3e70: 20 54 6b 5f 52 65 6c 65 61 73 65 0a 20 2a 09 74   Tk_Release. *.t
3e80: 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 69  o clean up the i
3e90: 6e 74 65 72 6e 61 6c 20 73 74 72 75 63 74 75 72  nternal structur
3ea0: 65 20 6f 66 20 61 20 73 63 72 6f 6c 6c 62 61 72  e of a scrollbar
3eb0: 20 61 74 20 61 20 73 61 66 65 20 74 69 6d 65 0a   at a safe time.
3ec0: 20 2a 09 28 77 68 65 6e 20 6e 6f 2d 6f 6e 65 20   *.(when no-one 
3ed0: 69 73 20 75 73 69 6e 67 20 69 74 20 61 6e 79 6d  is using it anym
3ee0: 6f 72 65 29 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  ore).. *. * Resu
3ef0: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
3f00: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
3f10: 3a 0a 20 2a 09 45 76 65 72 79 74 68 69 6e 67 20  :. *.Everything 
3f20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
3f30: 74 68 65 20 73 63 72 6f 6c 6c 62 61 72 20 69 73  the scrollbar is
3f40: 20 66 72 65 65 64 20 75 70 2e 0a 20 2a 0a 20 2a   freed up.. *. *
3f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f90: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
3fa0: 69 63 20 76 6f 69 64 0a 44 65 73 74 72 6f 79 53  ic void.DestroyS
3fb0: 63 72 6f 6c 6c 62 61 72 28 63 6c 69 65 6e 74 44  crollbar(clientD
3fc0: 61 74 61 29 0a 20 20 20 20 43 6c 69 65 6e 74 44  ata).    ClientD
3fd0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b 09  ata clientData;.
3fe0: 2f 2a 20 49 6e 66 6f 20 61 62 6f 75 74 20 73 63  /* Info about sc
3ff0: 72 6f 6c 6c 62 61 72 20 77 69 64 67 65 74 2e 20  rollbar widget. 
4000: 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65  */.{.    registe
4010: 72 20 53 63 72 6f 6c 6c 62 61 72 20 2a 73 63 72  r Scrollbar *scr
4020: 6f 6c 6c 50 74 72 20 3d 20 28 53 63 72 6f 6c 6c  ollPtr = (Scroll
4030: 62 61 72 20 2a 29 20 63 6c 69 65 6e 74 44 61 74  bar *) clientDat
4040: 61 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  a;..    /*.     
4050: 2a 20 46 72 65 65 20 75 70 20 61 6c 6c 20 74 68  * Free up all th
4060: 65 20 73 74 75 66 66 20 74 68 61 74 20 72 65 71  e stuff that req
4070: 75 69 72 65 73 20 73 70 65 63 69 61 6c 20 68 61  uires special ha
4080: 6e 64 6c 69 6e 67 2c 20 74 68 65 6e 0a 20 20 20  ndling, then.   
4090: 20 20 2a 20 6c 65 74 20 54 6b 5f 46 72 65 65 4f    * let Tk_FreeO
40a0: 70 74 69 6f 6e 73 20 68 61 6e 64 6c 65 20 61 6c  ptions handle al
40b0: 6c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6f  l the standard o
40c0: 70 74 69 6f 6e 2d 72 65 6c 61 74 65 64 0a 20 20  ption-related.  
40d0: 20 20 20 2a 20 73 74 75 66 66 2e 0a 20 20 20 20     * stuff..    
40e0: 20 2a 2f 0a 20 20 20 20 54 6b 5f 46 72 65 65 4f   */.    Tk_FreeO
40f0: 70 74 69 6f 6e 73 28 63 6f 6e 66 69 67 53 70 65  ptions(configSpe
4100: 63 73 2c 20 28 63 68 61 72 20 2a 29 20 73 63 72  cs, (char *) scr
4110: 6f 6c 6c 50 74 72 2c 20 30 29 3b 0a 20 20 20 20  ollPtr, 0);.    
4120: 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 20  ckfree((char *) 
4130: 73 63 72 6f 6c 6c 50 74 72 29 3b 0a 7d 0a 0c 0a  scrollPtr);.}...
4140: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
4150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
4190: 2a 20 43 6f 6e 66 69 67 75 72 65 53 63 72 6f 6c  * ConfigureScrol
41a0: 6c 62 61 72 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68  lbar --. *. *.Th
41b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  is procedure is 
41c0: 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 63 65 73  called to proces
41d0: 73 20 61 6e 20 61 72 67 76 2f 61 72 67 63 20 6c  s an argv/argc l
41e0: 69 73 74 2c 20 70 6c 75 73 0a 20 2a 09 74 68 65  ist, plus. *.the
41f0: 20 54 6b 20 6f 70 74 69 6f 6e 20 64 61 74 61 62   Tk option datab
4200: 61 73 65 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  ase, in order to
4210: 20 63 6f 6e 66 69 67 75 72 65 20 28 6f 72 0a 20   configure (or. 
4220: 2a 09 72 65 63 6f 6e 66 69 67 75 72 65 29 20 61  *.reconfigure) a
4230: 20 73 63 72 6f 6c 6c 62 61 72 20 77 69 64 67 65   scrollbar widge
4240: 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  t.. *. * Results
4250: 3a 0a 20 2a 09 54 68 65 20 72 65 74 75 72 6e 20  :. *.The return 
4260: 76 61 6c 75 65 20 69 73 20 61 20 73 74 61 6e 64  value is a stand
4270: 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 20  ard Tcl result. 
4280: 20 49 66 20 54 43 4c 5f 45 52 52 4f 52 20 69 73   If TCL_ERROR is
4290: 0a 20 2a 09 72 65 74 75 72 6e 65 64 2c 20 74 68  . *.returned, th
42a0: 65 6e 20 69 6e 74 65 72 70 2d 3e 72 65 73 75 6c  en interp->resul
42b0: 74 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72  t contains an er
42c0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 20 2a 0a  ror message.. *.
42d0: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
42e0: 0a 20 2a 09 43 6f 6e 66 69 67 75 72 61 74 69 6f  . *.Configuratio
42f0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73  n information, s
4300: 75 63 68 20 61 73 20 63 6f 6c 6f 72 73 2c 20 62  uch as colors, b
4310: 6f 72 64 65 72 20 77 69 64 74 68 2c 0a 20 2a 09  order width,. *.
4320: 65 74 63 2e 20 67 65 74 20 73 65 74 20 66 6f 72  etc. get set for
4330: 20 73 63 72 6f 6c 6c 50 74 72 3b 20 20 6f 6c 64   scrollPtr;  old
4340: 20 72 65 73 6f 75 72 63 65 73 20 67 65 74 20 66   resources get f
4350: 72 65 65 64 2c 0a 20 2a 09 69 66 20 74 68 65 72  reed,. *.if ther
4360: 65 20 77 65 72 65 20 61 6e 79 2e 0a 20 2a 0a 20  e were any.. *. 
4370: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
4380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43b0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
43c0: 74 69 63 20 69 6e 74 0a 43 6f 6e 66 69 67 75 72  tic int.Configur
43d0: 65 53 63 72 6f 6c 6c 62 61 72 28 69 6e 74 65 72  eScrollbar(inter
43e0: 70 2c 20 73 63 72 6f 6c 6c 50 74 72 2c 20 61 72  p, scrollPtr, ar
43f0: 67 63 2c 20 61 72 67 76 2c 20 66 6c 61 67 73 29  gc, argv, flags)
4400: 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  .    Tcl_Interp 
4410: 2a 69 6e 74 65 72 70 3b 09 09 09 2f 2a 20 55 73  *interp;.../* Us
4420: 65 64 20 66 6f 72 20 65 72 72 6f 72 20 72 65 70  ed for error rep
4430: 6f 72 74 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  orting. */.    r
4440: 65 67 69 73 74 65 72 20 53 63 72 6f 6c 6c 62 61  egister Scrollba
4450: 72 20 2a 73 63 72 6f 6c 6c 50 74 72 3b 09 2f 2a  r *scrollPtr;./*
4460: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
4470: 75 74 20 77 69 64 67 65 74 3b 20 20 6d 61 79 20  ut widget;  may 
4480: 6f 72 0a 09 09 09 09 09 20 2a 20 6d 61 79 20 6e  or...... * may n
4490: 6f 74 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ot already have 
44a0: 76 61 6c 75 65 73 20 66 6f 72 0a 09 09 09 09 09  values for......
44b0: 20 2a 20 73 6f 6d 65 20 66 69 65 6c 64 73 2e 20   * some fields. 
44c0: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72 67 63 3b  */.    int argc;
44d0: 09 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ..../* Number of
44e0: 20 76 61 6c 69 64 20 65 6e 74 72 69 65 73 20 69   valid entries i
44f0: 6e 20 61 72 67 76 2e 20 2a 2f 0a 20 20 20 20 63  n argv. */.    c
4500: 68 61 72 20 2a 2a 61 72 67 76 3b 09 09 09 2f 2a  har **argv;.../*
4510: 20 41 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20   Arguments. */. 
4520: 20 20 20 69 6e 74 20 66 6c 61 67 73 3b 09 09 09     int flags;...
4530: 09 2f 2a 20 46 6c 61 67 73 20 74 6f 20 70 61 73  ./* Flags to pas
4540: 73 20 74 6f 0a 09 09 09 09 09 20 2a 20 54 6b 5f  s to...... * Tk_
4550: 43 6f 6e 66 69 67 75 72 65 57 69 64 67 65 74 2e  ConfigureWidget.
4560: 20 2a 2f 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74   */.{.    size_t
4570: 20 6c 65 6e 67 74 68 3b 0a 0a 20 20 20 20 69 66   length;..    if
4580: 20 28 54 6b 5f 43 6f 6e 66 69 67 75 72 65 57 69   (Tk_ConfigureWi
4590: 64 67 65 74 28 69 6e 74 65 72 70 2c 20 73 63 72  dget(interp, scr
45a0: 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63  ollPtr->tkwin, c
45b0: 6f 6e 66 69 67 53 70 65 63 73 2c 0a 09 20 20 20  onfigSpecs,..   
45c0: 20 61 72 67 63 2c 20 61 72 67 76 2c 20 28 63 68   argc, argv, (ch
45d0: 61 72 20 2a 29 20 73 63 72 6f 6c 6c 50 74 72 2c  ar *) scrollPtr,
45e0: 20 66 6c 61 67 73 29 20 21 3d 20 54 43 4c 5f 4f   flags) != TCL_O
45f0: 4b 29 20 7b 0a 09 72 65 74 75 72 6e 20 54 43 4c  K) {..return TCL
4600: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20  _ERROR;.    }.. 
4610: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 41 20 66     /*.     * A f
4620: 65 77 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 20  ew options need 
4630: 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
4640: 6e 67 2c 20 73 75 63 68 20 61 73 20 70 61 72 73  ng, such as pars
4650: 69 6e 67 20 74 68 65 0a 20 20 20 20 20 2a 20 6f  ing the.     * o
4660: 72 69 65 6e 74 61 74 69 6f 6e 20 6f 72 20 73 65  rientation or se
4670: 74 74 69 6e 67 20 74 68 65 20 62 61 63 6b 67 72  tting the backgr
4680: 6f 75 6e 64 20 66 72 6f 6d 20 61 20 33 2d 44 20  ound from a 3-D 
4690: 62 6f 72 64 65 72 2e 0a 20 20 20 20 20 2a 2f 0a  border..     */.
46a0: 0a 20 20 20 20 69 66 20 28 73 63 72 6f 6c 6c 50  .    if (scrollP
46b0: 74 72 2d 3e 77 69 64 74 68 20 3c 20 31 29 20 7b  tr->width < 1) {
46c0: 0a 20 20 20 20 09 73 63 72 6f 6c 6c 50 74 72 2d  .    .scrollPtr-
46d0: 3e 77 69 64 74 68 20 3d 20 31 3b 0a 20 20 20 20  >width = 1;.    
46e0: 7d 0a 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73  }.    length = s
46f0: 74 72 6c 65 6e 28 73 63 72 6f 6c 6c 50 74 72 2d  trlen(scrollPtr-
4700: 3e 6f 72 69 65 6e 74 55 69 64 29 3b 0a 20 20 20  >orientUid);.   
4710: 20 69 66 20 28 73 74 72 6e 63 6d 70 28 73 63 72   if (strncmp(scr
4720: 6f 6c 6c 50 74 72 2d 3e 6f 72 69 65 6e 74 55 69  ollPtr->orientUi
4730: 64 2c 20 22 76 65 72 74 69 63 61 6c 22 2c 20 6c  d, "vertical", l
4740: 65 6e 67 74 68 29 20 3d 3d 20 30 29 20 7b 0a 09  ength) == 0) {..
4750: 73 63 72 6f 6c 6c 50 74 72 2d 3e 76 65 72 74 69  scrollPtr->verti
4760: 63 61 6c 20 3d 20 31 3b 0a 20 20 20 20 7d 20 65  cal = 1;.    } e
4770: 6c 73 65 20 69 66 20 28 73 74 72 6e 63 6d 70 28  lse if (strncmp(
4780: 73 63 72 6f 6c 6c 50 74 72 2d 3e 6f 72 69 65 6e  scrollPtr->orien
4790: 74 55 69 64 2c 20 22 68 6f 72 69 7a 6f 6e 74 61  tUid, "horizonta
47a0: 6c 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30  l", length) == 0
47b0: 29 20 7b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d 3e  ) {..scrollPtr->
47c0: 76 65 72 74 69 63 61 6c 20 3d 20 30 3b 0a 20 20  vertical = 0;.  
47d0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c 5f    } else {..Tcl_
47e0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
47f0: 65 72 70 2c 20 22 62 61 64 20 6f 72 69 65 6e 74  erp, "bad orient
4800: 61 74 69 6f 6e 20 5c 22 22 2c 20 73 63 72 6f 6c  ation \"", scrol
4810: 6c 50 74 72 2d 3e 6f 72 69 65 6e 74 55 69 64 2c  lPtr->orientUid,
4820: 0a 09 09 22 5c 22 3a 20 6d 75 73 74 20 62 65 20  ..."\": must be 
4830: 76 65 72 74 69 63 61 6c 20 6f 72 20 68 6f 72 69  vertical or hori
4840: 7a 6f 6e 74 61 6c 22 2c 20 28 63 68 61 72 20 2a  zontal", (char *
4850: 29 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e  ) NULL);..return
4860: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
4870: 7d 0a 0a 20 20 20 20 69 66 20 28 73 63 72 6f 6c  }..    if (scrol
4880: 6c 50 74 72 2d 3e 63 6f 6d 6d 61 6e 64 20 21 3d  lPtr->command !=
4890: 20 4e 55 4c 4c 29 20 7b 0a 09 73 63 72 6f 6c 6c   NULL) {..scroll
48a0: 50 74 72 2d 3e 63 6f 6d 6d 61 6e 64 53 69 7a 65  Ptr->commandSize
48b0: 20 3d 20 73 74 72 6c 65 6e 28 73 63 72 6f 6c 6c   = strlen(scroll
48c0: 50 74 72 2d 3e 63 6f 6d 6d 61 6e 64 29 3b 0a 20  Ptr->command);. 
48d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 73 63 72     } else {..scr
48e0: 6f 6c 6c 50 74 72 2d 3e 63 6f 6d 6d 61 6e 64 53  ollPtr->commandS
48f0: 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a  ize = 0;.    }..
4900: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 52 65      /*.     * Re
4910: 67 69 73 74 65 72 20 74 68 65 20 64 65 73 69 72  gister the desir
4920: 65 64 20 67 65 6f 6d 65 74 72 79 20 66 6f 72 20  ed geometry for 
4930: 74 68 65 20 77 69 6e 64 6f 77 20 28 6c 65 61 76  the window (leav
4940: 65 20 65 6e 6f 75 67 68 20 73 70 61 63 65 0a 20  e enough space. 
4950: 20 20 20 20 2a 20 66 6f 72 20 74 68 65 20 74 77      * for the tw
4960: 6f 20 61 72 72 6f 77 73 20 70 6c 75 73 20 61 20  o arrows plus a 
4970: 6d 69 6e 69 6d 75 6d 2d 73 69 7a 65 20 73 6c 69  minimum-size sli
4980: 64 65 72 2c 20 70 6c 75 73 20 62 6f 72 64 65 72  der, plus border
4990: 20 61 72 6f 75 6e 64 0a 20 20 20 20 20 2a 20 74   around.     * t
49a0: 68 65 20 77 68 6f 6c 65 20 77 69 6e 64 6f 77 2c  he whole window,
49b0: 20 69 66 20 61 6e 79 29 2e 20 20 54 68 65 6e 20   if any).  Then 
49c0: 61 72 72 61 6e 67 65 20 66 6f 72 20 74 68 65 20  arrange for the 
49d0: 77 69 6e 64 6f 77 20 74 6f 20 62 65 0a 20 20 20  window to be.   
49e0: 20 20 2a 20 72 65 64 69 73 70 6c 61 79 65 64 2e    * redisplayed.
49f0: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 54 6b  .     */..    Tk
4a00: 5f 53 65 74 49 6e 74 65 72 6e 61 6c 42 6f 72 64  _SetInternalBord
4a10: 65 72 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b  er(scrollPtr->tk
4a20: 77 69 6e 2c 20 73 63 72 6f 6c 6c 50 74 72 2d 3e  win, scrollPtr->
4a30: 62 6f 72 64 65 72 57 69 64 74 68 29 3b 0a 20 20  borderWidth);.  
4a40: 20 20 43 6f 6d 70 75 74 65 53 63 72 6f 6c 6c 62    ComputeScrollb
4a50: 61 72 47 65 6f 6d 65 74 72 79 28 73 63 72 6f 6c  arGeometry(scrol
4a60: 6c 50 74 72 29 3b 0a 20 20 20 20 45 76 65 6e 74  lPtr);.    Event
4a70: 75 61 6c 6c 79 52 65 64 72 61 77 28 73 63 72 6f  uallyRedraw(scro
4a80: 6c 6c 50 74 72 29 3b 0a 20 20 20 20 72 65 74 75  llPtr);.    retu
4a90: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f  rn TCL_OK;.}.../
4aa0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
4ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ae0: 2d 2d 0a 20 2a 0a 20 2a 20 44 69 73 70 6c 61 79  --. *. * Display
4af0: 53 63 72 6f 6c 6c 62 61 72 20 2d 2d 0a 20 2a 0a  Scrollbar --. *.
4b00: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72   *.This procedur
4b10: 65 20 72 65 64 72 61 77 73 20 74 68 65 20 63 6f  e redraws the co
4b20: 6e 74 65 6e 74 73 20 6f 66 20 61 20 73 63 72 6f  ntents of a scro
4b30: 6c 6c 62 61 72 20 77 69 6e 64 6f 77 2e 0a 20 2a  llbar window.. *
4b40: 09 49 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .It is invoked a
4b50: 73 20 61 20 64 6f 2d 77 68 65 6e 2d 69 64 6c 65  s a do-when-idle
4b60: 20 68 61 6e 64 6c 65 72 2c 20 73 6f 20 69 74 20   handler, so it 
4b70: 6f 6e 6c 79 20 72 75 6e 73 0a 20 2a 09 77 68 65  only runs. *.whe
4b80: 6e 20 74 68 65 72 65 27 73 20 6e 6f 74 68 69 6e  n there's nothin
4b90: 67 20 65 6c 73 65 20 66 6f 72 20 74 68 65 20 61  g else for the a
4ba0: 70 70 6c 69 63 61 74 69 6f 6e 20 74 6f 20 64 6f  pplication to do
4bb0: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
4bc0: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20  . *.None.. *. * 
4bd0: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
4be0: 09 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 70 70  .Information app
4bf0: 65 61 72 73 20 6f 6e 20 74 68 65 20 73 63 72 65  ears on the scre
4c00: 65 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  en.. *. *-------
4c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c40: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
4c50: 74 69 63 20 76 6f 69 64 0a 44 69 73 70 6c 61 79  tic void.Display
4c60: 53 63 72 6f 6c 6c 62 61 72 28 63 6c 69 65 6e 74  Scrollbar(client
4c70: 44 61 74 61 29 0a 20 20 20 20 43 6c 69 65 6e 74  Data).    Client
4c80: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b  Data clientData;
4c90: 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  ./* Information 
4ca0: 61 62 6f 75 74 20 77 69 6e 64 6f 77 2e 20 2a 2f  about window. */
4cb0: 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  .{.    register 
4cc0: 53 63 72 6f 6c 6c 62 61 72 20 2a 73 63 72 6f 6c  Scrollbar *scrol
4cd0: 6c 50 74 72 20 3d 20 28 53 63 72 6f 6c 6c 62 61  lPtr = (Scrollba
4ce0: 72 20 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b  r *) clientData;
4cf0: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 54 6b  .    register Tk
4d00: 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 20 3d 20  _Window tkwin = 
4d10: 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e  scrollPtr->tkwin
4d20: 3b 0a 20 20 20 20 69 6e 74 20 62 64 20 3d 20 73  ;.    int bd = s
4d30: 63 72 6f 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72  crollPtr->border
4d40: 57 69 64 74 68 3b 0a 20 20 20 20 69 6e 74 20 78  Width;.    int x
4d50: 42 6f 75 6e 64 20 3d 20 54 6b 5f 57 69 64 74 68  Bound = Tk_Width
4d60: 28 74 6b 77 69 6e 29 20 2d 20 62 64 3b 0a 20 20  (tkwin) - bd;.  
4d70: 20 20 69 6e 74 20 79 42 6f 75 6e 64 20 3d 20 54    int yBound = T
4d80: 6b 5f 48 65 69 67 68 74 28 74 6b 77 69 6e 29 20  k_Height(tkwin) 
4d90: 2d 20 62 64 3b 0a 20 20 20 20 69 6e 74 20 6d 69  - bd;.    int mi
4da0: 64 64 6c 65 3b 0a 0a 20 20 20 20 69 66 20 28 28  ddle;..    if ((
4db0: 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e  scrollPtr->tkwin
4dc0: 20 3d 3d 20 4e 55 4c 4c 29 20 7c 7c 20 21 54 6b   == NULL) || !Tk
4dd0: 5f 49 73 4d 61 70 70 65 64 28 74 6b 77 69 6e 29  _IsMapped(tkwin)
4de0: 29 20 7b 0a 09 67 6f 74 6f 20 64 6f 6e 65 3b 0a  ) {..goto done;.
4df0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 73      }..    if (s
4e00: 63 72 6f 6c 6c 50 74 72 2d 3e 76 65 72 74 69 63  crollPtr->vertic
4e10: 61 6c 29 20 7b 0a 09 69 66 20 28 54 6b 5f 57 69  al) {..if (Tk_Wi
4e20: 64 74 68 28 74 6b 77 69 6e 29 20 3e 20 31 20 2b  dth(tkwin) > 1 +
4e30: 20 32 2a 62 64 29 20 7b 0a 09 20 20 20 20 43 74   2*bd) {..    Ct
4e40: 6b 5f 46 69 6c 6c 52 65 63 74 28 74 6b 77 69 6e  k_FillRect(tkwin
4e50: 2c 20 62 64 2c 20 62 64 2c 20 78 42 6f 75 6e 64  , bd, bd, xBound
4e60: 2c 20 79 42 6f 75 6e 64 2c 20 43 54 4b 5f 50 4c  , yBound, CTK_PL
4e70: 41 49 4e 5f 53 54 59 4c 45 2c 20 27 20 27 29 3b  AIN_STYLE, ' ');
4e80: 0a 09 7d 0a 09 6d 69 64 64 6c 65 20 3d 20 54 6b  ..}..middle = Tk
4e90: 5f 57 69 64 74 68 28 74 6b 77 69 6e 29 2f 32 3b  _Width(tkwin)/2;
4ea0: 0a 09 43 74 6b 5f 44 72 61 77 43 68 61 72 61 63  ..Ctk_DrawCharac
4eb0: 74 65 72 28 74 6b 77 69 6e 2c 20 6d 69 64 64 6c  ter(tkwin, middl
4ec0: 65 2c 20 62 64 2c 20 43 54 4b 5f 50 4c 41 49 4e  e, bd, CTK_PLAIN
4ed0: 5f 53 54 59 4c 45 2c 20 27 5e 27 29 3b 0a 09 43  _STYLE, '^');..C
4ee0: 74 6b 5f 46 69 6c 6c 52 65 63 74 28 74 6b 77 69  tk_FillRect(tkwi
4ef0: 6e 2c 20 6d 69 64 64 6c 65 2c 20 62 64 2b 31 2c  n, middle, bd+1,
4f00: 20 6d 69 64 64 6c 65 2b 31 2c 20 20 79 42 6f 75   middle+1,  yBou
4f10: 6e 64 2d 31 2c 0a 09 09 43 54 4b 5f 50 4c 41 49  nd-1,...CTK_PLAI
4f20: 4e 5f 53 54 59 4c 45 2c 20 27 7c 27 29 3b 0a 09  N_STYLE, '|');..
4f30: 43 74 6b 5f 44 72 61 77 43 68 61 72 61 63 74 65  Ctk_DrawCharacte
4f40: 72 28 74 6b 77 69 6e 2c 20 6d 69 64 64 6c 65 2c  r(tkwin, middle,
4f50: 20 79 42 6f 75 6e 64 2d 31 2c 20 43 54 4b 5f 50   yBound-1, CTK_P
4f60: 4c 41 49 4e 5f 53 54 59 4c 45 2c 20 27 56 27 29  LAIN_STYLE, 'V')
4f70: 3b 0a 09 43 74 6b 5f 46 69 6c 6c 52 65 63 74 28  ;..Ctk_FillRect(
4f80: 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e  scrollPtr->tkwin
4f90: 2c 0a 09 09 6d 69 64 64 6c 65 2c 20 73 63 72 6f  ,...middle, scro
4fa0: 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 46 69 72  llPtr->sliderFir
4fb0: 73 74 2c 20 6d 69 64 64 6c 65 2b 31 2c 20 73 63  st, middle+1, sc
4fc0: 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 4c  rollPtr->sliderL
4fd0: 61 73 74 2c 0a 09 09 43 54 4b 5f 50 4c 41 49 4e  ast,...CTK_PLAIN
4fe0: 5f 53 54 59 4c 45 2c 20 27 23 27 29 3b 0a 09 69  _STYLE, '#');..i
4ff0: 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 6c  f (scrollPtr->fl
5000: 61 67 73 20 26 20 47 4f 54 5f 46 4f 43 55 53 29  ags & GOT_FOCUS)
5010: 20 7b 0a 09 20 20 20 20 43 74 6b 5f 53 65 74 43   {..    Ctk_SetC
5020: 75 72 73 6f 72 28 74 6b 77 69 6e 2c 20 6d 69 64  ursor(tkwin, mid
5030: 64 6c 65 2c 20 73 63 72 6f 6c 6c 50 74 72 2d 3e  dle, scrollPtr->
5040: 73 6c 69 64 65 72 46 69 72 73 74 29 3b 0a 09 7d  sliderFirst);..}
5050: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 69  .    } else {..i
5060: 66 20 28 54 6b 5f 48 65 69 67 68 74 28 74 6b 77  f (Tk_Height(tkw
5070: 69 6e 29 20 3e 20 31 20 2b 20 32 2a 62 64 29 20  in) > 1 + 2*bd) 
5080: 7b 0a 09 20 20 20 20 43 74 6b 5f 46 69 6c 6c 52  {..    Ctk_FillR
5090: 65 63 74 28 74 6b 77 69 6e 2c 20 62 64 2c 20 62  ect(tkwin, bd, b
50a0: 64 2c 20 78 42 6f 75 6e 64 2c 20 79 42 6f 75 6e  d, xBound, yBoun
50b0: 64 2c 20 43 54 4b 5f 50 4c 41 49 4e 5f 53 54 59  d, CTK_PLAIN_STY
50c0: 4c 45 2c 20 27 20 27 29 3b 0a 09 7d 0a 09 6d 69  LE, ' ');..}..mi
50d0: 64 64 6c 65 20 3d 20 54 6b 5f 48 65 69 67 68 74  ddle = Tk_Height
50e0: 28 74 6b 77 69 6e 29 2f 32 3b 0a 09 43 74 6b 5f  (tkwin)/2;..Ctk_
50f0: 44 72 61 77 43 68 61 72 61 63 74 65 72 28 74 6b  DrawCharacter(tk
5100: 77 69 6e 2c 20 62 64 2c 20 6d 69 64 64 6c 65 2c  win, bd, middle,
5110: 20 43 54 4b 5f 50 4c 41 49 4e 5f 53 54 59 4c 45   CTK_PLAIN_STYLE
5120: 2c 20 27 3c 27 29 3b 0a 09 43 74 6b 5f 46 69 6c  , '<');..Ctk_Fil
5130: 6c 52 65 63 74 28 74 6b 77 69 6e 2c 20 62 64 2b  lRect(tkwin, bd+
5140: 31 2c 20 6d 69 64 64 6c 65 2c 20 78 42 6f 75 6e  1, middle, xBoun
5150: 64 2d 31 2c 20 6d 69 64 64 6c 65 2b 31 2c 20 0a  d-1, middle+1, .
5160: 09 09 43 54 4b 5f 50 4c 41 49 4e 5f 53 54 59 4c  ..CTK_PLAIN_STYL
5170: 45 2c 20 27 2d 27 29 3b 0a 09 43 74 6b 5f 44 72  E, '-');..Ctk_Dr
5180: 61 77 43 68 61 72 61 63 74 65 72 28 74 6b 77 69  awCharacter(tkwi
5190: 6e 2c 20 78 42 6f 75 6e 64 2d 31 2c 20 6d 69 64  n, xBound-1, mid
51a0: 64 6c 65 2c 20 43 54 4b 5f 50 4c 41 49 4e 5f 53  dle, CTK_PLAIN_S
51b0: 54 59 4c 45 2c 20 27 3e 27 29 3b 0a 09 43 74 6b  TYLE, '>');..Ctk
51c0: 5f 46 69 6c 6c 52 65 63 74 28 73 63 72 6f 6c 6c  _FillRect(scroll
51d0: 50 74 72 2d 3e 74 6b 77 69 6e 2c 0a 09 09 73 63  Ptr->tkwin,...sc
51e0: 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 46  rollPtr->sliderF
51f0: 69 72 73 74 2c 20 6d 69 64 64 6c 65 2c 20 73 63  irst, middle, sc
5200: 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 4c  rollPtr->sliderL
5210: 61 73 74 2c 20 6d 69 64 64 6c 65 2b 31 2c 0a 09  ast, middle+1,..
5220: 09 43 54 4b 5f 50 4c 41 49 4e 5f 53 54 59 4c 45  .CTK_PLAIN_STYLE
5230: 2c 20 27 23 27 29 3b 0a 09 69 66 20 28 73 63 72  , '#');..if (scr
5240: 6f 6c 6c 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  ollPtr->flags & 
5250: 47 4f 54 5f 46 4f 43 55 53 29 20 7b 0a 09 20 20  GOT_FOCUS) {..  
5260: 20 20 43 74 6b 5f 53 65 74 43 75 72 73 6f 72 28    Ctk_SetCursor(
5270: 74 6b 77 69 6e 2c 20 73 63 72 6f 6c 6c 50 74 72  tkwin, scrollPtr
5280: 2d 3e 73 6c 69 64 65 72 46 69 72 73 74 2c 20 6d  ->sliderFirst, m
5290: 69 64 64 6c 65 29 3b 0a 09 7d 0a 20 20 20 20 7d  iddle);..}.    }
52a0: 0a 20 20 20 20 43 74 6b 5f 44 72 61 77 42 6f 72  .    Ctk_DrawBor
52b0: 64 65 72 28 74 6b 77 69 6e 2c 20 43 54 4b 5f 50  der(tkwin, CTK_P
52c0: 4c 41 49 4e 5f 53 54 59 4c 45 2c 20 28 63 68 61  LAIN_STYLE, (cha
52d0: 72 20 2a 29 4e 55 4c 4c 29 3b 0a 0a 20 20 20 20  r *)NULL);..    
52e0: 64 6f 6e 65 3a 0a 20 20 20 20 73 63 72 6f 6c 6c  done:.    scroll
52f0: 50 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 52  Ptr->flags &= ~R
5300: 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 3b 0a 7d  EDRAW_PENDING;.}
5310: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
5320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5350: 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 53 63 72  ------. *. * Scr
5360: 6f 6c 6c 62 61 72 45 76 65 6e 74 50 72 6f 63 20  ollbarEventProc 
5370: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72  --. *. *.This pr
5380: 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f 6b  ocedure is invok
5390: 65 64 20 62 79 20 74 68 65 20 54 6b 20 64 69 73  ed by the Tk dis
53a0: 70 61 74 63 68 65 72 20 66 6f 72 20 76 61 72 69  patcher for vari
53b0: 6f 75 73 0a 20 2a 09 65 76 65 6e 74 73 20 6f 6e  ous. *.events on
53c0: 20 73 63 72 6f 6c 6c 62 61 72 73 2e 0a 20 2a 0a   scrollbars.. *.
53d0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e   * Results:. *.N
53e0: 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  one.. *. * Side 
53f0: 65 66 66 65 63 74 73 3a 0a 20 2a 09 57 68 65 6e  effects:. *.When
5400: 20 74 68 65 20 77 69 6e 64 6f 77 20 67 65 74 73   the window gets
5410: 20 64 65 6c 65 74 65 64 2c 20 69 6e 74 65 72 6e   deleted, intern
5420: 61 6c 20 73 74 72 75 63 74 75 72 65 73 20 67 65  al structures ge
5430: 74 0a 20 2a 09 63 6c 65 61 6e 65 64 20 75 70 2e  t. *.cleaned up.
5440: 20 20 57 68 65 6e 20 69 74 20 67 65 74 73 20 65    When it gets e
5450: 78 70 6f 73 65 64 2c 20 69 74 20 69 73 20 72 65  xposed, it is re
5460: 64 69 73 70 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a  displayed.. *. *
5470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
54b0: 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  */..static void.
54c0: 53 63 72 6f 6c 6c 62 61 72 45 76 65 6e 74 50 72  ScrollbarEventPr
54d0: 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 65  oc(clientData, e
54e0: 76 65 6e 74 50 74 72 29 0a 20 20 20 20 43 6c 69  ventPtr).    Cli
54f0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
5500: 74 61 3b 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ta;./* Informati
5510: 6f 6e 20 61 62 6f 75 74 20 77 69 6e 64 6f 77 2e  on about window.
5520: 20 2a 2f 0a 20 20 20 20 43 74 6b 5f 45 76 65 6e   */.    Ctk_Even
5530: 74 20 2a 65 76 65 6e 74 50 74 72 3b 09 2f 2a 20  t *eventPtr;./* 
5540: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
5550: 74 20 65 76 65 6e 74 2e 20 2a 2f 0a 7b 0a 20 20  t event. */.{.  
5560: 20 20 53 63 72 6f 6c 6c 62 61 72 20 2a 73 63 72    Scrollbar *scr
5570: 6f 6c 6c 50 74 72 20 3d 20 28 53 63 72 6f 6c 6c  ollPtr = (Scroll
5580: 62 61 72 20 2a 29 20 63 6c 69 65 6e 74 44 61 74  bar *) clientDat
5590: 61 3b 0a 0a 20 20 20 20 69 66 20 28 65 76 65 6e  a;..    if (even
55a0: 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20 43 54  tPtr->type == CT
55b0: 4b 5f 45 58 50 4f 53 45 5f 45 56 45 4e 54 29 20  K_EXPOSE_EVENT) 
55c0: 7b 0a 09 45 76 65 6e 74 75 61 6c 6c 79 52 65 64  {..EventuallyRed
55d0: 72 61 77 28 73 63 72 6f 6c 6c 50 74 72 29 3b 0a  raw(scrollPtr);.
55e0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65      } else if (e
55f0: 76 65 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d  ventPtr->type ==
5600: 20 43 54 4b 5f 44 45 53 54 52 4f 59 5f 45 56 45   CTK_DESTROY_EVE
5610: 4e 54 29 20 7b 0a 09 69 66 20 28 73 63 72 6f 6c  NT) {..if (scrol
5620: 6c 50 74 72 2d 3e 74 6b 77 69 6e 20 21 3d 20 4e  lPtr->tkwin != N
5630: 55 4c 4c 29 20 7b 0a 09 20 20 20 20 73 63 72 6f  ULL) {..    scro
5640: 6c 6c 50 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 4e  llPtr->tkwin = N
5650: 55 4c 4c 3b 0a 09 20 20 20 20 54 63 6c 5f 44 65  ULL;..    Tcl_De
5660: 6c 65 74 65 43 6f 6d 6d 61 6e 64 28 73 63 72 6f  leteCommand(scro
5670: 6c 6c 50 74 72 2d 3e 69 6e 74 65 72 70 2c 0a 09  llPtr->interp,..
5680: 09 20 20 20 20 54 63 6c 5f 47 65 74 43 6f 6d 6d  .    Tcl_GetComm
5690: 61 6e 64 4e 61 6d 65 28 73 63 72 6f 6c 6c 50 74  andName(scrollPt
56a0: 72 2d 3e 69 6e 74 65 72 70 2c 0a 09 09 20 20 20  r->interp,...   
56b0: 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 77 69 64 67   scrollPtr->widg
56c0: 65 74 43 6d 64 29 29 3b 0a 09 7d 0a 09 69 66 20  etCmd));..}..if 
56d0: 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 66 6c 61 67  (scrollPtr->flag
56e0: 73 20 26 20 52 45 44 52 41 57 5f 50 45 4e 44 49  s & REDRAW_PENDI
56f0: 4e 47 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 43  NG) {..    Tcl_C
5700: 61 6e 63 65 6c 49 64 6c 65 43 61 6c 6c 28 44 69  ancelIdleCall(Di
5710: 73 70 6c 61 79 53 63 72 6f 6c 6c 62 61 72 2c 20  splayScrollbar, 
5720: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 73 63 72  (ClientData) scr
5730: 6f 6c 6c 50 74 72 29 3b 0a 09 7d 0a 09 54 6b 5f  ollPtr);..}..Tk_
5740: 45 76 65 6e 74 75 61 6c 6c 79 46 72 65 65 28 28  EventuallyFree((
5750: 43 6c 69 65 6e 74 44 61 74 61 29 20 73 63 72 6f  ClientData) scro
5760: 6c 6c 50 74 72 2c 20 44 65 73 74 72 6f 79 53 63  llPtr, DestroySc
5770: 72 6f 6c 6c 62 61 72 29 3b 0a 20 20 20 20 7d 20  rollbar);.    } 
5780: 65 6c 73 65 20 69 66 20 28 65 76 65 6e 74 50 74  else if (eventPt
5790: 72 2d 3e 74 79 70 65 20 3d 3d 20 43 54 4b 5f 46  r->type == CTK_F
57a0: 4f 43 55 53 5f 45 56 45 4e 54 29 20 7b 0a 09 73  OCUS_EVENT) {..s
57b0: 63 72 6f 6c 6c 50 74 72 2d 3e 66 6c 61 67 73 20  crollPtr->flags 
57c0: 7c 3d 20 47 4f 54 5f 46 4f 43 55 53 3b 0a 20 20  |= GOT_FOCUS;.  
57d0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 76 65    } else if (eve
57e0: 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20 43  ntPtr->type == C
57f0: 54 4b 5f 55 4e 46 4f 43 55 53 5f 45 56 45 4e 54  TK_UNFOCUS_EVENT
5800: 29 20 7b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d 3e  ) {..scrollPtr->
5810: 66 6c 61 67 73 20 26 3d 20 7e 47 4f 54 5f 46 4f  flags &= ~GOT_FO
5820: 43 55 53 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20  CUS;.    } else 
5830: 69 66 20 28 65 76 65 6e 74 50 74 72 2d 3e 74 79  if (eventPtr->ty
5840: 70 65 20 3d 3d 20 43 54 4b 5f 4d 41 50 5f 45 56  pe == CTK_MAP_EV
5850: 45 4e 54 29 20 7b 0a 09 43 6f 6d 70 75 74 65 53  ENT) {..ComputeS
5860: 63 72 6f 6c 6c 62 61 72 47 65 6f 6d 65 74 72 79  crollbarGeometry
5870: 28 73 63 72 6f 6c 6c 50 74 72 29 3b 0a 20 20 20  (scrollPtr);.   
5880: 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d   }.}.../*. *----
5890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58d0: 2d 2d 0a 20 2a 0a 20 2a 20 53 63 72 6f 6c 6c 62  --. *. * Scrollb
58e0: 61 72 43 6d 64 44 65 6c 65 74 65 64 50 72 6f 63  arCmdDeletedProc
58f0: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
5900: 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f  rocedure is invo
5910: 6b 65 64 20 77 68 65 6e 20 61 20 77 69 64 67 65  ked when a widge
5920: 74 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 6c  t command is del
5930: 65 74 65 64 2e 20 20 49 66 0a 20 2a 09 74 68 65  eted.  If. *.the
5940: 20 77 69 64 67 65 74 20 69 73 6e 27 74 20 61 6c   widget isn't al
5950: 72 65 61 64 79 20 69 6e 20 74 68 65 20 70 72 6f  ready in the pro
5960: 63 65 73 73 20 6f 66 20 62 65 69 6e 67 20 64 65  cess of being de
5970: 73 74 72 6f 79 65 64 2c 0a 20 2a 09 74 68 69 73  stroyed,. *.this
5980: 20 63 6f 6d 6d 61 6e 64 20 64 65 73 74 72 6f 79   command destroy
5990: 73 20 69 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  s it.. *. * Resu
59a0: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
59b0: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
59c0: 3a 0a 20 2a 09 54 68 65 20 77 69 64 67 65 74 20  :. *.The widget 
59d0: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 0a 20 2a  is destroyed.. *
59e0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
59f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73  ---------. */..s
5a30: 74 61 74 69 63 20 76 6f 69 64 0a 53 63 72 6f 6c  tatic void.Scrol
5a40: 6c 62 61 72 43 6d 64 44 65 6c 65 74 65 64 50 72  lbarCmdDeletedPr
5a50: 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 29 0a 20  oc(clientData). 
5a60: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c     ClientData cl
5a70: 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 50 6f 69  ientData;./* Poi
5a80: 6e 74 65 72 20 74 6f 20 77 69 64 67 65 74 20 72  nter to widget r
5a90: 65 63 6f 72 64 20 66 6f 72 20 77 69 64 67 65 74  ecord for widget
5aa0: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 53 63 72 6f 6c  . */.{.    Scrol
5ab0: 6c 62 61 72 20 2a 73 63 72 6f 6c 6c 50 74 72 20  lbar *scrollPtr 
5ac0: 3d 20 28 53 63 72 6f 6c 6c 62 61 72 20 2a 29 20  = (Scrollbar *) 
5ad0: 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 20 20  clientData;.    
5ae0: 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 20  Tk_Window tkwin 
5af0: 3d 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77  = scrollPtr->tkw
5b00: 69 6e 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  in;..    /*.    
5b10: 20 2a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72   * This procedur
5b20: 65 20 63 6f 75 6c 64 20 62 65 20 69 6e 76 6f 6b  e could be invok
5b30: 65 64 20 65 69 74 68 65 72 20 62 65 63 61 75 73  ed either becaus
5b40: 65 20 74 68 65 20 77 69 6e 64 6f 77 20 77 61 73  e the window was
5b50: 0a 20 20 20 20 20 2a 20 64 65 73 74 72 6f 79 65  .     * destroye
5b60: 64 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e  d and the comman
5b70: 64 20 77 61 73 20 74 68 65 6e 20 64 65 6c 65 74  d was then delet
5b80: 65 64 20 28 69 6e 20 77 68 69 63 68 20 63 61 73  ed (in which cas
5b90: 65 20 74 6b 77 69 6e 0a 20 20 20 20 20 2a 20 69  e tkwin.     * i
5ba0: 73 20 4e 55 4c 4c 29 20 6f 72 20 62 65 63 61 75  s NULL) or becau
5bb0: 73 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  se the command w
5bc0: 61 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20  as deleted, and 
5bd0: 74 68 65 6e 20 74 68 69 73 20 70 72 6f 63 65 64  then this proced
5be0: 75 72 65 0a 20 20 20 20 20 2a 20 64 65 73 74 72  ure.     * destr
5bf0: 6f 79 73 20 74 68 65 20 77 69 64 67 65 74 2e 0a  oys the widget..
5c00: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20       */..    if 
5c10: 28 74 6b 77 69 6e 20 21 3d 20 4e 55 4c 4c 29 20  (tkwin != NULL) 
5c20: 7b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b  {..scrollPtr->tk
5c30: 77 69 6e 20 3d 20 4e 55 4c 4c 3b 0a 09 54 6b 5f  win = NULL;..Tk_
5c40: 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 28 74 6b  DestroyWindow(tk
5c50: 77 69 6e 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a  win);.    }.}...
5c60: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
5c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
5cb0: 2a 20 43 6f 6d 70 75 74 65 53 63 72 6f 6c 6c 62  * ComputeScrollb
5cc0: 61 72 47 65 6f 6d 65 74 72 79 20 2d 2d 0a 20 2a  arGeometry --. *
5cd0: 0a 20 2a 09 41 66 74 65 72 20 63 68 61 6e 67 65  . *.After change
5ce0: 73 20 69 6e 20 61 20 73 63 72 6f 6c 6c 62 61 72  s in a scrollbar
5cf0: 27 73 20 73 69 7a 65 20 6f 72 20 63 6f 6e 66 69  's size or confi
5d00: 67 75 72 61 74 69 6f 6e 2c 20 74 68 69 73 0a 20  guration, this. 
5d10: 2a 09 70 72 6f 63 65 64 75 72 65 20 72 65 63 6f  *.procedure reco
5d20: 6d 70 75 74 65 73 20 76 61 72 69 6f 75 73 20 67  mputes various g
5d30: 65 6f 6d 65 74 72 79 20 69 6e 66 6f 72 6d 61 74  eometry informat
5d40: 69 6f 6e 20 75 73 65 64 20 69 6e 0a 20 2a 09 64  ion used in. *.d
5d50: 69 73 70 6c 61 79 69 6e 67 20 74 68 65 20 73 63  isplaying the sc
5d60: 72 6f 6c 6c 62 61 72 2e 0a 20 2a 0a 20 2a 20 52  rollbar.. *. * R
5d70: 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  esults:. *.None.
5d80: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
5d90: 63 74 73 3a 0a 20 2a 09 54 68 65 20 73 63 72 6f  cts:. *.The scro
5da0: 6c 6c 62 61 72 20 77 69 6c 6c 20 62 65 20 64 69  llbar will be di
5db0: 73 70 6c 61 79 65 64 20 64 69 66 66 65 72 65 6e  splayed differen
5dc0: 74 6c 79 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  tly.. *. *------
5dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e10: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69  . */..static voi
5e20: 64 0a 43 6f 6d 70 75 74 65 53 63 72 6f 6c 6c 62  d.ComputeScrollb
5e30: 61 72 47 65 6f 6d 65 74 72 79 28 73 63 72 6f 6c  arGeometry(scrol
5e40: 6c 50 74 72 29 0a 20 20 20 20 72 65 67 69 73 74  lPtr).    regist
5e50: 65 72 20 53 63 72 6f 6c 6c 62 61 72 20 2a 73 63  er Scrollbar *sc
5e60: 72 6f 6c 6c 50 74 72 3b 09 2f 2a 20 53 63 72 6f  rollPtr;./* Scro
5e70: 6c 6c 62 61 72 20 77 68 6f 73 65 20 67 65 6f 6d  llbar whose geom
5e80: 65 74 72 79 20 6d 61 79 0a 09 09 09 09 09 20 2a  etry may...... *
5e90: 20 68 61 76 65 20 63 68 61 6e 67 65 64 2e 20 2a   have changed. *
5ea0: 2f 0a 7b 0a 20 20 20 20 69 6e 74 20 77 69 64 74  /.{.    int widt
5eb0: 68 2c 20 66 69 65 6c 64 4c 65 6e 67 74 68 3b 0a  h, fieldLength;.
5ec0: 0a 20 20 20 20 77 69 64 74 68 20 3d 20 28 73 63  .    width = (sc
5ed0: 72 6f 6c 6c 50 74 72 2d 3e 76 65 72 74 69 63 61  rollPtr->vertica
5ee0: 6c 29 0a 20 20 20 20 09 20 20 20 20 3f 20 54 6b  l).    .    ? Tk
5ef0: 5f 57 69 64 74 68 28 73 63 72 6f 6c 6c 50 74 72  _Width(scrollPtr
5f00: 2d 3e 74 6b 77 69 6e 29 20 3a 20 54 6b 5f 48 65  ->tkwin) : Tk_He
5f10: 69 67 68 74 28 73 63 72 6f 6c 6c 50 74 72 2d 3e  ight(scrollPtr->
5f20: 74 6b 77 69 6e 29 3b 0a 20 20 20 20 66 69 65 6c  tkwin);.    fiel
5f30: 64 4c 65 6e 67 74 68 20 3d 20 28 20 73 63 72 6f  dLength = ( scro
5f40: 6c 6c 50 74 72 2d 3e 76 65 72 74 69 63 61 6c 0a  llPtr->vertical.
5f50: 20 20 20 20 09 20 20 20 20 3f 20 28 54 6b 5f 48      .    ? (Tk_H
5f60: 65 69 67 68 74 28 73 63 72 6f 6c 6c 50 74 72 2d  eight(scrollPtr-
5f70: 3e 74 6b 77 69 6e 29 20 2d 20 32 2a 73 63 72 6f  >tkwin) - 2*scro
5f80: 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64  llPtr->borderWid
5f90: 74 68 29 0a 09 20 20 20 20 3a 20 28 54 6b 5f 57  th)..    : (Tk_W
5fa0: 69 64 74 68 28 73 63 72 6f 6c 6c 50 74 72 2d 3e  idth(scrollPtr->
5fb0: 74 6b 77 69 6e 29 20 2d 20 32 2a 73 63 72 6f 6c  tkwin) - 2*scrol
5fc0: 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74  lPtr->borderWidt
5fd0: 68 29 20 29 0a 09 20 20 20 20 2d 20 32 2a 41 52  h) )..    - 2*AR
5fe0: 52 4f 57 5f 4c 45 4e 47 54 48 3b 0a 20 20 20 20  ROW_LENGTH;.    
5ff0: 69 66 20 28 66 69 65 6c 64 4c 65 6e 67 74 68 20  if (fieldLength 
6000: 3c 20 30 29 20 7b 0a 09 66 69 65 6c 64 4c 65 6e  < 0) {..fieldLen
6010: 67 74 68 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  gth = 0;.    }. 
6020: 20 20 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c     scrollPtr->sl
6030: 69 64 65 72 46 69 72 73 74 20 3d 20 66 69 65 6c  iderFirst = fiel
6040: 64 4c 65 6e 67 74 68 2a 73 63 72 6f 6c 6c 50 74  dLength*scrollPt
6050: 72 2d 3e 66 69 72 73 74 46 72 61 63 74 69 6f 6e  r->firstFraction
6060: 3b 0a 20 20 20 20 73 63 72 6f 6c 6c 50 74 72 2d  ;.    scrollPtr-
6070: 3e 73 6c 69 64 65 72 4c 61 73 74 20 3d 20 66 69  >sliderLast = fi
6080: 65 6c 64 4c 65 6e 67 74 68 2a 73 63 72 6f 6c 6c  eldLength*scroll
6090: 50 74 72 2d 3e 6c 61 73 74 46 72 61 63 74 69 6f  Ptr->lastFractio
60a0: 6e 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  n;..    /*.     
60b0: 2a 20 41 64 6a 75 73 74 20 74 68 65 20 73 6c 69  * Adjust the sli
60c0: 64 65 72 20 73 6f 20 74 68 61 74 20 73 6f 6d 65  der so that some
60d0: 20 70 69 65 63 65 20 6f 66 20 69 74 20 69 73 20   piece of it is 
60e0: 61 6c 77 61 79 73 0a 20 20 20 20 20 2a 20 64 69  always.     * di
60f0: 73 70 6c 61 79 65 64 20 69 6e 20 74 68 65 20 73  splayed in the s
6100: 63 72 6f 6c 6c 62 61 72 20 61 6e 64 20 73 6f 20  crollbar and so 
6110: 74 68 61 74 20 69 74 20 68 61 73 20 61 74 20 6c  that it has at l
6120: 65 61 73 74 0a 20 20 20 20 20 2a 20 61 20 6d 69  east.     * a mi
6130: 6e 69 6d 61 6c 20 77 69 64 74 68 20 28 73 6f 20  nimal width (so 
6140: 69 74 20 63 61 6e 20 62 65 20 67 72 61 62 62 65  it can be grabbe
6150: 64 20 77 69 74 68 20 74 68 65 20 6d 6f 75 73 65  d with the mouse
6160: 29 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 69  )..     */.    i
6170: 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c  f (scrollPtr->sl
6180: 69 64 65 72 46 69 72 73 74 20 3e 20 28 66 69 65  iderFirst > (fie
6190: 6c 64 4c 65 6e 67 74 68 20 2d 20 31 29 29 20 7b  ldLength - 1)) {
61a0: 0a 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69  ..scrollPtr->sli
61b0: 64 65 72 46 69 72 73 74 20 3d 20 66 69 65 6c 64  derFirst = field
61c0: 4c 65 6e 67 74 68 20 2d 20 31 3b 0a 20 20 20 20  Length - 1;.    
61d0: 7d 0a 20 20 20 20 69 66 20 28 73 63 72 6f 6c 6c  }.    if (scroll
61e0: 50 74 72 2d 3e 73 6c 69 64 65 72 46 69 72 73 74  Ptr->sliderFirst
61f0: 20 3c 20 30 29 20 7b 0a 09 73 63 72 6f 6c 6c 50   < 0) {..scrollP
6200: 74 72 2d 3e 73 6c 69 64 65 72 46 69 72 73 74 20  tr->sliderFirst 
6210: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 0;.    }.    i
6220: 66 20 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c  f (scrollPtr->sl
6230: 69 64 65 72 4c 61 73 74 20 3c 20 28 73 63 72 6f  iderLast < (scro
6240: 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 46 69 72  llPtr->sliderFir
6250: 73 74 20 2b 20 4d 49 4e 5f 53 4c 49 44 45 52 5f  st + MIN_SLIDER_
6260: 4c 45 4e 47 54 48 29 29 20 7b 0a 09 73 63 72 6f  LENGTH)) {..scro
6270: 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 4c 61 73  llPtr->sliderLas
6280: 74 20 3d 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 73  t = scrollPtr->s
6290: 6c 69 64 65 72 46 69 72 73 74 20 2b 20 4d 49 4e  liderFirst + MIN
62a0: 5f 53 4c 49 44 45 52 5f 4c 45 4e 47 54 48 3b 0a  _SLIDER_LENGTH;.
62b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 73 63      }.    if (sc
62c0: 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69 64 65 72 4c  rollPtr->sliderL
62d0: 61 73 74 20 3e 20 66 69 65 6c 64 4c 65 6e 67 74  ast > fieldLengt
62e0: 68 29 20 7b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d  h) {..scrollPtr-
62f0: 3e 73 6c 69 64 65 72 4c 61 73 74 20 3d 20 66 69  >sliderLast = fi
6300: 65 6c 64 4c 65 6e 67 74 68 3b 0a 20 20 20 20 7d  eldLength;.    }
6310: 0a 20 20 20 20 69 66 20 28 73 63 72 6f 6c 6c 50  .    if (scrollP
6320: 74 72 2d 3e 76 65 72 74 69 63 61 6c 29 20 7b 0a  tr->vertical) {.
6330: 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69 64  .scrollPtr->slid
6340: 65 72 46 69 72 73 74 20 2b 3d 20 41 52 52 4f 57  erFirst += ARROW
6350: 5f 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c 6c  _LENGTH + scroll
6360: 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68  Ptr->borderWidth
6370: 3b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c  ;..scrollPtr->sl
6380: 69 64 65 72 4c 61 73 74 20 2b 3d 20 41 52 52 4f  iderLast += ARRO
6390: 57 5f 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c  W_LENGTH + scrol
63a0: 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74  lPtr->borderWidt
63b0: 68 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  h;.    } else {.
63c0: 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c 69 64  .scrollPtr->slid
63d0: 65 72 46 69 72 73 74 20 2b 3d 20 41 52 52 4f 57  erFirst += ARROW
63e0: 5f 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c 6c  _LENGTH + scroll
63f0: 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68  Ptr->borderWidth
6400: 3b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d 3e 73 6c  ;..scrollPtr->sl
6410: 69 64 65 72 4c 61 73 74 20 2b 3d 20 41 52 52 4f  iderLast += ARRO
6420: 57 5f 4c 45 4e 47 54 48 20 2b 20 73 63 72 6f 6c  W_LENGTH + scrol
6430: 6c 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74  lPtr->borderWidt
6440: 68 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  h;.    }..    /*
6450: 0a 20 20 20 20 20 2a 20 52 65 67 69 73 74 65 72  .     * Register
6460: 20 74 68 65 20 64 65 73 69 72 65 64 20 67 65 6f   the desired geo
6470: 6d 65 74 72 79 20 66 6f 72 20 74 68 65 20 77 69  metry for the wi
6480: 6e 64 6f 77 20 28 6c 65 61 76 65 20 65 6e 6f 75  ndow (leave enou
6490: 67 68 20 73 70 61 63 65 0a 20 20 20 20 20 2a 20  gh space.     * 
64a0: 66 6f 72 20 74 68 65 20 74 77 6f 20 61 72 72 6f  for the two arro
64b0: 77 73 20 70 6c 75 73 20 61 20 6d 69 6e 69 6d 75  ws plus a minimu
64c0: 6d 2d 73 69 7a 65 20 73 6c 69 64 65 72 2c 20 70  m-size slider, p
64d0: 6c 75 73 20 62 6f 72 64 65 72 20 61 72 6f 75 6e  lus border aroun
64e0: 64 0a 20 20 20 20 20 2a 20 74 68 65 20 77 68 6f  d.     * the who
64f0: 6c 65 20 77 69 6e 64 6f 77 2c 20 69 66 20 61 6e  le window, if an
6500: 79 29 2e 20 20 54 68 65 6e 20 61 72 72 61 6e 67  y).  Then arrang
6510: 65 20 66 6f 72 20 74 68 65 20 77 69 6e 64 6f 77  e for the window
6520: 20 74 6f 20 62 65 0a 20 20 20 20 20 2a 20 72 65   to be.     * re
6530: 64 69 73 70 6c 61 79 65 64 2e 0a 20 20 20 20 20  displayed..     
6540: 2a 2f 0a 20 20 20 20 69 66 20 28 73 63 72 6f 6c  */.    if (scrol
6550: 6c 50 74 72 2d 3e 76 65 72 74 69 63 61 6c 29 20  lPtr->vertical) 
6560: 7b 0a 09 54 6b 5f 47 65 6f 6d 65 74 72 79 52 65  {..Tk_GeometryRe
6570: 71 75 65 73 74 28 73 63 72 6f 6c 6c 50 74 72 2d  quest(scrollPtr-
6580: 3e 74 6b 77 69 6e 2c 0a 09 09 73 63 72 6f 6c 6c  >tkwin,...scroll
6590: 50 74 72 2d 3e 77 69 64 74 68 20 2b 20 32 2a 73  Ptr->width + 2*s
65a0: 63 72 6f 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72  crollPtr->border
65b0: 57 69 64 74 68 2c 0a 09 09 4d 49 4e 5f 53 4c 49  Width,...MIN_SLI
65c0: 44 45 52 5f 4c 45 4e 47 54 48 20 2b 20 32 2a 28  DER_LENGTH + 2*(
65d0: 41 52 52 4f 57 5f 4c 45 4e 47 54 48 20 2b 20 73  ARROW_LENGTH + s
65e0: 63 72 6f 6c 6c 50 74 72 2d 3e 62 6f 72 64 65 72  crollPtr->border
65f0: 57 69 64 74 68 29 29 3b 0a 20 20 20 20 7d 20 65  Width));.    } e
6600: 6c 73 65 20 7b 0a 09 54 6b 5f 47 65 6f 6d 65 74  lse {..Tk_Geomet
6610: 72 79 52 65 71 75 65 73 74 28 73 63 72 6f 6c 6c  ryRequest(scroll
6620: 50 74 72 2d 3e 74 6b 77 69 6e 2c 0a 09 09 4d 49  Ptr->tkwin,...MI
6630: 4e 5f 53 4c 49 44 45 52 5f 4c 45 4e 47 54 48 20  N_SLIDER_LENGTH 
6640: 2b 20 32 2a 28 41 52 52 4f 57 5f 4c 45 4e 47 54  + 2*(ARROW_LENGT
6650: 48 20 2b 20 73 63 72 6f 6c 6c 50 74 72 2d 3e 62  H + scrollPtr->b
6660: 6f 72 64 65 72 57 69 64 74 68 29 2c 0a 09 09 73  orderWidth),...s
6670: 63 72 6f 6c 6c 50 74 72 2d 3e 77 69 64 74 68 20  crollPtr->width 
6680: 2b 20 32 2a 73 63 72 6f 6c 6c 50 74 72 2d 3e 62  + 2*scrollPtr->b
6690: 6f 72 64 65 72 57 69 64 74 68 29 3b 0a 20 20 20  orderWidth);.   
66a0: 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d   }.}.../*. *----
66b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
66f0: 20 45 76 65 6e 74 75 61 6c 6c 79 52 65 64 72 61   EventuallyRedra
6700: 77 20 2d 2d 0a 20 2a 0a 20 2a 09 41 72 72 61 6e  w --. *. *.Arran
6710: 67 65 20 66 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f  ge for one or mo
6720: 72 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73  re of the fields
6730: 20 6f 66 20 61 20 73 63 72 6f 6c 6c 62 61 72 0a   of a scrollbar.
6740: 20 2a 09 74 6f 20 62 65 20 72 65 64 72 61 77 6e   *.to be redrawn
6750: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
6760: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20  . *.None.. *. * 
6770: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
6780: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  .None.. *. *----
6790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
67a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
67b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
67c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a  ----------. */..
67d0: 73 74 61 74 69 63 20 76 6f 69 64 0a 45 76 65 6e  static void.Even
67e0: 74 75 61 6c 6c 79 52 65 64 72 61 77 28 73 63 72  tuallyRedraw(scr
67f0: 6f 6c 6c 50 74 72 29 0a 20 20 20 20 72 65 67 69  ollPtr).    regi
6800: 73 74 65 72 20 53 63 72 6f 6c 6c 62 61 72 20 2a  ster Scrollbar *
6810: 73 63 72 6f 6c 6c 50 74 72 3b 09 2f 2a 20 49 6e  scrollPtr;./* In
6820: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
6830: 77 69 64 67 65 74 2e 20 2a 2f 0a 7b 0a 20 20 20  widget. */.{.   
6840: 20 69 66 20 28 28 73 63 72 6f 6c 6c 50 74 72 2d   if ((scrollPtr-
6850: 3e 74 6b 77 69 6e 20 3d 3d 20 4e 55 4c 4c 29 20  >tkwin == NULL) 
6860: 7c 7c 20 28 21 54 6b 5f 49 73 4d 61 70 70 65 64  || (!Tk_IsMapped
6870: 28 73 63 72 6f 6c 6c 50 74 72 2d 3e 74 6b 77 69  (scrollPtr->tkwi
6880: 6e 29 29 29 20 7b 0a 09 72 65 74 75 72 6e 3b 0a  n))) {..return;.
6890: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 28 73      }.    if ((s
68a0: 63 72 6f 6c 6c 50 74 72 2d 3e 66 6c 61 67 73 20  crollPtr->flags 
68b0: 26 20 52 45 44 52 41 57 5f 50 45 4e 44 49 4e 47  & REDRAW_PENDING
68c0: 29 20 3d 3d 20 30 29 20 7b 0a 09 54 63 6c 5f 44  ) == 0) {..Tcl_D
68d0: 6f 57 68 65 6e 49 64 6c 65 28 44 69 73 70 6c 61  oWhenIdle(Displa
68e0: 79 53 63 72 6f 6c 6c 62 61 72 2c 20 28 43 6c 69  yScrollbar, (Cli
68f0: 65 6e 74 44 61 74 61 29 20 73 63 72 6f 6c 6c 50  entData) scrollP
6900: 74 72 29 3b 0a 09 73 63 72 6f 6c 6c 50 74 72 2d  tr);..scrollPtr-
6910: 3e 66 6c 61 67 73 20 7c 3d 20 52 45 44 52 41 57  >flags |= REDRAW
6920: 5f 50 45 4e 44 49 4e 47 3b 0a 20 20 20 20 7d 0a  _PENDING;.    }.
6930: 7d 0a                                            }.