|
@@ -21,7 +21,7 @@ uses
|
|
|
{$ENDIF}
|
|
|
// fresnel
|
|
|
Fresnel.Classes, Fresnel.Forms, Fresnel.WidgetSet, Fresnel.DOM,
|
|
|
- Fresnel.Events, FCL.Events;
|
|
|
+ Fresnel.Events, FCL.Events, Fresnel.Keys;
|
|
|
|
|
|
const
|
|
|
GTK3_LEFT_BUTTON = 1;
|
|
@@ -247,6 +247,158 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+function GdkKeyToFresnelKey(AValue: cuint32): Integer;
|
|
|
+begin
|
|
|
+ if (AValue <= $FF) then
|
|
|
+ Exit(AValue);
|
|
|
+ Result := 0;
|
|
|
+ case AValue of
|
|
|
+ GDK_KEY_Return,
|
|
|
+ GDK_KEY_KP_Enter,
|
|
|
+ GDK_KEY_ISO_Enter,
|
|
|
+ GDK_KEY_3270_Enter: Result := TKeyCodes.Enter;
|
|
|
+ GDK_KEY_Escape: Result := TKeyCodes.Escape;
|
|
|
+ GDK_KEY_Insert: Result := TKeyCodes.Insert;
|
|
|
+ GDK_KEY_Delete: Result := TKeyCodes.Delete;
|
|
|
+ GDK_KEY_BackSpace: Result := TKeyCodes.BackSpace;
|
|
|
+ GDK_KEY_Home: Result := TKeyCodes.Home;
|
|
|
+ GDK_KEY_End: Result := TKeyCodes.End_;
|
|
|
+ GDK_KEY_KP_Page_Up,
|
|
|
+ GDK_KEY_Page_Up: Result := TKeyCodes.PageUp;
|
|
|
+ GDK_KEY_KP_Page_Down,
|
|
|
+ GDK_KEY_Page_Down: Result := TKeyCodes.PageDown;
|
|
|
+ GDK_KEY_Left,
|
|
|
+ GDK_KEY_KP_LEFT: Result := TKeyCodes.ArrowLeft;
|
|
|
+ GDK_KEY_Up,
|
|
|
+ GDK_KEY_KP_UP: Result := TKeyCodes.ArrowUp;
|
|
|
+ GDK_KEY_Right,
|
|
|
+ GDK_KEY_KP_Right: Result := TKeyCodes.ArrowRight;
|
|
|
+ GDK_KEY_Down,
|
|
|
+ GDK_KEY_KP_Down: Result := TKeyCodes.ArrowDown;
|
|
|
+ GDK_KEY_Menu: Result := TKeyCodes.ContextMenu;
|
|
|
+ GDK_KEY_Tab,
|
|
|
+ GDK_KEY_3270_BackTab,
|
|
|
+ GDK_KEY_ISO_Left_Tab: Result := TKeyCodes.Tab;
|
|
|
+ GDK_KEY_Shift_L,
|
|
|
+ GDK_KEY_Shift_R: Result := TKeyCodes.Shift;
|
|
|
+ GDK_KEY_Control_L,
|
|
|
+ GDK_KEY_Control_R: Result := TKeyCodes.Control;
|
|
|
+ GDK_KEY_F1 .. GDK_KEY_F24:
|
|
|
+ Result:= TKeyCodes.F1 + (AValue - GDK_KEY_F1);
|
|
|
+ GDK_KEY_Copy : Result := TKeyCodes.Copy;
|
|
|
+ GDK_KEY_Caps_Lock : Result := TKeyCodes.CapsLock;
|
|
|
+ GDK_KEY_Hyper_L,
|
|
|
+ GDK_KEY_Hyper_R : Result:=TKeyCodes.Hyper;
|
|
|
+ GDK_KEY_Meta_L,
|
|
|
+ GDK_KEY_Meta_R : Result:=TKeyCodes.Meta;
|
|
|
+ GDK_KEY_Num_Lock : Result:=TKeyCodes.NumLock;
|
|
|
+ GDK_KEY_Scroll_Lock : Result:=TKeyCodes.ScrollLock;
|
|
|
+ GDK_KEY_Super_L,
|
|
|
+ GDK_KEY_Super_R : Result:=TKeyCodes.Super;
|
|
|
+ GDK_KEY_KP_Space : Result:=Ord(' ');
|
|
|
+ GDK_KEY_Clear : Result:=TKeyCodes.Clear;
|
|
|
+ GDK_KEY_3270_CursorSelect : Result:=TKeyCodes.CrSel;
|
|
|
+ GDK_KEY_3270_EraseEOF : Result:=TKeyCodes.EraseEof;
|
|
|
+ GDK_KEY_3270_ExSelect : Result:=TKeyCodes.ExSel;
|
|
|
+ GDK_KEY_Paste : Result:=TKeyCodes.Paste;
|
|
|
+ GDK_KEY_Redo : Result:=TKeyCodes.Redo;
|
|
|
+ GDK_KEY_Undo : Result:=TKeyCodes.Undo;
|
|
|
+ GDK_KEY_3270_Attn : Result:=TKeyCodes.Attn;
|
|
|
+ GDK_KEY_Cancel : Result:=TKeyCodes.Cancel;
|
|
|
+ GDK_KEY_Execute : Result:=TKeyCodes.Execute;
|
|
|
+ GDK_KEY_Find : Result:=TKeyCodes.Find;
|
|
|
+ GDK_KEY_Help : Result:=TKeyCodes.Help;
|
|
|
+ GDK_KEY_Pause,
|
|
|
+ GDK_KEY_Break : Result:=TKeyCodes.Pause;
|
|
|
+ GDK_KEY_3270_Play : Result:=TKeyCodes.Play;
|
|
|
+ GDK_KEY_Select : Result:=TKeyCodes.Select;
|
|
|
+ GDK_KEY_ZoomIn : Result:=TKeyCodes.ZoomIn;
|
|
|
+ GDK_KEY_ZoomOut : Result:=TKeyCodes.ZoomOut;
|
|
|
+ GDK_KEY_MonBrightnessDown : Result:=TKeyCodes.BrightnessDown;
|
|
|
+ GDK_KEY_MonBrightnessUp : Result:=TKeyCodes.BrightnessUp;
|
|
|
+ GDK_KEY_Eject : Result:=TKeyCodes.Eject;
|
|
|
+ GDK_KEY_PowerDown,
|
|
|
+ GDK_KEY_PowerOff : Result:=TKeyCodes.PowerOff;
|
|
|
+ GDK_KEY_3270_PrintScreen,
|
|
|
+ GDK_KEY_Sys_Req : Result:=TKeyCodes.PrintScreen;
|
|
|
+ GDK_KEY_Hibernate : Result:=TKeyCodes.Hibernate;
|
|
|
+ GDK_KEY_Standby,
|
|
|
+ GDK_KEY_Suspend,
|
|
|
+ GDK_KEY_Sleep : Result:=TKeyCodes.Standby;
|
|
|
+ GDK_KEY_WakeUp : Result:=TKeyCodes.WakeUp;
|
|
|
+ GDK_KEY_Eisu_toggle,
|
|
|
+ GDK_KEY_Eisu_Shift : Result:=TKeyCodes.Alphanumeric;
|
|
|
+ GDK_KEY_Codeinput : Result:=TKeyCodes.CodeInput;
|
|
|
+ GDK_KEY_Multi_key : Result:=TKeyCodes.Compose;
|
|
|
+ GDK_KEY_Henkan : Result:=TKeyCodes.Convert;
|
|
|
+ GDK_KEY_ISO_First_Group : Result:=TKeyCodes.GroupFirst;
|
|
|
+ GDK_KEY_ISO_Last_Group : Result:=TKeyCodes.GroupLast;
|
|
|
+ GDK_KEY_ISO_Next_Group : Result:=TKeyCodes.GroupNext;
|
|
|
+ GDK_KEY_script_switch : Result:=TKeyCodes.ModeChange;
|
|
|
+ {GDK_KEY_Mode_switch : Result:=TKeyCodes.ModeChange; } // duplicate
|
|
|
+ GDK_KEY_Muhenkan : Result:=TKeyCodes.NonConvert;
|
|
|
+ GDK_KEY_PreviousCandidate : Result:=TKeyCodes.PreviousCandidate;
|
|
|
+ GDK_KEY_SingleCandidate : Result:=TKeyCodes.SingleCandidate;
|
|
|
+ GDK_KEY_Hangul : Result:=TKeyCodes.HangulMode;
|
|
|
+ GDK_KEY_Hangul_Hanja : Result:=TKeyCodes.HanjaMode;
|
|
|
+ GDK_KEY_Hangul_Jeonja : Result:=TKeyCodes.HanjaMode;
|
|
|
+ {GDK_KEY_Eisu_toggle: Result:=TKeyCodes.Eisu;}
|
|
|
+ GDK_KEY_hankaku: Result:=TKeyCodes.Hankaku;
|
|
|
+ GDK_KEY_hiragana: Result:=TKeyCodes.Hiranga;
|
|
|
+ GDK_KEY_Hiragana_Katakana: Result:=TKeyCodes.HirangaKatakana;
|
|
|
+ GDK_KEY_Kana_Lock,
|
|
|
+ GDK_KEY_Kana_Shift : Result:=TKeyCodes.KanaMode;
|
|
|
+ GDK_KEY_Kanji : Result:=TKeyCodes.KanjiMode;
|
|
|
+ GDK_KEY_Katakana : Result:=TKeyCodes.Katakana;
|
|
|
+ GDK_KEY_Romaji : Result:=TKeyCodes.Romaji;
|
|
|
+ GDK_KEY_Zenkaku : Result:=TKeyCodes.Zenkaku;
|
|
|
+ GDK_KEY_Zenkaku_Hankaku : Result:=TKeyCodes.ZenkakuHankaku;
|
|
|
+ GDK_KEY_AudioForward : Result:=TKeyCodes.MediaFastForward;
|
|
|
+ GDK_KEY_AudioPause : Result:=TKeyCodes.MediaPause;
|
|
|
+ GDK_KEY_AudioPlay : Result:=TKeyCodes.MediaPlay;
|
|
|
+ GDK_KEY_AudioRecord : Result:=TKeyCodes.MediaRecord;
|
|
|
+ GDK_KEY_AudioRewind : Result:=TKeyCodes.MediaRewind;
|
|
|
+ GDK_KEY_AudioNext : Result:=TKeyCodes.MediaTrackNext;
|
|
|
+ GDK_KEY_AudioPrev : Result:=TKeyCodes.MediaTrackPrevious;
|
|
|
+ GDK_KEY_AudioLowerVolume : Result:=TKeyCodes.AudioVolumeDown;
|
|
|
+ GDK_KEY_AudioRaiseVolume : Result:=TKeyCodes.AudioVolumeUp;
|
|
|
+ GDK_KEY_AudioMute : Result:=TKeyCodes.AudioVolumeMute;
|
|
|
+ GDK_KEY_AudioMicMute : Result:=TKeyCodes.MicrophoneVolumeMute;
|
|
|
+ GDK_KEY_BrightnessAdjust : Result:=TKeyCodes.Dimmer;
|
|
|
+ GDK_KEY_AudioCycleTrack : Result:=TKeyCodes.MediaAudioTrack;
|
|
|
+ GDK_KEY_AudioRandomPlay : Result:=TKeyCodes.RandomToggle;
|
|
|
+ GDK_KEY_SplitScreen : Result:=TKeyCodes.SplitScreenToggle;
|
|
|
+ GDK_KEY_Subtitle : Result:=TKeyCodes.Subtitle;
|
|
|
+ GDK_KEY_Next_VMode : Result:=TKeyCodes.VideoModeNext;
|
|
|
+ GDK_KEY_Close : Result:=TKeyCodes.Close;
|
|
|
+ GDK_KEY_New : Result:=TKeyCodes.New;
|
|
|
+ GDK_KEY_Open : Result:=TKeyCodes.Open;
|
|
|
+ GDK_KEY_Print : Result:=TKeyCodes.Print;
|
|
|
+ GDK_KEY_Save : Result:=TKeyCodes.Save;
|
|
|
+ GDK_KEY_Spell : Result:=TKeyCodes.SpellCheck;
|
|
|
+ GDK_KEY_MailForward : Result:=TKeyCodes.MailForward;
|
|
|
+ GDK_KEY_Reply : Result:=TKeyCodes.MailReply;
|
|
|
+ GDK_KEY_Send : Result:=TKeyCodes.MailSend;
|
|
|
+ GDK_KEY_Calculator : Result:=TKeyCodes.LaunchCalculator;
|
|
|
+ GDK_KEY_Calendar : Result:=TKeyCodes.LaunchCalendar;
|
|
|
+ GDK_KEY_Mail : Result:=TKeyCodes.LaunchMail;
|
|
|
+ GDK_KEY_CD,
|
|
|
+ GDK_KEY_Video,
|
|
|
+ GDK_KEY_AudioMedia : Result:=TKeyCodes.LaunchMediaPlayer;
|
|
|
+ GDK_KEY_Music : Result:=TKeyCodes.LaunchMusicPlayer;
|
|
|
+ GDK_KEY_Explorer : Result:=TKeyCodes.LaunchMyComputer;
|
|
|
+ GDK_KEY_ScreenSaver : Result:=TKeyCodes.LaunchScreenSaver;
|
|
|
+ GDK_KEY_Phone : Result:=TKeyCodes.LaunchPhone;
|
|
|
+ GDK_KEY_Excel : Result:=TKeyCodes.LaunchSpreadsheet;
|
|
|
+ GDK_KEY_WWW : Result:=TKeyCodes.LaunchWebBrowser;
|
|
|
+ GDK_KEY_WebCam : Result:=TKeyCodes.LaunchWebCam;
|
|
|
+ GDK_KEY_Word : Result:=TKeyCodes.LaunchWordProcessor;
|
|
|
+ GDK_KEY_Launch0..GDK_KEY_LaunchF : Result:=TKeyCodes.LaunchApplication1+(AValue-GDK_KEY_Launch0);
|
|
|
+ else
|
|
|
+ Result := gdk_keyval_to_unicode(AValue);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
function GdkModifierStateToShiftState(const AState: TGdkModifierType
|
|
|
): TShiftState;
|
|
|
begin
|
|
@@ -319,7 +471,8 @@ end;
|
|
|
|
|
|
procedure TGtk3WSForm.GtkEventDestroy;
|
|
|
begin
|
|
|
-
|
|
|
+ FWindow:=Nil;
|
|
|
+ FreeAndNil(FForm);
|
|
|
end;
|
|
|
|
|
|
function TGtk3WSForm.GtkEventDraw(AContext: Pcairo_t): Boolean;
|
|
@@ -369,16 +522,34 @@ begin
|
|
|
{$ENDIF}
|
|
|
end;
|
|
|
|
|
|
+
|
|
|
function TGtk3WSForm.GtkEventKeyDown(Event: PGdkEvent): Boolean;
|
|
|
+var
|
|
|
+ lInit : TFresnelKeyEventInit;
|
|
|
+
|
|
|
begin
|
|
|
- if Event=nil then ;
|
|
|
- Result:=false;
|
|
|
+ if Event=nil then exit;
|
|
|
+ lInit:=Default(TFresnelKeyEventInit);
|
|
|
+ lInit.ShiftState:=GdkModifierStateToShiftState(Event^.key.state);
|
|
|
+ // This will handle unicode.
|
|
|
+ lInit.NumKey:=GdkKeyToFresnelKey(Event^.Key.keyval);
|
|
|
+ Form.WSKey(lInit,evtKeyDown);
|
|
|
+ Result:=True;
|
|
|
end;
|
|
|
|
|
|
function TGtk3WSForm.GtkEventKeyUp(Event: PGdkEvent): Boolean;
|
|
|
+var
|
|
|
+ lInit : TFresnelKeyEventInit;
|
|
|
+
|
|
|
begin
|
|
|
- if Event=nil then ;
|
|
|
- Result:=false;
|
|
|
+ if Event=nil then exit;
|
|
|
+ lInit:=Default(TFresnelKeyEventInit);
|
|
|
+ lInit.ShiftState:=GdkModifierStateToShiftState(Event^.key.state);
|
|
|
+ // This will handle unicode.
|
|
|
+ lInit.NumKey:=GdkKeyToFresnelKey(Event^.Key.keyval);
|
|
|
+ lInit.Key := TKeyCodes.Names[lInit.NumKey];
|
|
|
+ Form.WSKey(lInit,evtKeyUp);
|
|
|
+ Result:=True;
|
|
|
end;
|
|
|
|
|
|
function TGtk3WSForm.GtkEventMouseXY(Event: PGdkEvent): Boolean;
|
|
@@ -502,7 +673,7 @@ end;
|
|
|
|
|
|
procedure TGtk3WSForm.GtkEventHide;
|
|
|
begin
|
|
|
-
|
|
|
+ Form.Hide;
|
|
|
end;
|
|
|
|
|
|
procedure TGtk3WSForm.GtkEventMap;
|
|
@@ -512,7 +683,7 @@ end;
|
|
|
|
|
|
procedure TGtk3WSForm.GtkEventShow;
|
|
|
begin
|
|
|
-
|
|
|
+ Form.Show;
|
|
|
end;
|
|
|
|
|
|
procedure TGtk3WSForm.GtkEventSizeAllocate(aRect: PGdkRectangle);
|