{\r
public class CandidateView\r
{\r
+ private event EventHandler<VisibleChangedEventArgs> visibleEventHandler;\r
private static CandidateView instance;\r
private Timer timer;\r
private View parentView;\r
get => viewHeight;\r
}\r
\r
+ public bool IsTimerRunning\r
+ {\r
+ get => timer.IsRunning();\r
+ }\r
+\r
private bool TimerTick(object source, Timer.TickEventArgs e)\r
{\r
Log.Info("NUIIME", "Hide candidate view");\r
- parentView.Remove(candidateView);\r
visible = false;\r
candidateExpanded = false;\r
+\r
+ if (visibleEventHandler != null)\r
+ {\r
+ VisibleChangedEventArgs eventArgs;\r
+ eventArgs = new VisibleChangedEventArgs(candidateExpanded);\r
+ visibleEventHandler?.Invoke(null, eventArgs);\r
+ }\r
+\r
+ parentView.Remove(candidateView);\r
+\r
return false;\r
}\r
\r
\r
public void Show(View parent)\r
{\r
+ if (timer.IsRunning())\r
+ {\r
+ timer.Stop();\r
+ }\r
+\r
if (!visible)\r
{\r
Log.Info("NUIIME", "Show candidate view");\r
\r
public void Hide()\r
{\r
- if (timer.IsRunning())\r
+ if (timer.IsRunning() == false)\r
{\r
- timer.Stop();\r
+ timer.Start();\r
}\r
-\r
- timer.Start();\r
}\r
\r
public void SetPosition(Size imeSize)\r
candidateView.Size = new Size(imeSize.Width, viewHeight);\r
candidateView.Position = new Position(0, 0);\r
}\r
+\r
+ public void SetVisibleEventHandler(EventHandler<VisibleChangedEventArgs> handler)\r
+ {\r
+ visibleEventHandler += handler;\r
+ }\r
}\r
}\r
private static void Show(InputMethodEditor.ContextId a, Tizen.Uix.InputMethod.InputMethodContext b)
{
+ if (SclNui == null)
+ {
+ SclNui = new SCLNUI(navigator);
+ }
+
int inputContext = a.Equals(0) ? 0 : KeyboardState.Instance.FocusedContext;
bool returnKeyState = b.ReturnKeyState;
bool predictionAllow = b.PredictionMode;
IMEHide();
navigator.Pop();
+ SclNui.Dispose();
}
private static void IMEHide()
{
- SclNui.ClearClickCount();
- SclNui.SetUpdatePending(true);
- SclNui.DisableInputEvent(true);
- SclNui.Hide();
-
KeyboardState.Instance.VisibleState = false;
- ResetShiftState();
KeyboardState.Instance.ResetMultitapState(true);
}
}
UpdateSpaceKey();
+ SclNui.SetImeSize();
SclNui.Show();
SclNui.DisableInputEvent(false);
- SetIMESize();
}
private static void ResetContext()
}
}
- private static void ResetShiftState()
- {
- uint oldState, newState;
- SclNui.GetShiftState(out oldState);
- newState = (uint)ShiftState.Off;
-
- if (oldState != newState)
- SclNui.SetShiftState(newState);
- }
-
private static void RegisterCallback()
{
InputMethodEditor.FocusedIn += FocusInEvent;
SclDbus.FocusIn();
}
- private static void SetIMESize()
- {
- IntPtr inputModePtr;
- SclNui.GetInputMode(out inputModePtr);
- string inputMode = Marshal.PtrToStringAnsi(inputModePtr);
-
- int portraitWidth, portraitHeight, landscapeWidth, landscapeHeight;
- SclNui.GetInputModeSize(inputMode, (int)WindowAttribute.DisplayMode.Portrait, out portraitWidth, out portraitHeight);
- SclNui.GetInputModeSize(inputMode, (int)WindowAttribute.DisplayMode.Landscape, out landscapeWidth, out landscapeHeight);
- SclNui.SetImeSize(new Size2D(portraitWidth, portraitHeight), new Size2D(landscapeWidth, landscapeHeight));
- IntPtr nativeHandle = new Window.SafeNativeWindowHandle().DangerousGetHandle();
- InputMethodEditor.SetSize(nativeHandle, portraitWidth, portraitHeight, landscapeWidth, landscapeHeight);
- }
-
private static void UpdateSpaceKey()
{
int languageNum = LanguageManager.Instance.GetLanguagesNum();
private EmoticonPage emoticonPage = null;
private int deviceAngle = 0;
+ private Size2D screenSize;
private Size2D imePortraitSize;
private Size2D imeLandscapeSize;
showEmoticonTimer = new Timer(10);
showEmoticonTimer.Tick += showEmoticonTimerTick;
+ screenSize = NUIApplication.GetScreenSize();
+
/* Draw text callback */
_draw_text_cb = (IntPtr font_name, short font_size, bool is_italic, bool is_bold, int r, int g, int b, int a,
IntPtr str, int pos_x, int pos_y, int width, int height,
if (windowType == WindowAttribute.WindowType.Magnifier)
{
+ if (imePortraitSize == null || imeLandscapeSize == null)
+ GetDefaultSize();
+
if (deviceAngle == 0 || deviceAngle == 180)
- magnifier.SetPosition(new WindowAttribute.Position(x, ResourceManager.screenHeight - imePortraitSize.Height + y, rotationX, ResourceManager.screenWidth - imeLandscapeSize.Height + rotationY));
+ magnifier.SetPosition(new WindowAttribute.Position(x, screenSize.Height - imePortraitSize.Height + y, rotationX, screenSize.Width - imeLandscapeSize.Height + rotationY));
else
- magnifier.SetPosition(new WindowAttribute.Position(x, ResourceManager.screenWidth - imeLandscapeSize.Height + y, rotationX, ResourceManager.screenHeight - imePortraitSize.Height + rotationY));
+ magnifier.SetPosition(new WindowAttribute.Position(x, screenSize.Width - imeLandscapeSize.Height + y, rotationX, screenSize.Height - imePortraitSize.Height + rotationY));
}
};
SclNuiUpdateWindowPositionCb(_updateWindowPositionChangedEvent, (IntPtr)null);
+ candidateView.SetVisibleEventHandler(OnVisibleChanged);
+
_onCandidateShowEvent = (IntPtr userData) =>
{
- if (imePortraitSize == null || imeLandscapeSize == null)
- GetDefaultSize();
-
- if (candidateView.IsVisible == false)
+ if (candidateView.IsVisible == false || candidateView.IsTimerRunning)
{
+ SetImeSize(CandidateRequest.Show);
+
if (deviceAngle == 0 || deviceAngle == 180)
candidateView.SetPosition(imePortraitSize);
else
candidateView.SetPosition(imeLandscapeSize);
+
candidateView.Show(this);
- SetImeSize(CandidateRequest.Show);
}
};
SclSetCandidateShowCb(_onCandidateShowEvent, (IntPtr)null);
{
candidateView.Hide();
}
- SetImeSize(CandidateRequest.Hide);
};
SclSetCandidateHideCb(_onCandidateHideEvent, (IntPtr)null);
SclSetCandidateStringForeachCb(_onCandidateStringForeach, (IntPtr)null);
}
+ private void OnVisibleChanged(object sender, VisibleChangedEventArgs e)
+ {
+ if (e.Visible == false)
+ {
+ SetImeSize(CandidateRequest.Hide);
+ }
+ }
+
private bool CommitTimerTick(object source, Timer.TickEventArgs e)
{
InputMethodEditor.HidePreEditString();
private void SetImeSize(CandidateRequest request)
{
- if (imePortraitSize == null || imeLandscapeSize == null)\r
- GetDefaultSize();
+ GetDefaultSize();
switch (request)
{
IntPtr nativeHandle = new Window.SafeNativeWindowHandle().DangerousGetHandle();
InputMethodEditor.SetSize(nativeHandle, imePortraitSize.Width, imePortraitSize.Height, imeLandscapeSize.Width, imeLandscapeSize.Height);
- }\r
-\r
- private void GetDefaultSize()\r
- {\r
- IntPtr inputModePtr;\r
- GetInputMode(out inputModePtr);\r
- string inputMode = Marshal.PtrToStringAnsi(inputModePtr);\r
-\r
- int portraitWidth, portraitHeight, landscapeWidth, landscapeHeight;\r
- GetInputModeSize(inputMode, (int)WindowAttribute.DisplayMode.Portrait, out portraitWidth, out portraitHeight);\r
- GetInputModeSize(inputMode, (int)WindowAttribute.DisplayMode.Landscape, out landscapeWidth, out landscapeHeight);\r
-\r
- imePortraitSize = new Size2D(portraitWidth, portraitHeight);\r
- imeLandscapeSize = new Size2D(landscapeWidth, landscapeHeight);\r
- }\r
-\r
+ }
+
+ private void GetDefaultSize()
+ {
+ IntPtr inputModePtr;
+ GetInputMode(out inputModePtr);
+ string inputMode = Marshal.PtrToStringAnsi(inputModePtr);
+
+ int portraitWidth, portraitHeight, landscapeWidth, landscapeHeight;
+ GetInputModeSize(inputMode, (int)WindowAttribute.DisplayMode.Portrait, out portraitWidth, out portraitHeight);
+ GetInputModeSize(inputMode, (int)WindowAttribute.DisplayMode.Landscape, out landscapeWidth, out landscapeHeight);
+
+ imePortraitSize = new Size2D(portraitWidth, portraitHeight);
+ imeLandscapeSize = new Size2D(landscapeWidth, landscapeHeight);
+ }
+
public int Init(string entry_filepath)
{
return SclNuiInit(entry_filepath);
return SclNuiSetRotation(degree);
}
- public void SetImeSize(Size2D portraitSize, Size2D landscapeSize)
+ public void SetImeSize()
{
- imePortraitSize = portraitSize;
- imeLandscapeSize = landscapeSize;
+ SetImeSize(CandidateRequest.None);
}
}
}
\ No newline at end of file