Page 1 of 1

ScrollAreaGadget has strange artifacts in Linux

Posted: Sun Jun 02, 2024 9:22 am
by coco2
See this image:

https://i.imgur.com/xPhuiCZ.png

Code: Select all

Procedure BindScrollDatas()
  SetWindowTitle(0, "ScrollAreaGadget " + "(" + GetGadgetAttribute(0, #PB_ScrollArea_X) + "," + GetGadgetAttribute(0, #PB_ScrollArea_Y) + ")" )
EndProcedure

If OpenWindow(0, 0, 0, 405, 240, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ScrollAreaGadget(0, 10, 10, 390,220, 575, 555, 30)
    ButtonGadget  (1, 10, 10, 230, 30,"Button 1")
    ButtonGadget  (2, 50, 50, 230, 30,"Button 2")
    ButtonGadget  (3, 90, 90, 230, 30,"Button 3")
    TextGadget    (4,130,130, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
    CloseGadgetList()

  BindGadgetEvent(0, @ BindScrollDatas())

  Repeat
    event = WaitWindowEvent(10)
  Until event = #PB_Event_CloseWindow
EndIf

Re: ScrollAreaGadget has strange artifacts in Linux

Posted: Sun Jun 02, 2024 10:07 am
by mk-soft
Seems to be a GTK feature. Older Linux versions do not have this dashed line.

Re: ScrollAreaGadget has strange artifacts in Linux

Posted: Sun Jun 02, 2024 11:32 am
by mk-soft
You can remove background-image from scrolledwindow

Code: Select all

;-TOP by mk-soft, v1.02.0, create 21.05.2022, update 06.12.2023, update 02.06.2024

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  ;- Constants
  #GTK_STYLE_PROVIDER_PRIORITY_FALLBACK = 1
  #GTK_STYLE_PROVIDER_PRIORITY_THEME = 200
  #GTK_STYLE_PROVIDER_PRIORITY_SETTINGS = 400
  #GTK_STYLE_PROVIDER_PRIORITY_APPLICATION = 600
  #GTK_STYLE_PROVIDER_PRIORITY_USER  = 800
  
  ImportC ""
    gtk_css_provider_load_from_data(*CSSProvider, CSSData.P-UTF8, Length, *Error.GError)
    gtk_css_provider_new()
    gtk_style_context_add_provider_for_screen(*Screen.GdkScreen, *StyleProvider, Priority)
  EndImport
  
  Procedure _SetLinuxStyle()
    Protected CSSProvider, CSSDefault.s, Screen
    
    CSSDefault = "button, entry {min-height: 20px;} "
    CSSDefault + "tab {min-height: 20px;} "
    CSSDefault + "button, scale {padding-bottom: 2px; padding-left: 2px; padding-right: 2px; padding-top: 2px} "
    CSSDefault + "entry {padding-bottom: 3px; padding-left: 6px; padding-right: 6px; padding-top: 3px} "
    CSSDefault + "scrolledwindow undershoot.top, scrolledwindow undershoot.right, scrolledwindow undershoot.bottom, scrolledwindow undershoot.left { background-image: none; } "
    
    CSSProvider= gtk_css_provider_new()
    gtk_css_provider_load_from_data(CSSProvider, CSSDefault, -1, 0)
    Screen = gdk_display_get_default_screen_(gdk_display_get_default_())
    gtk_style_context_add_provider_for_screen(Screen, CSSProvider, #GTK_STYLE_PROVIDER_PRIORITY_APPLICATION)
    g_object_unref_(CSSProvider)
    
  EndProcedure : _SetLinuxStyle()
  
CompilerEndIf

; *********************************************************

Procedure SetDarkMode(State)
  Protected boolVal, *Settings
  
  *Settings = gtk_settings_get_default_()
  If *Settings
    g_object_get_(*Settings, "gtk-application-prefer-dark-theme", @boolVal)
    g_object_set_(*Settings, "gtk-application-prefer-dark-theme", State);
    ProcedureReturn boolVal
  EndIf
EndProcedure

; *********************************************************


Procedure BindScrollDatas()
  SetWindowTitle(0, "ScrollAreaGadget " + "(" + GetGadgetAttribute(0, #PB_ScrollArea_X) + "," + GetGadgetAttribute(0, #PB_ScrollArea_Y) + ")" )
EndProcedure

If OpenWindow(0, 0, 0, 405, 240, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
  SetDarkMode(#True)
  ScrollAreaGadget(0, 10, 10, 390,220, 575, 555, 30, #PB_ScrollArea_Single)
  ButtonGadget  (1, 10, 10, 230, 30,"Button 1")
  ButtonGadget  (2, 50, 50, 230, 30,"Button 2")
  ButtonGadget  (3, 90, 90, 230, 30,"Button 3")
  TextGadget    (4,130,130, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
  CloseGadgetList()
  
  HideWindow(0, #False)
  
  BindGadgetEvent(0, @ BindScrollDatas())
  
  Repeat
    event = WaitWindowEvent(10)
  Until event = #PB_Event_CloseWindow
EndIf

Re: ScrollAreaGadget has strange artifacts in Linux

Posted: Sun Jun 09, 2024 11:37 pm
by coco2
Thanks, I have applied it to my application.

Is this a bug? Fred I noticed that PureBasic also uses scrollareas and also has the dashed line in Linux.

It's actually somewhat of a feature in that is shows the direction that you can scroll.