Untitled diff

Created Diff never expires
38 removals
112 lines
9 additions
83 lines


static void KeyboardUpdate(QapKeyboard&Keyboard,const HWND hWnd,const UINT msg,const WPARAM wParam,const LPARAM lParam)
static void KeyboardUpdate(QapKeyboard&Keyboard,const HWND hWnd,const UINT msg,const WPARAM wParam,const LPARAM lParam)
{
{
if(msg==WM_SYSKEYDOWN)
bool any_key_up=(msg==WM_KEYUP)||(msg==WM_SYSKEYUP);
{
bool any_key_down=(msg==WM_KEYDOWN)||(msg==WM_SYSKEYDOWN);
if(wParam==VK_F10)
if(any_key_up||any_key_down)
{
Keyboard.KeyUpdate(VK_F10,true);
};
if(wParam==VK_MENU)
{
Keyboard.KeyUpdate(VK_MENU,true);
};
}
if(msg==WM_SYSKEYUP)
{
{
if(wParam==VK_F10)
bool value=any_key_down;
{
Keyboard.KeyUpdate(VK_F10,false);
};
if(wParam==VK_MENU)
{
Keyboard.KeyUpdate(VK_MENU,false);
};
if(wParam==VK_RETURN)
{
Keyboard.KeyUpdate(VK_RETURN,false);
};
}
bool key_flags[]={msg==WM_KEYUP,msg==WM_KEYDOWN};
if(key_flags[0]||key_flags[1])
{
bool value=key_flags[1];
auto&KB=Keyboard;
auto&KB=Keyboard;
auto&Down=Keyboard.Down;
auto&Down=Keyboard.Down;
auto KeyUpdate=[&KB,&Down](int key,const bool value)->void
auto KeyUpdate=[&KB,&Down](int key,const bool value)->void
{
{
if(Down[key]==value)return;
if(Down[key]==value)return;
if(value!=IsKeyDown(key))return;
if(value!=IsKeyDown(key))return;
KB.KeyUpdate(key,value);
KB.KeyUpdate(key,value);
};
};
struct TSysKey
struct TSysKey
{
{
int Key,LKey,RKey;
int Key,LKey,RKey;
} key_array[]=
} key_array[]=
{
{
{VK_SHIFT,VK_LSHIFT,VK_RSHIFT},
{VK_SHIFT,VK_LSHIFT,VK_RSHIFT},
{VK_CONTROL,VK_LCONTROL,VK_RCONTROL},
{VK_CONTROL,VK_LCONTROL,VK_RCONTROL},
{VK_MENU,VK_LMENU,VK_RMENU}
{VK_MENU,VK_LMENU,VK_RMENU}
};
};
for (int i=0;i<lenof(key_array);i++)
for (int i=0;i<lenof(key_array);i++)
{
{
auto&ex=key_array[i];
auto&ex=key_array[i];
if(wParam==ex.Key)
if(wParam==ex.Key)
{
{
KeyUpdate(ex.LKey,value);
KeyUpdate(ex.LKey,value);
KeyUpdate(ex.RKey,value);
KeyUpdate(ex.RKey,value);
}
}
}
}
}
}
if(msg==WM_KEYDOWN)
{
Keyboard.KeyUpdate(wParam,true);
}
if((msg==WM_KEYUP)&&(wParam==VK_SNAPSHOT))
if((msg==WM_KEYUP)&&(wParam==VK_SNAPSHOT))
{
{
if(wParam==VK_SNAPSHOT)
if(wParam==VK_SNAPSHOT)
{
{
Keyboard.KeyUpdate(VK_SNAPSHOT,true);
Keyboard.KeyUpdate(VK_SNAPSHOT,true);
};
};
if(wParam==VK_SNAPSHOT)
if(wParam==VK_SNAPSHOT)
{
{
Keyboard.KeyUpdate(VK_SNAPSHOT,false);
Keyboard.KeyUpdate(VK_SNAPSHOT,false);
};
};
}
}
if(msg==WM_KEYUP)
if(any_key_up)
{
{
Keyboard.KeyUpdate(wParam,false);
Keyboard.KeyUpdate(wParam,false);
}
}
if(msg==WM_KEYDOWN)
if(any_key_down)
{
{
Keyboard.KeyUpdate(wParam,true);
Keyboard.KeyUpdate(wParam,true);
}
}
if(msg==WM_LBUTTONUP)
if(msg==WM_LBUTTONUP)
{
{
Keyboard.KeyUpdate(mbLeft,false);
Keyboard.KeyUpdate(mbLeft,false);
}
}
if(msg==WM_RBUTTONUP)
if(msg==WM_RBUTTONUP)
{
{
Keyboard.KeyUpdate(mbRight,false);
Keyboard.KeyUpdate(mbRight,false);
}
}
if(msg==WM_MBUTTONUP)
if(msg==WM_MBUTTONUP)
{
{
Keyboard.KeyUpdate(mbMiddle,false);
Keyboard.KeyUpdate(mbMiddle,false);
}
}
if(msg==WM_LBUTTONDOWN)
if(msg==WM_LBUTTONDOWN)
{
{
Keyboard.KeyUpdate(mbLeft,true);
Keyboard.KeyUpdate(mbLeft,true);
}
}
if(msg==WM_RBUTTONDOWN)
if(msg==WM_RBUTTONDOWN)
{
{
Keyboard.KeyUpdate(mbRight,true);
Keyboard.KeyUpdate(mbRight,true);
}
}
if(msg==WM_MBUTTONDOWN)
if(msg==WM_MBUTTONDOWN)
{
{
Keyboard.KeyUpdate(mbMiddle,true);
Keyboard.KeyUpdate(mbMiddle,true);
}
}
if(msg==WM_CHAR)
if((msg==WM_CHAR)||(msg==WM_SYSCHAR))
{
{
Keyboard.CharUpdate(wParam);
Keyboard.CharUpdate(wParam);
}
}
}
}