diff options
Diffstat (limited to 'libgtk_kylix/GTKControls.pas')
| -rw-r--r-- | libgtk_kylix/GTKControls.pas | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/libgtk_kylix/GTKControls.pas b/libgtk_kylix/GTKControls.pas index 4729266..502e1b9 100644 --- a/libgtk_kylix/GTKControls.pas +++ b/libgtk_kylix/GTKControls.pas @@ -82,6 +82,7 @@ type FOnDblClick: TGDKMouseEvent; FOnExpose: TGDKExposeEvent; FOnMouseMove: TGDKMouseEvent; + FCSSProvider: PGtkCssProvider; function GetWidth: Integer; function GetHeight: Integer; function GetLeft: Integer; @@ -141,6 +142,7 @@ type procedure Invalidate; function GetData(Key: string): Pointer; procedure SetData(Key: string; Value: Pointer); + procedure ApplyCustomCSS(Stylesheet: string); published property Width: Integer read GetWidth write SetWidth; property Height: Integer read GetHeight write SetHeight; @@ -301,14 +303,16 @@ begin FOnMouseMove := nil; FOnMouseDown := nil; FOnMouseUp := nil; + FCSSProvider := nil; end; destructor TGTKControl.Destroy; begin - try + if Assigned(FCSSProvider) then g_object_unref(PGObject(FCSSProvider)); +// try // SetParent(nil); // if Assigned(FWidget) {and GTK_IS_WIDGET(FWidget)} then gtk_widget_destroy(PGtkWidget(FWidget)); - except end; +// except end; inherited Destroy; end; @@ -381,6 +385,7 @@ end; function TGTKControl.GetLeft: Integer; var A: TGtkAllocation; begin + A.x := 0; gtk_widget_get_allocation(FWidget, @A); Result := A.x; end; @@ -388,6 +393,7 @@ end; function TGTKControl.GetTop: Integer; var A: TGtkAllocation; begin + A.y := 0; gtk_widget_get_allocation(FWidget, @A); Result := A.y; end; @@ -776,6 +782,32 @@ begin gtk_widget_set_margin_bottom(FWidget, Value); end; +procedure TGTKControl.ApplyCustomCSS(Stylesheet: string); +var provider: PGtkCssProvider; + error: PGError; +begin + error := nil; + // No stylesheet previously attached and asked to reset, nothing to do + if not Assigned(FCSSProvider) and (Length(Stylesheet) < 1) then Exit; + // Create new stylesheet provider + if not Assigned(FCSSProvider) then begin + FCSSProvider := gtk_css_provider_new(); + gtk_style_context_add_provider(gtk_widget_get_style_context(FWidget), PGtkStyleProvider(FCSSProvider), G_MAXUINT32); + end; + // Asked to clear the stylesheets + if Length(Stylesheet) < 1 then begin + gtk_style_context_remove_provider(gtk_widget_get_style_context(FWidget), PGtkStyleProvider(FCSSProvider)); + g_object_unref(PGObject(FCSSProvider)); + FCSSProvider := nil; + end else begin + // Apply the stylesheet + if not gtk_css_provider_load_from_data(FCSSProvider, PChar(Stylesheet), -1, @Error) then begin + g_log(PChar('tuxcmd'), [G_LOG_LEVEL_WARNING], 'Failed to parse CSS stylesheet "%s": %s', [PChar(Stylesheet), Error^.message]); + g_error_free(error); + Exit; + end; + end; +end; (********************************************************************************************************************************) (********************************************************************************************************************************) @@ -812,7 +844,7 @@ end; function TGTKContainer.GetChildrenCount: integer; var List: PGList; begin - List := LAZGLIB2.PGList(gtk_container_get_children(PGtkContainer(FWidget))); + List := gtk_container_get_children(PGtkContainer(FWidget)); Result := g_list_length(List); g_list_free(List); end; |
