bool WDL_VirtualSlider::OnMouseWheel(int xpos, int ypos, int amt) { if (m_grayed) return false; if (!WDL_STYLE_AllowSliderMouseWheel()) return false; bool isVert = GetIsVert(); int l=amt; if (!(GetAsyncKeyState(VK_CONTROL)&0x8000)) l *= 16; l *= (m_maxr-m_minr); l/=120000; if (!l) { if (amt<0)l=-1; else if (amt>0) l=1; } int pos=m_pos+l; if (pos < m_minr)pos=m_minr; else if (pos > m_maxr)pos=m_maxr; m_pos=pos; m_needflush=1; WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:(isVert?WM_VSCROLL:WM_HSCROLL),SB_THUMBTRACK,GetID(),this); if (chk.isOK()) { RequestRedraw(NULL); if (m__iaccess) m__iaccess->OnStateChange(); } return true; }
void WDL_VirtualSlider::OnMouseMove(int xpos, int ypos) { if (m_grayed) return; if (m_captured) OnMoveOrUp(xpos,ypos,0); else if (m_needflush && (xpos <0 || xpos > m_position.right- m_position.left || ypos < 0|| ypos > m_position.bottom-m_position.top )) { bool isVert = GetIsVert(); m_needflush=0; WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:(isVert?WM_VSCROLL:WM_HSCROLL),SB_ENDSCROLL,GetID(),this); if (chk.isOK() && m__iaccess) m__iaccess->OnStateChange(); } }
int WDL_VirtualComboBox::OnMouseDown(int xpos, int ypos) { if (m__iaccess) m__iaccess->OnFocused(); if (m_items.GetSize()) { //SendCommand(WM_COMMAND, GetID()|(CBN_DROPDOWN<<16), 0, this); HMENU menu=CreatePopupMenu(); int x=0; GenSubMenu(menu,&x,&m_items,m_curitem); HWND h=GetRealParent(); POINT p={0,}; WDL_VirtualWnd *w=this; while (w) { RECT r; w->GetPosition(&r); p.x+=r.left; p.y+=w==this?r.bottom:r.top; w=w->GetParent(); } if (h) { ClientToScreen(h,&p); //SetFocus(h); } int ret=TrackPopupMenu(menu,TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RETURNCMD|TPM_NONOTIFY,p.x,p.y,0,h,NULL); if (ret>=1000) { m_curitem=ret-1000; RequestRedraw(NULL); // track menu WDL_VWND_DCHK(a); SendCommand(WM_COMMAND,GetID() | (CBN_SELCHANGE<<16),0,this); if (a.isOK() && m__iaccess) m__iaccess->OnStateChange(); } } return -1; }
bool WDL_VirtualSlider::OnMouseDblClick(int xpos, int ypos) { if (m_grayed) return false; bool isVert = GetIsVert(); int pos=m_center; if (pos < 0) pos=WDL_STYLE_GetSliderDynamicCenterPos(); m_pos=pos; WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:(isVert?WM_VSCROLL:WM_HSCROLL),SB_ENDSCROLL,GetID(),this); if (chk.isOK()) { RequestRedraw(NULL); if (m__iaccess) m__iaccess->OnStateChange(); } m_captured=false; return true; }
void WDL_VirtualIconButton::DoSendCommand(int xpos, int ypos) { if (m_en && xpos >= 0 && xpos < m_position.right-m_position.left && ypos >= 0 && ypos < m_position.bottom-m_position.top) { int code=GetID(); if (!m_iconCfg && m_textlbl.Get()[0] && m_checkstate >= 0) { if (xpos < m_position.bottom-m_position.top) { code|=600<<16; } } WDL_VWND_DCHK(a); SendCommand(WM_COMMAND,code,0,this); if (a.isOK() && m__iaccess && m_checkstate>=0) m__iaccess->OnStateChange(); } }
void WDL_VirtualSlider::OnMoveOrUp(int xpos, int ypos, int isup) { int pos; bool isVert = GetIsVert(); int rsize=m_maxr-m_minr; if (rsize<1)rsize=1; int viewh=m_position.bottom-m_position.top; int vieww=m_position.right-m_position.left; LICE_IBitmap *bm_image=m_skininfo ? m_skininfo->thumbimage[isVert] : 0; int bm_w=16,bm_h=16; if (bm_image) { bm_w=bm_image->getWidth(); bm_h=bm_image->getHeight(); AdjustThumbImageSize(vieww,viewh,m_skininfo,isVert,&bm_w,&bm_h); } else { bm_image=WDL_STYLE_GetSliderBitmap2(isVert); if (bm_image) { bm_w=bm_image->getWidth(); bm_h=bm_image->getHeight(); } AdjustThumbImageSize(vieww,viewh,NULL,isVert,&bm_w,&bm_h); } int precmode=0; if (m_is_knob) isVert=true; if (isVert) { #ifndef _WIN32 if (isup) pos=m_pos; else #endif if (viewh <= bm_h || m_is_knob || (GetAsyncKeyState(VK_CONTROL)&0x8000)) { int sc=m_is_knob && !(GetAsyncKeyState(VK_CONTROL)&0x8000)?4:1; pos = m_pos- ((ypos-m_last_y) - (m_is_knob ?xpos-m_last_x:0))*sc; precmode=1; } else { pos=m_minr+ (((double)(viewh-bm_h - ypos + m_move_offset)*(double)rsize)/(double)(viewh-bm_h)); } if (pos < m_minr)pos=m_minr; else if (pos > m_maxr)pos=m_maxr; if (pos != m_pos || isup) { if (ypos == m_last_y&&(m_is_knob && xpos==m_last_x)) pos=m_pos; if ((GetAsyncKeyState(VK_MENU)&0x8000) && isup) pos=m_click_pos; m_pos=pos; if (isup || ypos != m_last_y||(m_is_knob&&xpos!=m_last_x)) { WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:WM_VSCROLL,isup?SB_ENDSCROLL:SB_THUMBTRACK,GetID(),this); if (chk.isOK()) { RequestRedraw(NULL); if (m__iaccess) m__iaccess->OnStateChange(); } } } } else { #ifndef _WIN32 if (isup) pos=m_pos; else #endif if ((GetAsyncKeyState(VK_CONTROL)&0x8000) || vieww <= bm_w || m_is_knob) { pos = m_pos+ (xpos-m_last_x); precmode=1; } else { pos=m_minr + (((double)(xpos - m_move_offset)*(double)rsize)/(double)(vieww-bm_w)); } if (pos < m_minr)pos=m_minr; else if (pos > m_maxr)pos=m_maxr; if (pos != m_pos || isup) { if (xpos == m_last_x) pos=m_pos; if ((GetAsyncKeyState(VK_MENU)&0x8000) && isup) pos=m_click_pos; m_pos=pos; if (isup || xpos != m_last_x) { WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:WM_HSCROLL,isup?SB_ENDSCROLL:SB_THUMBTRACK,GetID(),this); if (chk.isOK()) { RequestRedraw(NULL); if (m__iaccess) m__iaccess->OnStateChange(); } } } } if (precmode&&GetRealParent()) { if (xpos != m_last_x || ypos != m_last_y) { POINT p; GetCursorPos(&p); p.x-=(xpos-m_last_x); #ifdef _WIN32 p.y-=(ypos-m_last_y); #else p.y+=(ypos-m_last_y); #endif #ifdef _WIN32 if (!m_is_knob) { POINT pt={0,0}; ClientToScreen(GetRealParent(),&pt); WDL_VWnd *wnd=this; while (wnd) { RECT r; wnd->GetPosition(&r); pt.x+=r.left; pt.y+=r.top; wnd=wnd->GetParent(); } if (isVert) { m_last_y=( viewh - bm_h - (((m_pos-m_minr) * (viewh-bm_h))/rsize))+m_move_offset; p.y=m_last_y+pt.y; } else { m_last_x=( (((m_pos-m_minr) * (vieww-bm_w))/rsize))+m_move_offset; p.x=m_last_x+pt.x; } } #endif if (!SetCursorPos(p.x,p.y)) { m_last_y = ypos; m_last_x = xpos; } } do m_last_precmode++; while (ShowCursor(FALSE)>=0); } else { m_last_y=ypos; m_last_x=xpos; while (m_last_precmode>0) {m_last_precmode--; ShowCursor(TRUE); } } m_needflush=0; }
int WDL_VirtualSlider::OnMouseDown(int xpos, int ypos) { if (m_grayed) return false; m_needflush=0; if (m__iaccess) m__iaccess->OnFocused(); bool isVert = GetIsVert(); int rsize=m_maxr-m_minr; if (rsize<1)rsize=1; int viewh=m_position.bottom-m_position.top; int vieww=m_position.right-m_position.left; if (vieww<1) vieww=1; if (viewh<1) viewh=1; LICE_IBitmap *bm_image=m_skininfo ? m_skininfo->thumbimage[isVert] : 0; int bm_w=16,bm_h=16; bool wantKnob=false; if (bm_image) { bm_w=bm_image->getWidth(); bm_h=bm_image->getHeight(); AdjustThumbImageSize(vieww,viewh,m_skininfo,isVert,&bm_w,&bm_h,NULL,&wantKnob,m_knobbias); } else { bm_image=WDL_STYLE_GetSliderBitmap2(isVert); if (bm_image) { bm_w=bm_image->getWidth(); bm_h=bm_image->getHeight(); } AdjustThumbImageSize(vieww,viewh,NULL,isVert,&bm_w,&bm_h,NULL,&wantKnob,m_knobbias); } m_is_knob = wantKnob; m_last_y=ypos; m_last_x=xpos; m_last_precmode=0; bool needsendcmd = m_sendmsgonclick; if (m_is_knob) { m_move_offset=0; m_click_pos=m_pos; } else if (isVert) { m_move_offset=ypos-( viewh - bm_h - ((double)((m_pos-m_minr) * (viewh-bm_h))/(double)rsize)); m_click_pos=m_pos; if (!m_is_knob && (m_move_offset < 0 || m_move_offset >= bm_h)) { int xcent=xpos - vieww/2; bool hit; if (m_skininfo && m_skininfo->bgimagecfg[1].bgimage) { LICE_pixel pix=WDL_VirtualWnd_ScaledBG_GetPix(&m_skininfo->bgimagecfg[1], vieww,viewh,xpos,ypos); hit = LICE_GETA(pix)>=64; } else hit= (xcent >= -2 && xcent < 3 && ypos >= bm_h/3 && ypos <= viewh-bm_h/3); if (hit) { m_move_offset=bm_h/2; int pos=m_minr+((viewh-bm_h - (ypos-m_move_offset))*rsize)/(viewh-bm_h); if (pos < m_minr)pos=m_minr; else if (pos > m_maxr)pos=m_maxr; m_pos=pos; needsendcmd=false; WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:WM_VSCROLL,SB_THUMBTRACK,GetID(),this); if (chk.isOK()) { RequestRedraw(NULL); if (m__iaccess) m__iaccess->OnStateChange(); } } else return false; } } else { m_move_offset=xpos-( ((double)((m_pos-m_minr) * (vieww-bm_w))/(double)rsize)); m_click_pos=m_pos; if (m_move_offset < 0 || m_move_offset >= bm_w) { int ycent=ypos - viewh/2; bool hit; if (m_skininfo && m_skininfo->bgimagecfg[0].bgimage) { LICE_pixel pix=WDL_VirtualWnd_ScaledBG_GetPix(&m_skininfo->bgimagecfg[0], vieww,viewh,xpos,ypos); hit = LICE_GETA(pix)>=64; } else hit = (ycent >= -2 && ycent < 3 && xpos >= bm_w/3 && xpos <= vieww-bm_w/3); if (hit) { m_move_offset=bm_w/2; int pos=m_minr+((xpos-m_move_offset)*rsize)/(vieww-bm_w); if (pos < m_minr)pos=m_minr; else if (pos > m_maxr)pos=m_maxr; m_pos=pos; needsendcmd=false; WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:WM_HSCROLL,SB_THUMBTRACK,GetID(),this); if (chk.isOK()) { RequestRedraw(NULL); if (m__iaccess) m__iaccess->OnStateChange(); } } else return false; } } m_captured=true; if (needsendcmd) { WDL_VWND_DCHK(chk); SendCommand(m_scrollmsg?m_scrollmsg:WM_VSCROLL,SB_THUMBTRACK,GetID(),this); if (chk.isOK() && m__iaccess) m__iaccess->OnStateChange(); } return 1; }