GTK2 애플리케이션의 기존 스크롤바

GTK2 애플리케이션의 기존 스크롤바

~/.config/gtk-3.0/gtk.cssGTK3 애플리케이션에서 스크롤 버튼이 있는 기존 스크롤바를 활성화하기 위해 콘텐츠가 포함된 파일을 추가했습니다.

scrollbar {
        -GtkScrollbar-has-backward-stepper: true;
        -GtkScrollbar-has-forward-stepper: true;
}

scrollbar slider {
        border: 0;
        border-radius: 0;
        min-width: 15px;
        min-height: 15px;
}

아래 첫 번째 스크린샷은 GTK3 애플리케이션 Pluma의 결과를 보여줍니다. 아래 두 번째 스크린샷의 PCManFM과 같은 GTK2 애플리케이션에서 동일한 유형의 스크롤바를 얻으려면 어떻게 해야 합니까?

2020-08-13 수정: 나는 이 제안을 시도해 보았습니다더 큰 정적 스크롤바를 얻는 방법...그러나 이는 아래 두 번째 스크린샷에 표시된 것처럼 여전히 좁은 스크롤 막대가 있는 파일 브라우저 PCManFM에는 아무런 차이가 없습니다.

2020-08-18 수정: 아래 Miloš Pavlović가 제안한 대로 GTK2 애플리케이션의 스크롤 막대를 변경했지만 스크롤 막대에 스테퍼가 없고 슬라이더가 매우 이상해 보입니다. 아래 세 번째 스크린샷을 참조하세요.

기존 스크롤바가 있는 텍스트 편집기

새로운 좁은 스크롤바가 있는 파일 브라우저

이상한 스크롤바가 있는 파일 브라우저

2023-07-19 수정: Debian 12를 설치한 후 이 문제를 더 깊이 파고들었습니다. 다음 줄을 주석 처리하면 올바른 단계 화살표를 얻을 수 있습니다 /usr/share/themes/Adwaita/gtk-2.0/main.rc.

image {
  function = ARROW
  detail   = "vscrollbar"
}
image {
  function = ARROW
  detail   = "hscrollbar"
}

다음은 다음 설정을 사용한 스크린샷입니다 ~/.gtkrc-2.0.

gtk-theme-name = "Adwaita"
gtk-icon-theme-name = "Adwaita"

style "TraditionalScrollbar" {
     GtkScrollbar::has-backward-stepper = 1
     GtkScrollbar::has-forward-stepper = 1
     GtkScrollbar::slider-width = 16
     GtkScrollbar::stepper-size = 16
}

class "GtkScrollbar" style "TraditionalScrollbar"

파일 브라우저에 이상한 스크롤 막대가 있지만 올바른 단계 화살표가 있습니다.

남은 질문은 어떻게

  1. 스크롤 막대를 속이 빈 상태로 만들지 않고 단단하게 만듭니다.
  2. 스크롤바가 슬롯을 채우도록 하고
  3. 스크롤바의 모서리를 둥글게 만들지 마세요.

답변1

숨겨진 파일이 있습니다.gtkrc-2.0현재 테마를 다루는 기본 폴더에 있습니다. 생성되지 않은 경우. 파일 끝 옆에 붙여넣기

style "myscrollbar"
{
     GtkRange::stepper-size = 16
     GtkRange::trough-under-steppers = 1
     GtkScrollbar::has-backward-stepper = 1  
     GtkScrollbar::has-forward-stepper = 1
     GtkScrollbar::slider-width = 16
     GtkScrollbar::trough-border = 2
}
class "GtkScrollbar" style "myscrollbar"

변경 사항을 적용하려면 저장하고 로그아웃/로그인하세요.

  • GtkRange::stepper-size = 0 --> 16은 화살표 버튼의 수직 크기이며, 값이 0이면 화살표 버튼이 사라집니다(적어도 일부 앱에서는?)

  • GtkRange::trough-under-steppers = 0 --> 1 (더 깔끔하게 보이도록 왼쪽 스크롤바 테두리를 화살표 위로 확장)

  • GtkScrollbar::has-*-stepper = 0 --> 1 스크롤 화살표를 켭니다(스테퍼 크기가 0이 아닌 경우).

  • GtkScrollbar::slider-width = 14 --> 16은 분명히 스크롤 바와 슬라이더의 너비를 변경하지만 오른쪽 테두리가 없으면 슬라이더가 중앙에서 벗어나 너비가 같은 높이가 아닌 것처럼 보입니다.

  • GtkScrollbar::trough-border = 0 --> 2는 (왼쪽) 테두리를 얻기 위한 요구사항의 일부입니다.

답변2

누락된 설정은 입니다 GtkScrollbar::stepper-size = 16. 따라서 간단한 ~/.gtkrc-2.0파일은 다음과 같습니다.

style "myscrollbar"
{
  GtkScrollbar::stepper-size = 16
  GtkScrollbar::has-backward-stepper = 1
  GtkScrollbar::has-forward-stepper  = 1
}

class "GtkScrollbar" style "myscrollbar"

작동합니다.

스크롤 막대의 양쪽 끝에 스테퍼 삼각형을 표시하는 방법은 다음을 참조하세요.이 답변.

답변3

GTK 2 애플리케이션의 기존 스크롤바:

Adwaita 테마에서 스크롤 막대 화살표 아이콘을 복사하고 모서리가 둥근(둥근 모서리 아님) 스크롤 막대 슬라이더용 아이콘을 만듭니다.

$ mkdir -p ~/.local/share/themes/Adwaita/gtk-2.0/assets
$ cp /usr/share/themes/Adwaita/gtk-2.0/assets/pan-*.png ~/.local/share/themes/Adwaita/gtk-2.0/assets/
$ convert -size 16x16 "canvas:#787c7d" ~/.local/share/themes/Adwaita/gtk-2.0/assets/scrollbar-slider.png
$ convert -size 16x16 "canvas:#535859" ~/.local/share/themes/Adwaita/gtk-2.0/assets/scrollbar-slider-hover.png
$ convert -size 16x16 "canvas:#2a76c6" ~/.local/share/themes/Adwaita/gtk-2.0/assets/scrollbar-slider-active.png

~/.gtkrc-2.0다음 내용으로 파일을 만듭니다.

gtk-theme-name = "Adwaita"
gtk-icon-theme-name = "Adwaita"

style "TraditionalScrollbar" {
    GtkScrollbar::has-backward-stepper = 1
    GtkScrollbar::has-forward-stepper = 1
    GtkScrollbar::slider-width = 16
    GtkScrollbar::stepper-size = 16

    engine "pixmap" {
        /*vertical scrollbar steppers*/
        image {
            function = ARROW
            state = NORMAL
            detail = "vscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-up.png"
            overlay_stretch = FALSE
            arrow_direction = UP
        }
        image {
            function = ARROW
            state = INSENSITIVE
            detail = "vscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-up-insensitive.png"
            overlay_stretch = FALSE
            arrow_direction = UP
        }
        image {
            function = ARROW
            state = NORMAL
            detail = "vscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-down.png"
            overlay_stretch = FALSE
            arrow_direction = DOWN
        }
        image {
            function = ARROW
            state = INSENSITIVE
            detail = "vscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-down-insensitive.png"
            overlay_stretch = FALSE
            arrow_direction = DOWN
        }

        /*horizontal scrollbar steppers*/
        image {
            function = ARROW
            state = NORMAL
            detail = "hscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-left.png"
            overlay_stretch = FALSE
            arrow_direction = LEFT
        }
        image {
            function = ARROW
            state = INSENSITIVE
            detail = "hscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-left-insensitive.png"
            overlay_stretch = FALSE
            arrow_direction = LEFT
        }
        image {
            function = ARROW
            state = NORMAL
            detail = "hscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-right.png"
            overlay_stretch = FALSE
            arrow_direction = RIGHT
        }
        image {
            function = ARROW
            state = INSENSITIVE
            detail = "hscrollbar"
            overlay_file = ".local/share/themes/Adwaita/gtk-2.0/assets/pan-right-insensitive.png"
            overlay_stretch = FALSE
            arrow_direction = RIGHT
        }

        /*scrollbar sliders*/
        image {
            function = SLIDER
            state = NORMAL
            detail = "slider"
            file = ".local/share/themes/Adwaita/gtk-2.0/assets/scrollbar-slider.png"
        }
        image {
            function = SLIDER
            state = PRELIGHT
            detail = "slider"
            file = ".local/share/themes/Adwaita/gtk-2.0/assets/scrollbar-slider-hover.png"
        }
        image {
            function = SLIDER
            state = ACTIVE
            detail = "slider"
            file = ".local/share/themes/Adwaita/gtk-2.0/assets/scrollbar-slider-active.png"
        }
    }
}

class "GtkScrollbar" style "TraditionalScrollbar"

결과는 다음과 같습니다.

기존 스크롤 막대를 사용하는 파일 브라우저 PCManFM

관련 정보