Forráskód Böngészése

fresnel: viewport: update after changing stylesheet

mattias 2 éve
szülő
commit
5a59f9fff2
1 módosított fájl, 25 hozzáadás és 3 törlés
  1. 25 3
      src/fresnel.dom.pas

+ 25 - 3
src/fresnel.dom.pas

@@ -933,7 +933,6 @@ end;
 
 procedure TFresnelViewport.StylesheetChanged;
 begin
-  // ToDo: call async
   UpdateStylesheetElements;
 end;
 
@@ -941,16 +940,39 @@ procedure TFresnelViewport.UpdateStylesheetElements;
 var
   ss: TStringStream;
   aParser: TCSSParser;
+  NewStyleElements: TCSSElement;
 begin
-  if FStylesheetElements<>nil then exit;
+  //if FStylesheetElements<>nil then exit;
   aParser:=nil;
   ss:=TStringStream.Create(Stylesheet.Text);
   try
     aParser:=TCSSParser.Create(ss);
-    FStylesheetElements:=aParser.Parse;
+    NewStyleElements:=nil;
+    try
+      NewStyleElements:=aParser.Parse;
+    except
+      on CSSE: ECSSException do begin
+        debugln(['TFresnelViewport.UpdateStylesheetElements ',Name,':',ClassName,' ',CSSE.Message]);
+        exit;
+      end;
+      on FresnelE: EFresnel do begin
+        debugln(['TFresnelViewport.UpdateStylesheetElements ',Name,':',ClassName,' ',FresnelE.Message]);
+        exit;
+      end;
+    end;
+    if (FStylesheetElements=nil) then
+    begin
+      if NewStyleElements=nil then exit;
+    end else begin
+      if (NewStyleElements<>nil)
+          and FStylesheetElements.Equals(NewStyleElements) then exit;
+    end;
+    FreeAndNil(FStylesheetElements);
+    FStylesheetElements:=NewStyleElements;
   finally
     aParser.Free;
   end;
+  DomChanged;
 end;
 
 procedure TFresnelViewport.FPOObservedChanged(ASender: TObject;