Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
bfba97da
Commit
bfba97da
authored
Jul 06, 2010
by
dewyatt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Many changes, preparing to pull/merge main repo to get SDL_GetKeyboardFocus.
parent
56aecc48
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
117 additions
and
12 deletions
+117
-12
IMM.hpp
EXCLUDE/GLIMM/include/IMM.hpp
+11
-0
Window_Listener.hpp
EXCLUDE/GLIMM/include/Window_Listener.hpp
+9
-0
IMM.cpp
EXCLUDE/GLIMM/src/IMM.cpp
+84
-12
Window.cpp
EXCLUDE/GLIMM/src/Window.cpp
+13
-0
No files found.
EXCLUDE/GLIMM/include/IMM.hpp
View file @
bfba97da
...
...
@@ -16,8 +16,18 @@ public:
LRESULT
Handle_Message
(
HWND
Window
,
UINT
Message
,
WPARAM
wParam
,
LPARAM
lParam
,
bool
&
Ate
);
void
Enable
();
void
Disable
();
bool
Is_Enabled
();
void
Toggle
();
void
Focus_Gained
();
void
Focus_Lost
();
private
:
void
Update_Input_Locale
();
void
Cancel_Composition
();
void
Input_Language_Changed
();
bool
my_COM_Initialized
;
ITfThreadMgr
*
my_Thread_Manager
;
...
...
@@ -25,6 +35,7 @@ private:
HIMC
my_Context
;
HKL
my_HKL
;
bool
my_Vertical_Candidates
;
bool
my_Enabled
;
};
#endif
EXCLUDE/GLIMM/include/Window_Listener.hpp
View file @
bfba97da
#ifndef WINDOW_LISTENER_HPP
#define WINDOW_LISTENER_HPP
enum
Mouse_Button
{
Mouse_Button_Left
,
Mouse_Button_Right
};
class
Window_Listener
{
public
:
...
...
@@ -9,6 +15,9 @@ public:
virtual
void
On_Key_Up
(
int
Key
){}
virtual
void
On_Char
(
unsigned
int
Char
){}
virtual
void
On_Resized
(
unsigned
int
Width
,
unsigned
int
Height
){}
virtual
void
On_Mouse_Button_Down
(
Mouse_Button
Button
){}
virtual
void
On_Mouse_Button_Up
(
Mouse_Button
Button
){}
};
#endif
EXCLUDE/GLIMM/src/IMM.cpp
View file @
bfba97da
...
...
@@ -6,7 +6,8 @@ IMM::IMM() : my_COM_Initialized(false),
my_Window
(
0
),
my_Context
(
0
),
my_HKL
(
0
),
my_Vertical_Candidates
(
false
)
my_Vertical_Candidates
(
false
),
my_Enabled
(
false
)
{
}
...
...
@@ -28,11 +29,13 @@ void IMM::Initialize(HWND Window)
if
(
SUCCEEDED
(
CoCreateInstance
(
CLSID_TF_ThreadMgr
,
NULL
,
CLSCTX_INPROC_SERVER
,
IID_ITfThreadMgr
,
reinterpret_cast
<
LPVOID
*>
(
&
my_Thread_Manager
))))
{
ITfDocumentMgr
*
Document_Manager
=
0
;
if
(
FAILED
(
my_Thread_Manager
->
AssociateFocus
(
Window
,
NULL
,
&
Document_Manager
)))
if
(
SUCCEEDED
(
my_Thread_Manager
->
AssociateFocus
(
Window
,
NULL
,
&
Document_Manager
)))
{
if
(
Document_Manager
)
Document_Manager
->
Release
();
}
else
printf
(
"Warning: ITfThreadMgr->AssociateFocus failed
\n
"
);
if
(
Document_Manager
)
Document_Manager
->
Release
();
}
else
printf
(
"Warning: Failed to create ITfThreadMgr instance
\n
"
);
...
...
@@ -40,16 +43,16 @@ void IMM::Initialize(HWND Window)
else
printf
(
"Warning: Failed to initialize COM
\n
"
);
ImmDisableTextFrameService
(
-
1
);
ImmDisableTextFrameService
(
(
DWORD
)
-
1
);
my_Context
=
ImmGetContext
(
my_Window
);
if
(
!
ImmReleaseContext
(
my_Window
,
my_Context
))
throw
std
::
runtime_error
(
"Error releasing context"
);
ImmReleaseContext
(
my_Window
,
my_Context
);
if
(
!
my_Context
)
throw
std
::
runtime_error
(
"No context"
);
throw
std
::
runtime_error
(
"No context
(No IME installed?)
"
);
Update_Input_Locale
();
Cancel_Composition
();
Disable
();
}
void
IMM
::
Finalize
()
...
...
@@ -102,11 +105,10 @@ LRESULT IMM::Handle_Message(HWND Window, UINT Message, WPARAM wParam, LPARAM lPa
switch
(
Message
)
{
case
WM_INPUTLANGCHANGE
:
Update_Input_Locale
();
Input_Language_Changed
();
break
;
case
WM_IME_SETCONTEXT
:
lParam
=
0
;
return
DefWindowProcW
(
my_Window
,
Message
,
wParam
,
lParam
);
break
;
case
WM_IME_STARTCOMPOSITION
:
Ate
=
true
;
...
...
@@ -158,8 +160,78 @@ LRESULT IMM::Handle_Message(HWND Window, UINT Message, WPARAM wParam, LPARAM lPa
case
IMN_CHANGECANDIDATE
:
Ate
=
true
;
break
;
case
IMN_CLOSECANDIDATE
:
Ate
=
true
;
break
;
default
:
Ate
=
true
;
break
;
}
break
;
}
return
0
;
}
void
IMM
::
Enable
()
{
ImmAssociateContext
(
my_Window
,
my_Context
);
Update_Input_Locale
();
my_Enabled
=
true
;
printf
(
"* Enabled
\n
"
);
}
void
IMM
::
Disable
()
{
ImmAssociateContext
(
my_Window
,
0
);
my_Enabled
=
false
;
printf
(
"* Disabled
\n
"
);
}
bool
IMM
::
Is_Enabled
()
{
return
my_Enabled
;
}
void
IMM
::
Toggle
()
{
if
(
my_Enabled
)
Disable
();
else
Enable
();
}
void
IMM
::
Focus_Gained
()
{
if
(
my_Enabled
)
Enable
();
}
void
IMM
::
Focus_Lost
()
{
bool
Enabled
=
my_Enabled
;
Cancel_Composition
();
Disable
();
my_Enabled
=
Enabled
;
}
void
IMM
::
Cancel_Composition
()
{
HIMC
hIMC
=
ImmGetContext
(
my_Window
);
if
(
!
hIMC
)
return
;
ImmNotifyIME
(
hIMC
,
NI_COMPOSITIONSTR
,
CPS_CANCEL
,
0
);
ImmNotifyIME
(
hIMC
,
NI_CLOSECANDIDATE
,
0
,
0
);
ImmReleaseContext
(
my_Window
,
hIMC
);
}
void
IMM
::
Input_Language_Changed
()
{
Update_Input_Locale
();
HWND
hwndImeDef
=
ImmGetDefaultIMEWnd
(
my_Window
);
if
(
hwndImeDef
)
{
SendMessageA
(
hwndImeDef
,
WM_IME_CONTROL
,
IMC_OPENSTATUSWINDOW
,
0
);
SendMessageA
(
hwndImeDef
,
WM_IME_CONTROL
,
IMC_CLOSESTATUSWINDOW
,
0
);
}
}
EXCLUDE/GLIMM/src/Window.cpp
View file @
bfba97da
...
...
@@ -31,6 +31,7 @@ void Window::Initialize(const std::wstring &Title, const Video_Mode &Mode, bool
my_Fullscreen
=
Fullscreen
;
Register_Class
();
Create_Window
(
Title
,
Mode
,
Fullscreen
);
Show
();
my_IMM
.
Initialize
(
my_Handle
);
}
...
...
@@ -296,6 +297,18 @@ LRESULT Window::Handle_Message(HWND Handle, UINT Message, WPARAM wParam, LPARAM
case
WM_KILLFOCUS
:
my_IMM
.
Focus_Lost
();
break
;
case
WM_LBUTTONDOWN
:
Call_Listener
(
On_Mouse_Button_Down
(
Mouse_Button_Left
));
break
;
case
WM_LBUTTONUP
:
Call_Listener
(
On_Mouse_Button_Up
(
Mouse_Button_Left
));
break
;
case
WM_RBUTTONDOWN
:
Call_Listener
(
On_Mouse_Button_Down
(
Mouse_Button_Right
));
break
;
case
WM_RBUTTONUP
:
Call_Listener
(
On_Mouse_Button_Up
(
Mouse_Button_Right
));
break
;
default
:
return
DefWindowProcW
(
Handle
,
Message
,
wParam
,
lParam
);
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment