Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • evince evince
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 748
    • Issues 748
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 64
    • Merge requests 64
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GNOMEGNOME
  • evinceevince
  • Merge requests
  • !373

port Evince to gtk4

  • Review changes

  • Download
  • Patches
  • Plain diff
Open Qiu Wenbo requested to merge crab2313/evince:gtk4-port-target into main Aug 17, 2021
  • Overview 167
  • Commits 69
  • Pipelines 91
  • Changes 145

This is my work in progress GTK4 port of Evince.

I'm really excited when I got my HiFive Unmatched development board, but sadly it has a poor performance quad-core RISC-V SoC. The performance of most gtk3 based GNOME apps on this board is really bad and I can't use this RISC-V PC as my daily drive. For example, Evince renders 0.5 FPS when you scroll a PDF document. That motivate me to port several GNOME apps to GTK4 since GTK4 use OpenGL by default to render its widgets.

Now Evince on GTK4 can render 60 FPS with 4K resolution on HiFive Unmatched after addressing several performance issues. So I think it's time to open a draft merge request to get the opinion from the maintainers. This port is still incomplete and there are several features that I can't figure out how to port to GTK4.

Done

This section is basically a change log of major changes.

  • Migrate EvView and EvViewPresentation to GtkSnapshot based drawing model
  • Use box-shadow property of CSS to implement the border of pages. And this is a major performance boost since border-image make gtk_snapshot_render_frame fallbacks to cairo and causes significant frame drop (90 drop to 20 with 2K resolution).
  • Migrate a lot of custom widgets to composite template. And implement GtkBuildable interface for containers such as EvSidebar.
  • Remove EvLoadingMessage and merge it into EvWindow since we can simply implement it by composite template.
  • Remove the original media playback code and switch to GtkVideo
  • GPU accelerated transition effect of presentation mode
  • Port EvRecentView to use GtkGridView

TODO

  • port accessibility stuff of Evince
  • wait for the builtin spell check of GTK4 since the authors of gspell state that they are not going to port gspell to GTK4 gtk#3814
  • GtkTreeView and GtkIconView is deprecated officially in GTK 4.10. Consider port the following widgets to the new API:
    • EvSidebarLinks
    • EvSidebarThumbnails - gtk#4756
    • EvSidebarLayers
  • switch to the new dialog API introduced in GTK 4.10
  • rework the search bar and search entry. Maybe write a new custom widget.
  • fix EvSidebarThumbnails
  • Annotation support is broken. Basically due to the missing API in GTK4 related to window movement.
  • identify more missing parts and add them to the todo list

Fixes: #1072 #1551 #992 #1864

Edited Nov 20, 2022 by Qiu Wenbo
Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: gtk4-port-target