00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <X11/Intrinsic.h>
00026 #include <X11/Xlib.h>
00027 #include <Xm/Xm.h>
00028 #include <Xm/ScrollBar.h>
00029
00030 #if defined(__cplusplus) || defined(c_plusplus)
00031 extern "C" {
00032 #endif
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 static void mouseScroll(Widget, XtPointer client_data, XEvent *event)
00058 {
00059 Widget sb = (Widget)client_data;
00060 int value_return = 0;
00061 int slider_size_return = 0;
00062 int increment_return = 0;
00063 int page_increment_return = 0;
00064 int count;
00065 int step;
00066
00067
00068 XmScrollBarGetValues (sb, &value_return, &slider_size_return,
00069 &increment_return, &page_increment_return);
00070
00071
00072 if ( event->xbutton.state & ShiftMask )
00073 {
00074 step = 1;
00075 }
00076 else if ( event->xbutton.state & ControlMask )
00077 {
00078 step = page_increment_return;
00079 }
00080 else
00081 {
00082 step = page_increment_return >> 1;
00083 }
00084
00085 if ( event->xbutton.button == Button4 )
00086 {
00087 value_return -= step;
00088 if ( value_return < 0 )
00089 value_return = 0;
00090 }
00091 else if ( event->xbutton.button == Button5 )
00092 {
00093
00094 XtVaGetValues(sb, XmNmaximum, &count, NULL);
00095 value_return += step;
00096 if ( value_return > count - slider_size_return )
00097 value_return = count - slider_size_return;
00098 }
00099
00100
00101 if ( event->xbutton.button == Button4 ||
00102 event->xbutton.button == Button5 )
00103 {
00104 XmScrollBarSetValues (sb, value_return, slider_size_return,
00105 increment_return, page_increment_return, True);
00106 }
00107 }
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 void xmAddMouseEventHandler(Widget w)
00126 {
00127 Widget wid;
00128
00129
00130 XtVaGetValues(XtParent(w),XmNverticalScrollBar, &wid, NULL);
00131
00132
00133 XtAddEventHandler(w, ButtonReleaseMask, False,
00134 (XtEventHandler) mouseScroll, wid);
00135
00136 XtAddEventHandler(wid, ButtonReleaseMask, False,
00137 (XtEventHandler) mouseScroll, wid);
00138 }
00139
00140 #if defined(__cplusplus) || defined(c_plusplus)
00141 }
00142 #endif