summaryrefslogtreecommitdiff
path: root/libgtk_kylix/GTKControls.pas
diff options
context:
space:
mode:
Diffstat (limited to 'libgtk_kylix/GTKControls.pas')
-rw-r--r--libgtk_kylix/GTKControls.pas38
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;