From 1b2b4bb4f3ecc034a6e9364d8768e50b167a9680 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 24 Dec 2024 12:41:48 +0100 Subject: Rough GTK3 port --- UViewer.pas | 141 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 71 insertions(+), 70 deletions(-) (limited to 'UViewer.pas') diff --git a/UViewer.pas b/UViewer.pas index e3eff81..0eceba8 100644 --- a/UViewer.pas +++ b/UViewer.pas @@ -24,9 +24,8 @@ unit UViewer; interface uses - lazglib2, lazgobject2, gdk2, gtk2, pango, - SysUtils, Classes, GTKControls, GTKForms, GTKExtCtrls, GTKConsts, - GTKText; + lazglib2, lazgobject2, lazgdk3, lazgtk3, lazpango1, + SysUtils, Classes, GTKControls, GTKForms, GTKExtCtrls, GTKText; type TFViewer = class(TGTKForm) @@ -67,7 +66,7 @@ var implementation -uses UCoreUtils, UConfig, DateUtils, ULibc, UGnome; +uses UCoreUtils, UConfig, DateUtils, ULibc; @@ -127,14 +126,15 @@ end; procedure TFViewer.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); begin - if Key = GDK_ESCAPE then Close; + if Key = GDK_KEY_Escape then Close; end; procedure TFViewer.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; SetParent(nil); - if Assigned(FWidget) and GTK_IS_WIDGET(FWidget) then gtk_widget_destroy(PGtkWidget(FWidget)); + // TODO WTF + if Assigned(FWidget) then g_object_unref(PGObject(FWidget)); // AThread.Terminate; // ModalResult := mbOK; end; @@ -183,11 +183,11 @@ begin // DebugMsg(['Setting value to ', val]); Inc(i); end; - gdk_window_process_all_updates; +// gdk_window_process_all_updates; usleep(100); until (microseconds div 1000) > dur; gtk_adjustment_set_value(adj, dest_value); - gdk_window_process_all_updates; +// gdk_window_process_all_updates; // DebugMsg(['End value ', dest_value]); g_timer_stop(timer); @@ -207,67 +207,67 @@ begin Accept := True; case Key of - GDK_HOME: begin - smooth_scroll(vadj, 0, True); - smooth_scroll(hadj, 0, True); + GDK_KEY_Home: begin + smooth_scroll(vadj, 0, True); + smooth_scroll(hadj, 0, True); + Accept := False; + end; + GDK_KEY_End: begin + smooth_scroll(vadj, vadj^.upper - vadj^.page_size, True); + Accept := False; + end; + GDK_KEY_Page_Down, GDK_KEY_KP_Page_Down, GDK_KEY_space: begin + x := gtk_adjustment_get_value(vadj) + vadj^.page_increment; + if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size; + smooth_scroll(vadj, x, True); + Accept := False; + end; + GDK_KEY_Page_Up, GDK_KEY_KP_Page_Up: begin + x := gtk_adjustment_get_value(vadj) - vadj^.page_increment; + if x < 0 then x := 0; + smooth_scroll(vadj, x, True); + Accept := False; + end; + GDK_KEY_Down, GDK_KEY_KP_Down: begin + x := gtk_adjustment_get_value(vadj) + vadj^.step_increment; + if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size; + smooth_scroll(vadj, x, False); + Accept := False; + end; + GDK_KEY_Up, GDK_KEY_KP_Up: begin + x := gtk_adjustment_get_value(vadj) - vadj^.step_increment; + if x < 0 then x := 0; + smooth_scroll(vadj, x, False); + Accept := False; + end; + GDK_KEY_Right, GDK_KEY_KP_Right: begin + x := gtk_adjustment_get_value(hadj) + hadj^.step_increment; + if x + hadj^.page_size > hadj^.upper then x := hadj^.upper - hadj^.page_size; + smooth_scroll(hadj, x, False); + Accept := False; + end; + GDK_KEY_Left, GDK_KEY_KP_Left: begin + x := gtk_adjustment_get_value(hadj) - hadj^.step_increment; + if x < 0 then x := 0; + smooth_scroll(hadj, x, False); + Accept := False; + end; + GDK_KEY_W: if (Shift = []) then begin + if TextView.WrapMode = wmWrapNone then TextView.WrapMode := wmWrapWord + else TextView.WrapMode := wmWrapNone; Accept := False; end; - GDK_END: begin - smooth_scroll(vadj, vadj^.upper - vadj^.page_size, True); - Accept := False; - end; - GDK_Page_Down, GDK_SPACE: begin - x := gtk_adjustment_get_value(vadj) + vadj^.page_increment; - if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size; - smooth_scroll(vadj, x, True); - Accept := False; - end; - GDK_Page_Up: begin - x := gtk_adjustment_get_value(vadj) - vadj^.page_increment; - if x < 0 then x := 0; - smooth_scroll(vadj, x, True); - Accept := False; - end; - GDK_Down: begin - x := gtk_adjustment_get_value(vadj) + vadj^.step_increment; - if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size; - smooth_scroll(vadj, x, False); - Accept := False; - end; - GDK_Up: begin - x := gtk_adjustment_get_value(vadj) - vadj^.step_increment; - if x < 0 then x := 0; - smooth_scroll(vadj, x, False); - Accept := False; - end; - GDK_Right: begin - x := gtk_adjustment_get_value(hadj) + hadj^.step_increment; - if x + hadj^.page_size > hadj^.upper then x := hadj^.upper - hadj^.page_size; - smooth_scroll(hadj, x, False); +// GDK_C, GDK_Capital_C, GDK_Insert: if (ssCtrl in Shift) then Accept := True; + GDK_KEY_S: if (Shift = []) then begin + ConfViewerMonospaceFont := True; + ApplyFont; Accept := False; end; - GDK_Left: begin - x := gtk_adjustment_get_value(hadj) - hadj^.step_increment; - if x < 0 then x := 0; - smooth_scroll(hadj, x, False); + GDK_KEY_A: if (Shift = []) then begin + ConfViewerMonospaceFont := False; + ApplyFont; Accept := False; end; - GDK_W, GDK_Capital_W: if (Shift = []) then begin - if TextView.WrapMode = wmWrapNone then TextView.WrapMode := wmWrapWord - else TextView.WrapMode := wmWrapNone; - Accept := False; - end; -// GDK_C, GDK_Capital_C, GDK_Insert: if (ssCtrl in Shift) then Accept := True; - GDK_S, GDK_Capital_S: if (Shift = []) then begin - ConfViewerMonospaceFont := True; - ApplyFont; - Accept := False; - end; - GDK_A, GDK_Capital_A: if (Shift = []) then begin - ConfViewerMonospaceFont := False; - ApplyFont; - Accept := False; - end; end; end; @@ -301,13 +301,13 @@ begin Accept := True; adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(ScrolledWindow.FWidget)); case Key of - GDK_ESCAPE: Close; - GDK_Down: begin + GDK_KEY_Escape: Close; + GDK_KEY_Down: begin x := Trunc(gtk_adjustment_get_value(adj)) + LineHeight; if x + Trunc(adj^.page_size) > LineHeight * NumLines then x := LineHeight * NumLines - Trunc(adj^.page_size); gtk_adjustment_set_value(adj, x); end; - GDK_Up: begin + GDK_KEY_Up: begin x := Trunc(gtk_adjustment_get_value(adj)) - LineHeight; if x < 0 then x := 0; gtk_adjustment_set_value(adj, x); @@ -443,19 +443,20 @@ end; procedure TFViewer.ApplyFont; begin - if ConfViewerMonospaceFont + // TODO +{ if ConfViewerMonospaceFont then gtk_widget_modify_font(TextView.FWidget, pango_font_description_from_string('Monospace')) - else gtk_widget_modify_font(TextView.FWidget, nil); + else gtk_widget_modify_font(TextView.FWidget, nil); } end; (********************************************************************************************************************************) procedure TViewerThread.Execute; begin - gdk_threads_enter; +// gdk_threads_enter; // DoIt; AViewer.Show; // AViewer.Run; - gdk_threads_leave; +// gdk_threads_leave; end; constructor TViewerThread.Create(Parent: TComponent); -- cgit v1.2.3