comparison os2/dw.c @ 203:e0beea487e8f

Added the basics for scrollbar thumb size on OS/2, and dw_main_iteration() which runs a message loop until it handles one message and returns. So other languages can run message loops and call this function internally.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 01 Feb 2003 07:05:12 +0000
parents b955228477b3
children 767fca804cea
comparison
equal deleted inserted replaced
202:9f87ad1572eb 203:e0beea487e8f
1868 1868
1869 if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN) 1869 if(msg == WM_BUTTON2DOWN || msg == WM_BUTTON3DOWN)
1870 msg = WM_BUTTON1DOWN; 1870 msg = WM_BUTTON1DOWN;
1871 if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP) 1871 if(msg == WM_BUTTON2UP || msg == WM_BUTTON3UP)
1872 msg = WM_BUTTON1UP; 1872 msg = WM_BUTTON1UP;
1873 if(msg == WM_VSCROLL || msg == WM_HSCROLL)
1874 msg = SLN_SLIDERTRACK;
1873 1875
1874 /* Find any callbacks for this function */ 1876 /* Find any callbacks for this function */
1875 while(tmp) 1877 while(tmp)
1876 { 1878 {
1877 if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1) 1879 if(tmp->message == msg || msg == WM_CONTROL || tmp->message == WM_USER+1)
2238 break; 2240 break;
2239 case SLN_SLIDERTRACK: 2241 case SLN_SLIDERTRACK:
2240 { 2242 {
2241 int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction; 2243 int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))tmp->signalfunction;
2242 2244
2243 if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd) 2245 if(origmsg == SLN_SLIDERTRACK)
2244 { 2246 {
2245 static int lastvalue = -1; 2247 /* Handle Slider control */
2246 static HWND lasthwnd = NULLHANDLE; 2248 if(tmp->window == hWnd || WinQueryWindow(tmp->window, QW_PARENT) == hWnd)
2247 int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0);
2248 if(lastvalue != ulValue || lasthwnd != tmp->window)
2249 { 2249 {
2250 dw_window_set_data(tmp->window, "_dw_slider_value", (void *)ulValue); 2250 static int lastvalue = -1;
2251 result = valuechangedfunc(tmp->window, ulValue, tmp->data); 2251 static HWND lasthwnd = NULLHANDLE;
2252 lastvalue = ulValue; 2252 int ulValue = (int)WinSendMsg(tmp->window, SLM_QUERYSLIDERINFO, MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_INCREMENTVALUE), 0);
2253 lasthwnd = tmp->window; 2253 if(lastvalue != ulValue || lasthwnd != tmp->window)
2254 {
2255 dw_window_set_data(tmp->window, "_dw_slider_value", (void *)ulValue);
2256 result = valuechangedfunc(tmp->window, ulValue, tmp->data);
2257 lastvalue = ulValue;
2258 lasthwnd = tmp->window;
2259 }
2260 tmp = NULL;
2254 } 2261 }
2255 tmp = NULL; 2262 }
2263 else
2264 {
2265 /* Handle scrollbar control */
2266 if(tmp->window = hWnd)
2267 {
2268 int pos = (int) SHORT1FROMMP(mp2);
2269
2270 dw_window_set_data(hWnd, "_dw_scrollbar_value", (void *)pos);
2271 result = valuechangedfunc(tmp->window, pos, tmp->data);
2272 tmp = NULL;
2273 }
2256 } 2274 }
2257 } 2275 }
2258 2276
2259 break; 2277 break;
2260 } 2278 }
3071 DosSleep(1); 3089 DosSleep(1);
3072 } 3090 }
3073 } 3091 }
3074 3092
3075 /* 3093 /*
3094 * Processes a single message iteration and returns.
3095 */
3096 void API dw_main_iteration(void)
3097 {
3098 QMSG qmsg;
3099
3100 _dwtid = dw_thread_id();
3101
3102 if(WinGetMsg(dwhab, &qmsg, 0, 0, 0))
3103 {
3104 if(qmsg.msg == WM_TIMER && qmsg.hwnd == NULLHANDLE)
3105 _run_event(qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2);
3106 WinDispatchMsg(dwhab, &qmsg);
3107 }
3108 }
3109
3110 /*
3076 * Free's memory allocated by dynamic windows. 3111 * Free's memory allocated by dynamic windows.
3077 * Parameters: 3112 * Parameters:
3078 * ptr: Pointer to dynamic windows allocated 3113 * ptr: Pointer to dynamic windows allocated
3079 * memory to be free()'d. 3114 * memory to be free()'d.
3080 */ 3115 */
5280 /* 5315 /*
5281 * Sets the scrollbar range. 5316 * Sets the scrollbar range.
5282 * Parameters: 5317 * Parameters:
5283 * handle: Handle to the scrollbar to be set. 5318 * handle: Handle to the scrollbar to be set.
5284 * range: Maximum range value. 5319 * range: Maximum range value.
5285 */ 5320 * visible: Visible area relative to the range.
5286 void API dw_scrollbar_set_range(HWND handle, unsigned int range) 5321 */
5322 void API dw_scrollbar_set_range(HWND handle, unsigned int range, unsigned int visible)
5287 { 5323 {
5288 unsigned int pos = (unsigned int)dw_window_get_data(handle, "_dw_scrollbar_value"); 5324 unsigned int pos = (unsigned int)dw_window_get_data(handle, "_dw_scrollbar_value");
5289 WinSendMsg(handle, SBM_SETSCROLLBAR, (MPARAM)pos, MPFROM2SHORT(0, (unsigned short)range)); 5325 WinSendMsg(handle, SBM_SETSCROLLBAR, (MPARAM)pos, MPFROM2SHORT(0, (unsigned short)range - visible));
5326 WinSendMsg(handle, SBM_SETTHUMBSIZE, MPFROM2SHORT((unsigned short)visible, range), 0);
5290 } 5327 }
5291 5328
5292 /* 5329 /*
5293 * Sets the spinbutton value. 5330 * Sets the spinbutton value.
5294 * Parameters: 5331 * Parameters: