Bladeren bron

renderer: scrollbar hovered

mattias 6 maanden geleden
bovenliggende
commit
74d0c04250
2 gewijzigde bestanden met toevoegingen van 16 en 3 verwijderingen
  1. 6 0
      src/base/fresnel.dom.pas
  2. 10 3
      src/base/fresnel.renderer.pas

+ 6 - 0
src/base/fresnel.dom.pas

@@ -1447,6 +1447,7 @@ type
     procedure RemoveCSSClass(const aName: string); virtual;
     // CSS pseudo classes
     property CSSPseudoClass[Pseudo: TFresnelCSSPseudoClass]: boolean read GetCSSPseudoClass write SetCSSPseudoClass;
+    function IsHovered: boolean;
     // CSS computed attributes
     procedure ComputeInlineStyle; virtual; // parse inline style
     procedure ComputeCSSValues; virtual; // call resolver to collect CSS values and resolve shorthands
@@ -7938,6 +7939,11 @@ begin
     CSSClasses.Delete(i);
 end;
 
+function TFresnelElement.IsHovered: boolean;
+begin
+  Result:=fesHover in FStates;
+end;
+
 function TFresnelElement.GetDPI(IsHorizontal: boolean): TFresnelLength;
 begin
   if Parent<>nil then

+ 10 - 3
src/base/fresnel.renderer.pas

@@ -522,17 +522,20 @@ var
   ThumbR: TFresnelRoundRect;
   c: TFresnelCSSCorner;
 begin
-  if El=nil then ;
   r:=aBar.Box;
 
   // draw track
   TrackColor:=colLtGray;
+  if not El.IsHovered then
+    TrackColor.Alpha:=$8000;
   FillRect(TrackColor,r);
   if aBar.Size<1 then
     exit;
 
   // draw thumb
   ThumbColor:=colDkGray;
+  if not El.IsHovered then
+    ThumbColor.Alpha:=$8000;
   FromPos:=aBar.Position/aBar.Size;
   if FromPos<0 then FromPos:=0;
   if FromPos>1 then FromPos:=1;
@@ -576,6 +579,8 @@ var
 begin
   if El=nil then ;
   TrackColor:=colLtGray;
+  if not El.IsHovered then
+    TrackColor.Alpha:=$8000;
   FillRect(TrackColor,r);
 end;
 
@@ -588,9 +593,10 @@ var
   IsLeft, HasVertBar, HasHorzBar: Boolean;
 begin
   LNode:=TUsedLayoutNode(El.LayoutNode);
-  IsLeft:=false;
   HasVertBar:=flfVerticalScrollbar in LNode.Flags;
   HasHorzBar:=flfHorizontalScrollbar in LNode.Flags;
+  if (not HasVertBar) and (not HasHorzBar) then exit;
+
   if HasVertBar then
   begin
     case LNode.ScrollbarWidth of
@@ -598,7 +604,8 @@ begin
     else BarWidth:=El.Viewport.ScrollbarsWidth[false];
     end;
     IsLeft:=El.ComputedDirection=CSSRegistry.kwRTL;
-  end;
+  end else
+    IsLeft:=false;
   if HasHorzBar then
     case LNode.ScrollbarWidth of
     CSSRegistry.kwThin: BarHeight:=El.Viewport.ScrollbarsThinWidth[true];