Repository: flameshot-org/flameshot Branch: master Commit: f9ea95435728 Files: 368 Total size: 7.1 MB Directory structure: gitextract_v64igq9i/ ├── .clang-format ├── .clang-tidy ├── .cmake-format.yaml ├── .envrc ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yaml │ │ ├── feature-request.yaml │ │ └── question.md │ └── workflows/ │ ├── Linux-arm-pack.yml │ ├── Linux-pack.yml │ ├── MacOS-pack.yml │ ├── Windows-pack.yml │ ├── build_cmake.yml │ ├── clang-format.yml │ └── deploy-dev-docs.yml ├── .gitignore ├── CMakeLists.txt ├── CODE_OF_CONDUCT.md ├── LICENSE ├── PKGBUILD ├── README.md ├── appveyor.yml ├── cmake/ │ ├── Cache.cmake │ ├── CompilerWarnings.cmake │ ├── Sanitizers.cmake │ ├── StandardProjectSettings.cmake │ └── StaticAnalyzers.cmake ├── data/ │ ├── appdata/ │ │ └── org.flameshot.Flameshot.metainfo.xml │ ├── dbus/ │ │ ├── org.flameshot.Flameshot.service.in │ │ ├── org.flameshot.Flameshot.xml │ │ └── org.freedesktop.Notifications.xml │ ├── desktopEntry/ │ │ └── package/ │ │ └── org.flameshot.Flameshot.desktop │ ├── flameshot.rc │ ├── graphics.qrc │ ├── img/ │ │ ├── app/ │ │ │ └── flameshotLogoLicense.txt │ │ └── material/ │ │ ├── LICENSE.txt │ │ └── README.md │ ├── man/ │ │ └── man1/ │ │ └── flameshot.1 │ ├── shell-completion/ │ │ ├── flameshot.bash │ │ ├── flameshot.fish │ │ └── flameshot.zsh │ ├── snap/ │ │ └── snapcraft.yaml │ └── translations/ │ ├── Internationalization_ar.ts │ ├── Internationalization_bg.ts │ ├── Internationalization_ca.ts │ ├── Internationalization_cs.ts │ ├── Internationalization_da.ts │ ├── Internationalization_de_DE.ts │ ├── Internationalization_el.ts │ ├── Internationalization_en.ts │ ├── Internationalization_es.ts │ ├── Internationalization_et.ts │ ├── Internationalization_eu.ts │ ├── Internationalization_fa.ts │ ├── Internationalization_fi.ts │ ├── Internationalization_fr.ts │ ├── Internationalization_ga.ts │ ├── Internationalization_gl.ts │ ├── Internationalization_grc.ts │ ├── Internationalization_he.ts │ ├── Internationalization_hu.ts │ ├── Internationalization_id.ts │ ├── Internationalization_it_IT.ts │ ├── Internationalization_ja.ts │ ├── Internationalization_ka.ts │ ├── Internationalization_km.ts │ ├── Internationalization_ko.ts │ ├── Internationalization_nb_NO.ts │ ├── Internationalization_nl.ts │ ├── Internationalization_nl_NL.ts │ ├── Internationalization_pl.ts │ ├── Internationalization_pt.ts │ ├── Internationalization_pt_BR.ts │ ├── Internationalization_ro.ts │ ├── Internationalization_ru.ts │ ├── Internationalization_sk.ts │ ├── Internationalization_sl.ts │ ├── Internationalization_sr_SP.ts │ ├── Internationalization_sv_SE.ts │ ├── Internationalization_sw.ts │ ├── Internationalization_ta.ts │ ├── Internationalization_th.ts │ ├── Internationalization_tk.ts │ ├── Internationalization_tr.ts │ ├── Internationalization_uk.ts │ ├── Internationalization_vi.ts │ ├── Internationalization_zh_CN.ts │ ├── Internationalization_zh_HK.ts │ └── Internationalization_zh_TW.ts ├── default.nix ├── docs/ │ ├── 0000-template.md │ ├── CONTRIBUTING.md │ ├── RFC/ │ │ └── 0000-Add-Opacity-slider.md │ ├── RFC.md │ ├── ReleaseNote_12.1.md │ ├── ReleaseNotes_0.8.md │ ├── ReleaseNotes_0.9.md │ ├── ReleaseNotes_11.0.md │ ├── ReleaseNotes_12.0.md │ ├── Releasing.md │ ├── Sway and wlroots support.md │ ├── dev/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── mkdocs.yml │ │ ├── post-process.sh │ │ └── src/ │ │ ├── debugging.md │ │ ├── docs.md │ │ ├── faq.md │ │ └── index.md │ └── shortcuts-config/ │ └── flameshot-shortcuts-kde.khotkeys ├── flake.nix ├── flameshot.example.ini ├── packaging/ │ ├── debian/ │ │ ├── changelog │ │ ├── compat │ │ ├── control │ │ ├── copyright │ │ ├── docs │ │ ├── rules │ │ └── source/ │ │ └── format │ ├── flatpak/ │ │ └── org.flameshot.Flameshot.yml │ ├── macos/ │ │ ├── Info.plist.in │ │ ├── create_dmg.sh │ │ └── flameshot.icns │ ├── rpm/ │ │ ├── fedora/ │ │ │ └── flameshot.spec │ │ └── opensuse/ │ │ └── flameshot.spec │ └── win-installer/ │ └── LICENSE/ │ └── GPL-3.0.txt ├── scripts/ │ └── .gitkeep ├── shell.nix ├── snapcraft.yaml ├── src/ │ ├── CMakeLists.txt │ ├── cli/ │ │ ├── CMakeLists.txt │ │ ├── commandargument.cpp │ │ ├── commandargument.h │ │ ├── commandlineparser.cpp │ │ ├── commandlineparser.h │ │ ├── commandoption.cpp │ │ └── commandoption.h │ ├── config/ │ │ ├── CMakeLists.txt │ │ ├── buttonlistview.cpp │ │ ├── buttonlistview.h │ │ ├── cacheutils.cpp │ │ ├── cacheutils.h │ │ ├── clickablelabel.cpp │ │ ├── clickablelabel.h │ │ ├── colorpickereditmode.cpp │ │ ├── colorpickereditmode.h │ │ ├── colorpickereditor.cpp │ │ ├── colorpickereditor.h │ │ ├── configerrordetails.cpp │ │ ├── configerrordetails.h │ │ ├── configresolver.cpp │ │ ├── configresolver.h │ │ ├── configwindow.cpp │ │ ├── configwindow.h │ │ ├── extendedslider.cpp │ │ ├── extendedslider.h │ │ ├── filenameeditor.cpp │ │ ├── filenameeditor.h │ │ ├── generalconf.cpp │ │ ├── generalconf.h │ │ ├── setshortcutwidget.cpp │ │ ├── setshortcutwidget.h │ │ ├── shortcutswidget.cpp │ │ ├── shortcutswidget.h │ │ ├── strftimechooserwidget.cpp │ │ ├── strftimechooserwidget.h │ │ ├── styleoverride.cpp │ │ ├── styleoverride.h │ │ ├── uicoloreditor.cpp │ │ ├── uicoloreditor.h │ │ ├── visualseditor.cpp │ │ └── visualseditor.h │ ├── core/ │ │ ├── CMakeLists.txt │ │ ├── capturerequest.cpp │ │ ├── capturerequest.h │ │ ├── flameshot.cpp │ │ ├── flameshot.h │ │ ├── flameshotdaemon.cpp │ │ ├── flameshotdaemon.h │ │ ├── flameshotdbusadapter.cpp │ │ ├── flameshotdbusadapter.h │ │ ├── globalshortcutfilter.cpp │ │ ├── globalshortcutfilter.h │ │ ├── qguiappcurrentscreen.cpp │ │ ├── qguiappcurrentscreen.h │ │ ├── signaldaemon.cpp │ │ └── signaldaemon.h │ ├── main.cpp │ ├── tools/ │ │ ├── CMakeLists.txt │ │ ├── abstractactiontool.cpp │ │ ├── abstractactiontool.h │ │ ├── abstractpathtool.cpp │ │ ├── abstractpathtool.h │ │ ├── abstracttwopointtool.cpp │ │ ├── abstracttwopointtool.h │ │ ├── accept/ │ │ │ ├── accepttool.cpp │ │ │ └── accepttool.h │ │ ├── arrow/ │ │ │ ├── arrowtool.cpp │ │ │ └── arrowtool.h │ │ ├── capturecontext.cpp │ │ ├── capturecontext.h │ │ ├── capturetool.h │ │ ├── circle/ │ │ │ ├── circletool.cpp │ │ │ └── circletool.h │ │ ├── circlecount/ │ │ │ ├── circlecounttool.cpp │ │ │ └── circlecounttool.h │ │ ├── copy/ │ │ │ ├── copytool.cpp │ │ │ └── copytool.h │ │ ├── exit/ │ │ │ ├── exittool.cpp │ │ │ └── exittool.h │ │ ├── imgupload/ │ │ │ ├── imguploadermanager.cpp │ │ │ ├── imguploadermanager.h │ │ │ ├── imguploadertool.cpp │ │ │ ├── imguploadertool.h │ │ │ └── storages/ │ │ │ ├── imguploaderbase.cpp │ │ │ ├── imguploaderbase.h │ │ │ └── imgur/ │ │ │ ├── imguruploader.cpp │ │ │ └── imguruploader.h │ │ ├── invert/ │ │ │ ├── inverttool.cpp │ │ │ └── inverttool.h │ │ ├── launcher/ │ │ │ ├── applaunchertool.cpp │ │ │ ├── applaunchertool.h │ │ │ ├── applauncherwidget.cpp │ │ │ ├── applauncherwidget.h │ │ │ ├── launcheritemdelegate.cpp │ │ │ ├── launcheritemdelegate.h │ │ │ ├── openwithprogram.cpp │ │ │ ├── openwithprogram.h │ │ │ ├── terminallauncher.cpp │ │ │ └── terminallauncher.h │ │ ├── line/ │ │ │ ├── linetool.cpp │ │ │ └── linetool.h │ │ ├── marker/ │ │ │ ├── markertool.cpp │ │ │ └── markertool.h │ │ ├── move/ │ │ │ ├── movetool.cpp │ │ │ └── movetool.h │ │ ├── pencil/ │ │ │ ├── penciltool.cpp │ │ │ └── penciltool.h │ │ ├── pin/ │ │ │ ├── pintool.cpp │ │ │ ├── pintool.h │ │ │ ├── pinwidget.cpp │ │ │ └── pinwidget.h │ │ ├── pixelate/ │ │ │ ├── pixelatetool.cpp │ │ │ └── pixelatetool.h │ │ ├── rectangle/ │ │ │ ├── rectangletool.cpp │ │ │ └── rectangletool.h │ │ ├── redo/ │ │ │ ├── redotool.cpp │ │ │ └── redotool.h │ │ ├── save/ │ │ │ ├── savetool.cpp │ │ │ └── savetool.h │ │ ├── selection/ │ │ │ ├── selectiontool.cpp │ │ │ └── selectiontool.h │ │ ├── sizedecrease/ │ │ │ ├── sizedecreasetool.cpp │ │ │ └── sizedecreasetool.h │ │ ├── sizeincrease/ │ │ │ ├── sizeincreasetool.cpp │ │ │ └── sizeincreasetool.h │ │ ├── text/ │ │ │ ├── textconfig.cpp │ │ │ ├── textconfig.h │ │ │ ├── texttool.cpp │ │ │ ├── texttool.h │ │ │ ├── textwidget.cpp │ │ │ └── textwidget.h │ │ ├── toolfactory.cpp │ │ ├── toolfactory.h │ │ └── undo/ │ │ ├── undotool.cpp │ │ └── undotool.h │ ├── utils/ │ │ ├── CMakeLists.txt │ │ ├── abstractlogger.cpp │ │ ├── abstractlogger.h │ │ ├── colorutils.cpp │ │ ├── colorutils.h │ │ ├── confighandler.cpp │ │ ├── confighandler.h │ │ ├── desktopfileparse.cpp │ │ ├── desktopfileparse.h │ │ ├── desktopinfo.cpp │ │ ├── desktopinfo.h │ │ ├── filenamehandler.cpp │ │ ├── filenamehandler.h │ │ ├── globalvalues.cpp │ │ ├── globalvalues.h │ │ ├── history.cpp │ │ ├── history.h │ │ ├── monitorpreview.cpp │ │ ├── monitorpreview.h │ │ ├── pathinfo.cpp │ │ ├── pathinfo.h │ │ ├── request.cpp │ │ ├── request.h │ │ ├── screengrabber.cpp │ │ ├── screengrabber.h │ │ ├── screenshotsaver.cpp │ │ ├── screenshotsaver.h │ │ ├── strfparse.cpp │ │ ├── strfparse.h │ │ ├── systemnotification.cpp │ │ ├── systemnotification.h │ │ ├── valuehandler.cpp │ │ ├── valuehandler.h │ │ ├── waylandutils.cpp │ │ ├── waylandutils.h │ │ ├── winlnkfileparse.cpp │ │ └── winlnkfileparse.h │ ├── widgets/ │ │ ├── CMakeLists.txt │ │ ├── capture/ │ │ │ ├── CMakeLists.txt │ │ │ ├── buttonhandler.cpp │ │ │ ├── buttonhandler.h │ │ │ ├── capturebutton.cpp │ │ │ ├── capturebutton.h │ │ │ ├── capturetoolbutton.cpp │ │ │ ├── capturetoolbutton.h │ │ │ ├── capturetoolobjects.cpp │ │ │ ├── capturetoolobjects.h │ │ │ ├── capturewidget.cpp │ │ │ ├── capturewidget.h │ │ │ ├── colorpicker.cpp │ │ │ ├── colorpicker.h │ │ │ ├── hovereventfilter.cpp │ │ │ ├── hovereventfilter.h │ │ │ ├── magnifierwidget.cpp │ │ │ ├── magnifierwidget.h │ │ │ ├── modificationcommand.cpp │ │ │ ├── modificationcommand.h │ │ │ ├── notifierbox.cpp │ │ │ ├── notifierbox.h │ │ │ ├── overlaymessage.cpp │ │ │ ├── overlaymessage.h │ │ │ ├── selectionwidget.cpp │ │ │ └── selectionwidget.h │ │ ├── capturelauncher.cpp │ │ ├── capturelauncher.h │ │ ├── capturelauncher.ui │ │ ├── colorpickerwidget.cpp │ │ ├── colorpickerwidget.h │ │ ├── draggablewidgetmaker.cpp │ │ ├── draggablewidgetmaker.h │ │ ├── imagelabel.cpp │ │ ├── imagelabel.h │ │ ├── imguploaddialog.cpp │ │ ├── imguploaddialog.h │ │ ├── infowindow.cpp │ │ ├── infowindow.h │ │ ├── infowindow.ui │ │ ├── loadspinner.cpp │ │ ├── loadspinner.h │ │ ├── notificationwidget.cpp │ │ ├── notificationwidget.h │ │ ├── orientablepushbutton.cpp │ │ ├── orientablepushbutton.h │ │ ├── panel/ │ │ │ ├── CMakeLists.txt │ │ │ ├── colorgrabwidget.cpp │ │ │ ├── colorgrabwidget.h │ │ │ ├── sidepanelwidget.cpp │ │ │ ├── sidepanelwidget.h │ │ │ ├── utilitypanel.cpp │ │ │ └── utilitypanel.h │ │ ├── trayicon.cpp │ │ ├── trayicon.h │ │ ├── updatenotificationwidget.cpp │ │ ├── updatenotificationwidget.h │ │ ├── uploadhistory.cpp │ │ ├── uploadhistory.h │ │ ├── uploadhistory.ui │ │ ├── uploadlineitem.cpp │ │ ├── uploadlineitem.h │ │ └── uploadlineitem.ui │ └── windows-cli.cpp └── tests/ ├── action_options.sh └── path_option.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: .clang-format ================================================ Language: Cpp BasedOnStyle: Mozilla IndentWidth: 4 AccessModifierOffset: -4 AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterStruct: true AfterEnum: true AfterFunction: true SplitEmptyFunction: false SplitEmptyRecord: false SplitEmptyNamespace: false ================================================ FILE: .clang-tidy ================================================ --- Checks: '*,-fuchsia-*,-google-*,-zircon-*,-abseil-*,-modernize-use-trailing-return-type,-llvm-*,-llvmlibc-*,-performance-no-automatic-move,-cppcoreguidelines-owning-memory' WarningsAsErrors: '*' HeaderFilterRegex: '' FormatStyle: none ================================================ FILE: .cmake-format.yaml ================================================ additional_commands: foo: flags: - BAR - BAZ kwargs: DEPENDS: '*' HEADERS: '*' SOURCES: '*' bullet_char: '*' dangle_parens: false enum_char: . line_ending: unix line_width: 120 max_pargs_hwrap: 3 separate_ctrl_name_with_space: false separate_fn_name_with_space: false tab_size: 2 ================================================ FILE: .envrc ================================================ use flake ================================================ FILE: .github/ISSUE_TEMPLATE/bug-report.yaml ================================================ name: Bug Report description: Found something you weren't expecting? Report it here! labels: ["Unconfirmed Bug"] body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report. NOTE: Please read the instructions below before filling the form. - type: markdown attributes: value: | 1. Please write in English, this is the language all maintainers can speak and write. 2. Please take a moment to check that your issue doesn't already exist and not already reported. 3. Please make sure the solution to your problem is not already mentioned in the FAQ (https://flameshot.org/docs/guide/faq/) 4. Please provide the information for each field as complete as possible. - type: textarea id: flameshot-ver attributes: label: Flameshot Version description: The Flameshot version (or commit reference) your are running. You can right-click on the tray icon > About > copy placeholder: e.g Flameshot v0.10.1 (065aa98c) validations: required: true - type: dropdown id: installation-type attributes: label: Installation Type description: How have you installed flameshot? multiple: true options: - Linux, MacOS, or Windows Package manager (apt, pacman, eopkg, choco, brew, ...) - User repository (AUR) - Flatpak from Flathub - Flatpak from Github - Snap from Snapcraft - Snap from - AppImage - Using the ready-made package from Github Releases - Compiled from source validations: required: true - type: input id: os-ver attributes: label: Operating System type and version description: "The operating system you are using Flameshot on:" validations: required: true - type: textarea id: description attributes: label: Description description: | Please provide a description of your issue here. Please explain in details what the issue is. If you can, provide screenshots or screen recordings to demonstrate the issue. validations: required: true - type: textarea id: steps-to-reproduce attributes: label: Steps to reproduce description: Please write the steps we should take to reproduce this buggy behaviour placeholder: | 1. run `flameshot gui` 2. select a region on the primary monitor 3. save to file 4. ... validations: required: false - type: textarea id: screenshots attributes: label: Screenshots or screen recordings description: If you think it would be beneficial for us to understand the issue, please provide a screenshots or screen recording. For screen recording you can use [Peek](https://github.com/phw/peek) - type: textarea id: systeminfo attributes: label: System Information description: | Please provide the detailed information about your computer including: 1. Operating system and version 2. Your monitor configuration (easiest way would be to add a screenshot of your monitor setup from settings window) 3. If using Linux (https://flameshot.org/docs/guide/issue-reporting/): - Your Desktop Environment and your Window Manager - if you are using Xorg or Wayland validations: required: true ================================================ FILE: .github/ISSUE_TEMPLATE/feature-request.yaml ================================================ name: Feature Request description: Got an idea for a feature that can make Flameshot even better? Propose your suggestion here! labels: ["Enhancement"] body: - type: markdown attributes: value: | 1. Please write in English, this is the language all maintainers can speak and write. 2. Please only use this form to submit feature request and **not** bugs or questions. 3. Please take a moment to check that your feature hasn't already been suggested. 4. One picture worth a thousand words. If you think you can convey the message better by a drawing or pictrure, consider adding one. - type: textarea id: description attributes: label: Feature Description placeholder: | I think it would be great if ... validations: required: true ================================================ FILE: .github/ISSUE_TEMPLATE/question.md ================================================ ================================================ FILE: .github/workflows/Linux-arm-pack.yml ================================================ name: Packaging(Linux - ARM) on: #push: # branches: # - master # - fix* # - move-arm-ci-to-new-ci # paths-ignore: # - 'README.md' # - 'LICENSE' # - 'docs/**' workflow_dispatch: env: PRODUCT: flameshot RELEASE: 1 # dockerfiles, see https://github.com/flameshot-org/flameshot-dockerfiles # docker images, see https://quay.io/repository/flameshot-org/ci-building DOCKER_REPO: quay.io/flameshot-org/ci-building # building tool: https://github.com/flameshot-org/packpack PACKPACK_REPO: flameshot-org/packpack jobs: deb-pack: name: Build deb on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: dist: # - { # name: debian-11, # os: debian, # symbol: bullseye, # arch: armhf # } - { name: debian-12, os: debian, symbol: bookworm, arch: arm64 } - { name: debian-12, os: debian, symbol: bookworm, arch: armhf } - { name: ubuntu-22.04, os: ubuntu, symbol: jammy, arch: arm64 } - { name: ubuntu-24.04, os: ubuntu, symbol: noble, arch: arm64 } steps: - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 # ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Get packpack tool uses: actions/checkout@v4 with: repository: ${{ env.PACKPACK_REPO }} path: tools ref: multiarch set-safe-directory: $GITHUB_WORKSPACE/tools - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} env: OS: ${{ matrix.dist.os }} DIST: ${{ matrix.dist.symbol }} DOCKER_ARCH: ${{ matrix.dist.arch }} run: | case ${DOCKER_ARCH} in arm32v7) export ARCH=arm/v7 ;; armhf) export ARCH=arm/v7 ;; arm64*) export ARCH=arm64 ;; *) export ARCH=${DOCKER_ARCH} ;; esac cp -r $GITHUB_WORKSPACE/packaging/debian $GITHUB_WORKSPACE bash $GITHUB_WORKSPACE/tools/packpack mv $GITHUB_WORKSPACE/build/${PRODUCT}_${VERSION}-${RELEASE}_${{ matrix.dist.arch }}.deb $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package run: | cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb | tee ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} path: | ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum overwrite: true ================================================ FILE: .github/workflows/Linux-pack.yml ================================================ name: Packaging(Linux) on: push: branches: - master - fix* paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' pull_request: paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' workflow_dispatch: env: PRODUCT: flameshot RELEASE: 1 # dockerfiles, see https://github.com/flameshot-org/flameshot-dockerfiles # docker images, see https://quay.io/repository/flameshot-org/ci-building DOCKER_REPO: quay.io/flameshot-org/ci-building # building tool: https://github.com/flameshot-org/packpack PACKPACK_REPO: flameshot-org/packpack jobs: deb-pack: name: Build deb on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: dist: - { name: debian-12, os: debian, symbol: bookworm, arch: amd64 } - { name: ubuntu-22.04, os: ubuntu, symbol: jammy, arch: amd64 } - { name: ubuntu-24.04, os: ubuntu, symbol: noble, arch: amd64 } steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 # ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Get packpack tool uses: actions/checkout@v4 with: repository: ${{ env.PACKPACK_REPO }} path: tools ref: multiarch set-safe-directory: $GITHUB_WORKSPACE/tools - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} env: OS: ${{ matrix.dist.os }} DIST: ${{ matrix.dist.symbol }} PRESERVE_ENVVARS: "GIT_HASH" run: | cp -r $GITHUB_WORKSPACE/packaging/debian $GITHUB_WORKSPACE bash $GITHUB_WORKSPACE/tools/packpack mv $GITHUB_WORKSPACE/build/${PRODUCT}_${VERSION}-${RELEASE}_${{ matrix.dist.arch }}.deb $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package run: | cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb | tee ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} path: | ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum overwrite: true rpm-pack: name: Build rpm on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: dist: - { name: fedora-41, os: fedora, symbol: 41, arch: x86_64 } - { name: fedora-42, os: fedora, symbol: 42, arch: x86_64 } steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 # ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Get packpack tool uses: actions/checkout@v4 with: repository: ${{ env.PACKPACK_REPO }} path: tools ref: master set-safe-directory: $GITHUB_WORKSPACE/tools - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} if: matrix.dist.os == 'fedora' run: | mkdir $GITHUB_WORKSPACE/rpm cp $GITHUB_WORKSPACE/packaging/rpm/fedora/flameshot.spec $GITHUB_WORKSPACE/rpm bash $GITHUB_WORKSPACE/tools/packpack env: OS: ${{ matrix.dist.os }} DIST: ${{ matrix.dist.symbol }} PRESERVE_ENVVARS: "GIT_HASH" - name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }} if: matrix.dist.os == 'opensuse-leap' run: | mkdir $GITHUB_WORKSPACE/rpm cp $GITHUB_WORKSPACE/packaging/rpm/opensuse/flameshot.spec $GITHUB_WORKSPACE/rpm bash $GITHUB_WORKSPACE/tools/packpack env: OS: ${{ matrix.dist.os }} DIST: ${{ matrix.dist.symbol }} - name: Package Clean if: matrix.dist.os == 'fedora' run: | rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-debuginfo-*.rpm rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-debugsource-*.rpm rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-*.src.rpm rm -f ${{ github.workspace }}/build/build.log - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package if: matrix.dist.os == 'fedora' run: | cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.fc*.${{ matrix.dist.arch }}.rpm | tee ${PRODUCT}-${VERSION}-${RELEASE}.fc${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum - name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package if: matrix.dist.os == 'opensuse-leap' run: | mv $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-lp*.${{ matrix.dist.arch }}.rpm $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } sha256sum ${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm | tee ${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum - name: Artifact Upload if: matrix.dist.os == 'fedora' uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} path: | ${{ github.workspace }}/build/ overwrite: true - name: Artifact Upload if: matrix.dist.os == 'opensuse-leap' uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }} path: | ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum overwrite: true appimage-pack: name: Build appimage on ${{ matrix.config.name }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: config: - { name: ubuntu-24.04, os: ubuntu, symbol: noble, arch: amd64, image_repo: quay.io/flameshot-org/ci-building } container: image: ${{ matrix.config.image_repo }}:${{ matrix.config.os }}-${{ matrix.config.symbol }} options: --cap-add SYS_ADMIN --device /dev/fuse --security-opt apparmor:unconfined steps: - name: Configure git safe directory shell: bash run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 # ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Install Dependencies run: | sudo apt-get -y -qq update sudo apt-get -y --no-install-recommends install fuse cmake extra-cmake-modules build-essential qt6-base-dev qt6-tools-dev qt6-tools-dev-tools libqt6svg6-dev qt6-l10n-tools qt6-wayland libgl-dev appstream hicolor-icon-theme openssl ca-certificates jq - name: Download linuxdeploy run: | wget -c -nv "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" chmod a+x linuxdeploy-x86_64.AppImage LINUXDEPLOY_BIN=${PWD}/linuxdeploy-x86_64.AppImage - name: Download linuxdeployqt-plugin-appimage run: | wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage" chmod a+x linuxdeploy-plugin-appimage-x86_64.AppImage - name: Download linuxdeployqt-plugin-qt run: | wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage - name: Packaging appimage run: | set -x APPIMAGE_DST_PATH=$GITHUB_WORKSPACE/${PRODUCT}.AppDir mkdir -p ${APPIMAGE_DST_PATH} cd $GITHUB_WORKSPACE cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr -DUSE_LAUNCHER_ABSOLUTE_PATH:BOOL=OFF make -j$(nproc) DESTDIR=${APPIMAGE_DST_PATH} install rm -rf ${APPIMAGE_DST_PATH}/usr/include rm -rf ${APPIMAGE_DST_PATH}/usr/lib export EXTRA_PLATFORM_PLUGINS="libqwayland-generic.so" export EXTRA_QT_MODULES="waylandcompositor" export QMAKE=/usr/lib/qt6/bin/qmake ${PWD}/linuxdeploy-x86_64.AppImage --appdir ${APPIMAGE_DST_PATH} --plugin qt --output appimage mv $GITHUB_WORKSPACE/Flameshot-${VERSION}-x86_64.AppImage $GITHUB_WORKSPACE/Flameshot-${VERSION}.x86_64.AppImage - name: SHA256Sum of appimage package run: | cd "$GITHUB_WORKSPACE/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/'!"; exit 11 ; } sha256sum Flameshot-${VERSION}.x86_64.AppImage | tee Flameshot-${VERSION}.x86_64.AppImage.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-appimage-x86_64 path: | ${{ github.workspace }}/Flameshot-*.x86_64.AppImage ${{ github.workspace }}/Flameshot-*.x86_64.AppImage.sha256sum overwrite: true flatpak-pack: name: Build flatpak on ubuntu 24.04 runs-on: ubuntu-24.04 steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Update flatpak manifest with commit SHA run: | git_hash=$(git rev-parse HEAD) sed -i "s/branch: master/commit: ${git_hash}/" packaging/flatpak/org.flameshot.Flameshot.yml echo "=======FLATPAK MANIFEST========" cat packaging/flatpak/org.flameshot.Flameshot.yml echo "===============================" - name: Setup flatpak run: | sudo apt-get -y -qq update sudo apt-get install -y flatpak flatpak-builder - name: Setup Flathub run: | flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install -y --noninteractive flathub org.kde.Sdk//6.9 org.kde.Platform//6.9 - name: Packaging flatpak run: | BUNDLE="org.flameshot.Flameshot_${VERSION}_x86_64.flatpak" MANIFEST_PATH=$GITHUB_WORKSPACE/packaging/flatpak/org.flameshot.Flameshot.yml RUNTIME_REPO="https://flathub.org/repo/flathub.flatpakrepo" APP_ID="org.flameshot.Flameshot" BRANCH="master" flatpak-builder --user --disable-rofiles-fuse --repo=repo --force-clean flatpak_app ${MANIFEST_PATH} --install-deps-from=flathub flatpak build-bundle repo ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APP_ID} ${BRANCH} mv $GITHUB_WORKSPACE/org.flameshot.Flameshot_${VERSION}_x86_64.flatpak $GITHUB_WORKSPACE/org.flameshot.Flameshot-${VERSION}.x86_64.flatpak - name: SHA256Sum of flatpak package run: | cd "$GITHUB_WORKSPACE/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/'!"; exit 11 ; } sha256sum org.flameshot.Flameshot-${VERSION}.x86_64.flatpak | tee org.flameshot.Flameshot-${VERSION}.x86_64.flatpak.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-flatpak-x86_64 path: | ${{ github.workspace }}/org.flameshot.Flameshot-*.x86_64.flatpak ${{ github.workspace }}/org.flameshot.Flameshot-*.x86_64.flatpak.sha256sum overwrite: true snap-pack: name: Build snap on ubuntu latest runs-on: ubuntu-latest steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Packaging snap uses: snapcore/action-build@v1 id: snapcraft - name: Rename snap name shell: bash run: | mkdir -p $GITHUB_WORKSPACE/build cp ${{ steps.snapcraft.outputs.snap }} $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap - name: SHA256Sum of snap package run: | cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; } sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap | tee ${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap.sha256sum - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-snap-x86_64 path: | ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.amd64.snap ${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.amd64.snap.sha256sum overwrite: true ================================================ FILE: .github/workflows/MacOS-pack.yml ================================================ name: Packaging(MacOS) on: push: branches: - master paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' pull_request: paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' workflow_dispatch: env: PRODUCT: flameshot jobs: dmg-pack: name: Build dmg on ${{ matrix.dist.os }} ${{ matrix.dist.arch }} strategy: fail-fast: false matrix: dist: - { os: macos-15, arch: arm64 } - { os: macos-15, arch: intel } runs-on: ${{ matrix.dist.os }} env: APP_NAME: flameshot DIR_BUILD: build steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Install Qt run: brew install qt@6 - name: Configure run: | rm -rf "${DIR_BUILD}"/src/flameshot.dmg "${DIR_BUILD}"/src/flameshot.app/ cmake -GNinja -S . -B "${DIR_BUILD}" -DQt6_DIR=$(brew --prefix qt6)/lib/cmake/Qt6 -DUSE_MONOCHROME_ICON=True - name: Compile run: | cmake --build "${DIR_BUILD}" - name: Build dmg package run: | cd "${DIR_BUILD}" ninja create_dmg - name: Artifact Upload uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-macos-${{ matrix.dist.arch }} path: ${{ github.workspace }}/build/src/Flameshot-${{ env.VERSION }}.dmg overwrite: true ================================================ FILE: .github/workflows/Windows-pack.yml ================================================ name: Packaging(Windows) on: push: branches: - master - fix* paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' pull_request: paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' workflow_dispatch: env: PRODUCT: flameshot jobs: windows-pack: name: VS 2022 ${{ matrix.config.arch }}-${{ matrix.type }} runs-on: windows-2025 env: VCINSTALLDIR: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC # 2025.02.14 VCPKG_VERSION: d5ec528843d29e3a52d745a64b469f810b2cedbf VCPKG_PACKAGES: openssl-windows OPENSSL_ROOT_DIR: ${{ github.workspace }}\vcpkg\installed\${{ matrix.config.vcpkg_triplet }}\ strategy: fail-fast: false matrix: qt_ver: [6.9.3] qt_target: [desktop] config: - { arch: x64, generator: "-G'Visual Studio 17 2022' -A x64", vcpkg_triplet: x64-windows, qt_arch: win64_msvc2022_64, qt_arch_install: msvc2022_64, pak_arch: win64 } type: [portable, installer] steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 with: fetch-depth: 0 # ref: master - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Fix Python path shell: pwsh run: | Remove-Item "$env:LOCALAPPDATA\Microsoft\WindowsApps\python*.exe" -Force -ErrorAction SilentlyContinue - name: Set env & Print flameshot version shell: bash run: | last_committed_tag=$(git tag -l --sort=-v:refname | head -1) git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count) git_hash=$(git rev-parse --short HEAD) ver_info=${last_committed_tag}+git${git_revno}.${git_hash} echo "=======FLAMESHOT VERSION========" echo ${last_committed_tag:1} echo "Details: ${ver_info}" echo "================================" # This will allow to build pre-preleases without git tag # echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV echo "VER_INFO=${ver_info}" >> $GITHUB_ENV echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV - name: Restore from cache and run vcpkg uses: lukka/run-vcpkg@v11 with: vcpkgArguments: ${{env.VCPKG_PACKAGES}} vcpkgDirectory: '${{ github.workspace }}\vcpkg' appendedCacheKey: ${{ matrix.config.vcpkg_triplet }} vcpkgGitCommitId: ${{ env.VCPKG_VERSION }} vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }} - name: Install Qt uses: jurplel/install-qt-action@v4 with: version: ${{ matrix.qt_ver }} cache: 'true' cache-key-prefix: install-qt-action-${{ matrix.qt_ver }} target: ${{ matrix.qt_target }} arch: ${{ matrix.config.qt_arch }} modules: 'qtimageformats' dir: '${{ github.workspace }}/build/' - name: Configure working-directory: build shell: pwsh run: | cmake .. ${{matrix.config.generator}} ` -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" ` -DENABLE_OPENSSL=ON ` -DCMAKE_BUILD_TYPE=Release ` -DUSE_PORTABLE_CONFIG=${{ contains(matrix.type, 'portable') }} - name: Compile working-directory: build shell: pwsh run: cmake --build . --config Release - name: CPack working-directory: build shell: pwsh run: | # Chocolately made their own package called cpack and its first in the path. This is a hack since we are only using cmake's cpack, doesn't seem to be required after a CI update #Remove-Item C:\ProgramData\Chocolatey\bin\cpack.exe If ($env:TYPE -eq "installer") { cpack -G WIX -B "$env:GITHUB_WORKSPACE\build\Package" } ElseIf($env:TYPE -eq "portable") { cpack -G ZIP -B "$env:GITHUB_WORKSPACE\build\Package" } env: TYPE: ${{matrix.type}} - name: Package Clean shell: pwsh run: | # Remove-Item $env:GITHUB_WORKSPACE\build\Package\_CPack_Packages -Recurse New-Item -Path $env:GITHUB_WORKSPACE\build\Package\installer -ItemType Directory New-Item -Path $env:GITHUB_WORKSPACE\build\Package\portable -ItemType Directory - name: Package Prepare (installer) if: matrix.type == 'installer' shell: pwsh run: | Move-Item -Path $env:GITHUB_WORKSPACE/build/Package/Flameshot-*-${{ matrix.config.pak_arch }}.msi -Destination $env:GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi - name: Package Prepare (portable) if: matrix.type == 'portable' shell: pwsh run: | Move-Item -Path $env:GITHUB_WORKSPACE/build/Package/flameshot-*-${{ matrix.config.pak_arch }}.zip -Destination $env:GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip - name: SHA256Sum of Windows installer if: matrix.type == 'installer' shell: bash run: | sha256sum $GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi sha256sum $GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi > $GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi.sha256sum - name: SHA256Sum of Windows portable if: matrix.type == 'portable' shell: bash run: | sha256sum $GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip sha256sum $GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip > $GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip.sha256sum - name: Artifact Upload if: matrix.type == 'installer' uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-win-${{ matrix.config.arch }}-${{ matrix.type }} path: | ${{ github.workspace }}/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi ${{ github.workspace }}/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi.sha256sum overwrite: true - name: Artifact Upload if: matrix.type == 'portable' uses: actions/upload-artifact@v4 with: name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-win-${{ matrix.config.arch }}-${{ matrix.type }} path: | ${{ github.workspace }}/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip ${{ github.workspace }}/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip.sha256sum overwrite: true ================================================ FILE: .github/workflows/build_cmake.yml ================================================ name: Building(CMake) on: push: branches: [ master ] paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' pull_request: branches: [ master ] paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' workflow_dispatch: env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: RelWithDebInfo jobs: linux-build: name: ${{ matrix.os}} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-24.04] steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} - name: Checkout Source code if: github.event_name == 'workflow_dispatch' uses: actions/checkout@v4 with: ref: ${{ github.sha }} - name: Install Dependencies run: | sudo apt-get -y -qq update sudo apt-get -y --no-install-recommends install \ cmake \ extra-cmake-modules \ build-essential \ qt6-base-dev \ qt6-svg-dev \ qt6-tools-dev \ - name: Create Build Environment # Some projects don't allow in-source building, so create a separate build directory # We'll use this as our working directory for all subsequent commands run: cmake -E make_directory ${{runner.workspace}}/build - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable # access regardless of the host operating system shell: bash working-directory: ${{runner.workspace}}/build # Note the current convention is to use the -S and -B options here to specify source # and build directories. We need to source the profile file to make sure conan is in PATH run: | cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE - name: Build working-directory: ${{runner.workspace}}/build shell: bash # Execute the build. You can specify a specific target with "--target " run: cmake --build . --config $BUILD_TYPE - name: Test working-directory: ${{runner.workspace}}/build shell: bash # Execute tests defined by the CMake configuration. # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail run: ctest -C $BUILD_TYPE windows-build: runs-on: ${{ matrix.config.os }} strategy: fail-fast: false matrix: config: - { name: "Windows 2022 MSVC", artifact: "Windows-MSVC.tar.xz", os: windows-2022, cc: "cl", cxx: "cl", environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", qt_ver: '6.9.3' } steps: - uses: actions/checkout@v4 - name: Fix Python path shell: pwsh run: | Remove-Item "$env:LOCALAPPDATA\Microsoft\WindowsApps\python*.exe" -Force -ErrorAction SilentlyContinue - name: Install Qt uses: jurplel/install-qt-action@v4 with: version: ${{ matrix.config.qt_ver }} cache: 'true' cache-key-prefix: install-qt-action-${{ matrix.config.qt_ver }} target: desktop dir: '${{ github.workspace }}/build/' - name: Configure working-directory: build shell: powershell run: | cmake -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE ../ - name: Build working-directory: build shell: powershell run: | cmake --build . --config $env:BUILD_TYPE ================================================ FILE: .github/workflows/clang-format.yml ================================================ name: test-clang-format on: push: paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' pull_request: paths-ignore: - 'README.md' - 'LICENSE' - 'docs/**' - 'data/translations/*.ts' workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - name: Checkout Source code if: github.event_name == 'push' uses: actions/checkout@v4 - name: Checkout Source code if: github.event_name == 'pull_request' uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} - uses: DoozyX/clang-format-lint-action@v0.13 with: source: './src' extensions: 'h,cpp' clangFormatVersion: 11 style: file ================================================ FILE: .github/workflows/deploy-dev-docs.yml ================================================ name: Deploy developer docs on: push: branches: [ master, docs ] paths: - 'src/**' - 'docs/dev/**' - '.github/workflows/deploy-dev-docs.yml' jobs: build-and-deploy: runs-on: ubuntu-22.04 steps: - name: Install dependencies run: | sudo apt-get --yes --quiet update sudo apt-get --yes --no-install-recommends install doxygen pip install \ mkdocs \ mkdocs-material \ git+https://github.com/veracioux/mkdoxy@v1.0.0 - name: Checkout flameshot source uses: actions/checkout@v4 with: path: 'flameshot' - name: Build docs working-directory: ${{github.workspace}}/flameshot/docs/dev run: | make build - name: Checkout flameshot website uses: actions/checkout@v4 with: repository: 'flameshot-org/flameshot-org.github.io' ref: 'gh-pages' path: 'website' - name: Configure git credentials for website repo working-directory: ${{github.workspace}}/website run: | git config user.name "GitHub Actions" git config user.email "github-actions-bot@users.noreply.github.com" git config http.https://github.com/.extraheader 'AUTHORIZATION basic ${{secrets.TOKEN_PUSH_TO_WEBSITE_REPO}}' git remote add destination "https://x-access-token:${{secrets.TOKEN_PUSH_TO_WEBSITE_REPO}}@github.com/flameshot-org/flameshot-org.github.io" - name: Add developer docs to website deployment working-directory: ${{github.workspace}}/website run: | # Create empty dev-docs-staging branch git checkout --orphan dev-docs-staging git rm -r --cached . rm -rf docs/dev # Copy generated docs over mkdir -p docs mv "${{github.workspace}}/flameshot/docs/dev/output" \ "./docs/dev" # Commit docs/dev to the dev-docs-staging branch git add docs/dev HASH="$(git --git-dir="${{github.workspace}}/flameshot/.git" rev-parse HEAD)" git commit --message "Add developer docs from flameshot@$HASH" # Apply changes to gh-pages git checkout --force gh-pages git checkout dev-docs-staging -- docs/dev # Commit (we use `|| true` because the commit could be empty and thus fail) git commit --message "Add developer docs from flameshot@$HASH" || true - name: Push to website repo working-directory: ${{github.workspace}}/website run: | git push --force destination dev-docs-staging git push destination gh-pages ================================================ FILE: .gitignore ================================================ # common .idea .cache # C++ objects and libs *.slo *.lo *.o *.a *.la *.lai *.so *.dll *.dylib # Qt-es /.qmake.cache /.qmake.stash *.pro.user *.pro.user.* *.qbs.user *.qbs.user.* *.moc moc_*.cpp qrc_*.cpp ui_*.h Makefile* *build-* *.qm # QtCreator *.autosave # QtCtreator Qml *.qmlproject.user *.qmlproject.user.* # QtCtreator CMake CMakeLists.txt.user # python venv/* # Created by https://www.gitignore.io/api/snapcraft ### Snapcraft ### # Snapcraft parts/ prime/ stage/ *.snap .snapcraft/ flameshot*.tar.bz2 .vscode/ build/ data/flatpak/.flatpak-builder # NVIM *~ # Jetbrains .idea/ .run # MacOS .DS_Store # End of https://www.gitignore.io/api/snapcraft #MacOS Crap .DS_Store # Miscellaneous !docs/dev/Makefile # Nix result result-* # direnv .direnv ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.22) # cmake_policy(SET CMP0076 OLD) set(FLAMESHOT_VERSION 13.3.0) # Flameshot-org set(GIT_API_URL "https://api.github.com/repos/flameshot-org/flameshot/releases/latest") project( flameshot VERSION ${FLAMESHOT_VERSION} LANGUAGES CXX) set(PROJECT_NAME_CAPITALIZED "Flameshot") include(FetchContent) #Must be set before fetching external content! #QT_DEFAULT_MAJOR_VERSION used by QHotkey set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "") #QT_VERSION_MAJOR used by Flameshot and QtColorWidgets set(QT_VERSION_MAJOR 6 CACHE STRING "") #BUILD_SHARED_LIBS used by QHotkey and QtColorWidgets option(BUILD_SHARED_LIBS OFF) #QHOTKEY_INSTALL used by QHotkey; must be disabled on Windows if(WIN32) set(QHOTKEY_INSTALL OFF CACHE BOOL "qHotkey install") endif() #Needed due to linker error with QtColorWidget set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Dependency can be fetched via flatpak builder if(EXISTS "${CMAKE_SOURCE_DIR}/external/Qt-Color-Widgets/CMakeLists.txt") add_subdirectory("${CMAKE_SOURCE_DIR}/external/Qt-Color-Widgets" EXCLUDE_FROM_ALL) else() FetchContent_Declare( qtColorWidgets GIT_REPOSITORY https://gitlab.com/mattbas/Qt-Color-Widgets.git GIT_TAG 4f3c7e2af8e3138d89533475af66df42ccf08ef8 ) #Workaround for duplicate GUID in windows WIX installer if(WIN32) FetchContent_GetProperties(qtColorWidgets) if(NOT qtcolorwidgets_POPULATED) FetchContent_Populate(qtColorWidgets) add_subdirectory(${qtcolorwidgets_SOURCE_DIR} ${qtcolorwidgets_BINARY_DIR} EXCLUDE_FROM_ALL) endif() else() FetchContent_MakeAvailable(qtColorWidgets) endif() endif() # This can be read from ${PROJECT_NAME} after project() is called if(APPLE) set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version") endif() # Configuration options set(DEFAULT_USE_PORTABLE_CONFIG FALSE) if(WIN32) set(DEFAULT_USE_PORTABLE_CONFIG TRUE) # For Windows RC file. add_definitions(-DFLAMESHOT_VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR}) add_definitions(-DFLAMESHOT_VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR}) add_definitions(-DFLAMESHOT_VERSION_BUGFIX=${CMAKE_PROJECT_VERSION_PATCH}) add_definitions(-DFLAMESHOT_VERSION_BUILD=1) add_definitions(-DFLAMESHOT_VERSION_STRING="${PROJECT_VERSION}") elseif(APPLE) set(Qt6_DIR "$(brew --prefix qt6)/lib/cmake/Qt6/" CACHE PATH "directory where Qt6Config.cmake exists.") endif() set(USE_PORTABLE_CONFIG ${DEFAULT_USE_PORTABLE_CONFIG} CACHE BOOL "Store config in application folder") if(USE_PORTABLE_CONFIG) add_compile_definitions(USE_PORTABLE_CONFIG) endif() option(FLAMESHOT_DEBUG_CAPTURE "Enable mode to make debugging easier" OFF) option(USE_MONOCHROME_ICON "Build using monochrome icon as default" OFF) option(GENERATE_TS "Regenerate translation source files" OFF) option(USE_KDSINGLEAPPLICATION "Use KDSingleApplication library" ON) option(USE_BUNDLED_KDSINGLEAPPLICATION "Use a bundled version of the KDSingleApplication library" ${USE_KDSINGLEAPPLICATION}) option(USE_LAUNCHER_ABSOLUTE_PATH "Use absolute path for the desktop launcher" ON) option(USE_WAYLAND_CLIPBOARD "USE KF Gui Wayland Clipboard" OFF) option(DISABLE_UPDATE_CHECKER "Disable check for updates" OFF) option(ENABLE_IMGUR "Enable Imgur Uploader" OFF) if(ENABLE_IMGUR) add_compile_definitions(ENABLE_IMGUR) endif() if(DISABLE_UPDATE_CHECKER) add_compile_definitions(DISABLE_UPDATE_CHECKER) endif() include(cmake/StandardProjectSettings.cmake) add_library(project_options INTERFACE) target_compile_features(project_options INTERFACE cxx_std_20) add_library(project_warnings INTERFACE) # enable cache system include(cmake/Cache.cmake) # standard compiler warnings include(cmake/CompilerWarnings.cmake) # set_project_warnings(project_warnings) # sanitizer options if supported by compiler include(cmake/Sanitizers.cmake) enable_sanitizers(project_options) # allow for static analysis options include(cmake/StaticAnalyzers.cmake) if(USE_KDSINGLEAPPLICATION) if(USE_BUNDLED_KDSINGLEAPPLICATION) set(KDSingleApplication_EXAMPLES OFF CACHE BOOL "Don't build the examples") set(KDSingleApplication_STATIC ON CACHE BOOL "Build static versions of the libraries") # Check if KDSingleApplication is available locally if(EXISTS "${CMAKE_SOURCE_DIR}/external/KDSingleApplication/CMakeLists.txt") add_subdirectory("${CMAKE_SOURCE_DIR}/external/KDSingleApplication") else() FetchContent_Declare( kdsingleApplication GIT_REPOSITORY https://github.com/KDAB/KDSingleApplication.git GIT_TAG v1.2.0 ) FetchContent_MakeAvailable(kdsingleApplication) endif() else() find_package(KDSingleApplication-qt6 REQUIRED) endif() endif() # ToDo: Check if this is used anywhere option(BUILD_STATIC_LIBS ON) if(WIN32 OR APPLE) FetchContent_Declare( qHotKey GIT_REPOSITORY https://github.com/flameshot-org/QHotkey GIT_TAG master ) FetchContent_MakeAvailable(QHotKey) endif() add_subdirectory(src) # CPack set(CPACK_PACKAGE_VENDOR "flameshot-org") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Powerful yet simple to use screenshot software.") set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_HOMEPAGE_URL "https://flameshot.org") set(CPACK_PACKAGE_CONTACT "flameshot-org developers ") set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data/img/app/org.flameshot.Flameshot.svg") # TODO: Can any generator make # use of this? set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md") # TODO: Where is this used? Do we need a better # source? if(WIN32) # Include all dynamically linked runtime libraries such as MSVCRxxx.dll include(InstallRequiredSystemLibraries) if(USE_PORTABLE_CONFIG) set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-win64") set(CPACK_GENERATOR ZIP) else() set(CPACK_GENERATOR WIX ZIP) set(CPACK_PACKAGE_NAME "${PROJECT_NAME_CAPITALIZED}") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_CAPITALIZED}") set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} "${PROJECT_NAME_CAPITALIZED}") set(CPACK_CREATE_DESKTOP_LINKS ${PROJECT_NAME}) # WIX (Windows .msi installer) # 48x48 pixels set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/data/img/app/flameshot.ico") # Supported languages can be found at http://wixtoolset.org/documentation/manual/v3/wixui/wixui_localization.html # set(CPACK_WIX_CULTURES "ar-SA,bg-BG,ca-ES,hr-HR,cs-CZ,da-DK,nl-NL,en-US,et-EE,fi-FI,fr-FR,de-DE") set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/packaging/win-installer/Bitmaps/CPACK_WIX_UI_BANNER.BMP") set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/packaging/win-installer/Bitmaps/CPACK_WIX_UI_DIALOG.BMP") set(CPACK_WIX_PROPERTY_ARPHELPLINK "${CPACK_PACKAGE_HOMEPAGE_URL}") set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "${CPACK_PACKAGE_HOMEPAGE_URL}") set(CPACK_WIX_ROOT_FEATURE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") set(CPACK_WIX_LIGHT_EXTRA_FLAGS "-dcl:high") # set high compression set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/packaging/win-installer/LICENSE/GPL-3.0.txt") set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") set(CPACK_WIX_UPGRADE_GUID "26D8062A-66D9-48D9-8924-42090FB9B3F9") endif() elseif(APPLE) set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0) set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-osx") set(CPACK_GENERATOR ZIP) else() set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-linux") set(CPACK_GENERATOR TGZ) set(CPACK_SOURCE_GENERATOR TGZ) endif() include(CPack) ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at borgman.jeremy@pm.me. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: PKGBUILD ================================================ pkgname=flameshot-git _pkgname=flameshot pkgver=r2022.277eb2f4 pkgrel=1 pkgdesc="Powerful yet simple to use screenshot software" arch=('i686' 'x86_64' 'aarch64' 'armv7h') url="https://github.com/flameshot-org/flameshot" license=('GPL-3.0-or-later') depends=('qt6-base' 'qt6-svg' 'hicolor-icon-theme' 'kguiaddons') makedepends=('qt6-tools' 'cmake' 'ninja') optdepends=( 'gnome-shell-extension-appindicator: for system tray icon if you are using Gnome' 'xdg-desktop-portal: for wayland support, you will need the implementation for your wayland desktop environment' 'qt6-imageformats: for additional export image formats (e.g. tiff, webp, and more)' ) provides=(flameshot) conflicts=(flameshot) source=() prepare() { cp -R "${startdir}/" "${srcdir}/${_pkgname}/" } pkgver() { cd "${srcdir}/${_pkgname}" printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" } build() { cd "${srcdir}/${_pkgname}" cmake -GNinja -B build -S . \ -DCMAKE_BUILD_TYPE=None \ -DCMAKE_INSTALL_PREFIX=/usr \ -DUSE_WAYLAND_CLIPBOARD=1 \ -DDISABLE_UPDATE_CHECKER=1 \ cmake --build build } package() { cd "${srcdir}/${_pkgname}" DESTDIR="${pkgdir}" cmake --install build } ================================================ FILE: README.md ================================================

Flameshot
Flameshot

Powerful yet simple to use screenshot software.

GNU/Linux Build Status Windows Build Status MacOS Build Status Nightly Build Latest Stable Release Total Downloads License Translation status Docs
Get it from the Snap Store Get it on Flathub

## Preview ![image](https://raw.githubusercontent.com/flameshot-org/flameshot/master/data/img/preview/animatedUsage.gif) ## Index - [Features](#features) - [Usage](#usage) - [CLI configuration](#cli-configuration) - [Config file](#config-file) - [Keyboard Shortcuts](#keyboard-shortcuts) - [Local](#local) - [Global](#global) - [On KDE Plasma desktop](#on-kde-plasma-desktop) - [On Gnome (Ubuntu, Fedora and more)](#on-gnome-ubuntu-fedora-and-more) - [On XFCE 4](#on-xfce-4) - [On Fluxbox](#on-fluxbox) - [Considerations](#considerations) - [Installation](#installation) - [Prebuilt Packages](#prebuilt-packages) - [Packages from Repository](#packages-from-repository) - [MacOS](#macos) - [Windows](#windows) - [Compilation](#compilation) - [Dependencies](#dependencies) - [Compile-time](#compile-time) - [Run-time](#run-time) - [Optional](#optional) - [Debian](#debian) - [Fedora](#fedora) - [Arch](#arch) - [Build](#build) - [Install](#install) - [License](#license) - [Privacy Policy](#privacy-policy) - [Code Signing Policy](#code-signing-policy) - [Contribute](#contribute) - [Acknowledgment](#acknowledgment) ## Features - Customizable appearance. - Easy to use. - In-app screenshot editing. - DBus interface. - Upload to Imgur. ## Usage Executing the command `flameshot` without parameters will launch a running instance of the program in the background without taking actions. If your desktop environment provides tray area, a tray icon will also appear in the tray for users to perform configuration and management. Example commands: - Capture with GUI: ```shell flameshot gui ``` - Capture with GUI with custom save path: ```shell flameshot gui -p ~/myStuff/captures ``` - Capture with GUI after 2 seconds delay (can be useful to take screenshots of mouse hover tooltips, etc.): ```shell flameshot gui -d 2000 ``` - Fullscreen capture with custom save path (no GUI) and delayed: ```shell flameshot full -p ~/myStuff/captures -d 5000 ``` - Fullscreen capture with custom save path copying to clipboard: ```shell flameshot full -c -p ~/myStuff/captures ``` - Capture the screen containing the mouse and print the image (bytes) in PNG format: ```shell flameshot screen -r ``` - Capture the screen number 1 and copy it to the clipboard: ```shell flameshot screen -n 1 -c ``` In case of doubt choose the first or the second command as shortcut in your favorite desktop environment. A systray icon will be in your system's panel while Flameshot is running. Do a right click on the tray icon and you'll see some menu items to open the configuration window and the information window. Check out the About window to see all available shortcuts in the graphical capture mode. ### Usage on Windows On Windows, `flameshot.exe` will behave as expected for all supported command-line arguments, but it will not output any text to the console. This is problematic if, for example, you are running `flameshot.exe -h`. If you require console output, run `flameshot-cli.exe` instead. `flameshot-cli.exe` is a minimal wrapper around `flameshot.exe` that ensures all stdout is captured and output to the console. ### CLI configuration You can use the graphical menu to configure Flameshot, but alternatively you can use your terminal or scripts to do so. - Open the configuration menu: ```shell flameshot config ``` - Show the initial help message in the capture mode: ```shell flameshot config --showhelp true ``` - For more information about the available options use the help flag: ```shell flameshot config -h ``` ### Config file You can also edit some of the settings (like overriding the default colors) in the configuration file.\ Linux path: `~/.config/flameshot/flameshot.ini`.\ Windows path: `C:\Users\{YOURNAME}\AppData\Roaming\flameshot\flameshot.ini`. When copying over the config file from Linux to Windows or vice versa, make sure to correct the `savePath` variable,\ so that the screenshots save in the right directory on your desired file system. ## Keyboard shortcuts ### Local These shortcuts are available in GUI mode: | Keys | Description | |--- |--- | | P | Set the Pencil as paint tool | | D | Set the Line as paint tool | | A | Set the Arrow as paint tool | | S | Set Selection as paint tool | | R | Set the Rectangle as paint tool | | C | Set the Circle as paint tool | | M | Set the Marker as paint tool | | T | Add text to your capture | | B | Set Pixelate as the paint tool | | , , , | Move selection 1px | | Shift + , , , | Resize selection 1px | | Ctrl + Shift + , , , | Symmetrically resize selection 2px | | Esc | Quit capture | | Ctrl + M | Move the selection area | | Ctrl + C | Copy to clipboard | | Ctrl + S | Save selection as a file | | Ctrl + Z | Undo the last modification | | Ctrl + Shift + Z | Redo the next modification | | Ctrl + Q | Leave the capture screen | | Ctrl + O | Choose an app to open the capture | | Ctrl + Return | Commit text in text area| | Ctrl + Backspace | Cancel current selection | | Return | Upload the selection to Imgur | | Spacebar | Toggle visibility of sidebar with options of the selected tool, color picker for the drawing color and history menu | | G | Starts the color picker | | Right Click | Show the color wheel | | Mouse Wheel | Change the tool's thickness | | Print screen | Capture Screen | | Shift + Print | Screenshot History | | Ctrl + drawing *line*, *arrow* or *marker* | Drawing only horizontally, vertically or diagonally | | Ctrl + drawing *rectangle* or *circle* | Keeping aspect ratio | Shift + drag a handler of the selection area: mirror redimension in the opposite handler. ### Global - Windows: Prt Sc (fixed, cannot be changed) and Win + Shift + X (can be changed in the settings) - macOS: cmd + Shift + X (can be changed in the settings) - Linux: Flameshot doesn't yet support Prt Sc out of the box, but you can set this up with a bit of configuration: #### On KDE Plasma desktop To make configuration easier, there's a [file](docs/shortcuts-config/flameshot-shortcuts-kde.khotkeys) in the repository that more or less automates this process. This file will assign the following hotkeys by default: | Keys | Description | |--- |--- | | Prt Sc | Start the Flameshot screenshot tool and take a screenshot | | Ctrl + Prt Sc | Wait for 3 seconds, then start the Flameshot screenshot tool and take a screenshot | | Shift + Prt Sc | Take a full-screen (all monitors) screenshot and save it | | Ctrl + Shift + Prt Sc | Take a full-screen (all monitors) screenshot and copy it to the clipboard | If you don't like the defaults, they can be changed later. Steps for using the configuration: 1. The configuration file makes Flameshot automatically save screenshots to `~/Pictures/Screenshots` without opening the save dialog. Make sure that folder exists by running: ```shell mkdir -p ~/Pictures/Screenshots ``` (If you don't like the default location, you can skip this step and configure your preferred directory later.) 2. Download the configuration file: ```shell cd ~/Desktop wget https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/shortcuts-config/flameshot-shortcuts-kde.khotkeys ``` 3. Make sure you have the `khotkeys` installed using your package manager to enable custom shortcuts in KDE Plasma. 4. Go to _System Settings_ → _Shortcuts_ → _Custom Shortcuts_. 5. If an entry exists for Spectacle (the default KDE screenshot utility), you'll need to disable it because its shortcuts might conflict with Flameshot's. Do this by unchecking the _Spectacle_ entry. 6. Click _Edit_ → _Import..._, navigate to the configuration file and open it. 7. Now the Flameshot entry should appear in the list. Click _Apply_ to apply the changes. 8. If you want to change the default hotkeys, you can expand the entry, select the appropriate action and modify it as you wish; the process is pretty self-explanatory. 9. If you installed Flameshot as a Flatpak, you will need to create a symlink to the command: ```shell ln -s /var/lib/flatpak/exports/bin/org.flameshot.Flameshot ~/.local/bin/flameshot ``` #### On Gnome (Ubuntu, Fedora and more) To use Flameshot instead of the default screenshot application in Gnome we need to remove the binding on Prt Sc key, and then create a new binding for `flameshot gui` ([adapted](https://askubuntu.com/posts/1039949/revisions) from [Pavel's answer on AskUbuntu](https://askubuntu.com/revisions/1036473/1)). 1. Remove the binding on Prt Sc: Go to _Settings_ > _Keyboard_ > _View and Customise Shortcuts_ > _Screenshots_ > _Take a screenshot interactively_ and press `backspace` 2. Add custom binding on Prt Sc: Go to _Settings_ > _Keyboard_ > _View and Customise Shortcuts_ > _Custom shortcuts_ and press the '+' button at the bottom. 3. Name the command as you like it, e.g. `flameshot`. And in the command insert `/usr/bin/flameshot gui` or `flatpak run org.flameshot.Flameshot gui` if installed via flatpak. 4. Then click "_Set Shortcut.._" and press Prt Sc. This will show as "_print_". Now every time you press Prt Sc, it will start the Flameshot GUI instead of the default application. #### On XFCE 4 1. Go to `Keyboard` settings 2. Switch to the tab `Application Shortcuts` 3. Find the entry ```text Command Shortcut xfce4-screenshooter -fd 1 Print ``` 4. Replace `xfce4-screenshooter -fd 1` with `flameshot gui` Now every time you press Prt Sc it will start Flameshot GUI instead of the default application. #### On Fluxbox 1. Edit your `~/.fluxbox/keys` file 2. Add a new entry. `Print` is the key name, `flameshot gui` is the shell command; for more options see [the fluxbox wiki](https://sillyslux.github.io/fluxbox-wiki/en/wiki/Keyboard-Shortcuts/). ```text Print :Exec flameshot gui ``` 3. Refresh Fluxbox configuration with **Reconfigure** option from the menu. ## Considerations - Experimental Gnome Wayland and Plasma Wayland support. - If you are using Gnome you need to install the [AppIndicator and KStatusNotifierItem Support](https://extensions.gnome.org/extension/615/appindicator-support/) extension in order to see the system tray icon. - Press Enter or Ctrl + C when you are in a capture mode and you don't have an active selection and the whole desktop will be copied to your clipboard. Pressing Ctrl + S will save your capture to a file. Check the [Shortcuts](#keyboard-shortcuts) for more information. - Flameshot works best with a desktop environment that includes D-Bus. See this [article](https://wiki.archlinux.org/index.php/Flameshot#Troubleshooting) for tips on using Flameshot in a minimal window manager (dwm, i3, xmonad, etc). - In order to speed up the first launch of Flameshot (D-Bus init of the app can be slow), consider starting the application automatically on boot. - Quick tip: If you don't have Flameshot to autostart at boot and you want to set keyboard shortcut, use the following as the command for the keybinding: ```sh ( flameshot &; ) && ( sleep 0.5s && flameshot gui ) ``` ## Installation Flameshot can be installed on Linux, Microsoft Windows, and macOS. ### Prebuilt packages Some prebuilt packages are provided on [the release page of the GitHub project repository](https://github.com/flameshot-org/flameshot/releases). ### Packages from Repository There are packages available in the repository of some Linux distributions: - [Arch](https://archlinux.org/packages/extra/x86_64/flameshot/): `pacman -S flameshot` + Snapshot also available via AUR: [flameshot-git](https://aur.archlinux.org/packages/flameshot-git). - [Debian 10+](https://tracker.debian.org/pkg/flameshot): `apt install flameshot` + Package for Debian 9 ("Stretch") also [available via stretch-backports](https://backports.debian.org/). - [Ubuntu](https://launchpad.net/ubuntu/+source/flameshot): `apt install flameshot` - [openSUSE](https://software.opensuse.org/package/flameshot): `zypper install flameshot` - [Void Linux](https://github.com/void-linux/void-packages/tree/master/srcpkgs/flameshot): `xbps-install flameshot` - [Solus](https://dev.getsol.us/source/flameshot/): `eopkg it flameshot` - [Fedora](https://src.fedoraproject.org/rpms/flameshot): `dnf install flameshot` - [NixOS](https://search.nixos.org/packages?query=flameshot): `nix-env -iA nixos.flameshot` - [ALT](https://packages.altlinux.org/en/sisyphus/srpms/flameshot/): `su - -c "apt-get install flameshot"` - [Snap/Flatpak/AppImage](https://github.com/flameshotapp/packages) - [Docker](https://github.com/ManuelLR/docker-flameshot) - [Windows](https://github.com/majkinetor/au-packages/tree/master/flameshot) ### macOS - [MacPorts](https://www.macports.org): `sudo port selfupdate && sudo port install flameshot` - [Homebrew](https://brew.sh): `brew install --cask flameshot` **Note** that because of macOS security features, you may not be able to open flameshot when installed using brew. If you see the message `“flameshot” cannot be opened because the developer cannot be verified.` you will need to follow the steps below: 1. Go to the Applications folder (Finder > Go > Applications, or Shift+Command+A) 1. Right-Click on "flameshot.app" and choose "Open" from the context menu 2. In the dialog click "Open" On MacOs 15 and above, you will have to go to system settings -> privacy and security after doing this and click "Open Anyway" or you can open flameshot first time with the following command. ```sudo xattr -rd com.apple.quarantine /Applications/flameshot.app``` After following all those steps above, `flameshot` will open without problems in your Mac. ### Windows - [Scoop](https://github.com/ScoopInstaller/Extras/blob/master/bucket/flameshot.json): `scoop install flameshot`
Expand this section to see what distros are using an up to date version of flameshot Packaging status
### Tray icon **Note** that for the Flameshot icon to appear in your tray area, you should have a systray software installed. This is especially true for users who use minimal [window managers](https://wiki.archlinux.org/index.php/window_manager) such as [dwm](https://dwm.suckless.org/). In some [Desktop Environment](https://wiki.archlinux.org/index.php/Desktop_environment) installations (e.g Gnome), the systray might be missing and you can install an application or plugin (e.g [Gnome shell extension](https://extensions.gnome.org/extension/1503/tray-icons/)) to add the systray to your setup. It has been [reported](https://github.com/flameshot-org/flameshot/issues/1009#issuecomment-700781081)) that icon of some software, including Flameshot, does not show in [gnome-shell-extension-appindicator](https://github.com/ubuntu/gnome-shell-extension-appindicator). Alternatively, in case you don't want to have a systray, you can always call Flameshot from the terminal. See [Usage section](#usage). ## Compilation To build the application in your system, you'll need to install the dependencies needed for it and package names might be different for each distribution, see [Dependencies](#dependencies) below for more information. You can also install most of the Qt dependencies via [their installer](https://www.qt.io/download-qt-installer). If you were developing Qt apps before, you probably already have them. This project uses [CMake](https://cmake.org/) build system, so you need to install it in order to build the project (on most Linux distributions it is available in the standard repositories as a package called `cmake`). If your distribution provides too old version of CMake (e.g. Ubuntu or Debian) you can [download it on the official website](https://cmake.org/download/). Also you can open and build/debug the project in a C++ IDE. For example, in Qt Creator you should be able to simply open `CMakeLists.txt` via `Open File or Project` in the menu after installing CMake into your system. [More information about CMake projects in Qt Creator](https://doc.qt.io/qtcreator/creator-project-cmake.html). ### Dependencies #### Compile-time - Qt >= 6.2.4 (available by default on Ubuntu Jammy) + Development tools - GCC >= 11 - CMake >= 3.22 #### Run-time - Qt + SVG #### Optional - Git - OpenSSL - CA Certificates - Qt Image Formats - for additional export image formats (e.g. tiff, webp, and more) #### Debian ```shell # Compile-time apt install g++ cmake build-essential qt6-base-dev qt6-tools-dev-tools qt6-svg-dev qt6-tools-dev # Run-time apt install libkf6guiaddons-dev libqt6dbus6 libqt6network6 libqt6core6 libqt6widgets6 libqt6gui6 libqt6svg6 qt6-qpa-plugins # Optional apt install git openssl ca-certificates qt6-image-formats-plugins ``` #### Fedora ```shell # Compile-time dnf install gcc-c++ cmake qt6-qtbase-devel qt6-qtsvg-devel qt6-qttools qt6-linguist qt6-qttools-devel kf6-kguiaddons-devel # Run-time dnf install qt6-qtbase qt6-qtsvg kf6-kguiaddons # Optional dnf install git openssl ca-certificates qt6-qtimageformats ``` #### Arch ```shell # Compile-time pacman -S cmake base-devel git qt6-base qt6-tools kguiaddons # Run-time pacman -S qt6-svg # Optional pacman -S openssl ca-certificates qt6-imageformats ``` #### Nix Development Shell: ```shell # Without flakes: nix-shell # With flakes: nix develop ``` ```shell # Build flameshot nix build # Build and run flameshot nix run ``` #### macOS First of all you need to install [brew](https://brew.sh) and then install the dependencies ```shell brew install qt6 brew install cmake ``` ### Build After installing all the dependencies, Flameshot can be built. #### Installation/build dir For the translations to be loaded correctly, the build process needs to be aware of where you want to install Flameshot. ```shell # Directory where build files will be placed, may be relative export BUILD_DIR=build # Directory prefix where Flameshot will be installed. If you are just building and don't want to # install, comment this environment variable. # This excludes the bin/flameshot part of the install, # e.g. in /opt/flameshot/bin/flameshot, the CMAKE_INSTALL_PREFIX is /opt/flameshot # This must be an absolute path. Requires CMAKE 3.29. export CMAKE_INSTALL_PREFIX=/opt/flameshot # Linux cmake -S . -B "$BUILD_DIR" \ && cmake --build "$BUILD_DIR" #MacOS cmake -S . -B "$BUILD_DIR" \ -DQt6_DIR="$(brew --prefix qt6)/lib/cmake/Qt6" \ && cmake --build "$BUILD_DIR" ``` When the `cmake --build` command has completed you can launch Flameshot from the `project_folder/build/src` folder. ### Install Note that if you install from source, there _is no_ uninstaller, so consider installing to a custom directory. #### To install into a custom directory Make sure you are using cmake `>= 3.29` and build Flameshot with `$CMAKE_INSTALL_PREFIX` set to the installation directory. If this is not done, the translations won't be found when using a custom directory. Then, run the following: ```bash # !Build with CMAKE_INSTALL_PREFIX and use cmake >= 3.29! Using an older cmake will cause # installation into the default /usr/local dir. # You may need to run this with privileges cmake --install "$BUILD_DIR" ``` #### To install to the default install directory ```bash # You may need to run this with privileges cmake --install "$BUILD_DIR" ``` ### FAQ ## License - The main code is licensed under [GPLv3](LICENSE) - The logo of Flameshot is licensed under [Free Art License v1.3](data/img/app/flameshotLogoLicense.txt) - The button icons are licensed under Apache License 2.0. See: https://github.com/google/material-design-icons - The code at capture/capturewidget.cpp is based on https://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.cpp (GPLv2) - The code at capture/capturewidget.h is based on https://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.h (GPLv2) - I copied a few lines of code from KSnapshot regiongrabber.cpp revision `796531` (LGPL) - Qt-Color-Widgets taken and modified from https://github.com/mbasaglia/Qt-Color-Widgets (see their license and exceptions in the project) (LGPL/GPL) Info: If I take code from your project and that implies a relicense to GPLv3, you can reuse my changes with the original previous license of your project applied. ## Privacy Policy This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it. ## Code Signing Policy For Windows binaries, this program uses free code signing provided by [SignPath.io](https://signpath.io?utm_source=foundation&utm_medium=github&utm_campaign=flameshot), and a certificate by the [SignPath Foundation](https://signpath.org?utm_source=foundation&utm_medium=github&utm_campaign=flameshot). Code signing is currently a manual process so not every patch release will be signed. ## Contribute If you want to contribute check the [CONTRIBUTING.md](docs/CONTRIBUTING.md) ## Acknowledgment Thanks to those who have shown interest in the early development process: - [lupoDharkael](https://github.com/lupoDharkael) - [Cosmo](https://github.com/philpem) - [XerTheSquirrel](https://github.com/XerTheSquirrel) - [The members of Sugus GNU/Linux](https://github.com/SUGUS-GNULinux) - ismatori Thanks to sponsors: - [Namecheap](https://www.namecheap.com/) - [JetBrains](https://www.jetbrains.com/) - [SignPath](https://signpath.io/) - [addy.io](https://addy.io/) ================================================ FILE: appveyor.yml ================================================ image: - Visual Studio 2022 clone_folder: c:\projects\source environment: Qt6_INSTALL_DIR: 'C:\Qt\6.9.3\msvc2022_64' PATH: '%Qt6_INSTALL_DIR%\bin;%PATH%' matrix: - PORTABLE_CONFIG: OFF - PORTABLE_CONFIG: ON build_script: - cmd: |- set QTDIR=%Qt6_INSTALL_DIR% set "VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC" set "OPENSSL_ROOT_DIR=C:/OpenSSL-v111-Win64" cmake -S C:\projects\source -B build -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENSSL=ON -DUSE_PORTABLE_CONFIG=%PORTABLE_CONFIG% cmake --build build --parallel 2 --config Release - cmd: cd build - cmd: if "%PORTABLE_CONFIG%"=="OFF" cpack -G WIX -B package - cmd: if "%PORTABLE_CONFIG%"=="ON" (mkdir portable_exe & copy src\Release\*.exe portable_exe\. & 7z a -tzip portable_exe.zip portable_exe\) artifacts: - path: build\package\*.msi name: installer - path: build\portable_exe.zip name: portable exe deploy: - provider: Webhook url: https://app.signpath.io/API/v1/042f605f-b378-45d8-ad16-b7695b071036/Integrations/AppVeyor?ProjectSlug=flameshot&SigningPolicySlug=test-signing #url: https://app.signpath.io/API/v1/042f605f-b378-45d8-ad16-b7695b071036/Integrations/AppVeyor?ProjectSlug=flameshot&SigningPolicySlug=release-signing authorization: secure: G5nNnkfRSJ+EEx+7LlUSSoEyoL+pHYItvjrNxbWITE7RB+cm9qzuHRdwmrZdEDjdVCLZ2TkNawynMxYcGMZAQA== ================================================ FILE: cmake/Cache.cmake ================================================ option(ENABLE_CACHE "Enable cache if available" ON) if(NOT ENABLE_CACHE) return() endif() set(CACHE_OPTION "ccache" CACHE STRING "Compiler cache to be used") set(CACHE_OPTION_VALUES "ccache" "sccache") set_property(CACHE CACHE_OPTION PROPERTY STRINGS ${CACHE_OPTION_VALUES}) list( FIND CACHE_OPTION_VALUES ${CACHE_OPTION} CACHE_OPTION_INDEX) if(${CACHE_OPTION_INDEX} EQUAL -1) message( STATUS "Using custom compiler cache system: '${CACHE_OPTION}', explicitly supported entries are ${CACHE_OPTION_VALUES}") endif() find_program(CACHE_BINARY ${CACHE_OPTION}) if(CACHE_BINARY) message(STATUS "${CACHE_OPTION} found and enabled") set(CMAKE_CXX_COMPILER_LAUNCHER ${CACHE_BINARY}) else() message(WARNING "${CACHE_OPTION} is enabled but was not found. Not using it") endif() ================================================ FILE: cmake/CompilerWarnings.cmake ================================================ # from here: # # https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md function(set_project_warnings project_name) option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" TRUE) set(MSVC_WARNINGS /W4 # Baseline reasonable warnings /w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data /w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data /w14263 # 'function': member function does not override any base class virtual member function /w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not # be destructed correctly /w14287 # 'operator': unsigned/negative constant mismatch /we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside # the for-loop scope /w14296 # 'operator': expression is always 'boolean_value' /w14311 # 'variable': pointer truncation from 'type1' to 'type2' /w14545 # expression before comma evaluates to a function which is missing an argument list /w14546 # function call before comma missing argument list /w14547 # 'operator': operator before comma has no effect; expected operator with side-effect /w14549 # 'operator': operator before comma has no effect; did you intend 'operator'? /w14555 # expression has no effect; expected expression with side- effect /w14619 # pragma warning: there is no warning number 'number' /w14640 # Enable warning on thread un-safe static member initialization /w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior. /w14905 # wide string literal cast to 'LPSTR' /w14906 # string literal cast to 'LPWSTR' /w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied /permissive- # standards conformance mode for MSVC compiler. ) set(CLANG_WARNINGS -Wall -Wextra # reasonable and standard -Wshadow # warn the user if a variable declaration shadows one from a parent context -Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps # catch hard to track down memory errors -Wold-style-cast # warn for c-style casts -Wcast-align # warn for potential performance problem casts -Wunused # warn on anything being unused -Woverloaded-virtual # warn if you overload (not override) a virtual function -Wpedantic # warn if non-standard C++ is used -Wconversion # warn on type conversions that may lose data -Wsign-conversion # warn on sign conversions -Wnull-dereference # warn if a null dereference is detected -Wdouble-promotion # warn if float is implicit promoted to double -Wformat=2 # warn on security issues around functions that format output (ie printf) ) if(WARNINGS_AS_ERRORS) set(CLANG_WARNINGS ${CLANG_WARNINGS} -Werror) set(MSVC_WARNINGS ${MSVC_WARNINGS} /WX) endif() set(GCC_WARNINGS ${CLANG_WARNINGS} -Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist -Wduplicated-cond # warn if if / else chain has duplicated conditions -Wduplicated-branches # warn if if / else branches have duplicated code -Wlogical-op # warn about logical operations being used where bitwise were probably wanted -Wuseless-cast # warn if you perform a cast to the same type ) if(MSVC) set(PROJECT_WARNINGS ${MSVC_WARNINGS}) elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") set(PROJECT_WARNINGS ${CLANG_WARNINGS}) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(PROJECT_WARNINGS ${GCC_WARNINGS}) else() message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.") endif() target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS}) endfunction() ================================================ FILE: cmake/Sanitizers.cmake ================================================ function(enable_sanitizers project_name) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE) if(ENABLE_COVERAGE) target_compile_options(${project_name} INTERFACE --coverage -O0 -g) target_link_libraries(${project_name} INTERFACE --coverage) endif() set(SANITIZERS "") option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE) if(ENABLE_SANITIZER_ADDRESS) list(APPEND SANITIZERS "address") endif() option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE) if(ENABLE_SANITIZER_LEAK) list(APPEND SANITIZERS "leak") endif() option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR "Enable undefined behavior sanitizer" FALSE) if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR) list(APPEND SANITIZERS "undefined") endif() option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE) if(ENABLE_SANITIZER_THREAD) if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS) message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled") else() list(APPEND SANITIZERS "thread") endif() endif() option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE) if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") if("address" IN_LIST SANITIZERS OR "thread" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS) message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled") else() list(APPEND SANITIZERS "memory") endif() endif() list( JOIN SANITIZERS "," LIST_OF_SANITIZERS) endif() if(LIST_OF_SANITIZERS) if(NOT "${LIST_OF_SANITIZERS}" STREQUAL "") target_compile_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) target_link_libraries(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) endif() endif() endfunction() ================================================ FILE: cmake/StandardProjectSettings.cmake ================================================ # Set a default build type if none was specified if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) # Set the possible values of build type for cmake-gui, ccmake set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() # Generate compile_commands.json to make it easier to work with clang based tools set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(ENABLE_IPO "Enable Interprocedural Optimization, aka Link Time Optimization (LTO)" OFF) if(ENABLE_IPO) include(CheckIPOSupported) check_ipo_supported( RESULT result OUTPUT output) if(result) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) else() message(SEND_ERROR "IPO is not supported: ${output}") endif() endif() ================================================ FILE: cmake/StaticAnalyzers.cmake ================================================ option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF) option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF) option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF) if(ENABLE_CPPCHECK) find_program(CPPCHECK cppcheck) if(CPPCHECK) set(CMAKE_CXX_CPPCHECK ${CPPCHECK} --suppress=missingInclude --enable=all --inline-suppr --inconclusive -i ${CMAKE_SOURCE_DIR}/imgui/lib) else() message(SEND_ERROR "cppcheck requested but executable not found") endif() endif() if(ENABLE_CLANG_TIDY) find_program(CLANGTIDY clang-tidy) if(CLANGTIDY) set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY} -extra-arg=-Wno-unknown-warning-option) else() message(SEND_ERROR "clang-tidy requested but executable not found") endif() endif() if(ENABLE_INCLUDE_WHAT_YOU_USE) find_program(INCLUDE_WHAT_YOU_USE include-what-you-use) if(INCLUDE_WHAT_YOU_USE) set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE}) else() message(SEND_ERROR "include-what-you-use requested but executable not found") endif() endif() ================================================ FILE: data/appdata/org.flameshot.Flameshot.metainfo.xml ================================================ org.flameshot.Flameshot CC0-1.0 GPL-3.0-or-later Flameshot flameshot Flameshot Developers touch keyboard pointing Take and annotate screenshots

Powerful and simple to use screenshot software with built-in editor with advanced features.

Features:

  • Customizable appearance
  • Very easy to use
  • In-app screenshot editing and annotation
  • DBus interface
  • Upload to Imgur
https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/large_demo.png Flameshot Usage https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/small_demo.png Demo of Pixelation, Arrow, Box, And Counter Bubble https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/launcher.png The Launcher Window https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/config_interface.png Configuration Window - Interface tab https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/config_shortcuts.png Configuration Window - Shortcuts tab https://github.com/flameshot-org/flameshot https://github.com/flameshot-org/flameshot/issues https://hosted.weblate.org/projects/flameshot/ https://github.com/flameshot-org/flameshot/blob/master/docs/CONTRIBUTING.md https://github.com/flameshot-org/flameshot/ https://github.com/flameshot-org/flameshot/issues/new org.flameshot.Flameshot.desktop #d6a8e3 #5c0075 Utility Graphics
================================================ FILE: data/dbus/org.flameshot.Flameshot.service.in ================================================ [D-BUS Service] Name=org.flameshot.Flameshot Exec=${CMAKE_INSTALL_FULL_BINDIR}/flameshot ================================================ FILE: data/dbus/org.flameshot.Flameshot.xml ================================================ ================================================ FILE: data/dbus/org.freedesktop.Notifications.xml ================================================ ================================================ FILE: data/desktopEntry/package/org.flameshot.Flameshot.desktop ================================================ [Desktop Entry] Name=Flameshot Name[zh_CN]=火焰截图 GenericName=Screenshot tool GenericName[zh_CN]=屏幕截图工具 GenericName[pl]=Zrzuty ekranu GenericName[fr]=Outil de capture d'écran GenericName[nl]=Schermfotoprogramma GenericName[nl_NL]=Schermfotoprogramma GenericName[ja]=スクリーンショットツール GenericName[ru]=Создание скриншотов GenericName[sk]=Nástroj na zachytávanie obrazovky GenericName[sr]=Снимач екрана GenericName[uk]=Інструмент скриншотів GenericName[es]=Herramienta de captura de pantalla GenericName[pt_BR]=Ferramenta de captura de tela Comment=Powerful yet simple to use screenshot software. Comment[zh_CN]=强大又易用的屏幕截图软件 Comment[pl]=Proste w użyciu narzędzie do zrzutów ekranu Comment[fr]=Logiciel de capture d'écran puissant et simple d'utilisation. Comment[nl]=Een eenvoudig doch krachtig schermfotoprogramma. Comment[nl_NL]=Een eenvoudig doch krachtig schermfotoprogramma. Comment[ja]=パワフルで使いやすいスクリーンショットソフトウェア。 Comment[ru]=Простой и функциональный инструмент для создания скриншотов Comment[sk]=Mocný, no zároveň jednoduchý softvér na zachytávanie obrazovky. Comment[sr]=Једноставан, а моћан алат за снимање екрана Comment[uk]=Потужний простий у використанні додаток для створення знімків екрану. Comment[es]=Software de captura de pantalla potente y fácil de usar. Comment[de]=Schlichte, leistungsstarke Screenshot-Software Comment[pt_BR]=Software de captura de tela poderoso, mas simples de usar. Keywords=flameshot;screenshot;capture;shutter; Keywords[zh_CN]=flameshot;screenshot;capture;shutter;截图;屏幕; Keywords[fr]=flameshot;capture d'écran;capter;shutter; Keywords[ja]=flameshot;screenshot;capture;shutter;スクリーンショット;キャプチャー; Keywords[nl]=flameshot;schermfoto;screenshot;schermafdruk;vastleggen;schermopname; Keywords[nl_NL]=flameshot;schermfoto;screenshot;schermafdruk;vastleggen;schermopname; Keywords[es]=flameshot;screenshot;capture;shutter;captura; Keywords[de]=flameshot;screenshot;Bildschirmfoto;Aufnahme; Keywords[pt_BR]=flameshot;screenshot;captura de tela;captura;shutter; Exec=@LAUNCHER_EXECUTABLE@ Icon=org.flameshot.Flameshot Terminal=false Type=Application Categories=Graphics; StartupNotify=false StartupWMClass=flameshot Actions=Configure;Capture;Launcher; X-DBUS-StartupType=Unique X-DBUS-ServiceName=org.flameshot.Flameshot X-KDE-DBUS-Restricted-Interfaces=org.kde.kwin.Screenshot,org.kde.KWin.ScreenShot2 [Desktop Action Configure] Name=Configure Name[zh_CN]=配置 Name[pl]=Konfiguruj Name[fr]=Configurer Name[ja]=設定 Name[ru]=Настройки Name[sk]=Nastaviť Name[nl]=Instellen Name[nl_NL]=Instellen Name[sr]=Подешавања Name[uk]=Налаштувати Name[es]=Configurar Name[de]=Einstellungen Name[pt_BR]=Configurar Exec=flameshot config [Desktop Action Capture] Name=Take screenshot Name[zh_CN]=进行截图 Name[pl]=Zrzut ekranu Name[fr]=Prendre une capture d'écran Name[ja]=スクリーンショットを撮る Name[ru]=Сделать скриншот Name[sk]=Zachytiť obrazovku Name[sr]=Сними екран Name[uk]=Зробити знімок Name[nl]=Schermfoto maken Name[nl_NL]=Schermfoto maken Name[es]=Tomar captura de pantalla Name[de]=Bildschirmfoto aufnehmen Name[pt_BR]=Capturar tela Exec=flameshot gui --delay 500 [Desktop Action Launcher] Name=Open launcher Name[de]=Starter öffnen Name[nl]=Starter openen Name[nl_NL]=Starter openen Name[sk]=Otvoriť spúšťač Name[zh_CN]=打开启动器 Name[pt_BR]=Abrir lançador Exec=flameshot launcher ================================================ FILE: data/flameshot.rc ================================================ #pragma code_page(65001) // UTF-8 IDI_ICON1 ICON "img\\app\\flameshot.ico" #include #define VER_FILEVERSION FLAMESHOT_VERSION_MAJOR,FLAMESHOT_VERSION_MINOR,FLAMESHOT_VERSION_BUGFIX,FLAMESHOT_VERSION_BUILD #define VER_FILEVERSION_STR FLAMESHOT_VERSION_STRING #define VER_PRODUCTVERSION FLAMESHOT_VERSION_MAJOR,FLAMESHOT_VERSION_MINOR,FLAMESHOT_VERSION_BUGFIX,FLAMESHOT_VERSION_BUILD #define VER_PRODUCTVERSION_STR FLAMESHOT_VERSION_STRING #ifndef DEBUG #define VER_DEBUG 0 #else #define VER_DEBUG VS_FF_DEBUG #endif VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION FILEFLAGSMASK VER_DEBUG FILEFLAGS VER_DEBUG FILEOS VOS__WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "The flameshot Org." VALUE "FileDescription", "Flameshot" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "flameshot" VALUE "LegalCopyright", "Copyright (C) 2017-2020 flameshot.org" VALUE "OriginalFilename", "flameshot.exe" VALUE "ProductName", "Flameshot" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0x04b0 /* U.S. English (Unicode) */ END END ================================================ FILE: data/graphics.qrc ================================================ img/app/org.flameshot.Flameshot.svg img/app/flameshot.svg img/app/org.flameshot.Flameshot.png img/app/flameshot.png img/app/flameshot.mask.png img/app/flameshot.mask.svg img/app/flameshot.monochrome.png img/app/flameshot.monochrome.svg img/app/keyboard.svg img/material/black/accept.svg img/material/black/arrow-bottom-left.svg img/material/black/centeralign.svg img/material/black/circle-outline.svg img/material/black/close.svg img/material/black/cloud-upload.svg img/material/black/colorize.svg img/material/black/config.svg img/material/black/content-copy.svg img/material/black/content-save.svg img/material/black/cursor-move.svg img/material/black/delete.svg img/material/black/exit-to-app.svg img/material/black/format-text.svg img/material/black/format_bold.svg img/material/black/format_italic.svg img/material/black/format_strikethrough.svg img/material/black/format_underlined.svg img/material/black/graphics.svg img/material/black/leftalign.svg img/material/black/line.svg img/material/black/marker.svg img/material/black/mouse-off.svg img/material/black/mouse.svg img/material/black/name_edition.svg img/material/black/open_with.svg img/material/black/pencil.svg img/material/black/pin.svg img/material/black/pixelate.svg img/material/black/redo-variant.svg img/material/black/rightalign.svg img/material/black/size_indicator.svg img/material/black/square-outline.svg img/material/black/square.svg img/material/black/text.svg img/material/black/undo-variant.svg img/material/black/circlecount-outline.svg img/material/black/filepath.svg img/material/black/invert.svg img/material/black/minus.svg img/material/black/plus.svg img/material/black/shortcut.svg img/material/white/accept.svg img/material/white/arrow-bottom-left.svg img/material/white/centeralign.svg img/material/white/circle-outline.svg img/material/white/circlecount-outline.svg img/material/white/close.svg img/material/white/cloud-upload.svg img/material/white/colorize.svg img/material/white/config.svg img/material/white/content-copy.svg img/material/white/content-save.svg img/material/white/cursor-move.svg img/material/white/exit-to-app.svg img/material/white/filepath.svg img/material/white/format-text.svg img/material/white/format_bold.svg img/material/white/format_italic.svg img/material/white/format_strikethrough.svg img/material/white/format_underlined.svg img/material/white/graphics.svg img/material/white/invert.svg img/material/white/leftalign.svg img/material/white/line.svg img/material/white/marker.svg img/material/white/minus.svg img/material/white/mouse-off.svg img/material/white/mouse.svg img/material/white/name_edition.svg img/material/white/open_with.svg img/material/white/pencil.svg img/material/white/pin.svg img/material/white/pixelate.svg img/material/white/plus.svg img/material/white/redo-variant.svg img/material/white/rightalign.svg img/material/white/shortcut.svg img/material/white/size_indicator.svg img/material/white/square-outline.svg img/material/white/square.svg img/material/white/text.svg img/material/white/undo-variant.svg img/material/black/move_down.svg img/material/black/move_up.svg img/material/white/move_down.svg img/material/white/move_up.svg img/material/white/delete.svg img/material/black/apps.svg img/material/black/image.svg img/material/white/apps.svg img/material/white/image.svg ================================================ FILE: data/img/app/flameshotLogoLicense.txt ================================================ Free Art License 1.3 [ Copyleft Attitude ] Free Art License 1.3 (FAL 1.3) Preamble The Free Art License grants the right to freely copy, distribute, and transform creative works without infringing the author's rights. The Free Art License recognizes and protects these rights. Their implementation has been reformulated in order to allow everyone to use creations of the human mind in a creative manner, regardless of their types and ways of expression. While the public's access to creations of the human mind usually is restricted by the implementation of copyright law, it is favoured by the Free Art License. This license intends to allow the use of a work’s resources; to establish new conditions for creating in order to increase creation opportunities. The Free Art License grants the right to use a work, and acknowledges the right holder’s and the user’s rights and responsibility. The invention and development of digital technologies, Internet and Free Software have changed creation methods: creations of the human mind can obviously be distributed, exchanged, and transformed. They allow to produce common works to which everyone can contribute to the benefit of all. The main rationale for this Free Art License is to promote and protect these creations of the human mind according to the principles of copyleft: freedom to use, copy, distribute, transform, and prohibition of exclusive appropriation. Definitions “work” either means the initial work, the subsequent works or the common work as defined hereafter: “common work” means a work composed of the initial work and all subsequent contributions to it (originals and copies). The initial author is the one who, by choosing this license, defines the conditions under which contributions are made. “Initial work” means the work created by the initiator of the common work (as defined above), the copies of which can be modified by whoever wants to “Subsequent works” means the contributions made by authors who participate in the evolution of the common work by exercising the rights to reproduce, distribute, and modify that are granted by the license. “Originals” (sources or resources of the work) means all copies of either the initial work or any subsequent work mentioning a date and used by their author(s) as references for any subsequent updates, interpretations, copies or reproductions. “Copy” means any reproduction of an original as defined by this license. 1. OBJECT The aim of this license is to define the conditions under which one can use this work freely. 2. SCOPE This work is subject to copyright law. Through this license its author specifies the extent to which you can copy, distribute, and modify it. 2.1 FREEDOM TO COPY (OR TO MAKE REPRODUCTIONS) You have the right to copy this work for yourself, your friends or any other person, whatever the technique used. 2.2 FREEDOM TO DISTRIBUTE, TO PERFORM IN PUBLIC You have the right to distribute copies of this work; whether modified or not, whatever the medium and the place, with or without any charge, provided that you: attach this license without any modification to the copies of this work or indicate precisely where the license can be found, specify to the recipient the names of the author(s) of the originals, including yours if you have modified the work, specify to the recipient where to access the originals (either initial or subsequent). The authors of the originals may, if they wish to, give you the right to distribute the originals under the same conditions as the copies. 2.3 FREEDOM TO MODIFY You have the right to modify copies of the originals (whether initial or subsequent) provided you comply with the following conditions: all conditions in article 2.2 above, if you distribute modified copies; indicate that the work has been modified and, if it is possible, what kind of modifications have been made; distribute the subsequent work under the same license or any compatible license. The author(s) of the original work may give you the right to modify it under the same conditions as the copies. 3. RELATED RIGHTS Activities giving rise to author’s rights and related rights shall not challenge the rights granted by this license. For example, this is the reason why performances must be subject to the same license or a compatible license. Similarly, integrating the work in a database, a compilation or an anthology shall not prevent anyone from using the work under the same conditions as those defined in this license. 4. INCORPORATION OF THE WORK Incorporating this work into a larger work that is not subject to the Free Art License shall not challenge the rights granted by this license. If the work can no longer be accessed apart from the larger work in which it is incorporated, then incorporation shall only be allowed under the condition that the larger work is subject either to the Free Art License or a compatible license. 5. COMPATIBILITY A license is compatible with the Free Art License provided: it gives the right to copy, distribute, and modify copies of the work including for commercial purposes and without any other restrictions than those required by the respect of the other compatibility criteria; it ensures proper attribution of the work to its authors and access to previous versions of the work when possible; it recognizes the Free Art License as compatible (reciprocity); it requires that changes made to the work be subject to the same license or to a license which also meets these compatibility criteria. 6. YOUR INTELLECTUAL RIGHTS This license does not aim at denying your author's rights in your contribution or any related right. By choosing to contribute to the development of this common work, you only agree to grant others the same rights with regard to your contribution as those you were granted by this license. Conferring these rights does not mean you have to give up your intellectual rights. 7. YOUR RESPONSIBILITIES The freedom to use the work as defined by the Free Art License (right to copy, distribute, modify) implies that everyone is responsible for their own actions. 8. DURATION OF THE LICENSE This license takes effect as of your acceptance of its terms. The act of copying, distributing, or modifying the work constitutes a tacit agreement. This license will remain in effect for as long as the copyright which is attached to the work. If you do not respect the terms of this license, you automatically lose the rights that it confers. If the legal status or legislation to which you are subject makes it impossible for you to respect the terms of this license, you may not make use of the rights which it confers. 9. VARIOUS VERSIONS OF THE LICENSE This license may undergo periodic modifications to incorporate improvements by its authors (instigators of the “Copyleft Attitude” movement) by way of new, numbered versions. You will always have the choice of accepting the terms contained in the version under which the copy of the work was distributed to you, or alternatively, to use the provisions of one of the subsequent versions. 10. SUB-LICENSING Sub-licenses are not authorized by this license. Any person wishing to make use of the rights that it confers will be directly bound to the authors of the common work. 11. LEGAL FRAMEWORK This license is written with respect to both French law and the Berne Convention for the Protection of Literary and Artistic Works. USER GUIDE - How to use the Free Art License? To benefit from the Free Art License, you only need to mention the following elements on your work: [Name of the author, title, date of the work. When applicable, names of authors of the common work and, if possible, where to find the originals]. Copyleft: This is a free work, you can copy, distribute, and modify it under the terms of the Free Art License http://artlibre.org/licence/lal/en/ - Why to use the Free Art License? 1.To give the greatest number of people access to your work. 2.To allow it to be distributed freely. 3.To allow it to evolve by allowing its copy, distribution, and transformation by others. 4.So that you benefit from the resources of a work when it is under the Free Art License: to be able to copy, distribute or transform it freely. 5.But also, because the Free Art License offers a legal framework to disallow any misappropriation. It is forbidden to take hold of your work and bypass the creative process for one's exclusive possession. - When to use the Free Art License? Any time you want to benefit and make others benefit from the right to copy, distribute and transform creative works without any exclusive appropriation, you should use the Free Art License. You can for example use it for scientific, artistic or educational projects. - What kinds of works can be subject to the Free Art License? The Free Art License can be applied to digital as well as physical works. You can choose to apply the Free Art License on any text, picture, sound, gesture, or whatever sort of stuff on which you have sufficient author's rights. - Historical background of this license: It is the result of observing, using and creating digital technologies, free software, the Internet and art. It arose from the “Copyleft Attitude” meetings which took place in Paris in 2000. For the first time, these meetings brought together members of the Free Software community, artists, and members of the art world. The goal was to adapt the principles of Copyleft and free software to all sorts of creations. http://www.artlibre.org Copyleft Attitude, 2007. You can make reproductions and distribute this license verbatim (without any changes). Translation : Jonathan Clarke, Benjamin Jean, Griselda Jung, Fanny Mourguet, Antoine Pitrou. Thanks to framalang.org ================================================ FILE: data/img/material/LICENSE.txt ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: data/img/material/README.md ================================================ Google Material Design Icons are licensed under Apache License 2.0 (see LICENSE.txt) ================================================ FILE: data/man/man1/flameshot.1 ================================================ .\" Hey, EMACS: -*- nroff -*- .\" (C) Copyright 2018 Boyuan Yang <073plan@gmail.com>, .\" This file is released under CC0 1.0 Universal (CC0-1.0) license. .\" .TH "FLAMESHOT" "1" "2021-11-11" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME Flameshot \- Powerful yet simple-to-use screenshot software .SH SYNOPSIS .B flameshot [subcommands] [arguments] .br .B flameshot gui [gui arguments] .br .B flameshot screen [screen arguments] .br .B flameshot full [fullscreen arguments] .br .B flameshot config [config arguments] .br .B flameshot launcher .br . .\"---------------------------------------------------------------------------- .SH DESCRIPTION This manual page documents briefly the .B flameshot command as provided by .B flameshot package. .PP \fBflameshot\fP is a screenshot tool that aims to be powerful yet simple-to-use. Its notable features include customizable appearance, in-app screenshot editing, D-Bus interface, tray icon support, experimental GNOME/KDE Wayland support, integration with Imgur and support for both GUI and CLI interface. .PP Besides the usage information about \fBflameshot\fR in this manpage, you can find similar information using \fBflameshot --help\fR. Same \fB--help\fR can be used for each subcommand as well to get the valid arguments for them. The detailed usage of \fBflameshot\fP is documented in the \fIREADME.md\fR file on the project's Git repository page: https://github.com/flameshot-org/flameshot . .\"---------------------------------------------------------------------------- .SH "SUBCOMMANDS" .PP Per default without subcommands, \fBflameshot\fR runs the Flameshot in the background and adds a tray icon for configuration. Note that it will not take a screenshot unless you define one of the modes though the subcommands. There are various subcommands that can be used to use flameshot in different modes: . .TP .B gui Running Flameshot in \fBgui\fR mode would let the user to select the region from which the screenshot should be taken and then allow them to annotate the screenshot. . .TP .B full Takes screenshot of all monitors at the same time . .TP .B screen Takes screenshot of the specified monitor. . .TP .SH launcher Does not accept any arguments, it will just opens the launcher window . .TP .SH config If no argument is provided, it will open the config window, otherwise it can change the configurations based on the provided arguments. . .\"---------------------------------------------------------------------------- .SH "ARGUMENTS" .PP Here we list all the arguments available for all subcommands. The subcommands that accept each argument are listed after each argument. Alternatively, you can use the \fBflameshot [subcommand] --help\fR to know the list of available arguments for each subcommand. . .PP \-s, \-\-accept-on-select .RS 4 Accept capture as soon as a selection is made .br Valid for subcommands: gui .RE . .PP \-a, \-\-autostart .RS 4 Enable or disable run at startup .br Valid for subcommands: config .RE . .PP \-\-check .RS 4 Check the configuration for errors. This is useful if you manually change the config file and want to make sure it does not contain errors. .br Valid for subcommands: config .RE . .PP \-c, \-\-clipboard .RS 4 Save the capture to the clipboard .br Valid for subcommands: full, gui, screen .RE . .PP \-k, \-\-contrastcolor .RS 4 Define the contrast UI color .br Valid for subcommands: config .RE . .PP \-d, \-\-delay .RS 4 How many milliseconds should Flameshot wait before taking the screenshot .br Valid for subcommands: full, gui, screen .RE . .PP \-e, \-\-edit .RS 4 Interactively select and edit the screenshot region .br Valid for subcommands: screen .RE . .PP \-f, \-\-filename .RS 4 Set the filename pattern .br Valid for subcommands: config .RE . .PP \-h, \-\-help .RS 4 Show a brief help message and list the arguments the valid arguments for that subcommand .br Valid for subcommands: config, full, gui, launcher, screen .RE . .PP \-\-last-region .RS 4 Repeat screenshot with previously selected region .br Valid for subcommands: gui .RE . .PP \-m, \-\-maincolor .RS 4 Define the main UI color .br Valid for subcommands: config .RE . .PP \-n, \-\-notifications .RS 4 Enable or disable the notifications .br Valid for subcommands: config .RE . .PP \-n, \-\-number .RS 4 Define the screen to capture (starting from 0), default: screen containing the cursor .br Valid for subcommands: screen .RE . .PP \-p, \-\-path .RS 4 Existing directory or new file to save to .br Valid for subcommands: full, gui, screen .RE . .PP \-\-pin .RS 4 Pin the capture to the screen .br Valid for subcommands: gui, screen .RE . .PP \-g, \-\-print-geometry .RS 4 Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified .br Valid for subcommands: gui .RE . .PP \-r, \-\-raw .RS 4 Send raw PNG to stdout .br Valid for subcommands: full, gui, screen .RE . .PP \-\-region .RS 4 Screenshot region to select .br Valid for subcommands: gui, screen .RE . .PP \-s, \-\-showhelp .RS 4 Show the help message in the capture mode .br Valid for subcommands: config .RE . .PP \-t, \-\-trayicon .RS 4 Enable or disable the trayicon .br Valid for subcommands: config .RE . .\"---------------------------------------------------------------------------- .SH "EXAMPLE USAGE" .PP This section lists some of the most common usage of \fBflameshot\fR via command line. . .TP .B flameshot Start flameshot and have it running in background. If enabled, an icon will appear in the tray area of current desktop environment. . .TP .B flameshot gui Capture with GUI. . .TP \fBflameshot gui\fR \-p /path/to/captures Capture with GUI and custom save path. . .TP \fBflameshot gui\fR \-d 2000 Open GUI with a delay of 2 seconds. . .TP .B flameshot launcher Open a launcher dialog for advanced screenshot, such as custom time delay, etc. . .TP .B flameshot full \-\-help Shows help for \fBflameshot full\fR subcommand. . .TP \fBflameshot full\fR -p /path/to/captures -d 5000 Fullscreen capture with custom save path (no GUI) and time delay. . .TP \fBflameshot full\fR -c -p /path/to/captures Fullscreen capture with custom savepath copying to clipboard. . .TP \fBflameshot screen\fR \-\-number Define the screen to capture. Will capture the screen containing the cursor by default. . .TP \fBflameshot screen\fR \-\-help Shows help for \fBflameshot screen\fR subcommand. . .\"---------------------------------------------------------------------------- .SH RETURN VALUE Returns 0 on normal exit, 2 on screenshot aborted, 3 on dbus connection lost, 130 on SIGINT received, 143 on SIGTERM received. . .\"---------------------------------------------------------------------------- .SH SEE ALSO .PP You may also find more detailed online documentation on upstream project homepage. . .HP Upstream project homepage: .br • \m[blue]\fBhttps://flameshot.org\fR\m[] .br • \m[blue]\fBhttps://github.com/flameshot-org/flameshot\fR\m[] . .\"---------------------------------------------------------------------------- .SH "AUTHOR" .PP .ad l .B Flameshot was initially written by .MT izhe@\:hotmail.es lupoDharkael .ME and is currently maintained by Jeremy Borgman, .MT byang@\:debian.org Boyuan Yang .ME , Haris Gušić, Ahmed Zetao Yang, Mehrad Mahmoudian, and Martin Eckleben (ordered based on number of contributions on the date of writing this manpage). .br The following URL gives you a more complete list of contributors: .RS \m[blue]\fBhttps://github.com/flameshot-org/flameshot/graphs/contributors\fR\m[]\&. .RE . .\"---------------------------------------------------------------------------- .SH "LICENSE" .nh .PP • The main code is licensed under GPLv3 .br • The logo of Flameshot is licensed under Free Art License v1.3 .br • The button icons are licensed under Apache License 2.0. See: \m[blue]\fBhttps://github.com/google/material-design-icons\fR\m[] .br • The code at capture/capturewidget.cpp is based on \m[blue]\fBhttps://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.cpp\fR\m[] (GPLv2) .br • The code at capture/capturewidget.h is based on \m[blue]\fBhttps://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.h\fR\m[] (GPLv2) .br • Few lines of code from KSnapshot regiongrabber.cpp SVN revision 796531 (LGPL) .br • Qt-Color-Widgets taken and modified from \m[blue]\fBhttps://github.com/mbasaglia/Qt-Color-Widgets\fR\m[] (see their license and exceptions in the project) (LGPL/GPL) ================================================ FILE: data/shell-completion/flameshot.bash ================================================ #compdef flameshot # Shell completion for flameshot command # To be installed in "/usr/share/bash-completion/completions/flameshot" # and "/usr/share/zsh/site-functions/" _flameshot() { local prev cur cmd gui_opts full_opts config_opts COMPREPLY=() prev="${COMP_WORDS[COMP_CWORD-1]}" cur="${COMP_WORDS[COMP_CWORD]}" cmd="gui full config launcher screen" screen_opts="--number -n --edit -e --path -p --clipboard -c --delay -d --region --raw -r --pin --help" gui_opts="--path -p --clipboard -c --delay -d --region --last-region --raw -r --print-geometry -g --pin --accept-on-select -s --help" full_opts="--path -p --clipboard -c --delay -d --raw -r --help" config_opts="--autostart -a --filename -f --notifications -n --trayicon -t --showhelp -s --maincolor -m --contrastcolor -k --check" case "${prev}" in launcher) return 0 ;; screen) COMPREPLY=( $(compgen -W "$screen_opts --help -h" -- "${cur}") ) return 0 ;; gui) COMPREPLY=( $(compgen -W "$gui_opts --help -h" -- "${cur}") ) return 0 ;; full) COMPREPLY=( $(compgen -W "$full_opts --help -h" -- "${cur}") ) return 0 ;; config) COMPREPLY=( $(compgen -W "$config_opts --help -h" -- "${cur}") ) return 0 ;; -f|--filename|-p|--path) _filedir -d return 0 ;; # TODO: We should see how we can add the -n (for `config --notifications`) here that does not conflict with -n (for `screen --number`) -a|--autostart|-s|--showhelp|-t|--trayicon|--notifications) COMPREPLY=( $(compgen -W "true false" -- "${cur}") ) return 0 ;; -d|--delay|-h|--help|-c|--clipboard|--version|-v|--number|-n) return 0 ;; *) ;; esac # Options case "${cur}" in -*) COMPREPLY=( $( compgen -W "--version --help -v -h" -- "${cur}") ) return 0 ;; --*) COMPREPLY=( $( compgen -W "--version --help" -- "${cur}") ) return 0 ;; *) COMPREPLY=( $( compgen -W "${cmd}" -- "${cur}") ) return 0 ;; esac } if [[ -n ${ZSH_VERSION} ]]; then autoload -U bashcompinit bashcompinit fi complete -F _flameshot flameshot ================================================ FILE: data/shell-completion/flameshot.fish ================================================ #################### # HELPER FUNCTIONS # #################### # Complete the subcommand provided as the first argument. # The rest of the arguments are the same as fish's `complete`. The option # '-c flameshot' is implicit. function __flameshot_complete --argument-names cmd set -l conditions "__fish_seen_subcommand_from $cmd" argparse -i "n/condition=" -- $argv[2..] [ -n "$_flag_n" ] && set -l conditions "$conditions && $_flag_n" complete -c flameshot $argv -n "$conditions" end # Return success if the command line contains no positional arguments function __flameshot_no_positional_args set -l -- args (commandline -po) # cmdline broken up into list set -l -- cmdline (commandline -p) # single string set -l -- n (count $args) # number of cmdline tokens for i in (seq 2 $n) set -l arg $args[$i] [ -z "$arg" ] && continue # can be caused by '--' argument # If the the last token is a positional argument and there is no # trailing space, we ignore it [ "$i" = "$n" ] && [ (string sub -s -1 "$cmdline") != ' ' ] && break if string match -rvq '^-' -- "$arg" # doesn't start with - return 1 end end # contains a '--' argument string match -r -- '\s--\s' "$cmdline" && return 1 return 0 end # Complete paths matching $argv function __flameshot_complete_paths complete -C"nOnExIsTeNtCoMmAndZIOAGA2329jdbfaFkahDf21234h8z43 $argv" end # Complete the region option function __flameshot_complete_region --argument subcommand if [ "$subcommand" = "screen" ] echo all\tCapture entire screen else echo all\tCapture all screens echo screen0\tCapture screen 0 echo screen1\tCapture screen 1 echo screen2\tCapture screen 2 echo screen3\tCapture screen 3 end echo WxH+X+Y\tCustom region in pixels end # Complete screen numbers function __flameshot_complete_screen_number echo 0\tScreen 0 echo 1\tScreen 1 echo 2\tScreen 2 echo 3\tScreen 3 end ############### # COMPLETIONS # ############### # define the subcommands set -l SUBCOMMANDS gui screen full launcher config # No subcommand complete -c flameshot --no-files --arguments "$SUBCOMMANDS" --condition __flameshot_no_positional_args complete -c flameshot --long-option "help" --short-option "h" --description "Display help message" --no-files complete -c flameshot --long-option "version" --short-option "v" --description "Display version information" --no-files --condition __flameshot_no_positional_args # GUI subcommand __flameshot_complete gui --no-files __flameshot_complete gui --long-option "path" --short-option "p" --description "Output file or directory" --require-parameter __flameshot_complete gui --long-option "clipboard" --short-option "c" --description "Copy screenshot to the clipboard" --no-files __flameshot_complete gui --long-option "delay" --short-option "d" --description "Delay time in milliseconds" --require-parameter --no-files __flameshot_complete gui --long-option "region" --description "Screenshot region to select (WxH+X+Y)" --require-parameter --arguments "(__flameshot_complete_region gui)" __flameshot_complete gui --long-option "last-region" --description "Repeat screenshot with previously selected region" --no-files __flameshot_complete gui --long-option "raw" --short-option "r" --description "Print raw PNG capture" --no-files __flameshot_complete gui --long-option "print-geometry" --short-option "g" --description "Print geometry of the selection" --no-files __flameshot_complete gui --long-option "pin" --description "Pin the screenshot to the screen" --no-files __flameshot_complete gui --long-option "accept-on-select" --short-option "s" --description "Accept capture as soon as a selection is made" --no-files __flameshot_complete gui --long-option "help" --short-option "h" --description "Show the available arguments" --no-files # SCREEN subcommand __flameshot_complete screen --no-files __flameshot_complete screen --long-option "number" --short-option "n" --description "Screen number (starting from 0)" --require-parameter --no-files --arguments "(__flameshot_complete_screen_number)" __flameshot_complete screen --long-option "edit" --short-option "e" --description "Interactively select and edit the screenshot region" --no-files __flameshot_complete screen --long-option "path" --short-option "p" --description "Output file or directory" --require-parameter __flameshot_complete screen --long-option "clipboard" --short-option "c" --description "Copy screenshot to the clipboard" --no-files __flameshot_complete screen --long-option "delay" --short-option "d" --description "Delay time in milliseconds" --require-parameter --no-files __flameshot_complete screen --long-option "region" --description "Screenshot region to select (WxH+X+Y)" --require-parameter --no-files --arguments "(__flameshot_complete_region screen)" __flameshot_complete screen --long-option "raw" --short-option "r" --description "Print raw PNG capture" --no-files __flameshot_complete screen --long-option "pin" --description "Pin the screenshot to the screen" --no-files __flameshot_complete screen --long-option "help" --short-option "h" --description "Show the available arguments" --no-files # FULL command __flameshot_complete full --no-files __flameshot_complete full --long-option "path" --short-option "p" --description "Output file or directory" --require-parameter __flameshot_complete full --long-option "clipboard" --short-option "c" --description "Copy screenshot to the clipboard" --no-files __flameshot_complete full --long-option "delay" --short-option "d" --description "Delay time in milliseconds" --require-parameter --no-files __flameshot_complete full --long-option "raw" --short-option "r" --description "Print raw PNG capture" --no-files __flameshot_complete full --long-option "help" --short-option "h" --description "Show the available arguments" --no-files # LAUNCHER command __flameshot_complete launcher --no-files # CONFIG command __flameshot_complete config --no-files __flameshot_complete config --long-option "autostart" --short-option "a" --description "Enable or disable run at startup" --require-parameter --no-files --arguments "true false" __flameshot_complete config --long-option "filename" --short-option "f" --description "Set the filename pattern" --require-parameter --no-files __flameshot_complete config --long-option "notification" --short-option "n" --description "Enable or disable the notification" --require-parameter --no-files --arguments "true false" __flameshot_complete config --long-option "trayicon" --short-option "t" --description "Enable or disable the tray icon" --require-parameter --no-files --arguments "true false" __flameshot_complete config --long-option "showhelp" --short-option "s" --description "Show the help message in the capture mode" --require-parameter --no-files --arguments "true false" __flameshot_complete config --long-option "maincolor" --short-option "m" --description "Define the main UI color (hexadecimal)" --require-parameter --no-files __flameshot_complete config --long-option "contrastcolor" --short-option "k" --description "Define the contrast UI color (hexadecimal)" --require-parameter --no-files __flameshot_complete config --long-option "check" --description "Check the configuration for errors" --no-files __flameshot_complete config --long-option "help" --short-option "h" --description "Show the available arguments" --no-files ================================================ FILE: data/shell-completion/flameshot.zsh ================================================ #compdef flameshot # ------------------------------------------------------------------------------ # Description # ----------- # # Completion script for the flameshot command line interface # (https://github.com/flameshot-org/flameshot). # # ------------------------------------------------------------------------------ # How to use # ------- # # Copy this file to /usr/share/zsh/site-functions/_flameshot # # gui _flameshot_gui_opts=( {-p,--path}'[Existing directory or new file to save to]':dir:_files {-c,--clipboard}'[Save the capture to the clipboard]' {-d,--delay}'[Delay time in milliseconds]' "--region[Screenshot region to select ]" "--last-region[Repeat screenshot with previously selected region]" {-r,--raw}'[Print raw PNG capture]' {-g,--print-geometry}'[Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified]' "--pin[Pin the capture to the screen]" {-s,--accept-on-select}'[Accept capture as soon as a selection is made]' {-h,--help}'[Show the available arguments]' ) _flameshot_gui() { _arguments -s : \ "$_flameshot_gui_opts[@]" } # screen _flameshot_screen_opts=( {-n,--number}'[Define the screen to capture (starting from 0). Default: screen containing the cursor]' {-e,--edit}'[Interactively select and edit the screenshot region]' {-p,--path}'[Existing directory or new file to save to]':dir:_files {-c,--clipboard}'[Save the capture to the clipboard]' {-d,--delay}'[Delay time in milliseconds]' "--region[Screenshot region to select ]" {-r,--raw}'[Print raw PNG capture]' "--pin[Pin the capture to the screen]" {-h,--help}'[Show the available arguments]' ) _flameshot_screen() { _arguments -s : \ "$_flameshot_screen_opts[@]" } # full _flameshot_full_opts=( {-p,--path}'[Existing directory or new file to save to]':dir:_files {-c,--clipboard}'[Save the capture to the clipboard]' {-d,--delay}'[Delay time in milliseconds]' {-r,--raw}'[Print raw PNG capture]' {-h,--help}'[Show the available arguments]' ) _flameshot_full() { _arguments -s : \ "$_flameshot_full_opts[@]" } # config _flameshot_config_opts=( {-a,--autostart}'[Enable or disable run at startup (true/false)]' {-f,--filename}'[Set the filename pattern]' {-n,--notification}'[Enable or disable the notification (true/false)]' {-t,--trayicon}'[Enable or disable the tray icon (true/false)]' {-s,--showhelp}'[Show the help message in the capture mode (true/false)]' {-m,--maincolor}'[Define the main UI color (hexadecimal)]' {-k,--contrastcolor}'[Define the contrast UI color (hexadecimal)]' "--check[Check the configuration for errors]" {-h,--help}'[Show the available arguments]' ) _flameshot_config() { _arguments -s : \ "$_flameshot_config_opts[@]" } # Main handle _flameshot() { local curcontext="$curcontext" ret=1 local -a state line commands commands=( "gui:Start the manual capture in GUI mode" "screen:Capture a single screen (one monitor)" "full:Capture the entire desktop (all monitors)" "launcher:Open the capture launcher" "config:Configure Flameshot" ) _arguments -C -s -S -n \ '(- 1 *)'{-v,--version}"[display version information]: :->full" \ '(- 1 *)'{-h,--help}'[[display usage information]: :->full' \ '1:cmd:->cmds' \ '*:: :->args' && ret=0 case "$state" in (cmds) _describe -t commands 'commands' commands ;; (args) local cmd cmd=$words[1] case "$cmd" in (gui) _flameshot_gui && ret=0 ;; (screen) _flameshot_screen && ret=0 ;; (full) _flameshot_full && ret=0 ;; (config) _flameshot_config && ret=0 ;; (*) _default && ret=0 ;; esac ;; (*) ;; esac return ret } _flameshot # # Editor modelines - https://www.wireshark.org/tools/modelines.html # # Local variables: # mode: sh # c-basic-offset: 4 # tab-width: 4 # indent-tabs-mode: nil # End: # # vi: set filetype=zsh shiftwidth=4 tabstop=4 expandtab: # :indentSize=4:tabSize=4:noTabs=true: # ================================================ FILE: data/snap/snapcraft.yaml ================================================ --- name: flameshot adopt-info: flameshot base: core18 summary: Powerful yet simple to use screenshot software description: | A powerful open source screenshot and annotation tool for Linux, Flameshot has a varied set of markup tools available, which include Freehand drawing, Lines, Arrows, Boxes, Circles, Highlighting, Blur. Additionally, you can customise the color, size and/or thickness of many of these image annotation tools. grade: stable # must be 'stable' to release into candidate/stable channels confinement: strict # use 'strict' once you have the right plugs and slots #confinement: devmode # use 'strict' once you have the right plugs and slots architectures: - build-on: amd64 - build-on: i386 apps: flameshot: command: flameshot desktop: usr/share/applications/org.flameshot.Flameshot.desktop extensions: - kde-neon environment: DISABLE_WAYLAND: 1 XDG_DATA_DIRS: $SNAP/share:$XDG_DATA_DIRS QT_QPA_PLATFORMTHEME: gtk3 slots: [dbus-flameshot] plugs: - kde-frameworks-5-plug - home - removable-media - network - network-bind - opengl - pulseaudio - wayland - unity7 - x11 parts: flameshot: build-snaps: - kde-frameworks-5-core18-sdk - kde-frameworks-5-core18 - cmake #core18 does not have new enough cmake so install from snap plugin: cmake configflags: - '-DCMAKE_BUILD_TYPE=RelWithDebInfo' - '-DCMAKE_INSTALL_PREFIX=/usr' - '-DUSE_LAUNCHER_ABSOLUTE_PATH:BOOL=OFF' source: https://github.com/flameshot-org/flameshot.git source-type: git override-pull: | snapcraftctl pull last_committed_tag="$(git tag -l --sort=-v:refname | head -1)" git_revno="$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)" git_hash="$(git rev-parse --short HEAD)" snapcraftctl set-version "${last_committed_tag}+git${git_revno}.${git_hash}" override-build: | snapcraftctl build # Correct the Icon path sed -i 's|^Exec=flameshot|Exec=/snap/bin/org.flameshot.Flameshot|' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/org.flameshot.Flameshot.desktop sed -i 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/org.flameshot.Flameshot.svg|' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/org.flameshot.Flameshot.desktop sed -i 's/^\(Name\(\[.\+\]\)\?=.*\)$/\1 (Snappy Edition)/g' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/org.flameshot.Flameshot.desktop build-packages: - g++ - make - qt5-default - qttools5-dev-tools - libqt5svg5-dev stage-packages: - dbus-x11 - libgtk2.0-0 - openssl - ca-certificates - qtwayland5 - libqt5dbus5 - libqt5network5 - libqt5core5a - libqt5widgets5 - libqt5gui5 - libqt5svg5 - libxkbcommon0 - ttf-ubuntu-font-family - dmz-cursor-theme - light-themes - adwaita-icon-theme - gnome-themes-standard - shared-mime-info - libgdk-pixbuf2.0-0 prime: # libquazip5-1 pulls in Qt5 from bionic as a dependency. We don't # want it in our snap, however, because we get a newer Qt5 from the # kde-kf5 platform snap. - "-usr/lib/x86_64-linux-gnu/libQt5*" - "-usr/lib/x86_64-linux-gnu/libqt5*" slots: # Depending on in which environment we're running we either need # to use the system or session DBus so we also need to have one # slot for each. dbus-flameshot: interface: dbus bus: session name: org.flameshot.Flameshot ================================================ FILE: data/translations/Internationalization_ar.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Unable to launch in terminal. Unable to write in ArrowTool Arrow Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second seconds Take new screenshot Area: Capture Launcher TextLabel Capture Mode Delay: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Mouse Select screenshot area Mouse Wheel Roda del ratolí Change tool size Right Click Clic dret Show color picker Mostra el selector de color Open side panel Esc Exit Surt Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Precisely select color Hold Left Click Toggle magnifier Space or Right Click Cancel Esc Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius URL copied to clipboard. L'URL s'ha copiat al porta-retalls. FlameshotDaemon New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Error Error Unable to read file. Unable to write file. Save File Confirm Reset Are you sure you want to reset the configuration? Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Export Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Save image Unable to open the URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Puja la imatge Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Copia al porta-retalls Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus Powerful yet simple to use screenshot software. See Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Start a manual capture in GUI mode. Configure Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in No es pot escriure a Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Arguments Arguments arguments arguments Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ix de la captura Screenshot history Capture screen Show color picker Mostra el selector de color Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Imposible capturar la pantalla SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. Description Descripció Key Tecla Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Captura &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles New version %1 is available La nova versió %1 ja és disponible &Quit &Surt &Latest Uploads &Últimes càrregues &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty L'historial de captures de pantalla és buit UploadLineItem Form TextLabel Copy URL Copia l'URL Open In Browser Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Editor de color de la interfície Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_bg.ts ================================================ AbstractWidgetList Add New Добавяне Move Up Нагоре Move Down Надолу Remove Премахване AcceptTool Accept Приемане Accept the capture Приемане на заснетото AppLauncher App Launcher Стартиране на приложения Choose an app to open the capture За да отворите снимката, изберете приложение AppLauncherWidget Open With Отваряне с Launch in terminal Отваряне в терминал Keep open after selection Оставяне работещо след избиране Error Грешка Unable to launch in terminal. Грешка при отваряне на терминал. Unable to write in Грешка при записване ArrowTool Arrow Стрелка Set the Arrow as the paint tool Избиране на инструмент „Стрелка“ BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Правоъгълна област Full Screen (Current Display) Целия екран (текущия монитор) Full Screen (All Monitors) Целия екран (всички монитори) No Delay Без изчакване second секунда seconds секунди Take new screenshot Ново заснемане Area: Област: Capture Launcher Започване на заснемане TextLabel Етикет Capture Mode Режим на заснемане Delay: Изчакване: WxH+x+y Ш×В+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Грешка при заснемане на екрана Mouse Мишка Select screenshot area Избиране на заснеманата област Mouse Wheel Колелце на мишката Change tool size Промяна на размера на инструмента Right Click Щракване с десен бутон Show color picker Избиране на цвят Open side panel Отваряне на страничен панел Esc Esc Exit Изход Quit Capture Изход от заснемане Are you sure you want to quit capture? Желаете ли да напуснете заснемането? Do not show this again Без повторно показване Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot загуби фокус. Клавишните комбинации няма да работят докато не щракнете с мишката някъде. Configuration error resolved. Launch `flameshot gui` again to apply it. Грешката в настройките е отстранена. Стартирайте отново `flameshot gui`, за да бъдат приети. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Tool Settings Настройки на инструмента CircleCountTool Circle Counter Номериране Add an autoincrementing counter bubble Добавяне на последователни числа в балонче CircleTool Circle Окръжност Set the Circle as the paint tool Избиране на инструмент „Окръжност“ ColorDialog Select Color Избиране на цвят Saturation Наситеност Hue Оттенък Hex Шестнадесетичен Blue Синьо Value Стойност Green Зелено Alpha Прозрачност Red Червено ColorGrabWidget Accept color Приемане на цвета Enter or Left Click Enter или щракване с ляв бутон Precisely select color Избиране на точен цвят Hold Left Click Задържане на левия бутон Toggle magnifier Превключване на лупата Space or Right Click Интервал или щракване с десен бутон Cancel Отказ Esc Esc ColorPickerEditor Edit Preset: Променяне на елемента: Enter color to update preset Въведете цвят, за да промените елемента Update Обновяване Press button to update the selected preset Натиснете бутона, за да обновите избрания елемент Delete Премахване Press button to delete the selected preset Натиснете бутона, за да премахнете избрания елемент Add Preset: Добавяне на елемент: Enter color manually or select it using the color-wheel Въведете цвят на ръка или изберете от цветния кръг Add Добавяне Press button to add preset Натиснете бутона, за да добавите елемент Error Грешка Unable to add preset. Maximum limit reached. Грешка при добавяне на елемент. Достигнато е ограничението. Unable to remove preset. Minimum limit reached. Грешка при премахване на елемент. Достигнато е ограничението. ConfigErrorDetails Configuration errors Грешки в настройките ConfigHandler Unrecognized setting: '%1' Неизвестна настройки: „%1“ Unrecognized shortcut name: '%1'. Непознато име клавишна комбинация: „%1“. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Клавишните комбинации на „%1“ и „%2“ съвпадат: %3 Bad value in '%1'. Expected: %2 Невярна стойност „%1“. Очаквана: %2 You have successfully resolved the configuration error. Успешно сте отстранили грешка в настройките. The configuration contains an error. Open configuration to resolve. Грешка в настройките. Отворете прозореца с настройки, за да я отстраните. Bad config key '%1' in ConfigHandler. Please report this as a bug. Неверен ключ на настройка „%1“ в ConfigHandler. Съобщете за дефект. ConfigResolver Resolve configuration errors Отстраняване на грешки в настройките <b>You must resolve all errors before continuing:</b> <b>Трябва да отстраните всички грешки преди да продължите:</b> Reset Нулиране Reset to the default value. Нулиране до подразбираната стойност. Remove Премахване Remove this setting. Премахва настройката. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Няколко клавишни комбинации са в конфликт. Това НЯМА да попречи да стартирате Flameshot. Отстранете ръчно от файла с настройките. Resolve all Отстраняване всички Resolve all listed errors. Отстраняване на всички изброени грешки. Details Подробности ConfigWindow Configuration Настройки Interface Интерфейс Filename Editor Име на файла General Общи Shortcuts Клавишни комбинации Resolve Отстраняване <b>Configuration file has errors. Resolve them before continuing.</b> <b>Файлът с настройките съдържа грешки. Отстранете ги преди да продължите.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Error Unable to close active modal widgets Unable to close active modal widgets &Open Launcher &Open Launcher &Configuration &Configuration &About &Относно Check for updates Check for updates &Latest Uploads &Latest Uploads &Information &Informació &Quit &Quit &Take Screenshot &Take Screenshot CopyTool Copy Копиране Copy selection to clipboard Копиране на избраното Copy the selection into the clipboard Copy the selection into the clipboard DBusUtils Unable to connect via DBus Unable to connect via DBus ExitTool Exit Изход Leave the capture screen Излиза от екрана за заснемане FileNameEditor Edit the name of your captures: Задайте шаблон за името на заснетите изображения: Edit: Шаблон: Preview: Преглед: Save Запазване Saves the pattern Запазва шаблона Restore Възстановяване Reset Reinicialitza Restores the saved pattern Възстановява запазения шаблон Clear Изчистване Deletes the name Премахва името Flameshot Error Грешка Unable to close active modal widgets Работещите приспособления не могат да бъдат затворени URL copied to clipboard. Адресът е копиран. FlameshotDaemon New version %1 is available Налично е ново издание %1 You have the latest version Използвате последното издание Failed to get information about the latest version. Грешка при получаване на информация за последното издание. Unable to connect via DBus Грешка при свързване по DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Внасяне Error Грешка Unable to read file. Грешка при прочитане на файла. Unable to write file. Грешка при запис на файла. Save File Запазване на файл Confirm Reset Потвърждаване на нулиране Are you sure you want to reset the configuration? Желаете ли настройките да бъдат нулирани? Show help message Показване на помощно съобщение Show the help message at the beginning in the capture mode. Show the help message at the beginning in the capture mode. Show the side panel button Показване на бутон за страничния панел Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Показване на известия Show tray icon Показване в лентата за известия Show the systemtray icon Show the systemtray icon Confirmation required to delete screenshot from the latest uploads Потвърждаване при премахване на елемент от последно качените Configuration File Файл с настройките Export Изнасяне Reset Нулиране Automatic check for updates Проверка за обновяване Allow multiple flameshot GUI instances simultaneously Разрешаване на няколко екземпляра на интерфейса на Flameshot Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Launch at startup Launch Flameshot Launch Flameshot Show welcome message on launch Показване на приветствие при стартиране Use large predefined color palette Използване на голяма предварително зададена палитра Copy URL after upload Копиране на адреса след качване Copy URL and close window after upload Copy URL and close window after upload Save image after copy Запазване на изображението след копиране Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Показване на помощно съобщение в началото на заснемането Use last region for GUI mode Използване на последно избраната област за графичния режим Use the last region as the default selection for the next screenshot in GUI mode Използване на последната избрана област като начална за следващо заснемане в графичен режим Show the side panel toggle button in the capture mode Показване на бутона за страничната лента по време на заснемане Enable desktop notifications Включване на настолните известия Show abort notifications Показване на известия при прекратяване Enable abort notifications Включване на известията при прекратяване Show icon in the system tray Показване на пиктограмата в лентата за известията Use grim to capture screenshots Използване на Grim за заснемане Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim е инструмент за заснемане на екранни снимки само за Wayland, чрез протокола Screencopy. Предназначен е за минималистичните приложения за управление на прозорци като Sway и т.н. Ask for confirmation to delete screenshot from the latest uploads Потвърждаване премахването на екранни снимки от последно качените Check for updates automatically Автоматична проверка за обновяване This allows you to take screenshots of Flameshot itself for example Дава възможност за заснемане на Flameshot, например Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Показва прозорец с приветствие в средата на екрана преди заснемане Use a large predefined color palette Използване на голяма предварително създадена палитра Copy on double click Копиране при двойно щракване с мишката Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Автоматично премахване от паметта, когато не се използва Automatically close daemon (background process) when it is not needed Автоматично затваря демона (процеса на във фонов режим), когато вече не е необходим Launch in background at startup Стартиране във фонов режим със системата Launch Flameshot daemon (background process) when computer is booted Стартиране демона на Flameshot (процеса на във фонов режим) при включване на устройството Ask before quit capture Потвърждаване при изход от заснемане Show the confirmation prompt before ESC quit Показва диалог за потвърждение преди изход с Esc Enable Copy to clipboard on Double Click Включване на копирането при двойно щракване Copy URL after uploading was successful Копиране на адреса при успешно качване After copying the screenshot, save it to a file as well След копиране на екранната снимка също така да бъде запазена като файл Save Path Път за запис Change... Смяна… Use fixed path for screenshots to save Използване на фиксиран път за запазване на снимки Preferred save file extension: Предпочитано разширение при запазване: Latest Uploads Max Size Ограничение на последно качените Imgur Application Client ID Ключ за ППИ на Imgur Undo limit Ограничение на стъпките за отменяне Use JPG format for clipboard (PNG default) Използване на JPG при копиране (стандартно PNG) Use lossy JPG format for clipboard (lossless PNG default) Използване на JPG формат със загуба на качество при копиране (стандартно PNG без загуба) Copy file path after save Копиране на пътя към файла след запазване Copy the file path to clipboard after the file is saved Копиране на пътя към файла след запазване на файла Anti-aliasing image when zoom the pinned image Заглаждане на закаченото изображение при мащабиране After zooming the pinned image, should the image get smoothened or stay pixelated Трябва ли изображението при мащабиране на бъде загладено или да остане пикселизирано Upload image without confirmation Качване на изображения без потвърждение Choose a Folder Избор на папка Unable to write to directory. Грешка при писане в папка. Show magnifier Показване на лупа Enable a magnifier while selecting the screenshot area Наличие на лупа при избор на областта за заснемане Square shaped magnifier Квадратна лупа Make the magnifier to be square-shaped Променя формата на лупата на квадратна Milliseconds before geometry display hides; 0 means do not hide Време преди скриване на панела с размера на избраното, в милисекунди; 0 – без скриване Set geometry display timeout (ms) Време на видимост на размерите (мс) Selection Geometry Display Панел с размер на избраното Display Location Място в екрана None Изключено Top Left Горе ляво Top Right Горе дясно Bottom Left Долу ляво Bottom Right Долу дясно Center В средата Quality range of 0-100; Higher number is better quality and larger file size Диапазон на качеството от 0 до 100. По-голямото число е по-високо качество и по-голям размер на файла JPEG Quality Качество на JPEG Reverse arrow Обръщане на стрелките Draw the arrow head first Започване с острото на стрелката Insecure Pixelate Несигурно размиване Draw the pixelation effect in an insecure but more asethetic way. Изчертаване на размиването по несигурен, но естетичен начин. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Copy URL URL copied to clipboard. URL copied to clipboard. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Потвърждаване на качване Do you want to upload this capture? Желаете ли снимката да бъде качена? Upload without confirmation Качване без потвърждаване ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Качване на изображение Uploading Image Изображението се качва Copy URL Копиране на адреса Open URL Отваряне на адреса Delete image Премахване на изображение Image to Clipboard. Изображение във временната памет. Save image Запазване на изображение Unable to open the URL. Грешка при отваряне на адреса. URL copied to clipboard. Адресът е копиран. Screenshot copied to clipboard. Екранната снимка е копирана. Unable to save the screenshot to disk. Грешка при запазване на екранната снимка на диска. Screenshot saved. Екранната снимка е запазена. ImgUploaderTool Image Uploader Качване на изображения Upload the selection Качване на избраното ImgurUploader Upload to Imgur Upload to Imgur Uploading Image Uploading Image Copy URL Copy URL Open URL Open URL Delete image Delete image Image to Clipboard. Image to Clipboard. Unable to open the URL. Грешка при отваряне на адреса. URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. Screenshot copied to clipboard. ImgurUploaderTool Image Uploader Image Uploader Upload the selection to Imgur Upload the selection to Imgur InfoWindow About Относно Icon Пиктограма License Лиценз GPLv3+ GPLv3+ Version Издание Flameshot v Flameshot изд. OS Info Информация за ОС Copy Info Копиране на информацията Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>License</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Негатив Set Inverter as the paint tool Избиране на инструмент „Негатив“ LineTool Line Права Set the Line as the paint tool Избиране на инструмент „Права“ MarkerTool Marker Маркер Set the Marker as the paint tool Избиране на инструмент „Маркер“ MoveTool Move Преместване Move the selection area Премества избраната област PencilTool Pencil Молив Set the Pencil as the paint tool Избиране на инструмент „Молив“ PinTool Pin Tool Габърче Pin image on the desktop Закачане изображението към работния плот PinWidget Context menu Контекстуално меню Copy to clipboard Копиране в междинната памет Save to file Запазване във файл Rotate Right Завъртане надясно Rotate Left Завъртане наляво Increase Opacity Увеличаване прозрачността Decrease Opacity Намаляване прозрачността Close Затваряне PixelateTool Pixelate Размиване Set Pixelate as the paint tool. Избиране на инструмент „Размиване“ Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance Първичен екземпляр <b>Primary instance.</b> Messages received from secondaries: <b>Първичен екземпляр.</b> Получени съобщения от другите: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Capture saved to clipboard. Екранната снимка е копирана. Error while saving to clipboard Грешка при копиране Save screenshot Запазване на екранна снимка Path copied to clipboard as Пътят е копиран като Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Грешка при запазване Capture saved as Екранната снимка е запазена като Error trying to save as Грешка при опит за запазване като Unable to connect via DBus Грешка при свързване по DBus Powerful yet simple to use screenshot software. Мощен, но лесен за употреба инструмент за екранни снимки. See Преглед Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Отваряне на средството за заснемане. Start a manual capture in GUI mode. Стартиране на ръчно заснемане в графичен режим. Configure Настройки Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Екранна снимка на всички монитори едновременно. Capture a screenshot of the specified monitor. Екранна снимка на избрания монитор. Existing directory or new file to save to Съществуваща папка или нов файл, в който да бъде запазено Save the capture to the clipboard Запазване на снимката във временната памет Pin the capture to the screen Закачане на екранната снимка Upload screenshot Качване на екранна снимка Delay time in milliseconds Забавяне в милисекунди Repeat screenshot with previously selected region Повтаряне на снимката с предишната избрана област Screenshot region to select Избор на област за заснемане Set the filename pattern Избиране на шаблон за име на файла Accept capture as soon as a selection is made Приемане на снимката веднага след избиране на областта Enable or disable the trayicon Превключва пиктограмата в лентата за известия Enable or disable run at startup Превключва стартирането със системата Enable or disable the notifications Превключва известията Check the configuration for errors Проверяване настройките за грешки Show the help message in the capture mode Показване на помощно съобщение преди заснемане Define the main UI color Задаване основен цвят на интерфейса Define the contrast UI color Задаване контрастен цвят на интерфейса Print raw PNG capture Необработено изображение PNG Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Извежда геометрията на избраната област във формат Ш×В+x+y. Няма влияние ако е избрано „raw“ Define the screen to capture (starting from 0) Укажете екрана, който да бъде заснет (започвайки от 0) Invalid delay, it must be a number greater than 0 Неприемлива стойност на изчакване, трябва да бъде число по-голямо от 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Неприемлива област, използвайте „Ш×В+x+y“, „all“ или „screen0/screen1/…“. Invalid path, must be an existing directory or a new file in an existing directory Неприемлив път, трябва да бъде съществуваща папка или нов файл в съществуваща папка Define the screen to capture Define the screen to capture default: screen containing the cursor стандартно: екранът, съдържащ показалеца на мишката Screen number Номер на екрана Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Неправилен цвят, флагът поддържа следните формати: - #RGB (като R, G, и B са едноцифрени шестнадесетични числа) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - имена на цветове, напр. „blue“ или „red“ Възможно е да се наложи да предпазите знака „#“, както в „\#FFF“ Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Несъществуващ номер на екран, трябва да бъде неотрицателен Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Неприемлива стройност, трябва да бъде определена като „true“ или „false“ Error Грешка Unable to write in Грешка при записване URL copied to clipboard. URL copied to clipboard. Options Аргументи Arguments Arguments arguments arguments Subcommands Подкоманди subcommands подкоманди Usage Начин на използване options аргументи Per default runs Flameshot in the background and adds a tray icon for configuration. Стандартно стартира Flameshot във фонов режим и добавя пиктограма в областта за известията с цел настройка. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Здравейте! За да заснемете екран щракнете пиктограмата в областта за известията, а за да видите повече настройки щракнете с десен бутон. Requested screen exceeds screen count Исканият номер на екран надхвърля наличния брой екрани Full screen screenshot pinned to screen Екранна снимка на целия екран е закачена Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Изход от заснемане Screenshot history История на снимките Capture screen Заснемане на екрана Show color picker Избиране на цвят Change the tool's size Променяне размера на инструмента Change the tool's thickness Change the tool's thickness RectangleTool Rectangle Правоъгълник Set the Rectangle as the paint tool Избиране на инструмент „Правоъгълник“ RedoTool Redo Повторение Redo the next modification Повтаряне на последната промяна SaveTool Save Запазване Save screenshot to a file Запазване на екранната снимка във файл Save the capture Save the capture ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Универсалният адаптер за заснемане на екрана на Wayland изисква Grim като компонент за заснемане на екран на Wayland. Ако компонентът липсва го инсталирайте! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Ако настройката „useGrimAdapter“ не е включена ще бъде използван протоколът dbus. Имайте предвид, използването на dbus под Waylandе не е препоръчително. Препоръчително е да включите настройката „useGrimAdapter“ във „flameshot.ini“, за да бъде използвн базираният на Grim универсален адаптор за заснемане на екрана на Wayland grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Компонентът за екранни снимки Grim е реализиран на базата на wlroots, за това не може да бъде използван в GNOME или подобни графични среди Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Графичната среда не може да бъде определена (GNOME? KDE? Qile? Sway?…) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Подсказка: пробвайте да зададете променливата на средата XDG_CURRENT_DESKTOP. Unable to capture screen Грешка при заснемане на екрана SecondaryInstanceWidget Secondary instance Вторичен екземпляр <b>Secondary instance.</b> Send message to primary: <b>Вторичен екземпляр.</b> Изпращане на съобщение до първичния: Type something here... Въведете тук… &Send &Изпращане Error sending message Грешка при изпращане на съобщение The message '%1' could not be sent to the primary. Съобщението „%1“ не може да бъде изпратено до първичния. SelectionTool Rectangular Selection Правоъгълна рамка Set Selection as the paint tool Избиране на инструмент „Правоъгълна рамка“ SetShortcutDialog Set Shortcut Задаване на клавишна комбинация Enter new shortcut to change За да замените, въведете новата клавишна комбинация Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Натиснете Esc за отказ или ⌘+Backspace за отмяна на клавишната комбинация. Press Esc to cancel or Backspace to disable the keyboard shortcut. Натиснете Esc за отказ или Backspace за отмяна на клавишната комбинация. Flameshot must be restarted for changes to take effect. За да влязат в сила промените Flameshot трябва да бъде рестартиран. ShortcutsWidget Hot Keys Клавишни комбинации Available shortcuts in the screen capture mode. Налични клавишни комбинации в режим заснемане на екрана. Description Описание Key Клавиши Left Double-click Двойно щракване с ляв бутон Toggle side panel Превключване на страничната лента Grab a color from the screen Взимане на цвят от екрана Resize selection left 1px Преоразмеряване на избраното с 1 пиксел наляво Resize selection right 1px Преоразмеряване на избраното с 1 пиксел надясно Resize selection up 1px Преоразмеряване на избраното с 1 пиксел нагоре Resize selection down 1px Преоразмеряване на избраното с 1 пиксел надолу Symmetrically decrease width by 2px Симетрично намаляване ширината с 2 пиксела Symmetrically increase width by 2px Симетрично увеличаване ширината с 2 пиксела Symmetrically increase height by 2px Симетрично увеличаване височината с 2 пиксела Symmetrically decrease height by 2px Симетрично намаляване височината с 2 пиксела Select entire screen Избиране на целия екран Move selection left 1px Преместване на избраното с 1 пиксел наляво Move selection right 1px Преместване на избраното с 1 пиксел надясно Move selection up 1px Преместване на избраното с 1 пиксел нагоре Move selection down 1px Преместване на избраното с 1 пиксел надолу Commit text in text area Потвърждаване на текста в текстовото поле Delete selected drawn object Премахване на избрания обект Cancel current selection Отменя текущо избраното Delete current tool Премахване на текущия инструмент Capture screen Заснемане на екрана Screenshot history История на снимките SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Размер на текущия инструмент: Active Color: Текущ цвят: Grab Color Взимане на цвят Display grid Показване на решетка SizeDecreaseTool Decrease Tool Size Намаляване размера на инструмента Decrease the size of the other tools Намаляване размера на другите инструменти SizeIncreaseTool Increase Tool Size Увеличаване размера на инструмента Increase the size of the other tools Увеличаване размера на другите инструменти SizeIndicatorTool Selection Size Indicator Selection Size Indicator Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Век (00-99) Year (00-99) Година (00-99) Year (2000) Година (2000) Month Name (jan) Име на месеца (яну) Month Name (january) Име на месеца (януари) Month (01-12) Месец (01-12) Week Day (1-7) Ден от седмицата (1-7) Week (01-53) Седмица (01-53) Day Name (mon) Ден от седмицата (пон) Day Name (monday) Ден от седмицата (понеделник) Day (01-31) Ден от месеца (01-31) Day of Month (1-31) Ден от месеца (1-31) Day (001-366) Ден (001-366) Hour (00-23) Час (00-23) Hour (01-12) Час (01-12) Minute (00-59) Минути (00-59) Second (00-59) Секунди (00-59) Full Date (%m/%d/%y) Пълна дата (%d/%m/%y) Full Date (%Y-%m-%d) Пълна дата (%Y-%m-%d) Full Date (%d-%m-%Y) Пълна дата (%d-%m-%Y) Time (%H-%M-%S) Час (%H-%M-%S) Time (%H-%M) Час (%H-%M) SystemNotification Flameshot Info Известие от Flameshot TextConfig StrikeOut Зачертан Underline Подчертан Bold Получер Italic Наклонен Left Align Ляво подравнен Center Align Центриран Right Align Дясно подравнен TextTool Text Текст Add text to your capture Добавя текст към снимката TrayIcon &Take Screenshot &Екранна снимка &Open Launcher &Начален екран &Configuration Н&астройки &About &Относно Check for updates Проверка за обновяване New version %1 is available Налично е ново издание %1 &Quit &Изход &Latest Uploads &Последно качени &Open Save Path &Отваряне пътя за запис UIcolorEditor UI Color Editor UI Color Editor Change the color moving the selectors and see the changes in the preview buttons. Променяйте цвета с помощта на манипулаторите и вижте промяната в цвета на бутоните. Select a Button to modify it За да промените цвета на бутон, го изберете Main Color Основен цвят Click on this button to set the edition mode of the main color. За промяна на основния цвят, изберете този бутон. Contrast Color Контрастен цвят Click on this button to set the edition mode of the contrast color. За промяна на контрастния цвят, изберете този бутон. UndoTool Undo Отменяне Undo the last modification Отменя последната промяна UpdateNotificationWidget New Flameshot version %1 is available Налично е издание %1 на Flameshot Ignore Пренебрегване Later После Update Обновяване UploadHistory Upload History История на качените Screenshots history is empty Историята на екранни снимки е празна UploadLineItem Form Формуляр TextLabel Етикет Copy URL Копиране на адреса Open In Browser Отваряне в мрежов четец Confirm to delete Потвърждаване на изтриване Are you sure you want to delete a screenshot from the latest uploads and server? Желаете ли екранната снимка да бъде премахната от последно качените и от сървъра? UtilityPanel Close Затваряне <Empty> <празно> VisualsEditor Opacity of area outside selection: Прозрачност на областта извън избраното: UI Color Editor Цвят на интерфейса Colorpicker Editor Редактор на палитрата Button Selection Избрани бутони Select All Избиране на всички color_widgets::ColorDialog Pick Избиране color_widgets::ColorPalette Unnamed Без име color_widgets::ColorPaletteModel Unnamed Без име %1 (%2 colors) %1 (%2 цвята) color_widgets::ColorPaletteWidget Open a new palette from file Нова палитра от файл Create a new palette Нова палитра Duplicate the current palette Дублиране Delete the current palette Премахване на палитрата Revert changes to the current palette Възстановяване Save changes to the current palette Запазване на промените в текущата палитра Add a color to the palette Добавяне на цвят в палитрата Remove the selected color from the palette Премахване на избрания цвят от палитрата New Palette Нова палитра Name Наименование GIMP Palettes (*.gpl) Палитри на GIMP (*.gpl) Palette Image (%1) Изображение на палитра (%1) All Files (*) Всички файлове (*) Open Palette Отваряне на палитра Failed to load the palette file %1 Файлът с палитрата не е зареден %1 color_widgets::GradientEditor Add Color Добавяне на цвят Remove Color Премахване на цвят Edit Color... Промяна на цвят… color_widgets::GradientListModel %1 (%2 colors) %1 (%2 цвята) color_widgets::Swatch Clear Color Изчистване на цвета %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_ca.ts ================================================ AbstractWidgetList Add New Afegir nou Move Up Mou a Dalt Move Down Mou Avall Remove Elimina AcceptTool Accept Accepta Accept the capture Accepta la captura AppLauncher App Launcher Llançador d'aplicacions Choose an app to open the capture Trieu una aplicació per obrir la captura AppLauncherWidget Open With Obrir Amb Launch in terminal Llança a la terminal Keep open after selection Mantén obert després d'una selecció Error Error Unable to launch in terminal. No s'ha pogut iniciar a la terminal. Unable to write in No es pot escriure a ArrowTool Arrow Fletxa Set the Arrow as the paint tool Estableix la fletxa com a eina de dibuix BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Regió rectangular Full Screen (Current Display) Pantalla completa (monitor actual) Full Screen (All Monitors) Pantalla completa (tots els monitors) No Delay Sense demora second segon seconds segons Take new screenshot Fes una nova captura de pantalla Area: Àrea: Capture Launcher Llançador de Captures TextLabel EtiquetaDeText Capture Mode Mode de Captura Delay: Demora: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Impossible capturar la pantalla Mouse Ratolí Select screenshot area Selecciona l'àrea de captura de pantalla Mouse Wheel Roda del Ratolí Change tool size Canvia mida de l'eina Right Click Clic Dret Show color picker Mostra el selector de color Open side panel Obre el panell lateral Esc Esc Exit Surt Quit Capture Surt de la Captura Are you sure you want to quit capture? Esteu segur que voleu sortir de la captura? Do not show this again No ho tornis a mostrar Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot ha perdut el focus. Les dreceres de teclat no funcionaran fins que no facis clic en algun lloc. Configuration error resolved. Launch `flameshot gui` again to apply it. Error de configuració resolt. Torneu a iniciar `flameshot gui` per aplicar-lo. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings Ajustaments de l'eina CircleCountTool Circle Counter Comptador circular Add an autoincrementing counter bubble Afegeix-hi un comptador automàtic CircleTool Circle Cercle Set the Circle as the paint tool Estableix el cercle com a eina de dibuix ColorDialog Select Color Selecciona el Color Saturation Saturació Hue To Hex Hex Blue Blau Value Valor Green Verd Alpha Alfa Red Vermell ColorGrabWidget Accept color Accepta el color Enter or Left Click Enter o Clic amb el Botó Esquerre Precisely select color Selecciona el color amb precisió Hold Left Click Mantingueu premut el Botó Esquerre Toggle magnifier Activa/desactiva la lupa Space or Right Click Espai o Clic amb el Botó Dret Cancel Cancel·la Esc Esc ColorPickerEditor Edit Preset: Edita la Preconfiguració: Enter color to update preset Introduïu el color per actualitzar la configuració predefinida Update Actualitza Press button to update the selected preset Premeu el botó per actualitzar la configuració predefinida seleccionada Delete Suprimeix Press button to delete the selected preset Premeu el botó per suprimir la configuració predefinida seleccionada Add Preset: Afegeix un valor predefinit: Enter color manually or select it using the color-wheel Introduïu el color manualment o seleccioneu-lo utilitzant la roda de colors Add Afegir Press button to add preset Premeu el botó per a afegir un predefinit Error Error Unable to add preset. Maximum limit reached. No s'ha pogut afegir el predefinit. S'ha arribat al límit màxim. Unable to remove preset. Minimum limit reached. No s'ha pogut eliminar el predefinit. S'ha arribat al límit mínim. ConfigErrorDetails Configuration errors Errors de configuració ConfigHandler Unrecognized setting: '%1' Configuració no reconeguda: '%1' Unrecognized shortcut name: '%1'. Nom de drecera no reconegut: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Conflicte de drecera: '%1' i '%2' tenen la mateixa drecera: %3 Bad value in '%1'. Expected: %2 Valor incorrecte a '%1'. S'esperava: %2 You have successfully resolved the configuration error. Heu resolt correctament l'error de configuració. The configuration contains an error. Open configuration to resolve. La configuració conté un error. Obre la configuració per resoldre-ho. Bad config key '%1' in ConfigHandler. Please report this as a bug. La clau de configuració '%1' és incorrecta a ConfigHandler. Si us plau, informeu-nos d'aquest error. ConfigResolver Resolve configuration errors Resol els errors de configuració <b>You must resolve all errors before continuing:</b> <b>Heu de resoldre tots els errors abans de continuar:</b> Reset Reinicia Reset to the default value. Restableix al valor per defecte. Remove Elimina Remove this setting. Elimina aquest paràmetre. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Algunes dreceres de teclat tenen conflictes. Això NO impedirà que flameshot s'iniciï. Solucioneu-les manualment al fitxer de configuració. Resolve all Resol-ho tot Resolve all listed errors. Resol tots els errors llistats. Details Detalls ConfigWindow Configuration Ajustaments Interface Interfície Filename Editor Editor de noms de fitxer General General Shortcuts Dreceres Resolve Resol <b>Configuration file has errors. Resolve them before continuing.</b> <b>El fitxer de configuració té errors. Soluciona'ls abans de continuar.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copia Copy selection to clipboard Copia la selecció al porta-retalls Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Surt Leave the capture screen Surt de la pantalla de captura FileNameEditor Edit the name of your captures: Editeu el nom de les vostres captures: Edit: Edita: Preview: Previsualització: Save Desa Saves the pattern Desa el patró Restore Restaura Reset Reinicialitza Restores the saved pattern Restaura el patró desat Clear Neteja Deletes the name Elimina el nom Flameshot Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius URL copied to clipboard. L'URL s'ha copiat al porta-retalls. FlameshotDaemon New version %1 is available Nova versió %1 disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Unable to connect via DBus No s'ha pogut connectar a través del DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importa Error Error Unable to read file. No s'ha pogut llegir el fitxer. Unable to write file. No s'ha pogut escriure al fitxer. Save File Desa l'arxiu Confirm Reset Confirma la reinicialització Are you sure you want to reset the configuration? Esteu segur de voler reinicialitzar els ajustaments? Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Mostra el botó del calaix lateral Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona de la safata Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Es requereix confirmació per esborrar la captura de pantalla de les darreres càrregues Configuration File Fitxer d'Ajustaments Export Exporta Reset Reinicialitza Automatic check for updates Comprova les actualitzacions de forma automàtica Allow multiple flameshot GUI instances simultaneously Permet múltiples instàncies de la interfície gràfica de flameshot simultàniament This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Mostra el missatge de benvinguda a l'inici Use large predefined color palette Usa paleta de colors gran predefinida Copy URL after upload Copia l'URL després de la càrrega Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Desa la imatge després d'haver-la copiat Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Mostra el missatge d'ajuda al començament en el mode de captura Use last region for GUI mode Utilitza l'última regió per al mode GUI Use the last region as the default selection for the next screenshot in GUI mode Utilitza l'última regió com a selecció predeterminada per a la següent captura de pantalla en mode GUI Show the side panel toggle button in the capture mode Mostra el botó de commutació del plafó lateral en el mode de captura Enable desktop notifications Habilita les notificacions de l'escriptori Show abort notifications Mostra les notificacions d'avortament Enable abort notifications Habilita les notificacions d'avortament Show icon in the system tray Mostra la icona a la safata del sistema Use grim to capture screenshots Usa grim per a fer les captures de pantalla Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim és una utilitat només de wayland per capturar pantalles basades en el protocol de còpia de pantalla. En general, només s'habilita en gestors de finestres minimalistes de wayland com sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Demana confirmació per suprimir la captura de pantalla de les darreres pujades Check for updates automatically Comprova automàticament si hi ha actualitzacions This allows you to take screenshots of Flameshot itself for example Això permet prendre captures de pantalla del mateix Flameshot per exemple Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Mostra el quadre de missatge de benvinguda al mig de la pantalla mentre es pren una captura de pantalla Use a large predefined color palette Usa una paleta de colors gran predefinida Copy on double click Copia en fer doble clic Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Descarrega automàticament de la memòria quan no sigui necessari Automatically close daemon (background process) when it is not needed Tanca automàticament el dimoni (procés de fons) quan no sigui necessari Launch in background at startup Llança en segon pla a l'inici Launch Flameshot daemon (background process) when computer is booted Llança el dimoni Flameshot (procés de fons) quan s'arrenqui l'ordinador Ask before quit capture Pregunta abans de sortir de la captura Show the confirmation prompt before ESC quit Mostra el missatge de confirmació abans de sortir amb ESC Enable Copy to clipboard on Double Click Habilita la Còpia al porta-retalls en fer Doble Clic Copy URL after uploading was successful Copia l'URL després que la càrrega sigui correcta After copying the screenshot, save it to a file as well Després de copiar la captura de pantalla, desa-la també en un fitxer Save Path Desa la Ruta Change... Canvia... Use fixed path for screenshots to save Fes servir una ruta fixada per desar-hi les captures de pantalla Preferred save file extension: Extensió de fitxer preferida al desar: Latest Uploads Max Size Mida Màxima de les Últimes Càrregues Imgur Application Client ID Client ID de l'Aplicació Imgur Undo limit Desfes el límit Use JPG format for clipboard (PNG default) Fes servir el format JPG per les imatges del porta-retalls (per defecte és PNG) Use lossy JPG format for clipboard (lossless PNG default) Usa el format JPG amb pèrdua per al porta-retalls (per defecte PNG sense pèrdua) Copy file path after save Copia la ruta a l'arxiu després d'haver-lo desat Copy the file path to clipboard after the file is saved Copia la ruta del fitxer al porta-retalls després que el fitxer sigui desat Anti-aliasing image when zoom the pinned image Antialiasing de la imatge quan es fa zoom a la imatge fixada After zooming the pinned image, should the image get smoothened or stay pixelated Després de fer zoom a la imatge fixada, s'hauria de suavitzar la imatge o quedar pixelada Upload image without confirmation Puja la imatge sense confirmació Choose a Folder Escull una carpeta Unable to write to directory. No s'ha pogut escriure al directori. Show magnifier Mostra la lupa Enable a magnifier while selecting the screenshot area Habilita la lupa mentre se selecciona l'àrea de captura de pantalla Square shaped magnifier Lupa en forma de quadrat Make the magnifier to be square-shaped Fes que la lupa sigui de forma quadrada Milliseconds before geometry display hides; 0 means do not hide Mil·lisegons abans que s'oculti la visualització de la geometria; 0 significa que no s'oculta Set geometry display timeout (ms) Estableix el temps d'espera de la visualització de la geometria (ms) Selection Geometry Display Visualització de la Geometria de la Selecció Display Location Mostra la Ubicació None Cap Top Left A Dalt a l'Esquerra Top Right A Dalt a la Dreta Bottom Left A Baix a l'Esquerra Bottom Right A Baix a la Dreta Center Centre Quality range of 0-100; Higher number is better quality and larger file size Interval de qualitat de 0-100; un valor més alt és una millor qualitat i una mida de fitxer més gran JPEG Quality Qualitat JPEG Reverse arrow Fletxa inversa Draw the arrow head first Dibuixa primer la punta de la fletxa Insecure Pixelate Pixelat Insegur Draw the pixelation effect in an insecure but more asethetic way. Dibuixa l'efecte de pixelació d'una manera insegura però més asètica. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Confirmació de Càrrega Do you want to upload this capture? Vols pujar aquesta captura? Upload without confirmation Carrega sense confirmació ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Puja una Imatge Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al Porta-retalls. Save image Desa la imatge Unable to open the URL. No s'ha pogut obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Unable to save the screenshot to disk. No s'ha pogut desar la captura de pantalla al disc. Screenshot saved. Captura de pantalla desada. ImgUploaderTool Image Uploader Carregador d'Imatges Upload the selection Puja la selecció ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. No s'ha pogut obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Quant a Icon Icona License Llicència GPLv3+ GPLv3+ Version Versió Flameshot v Flameshot v OS Info Informació del Sistema Operatiu Copy Info Copia la informació Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Inverteix Set Inverter as the paint tool Estableix l'Inversor com a eina de pintura LineTool Line Línia Set the Line as the paint tool Estableix la Línia com a eina de dibuix MarkerTool Marker Marcador Set the Marker as the paint tool Estableix el marcador com a eina de dibuix MoveTool Move Mou Move the selection area Mou la selecció PencilTool Pencil Llapis Set the Pencil as the paint tool Estableix el Llapis com a eina de dibuix PinTool Pin Tool Ancora l'eina Pin image on the desktop Ancora l'imatge a l'escriptori PinWidget Context menu Menú contextual Copy to clipboard Copia al porta-retalls Save to file Desa a un fitxer Rotate Right Gira cap a la Dreta Rotate Left Gira cap a l'Esquerra Increase Opacity Augmenta l'Opacitat Decrease Opacity Disminueix l'Opacitat Close Tanca PixelateTool Pixelate Pixel·la Set Pixelate as the paint tool. Estableix el Pixelat com a eina de pintura. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance Instància primària <b>Primary instance.</b> Messages received from secondaries: <b>Instància primària.</b> Missatges rebuts de les secundàries: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Captura copiada al porta-retalls. Error while saving to clipboard S'ha produït un error mentre es copiava al porta-retalls Save screenshot Desa la captura Path copied to clipboard as Ruta copiada al porta-retalls com a Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error S'ha produït un error en guardar Capture saved as Anomena i guarda la captura Error trying to save as S'ha produït un error en anomenar i guardar Unable to connect via DBus No es pot connectar mitjançant DBus Powerful yet simple to use screenshot software. Un programa de captures complert i versàtil. See Vegeu Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Obriu el llançador de captures. Start a manual capture in GUI mode. Comença una captura manual en mode d'interfície. Configure Configura Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Captura la pantalla de tots els monitors al mateix temps. Capture a screenshot of the specified monitor. Captura la pantalla del monitor especificat. Existing directory or new file to save to Directori existent o nou fitxer per desar Save the capture to the clipboard Desa la captura al porta-retalls Pin the capture to the screen Fixa la captura a la pantalla Upload screenshot Puja la captura de pantalla Delay time in milliseconds Temps de demora en mil·lisegons Repeat screenshot with previously selected region Repeteix la captura de pantalla amb la regió seleccionada prèviament Screenshot region to select Regió de captura de pantalla a seleccionar Set the filename pattern Estableix el patró del nom de fitxer Accept capture as soon as a selection is made Accepta la captura tan aviat com es faci una selecció Enable or disable the trayicon Activa o desactiva l'icona a la safata Enable or disable run at startup Activa o desactiva l'execució a l'inici Enable or disable the notifications Activa o desactiva les notificacions Check the configuration for errors Comprova si hi ha errors a la configuració Show the help message in the capture mode Mostra el missatge d'ajuda en el mode de captura Define the main UI color Defineix el color principal de la IU Define the contrast UI color Defineix el color de contrast de la interfície d'usuari Print raw PNG capture Imprimeix la captura PNG en brut Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Imprimeix la geometria de la selecció en el format WxH+X+Y. No fa res si s'especifica 'raw' Define the screen to capture (starting from 0) Defineix la pantalla a capturar (començant des de 0) Invalid delay, it must be a number greater than 0 Retard no vàlid, ha de ser un nombre més gran que 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Regió no vàlida, utilitzeu 'WxH+X+Y' o 'all' o 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Ruta no vàlida, ha de ser un directori existent o un fitxer nou en un directori existent Define the screen to capture Define the screen to capture default: screen containing the cursor per defecte: pantalla que conté el cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Color no vàlid, aquest indicador admet els següents formats: - #RGB (cadascun de R, G, i B és un sol dígit hexadecimal) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Colors amb nom com 'blue' o 'red' És possible que hàgiu d'escapar del signe '#' com a '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Número de pantalla no vàlid, ha de ser no negatiu Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Valor no vàlid, s'ha de definir com a 'true' o 'false' Error Error Unable to write in No es pot escriure a Requested screen exceeds screen count La pantalla sol·licitada supera el nombre de pantalles Full screen screenshot pinned to screen Captura de pantalla de la pantalla completa fixada a la pantalla URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Opcions Arguments Arguments arguments arguments Subcommands Subcomandes subcommands subcomandes Usage Ús options opcions Per default runs Flameshot in the background and adds a tray icon for configuration. Per defecte, Flameshot s'executa en segon pla i afegeix una icona a la safata per a la configuració. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hola, sóc aquí! Fes clic a la icona de la safata per fer una captura de pantalla o fes clic amb el botó dret per veure més opcions. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ix de la captura Screenshot history Historial de captures de pantalla Capture screen Captura de pantalla Show color picker Mostra el selector de color Change the tool's size Canvia la mida de l'eina Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Rectangle Set the Rectangle as the paint tool Estableix el rectangle com a eina de dibuix RedoTool Redo Refés Redo the next modification Refés la següent modificació SaveTool Save Guarda Save screenshot to a file Desa la captura de pantalla a un fitxer Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! L'adaptador universal de captura de pantalla de wayland requereix Grim com a component de captura de pantalla del wayland. Si falta el component de captura de pantalla, instal·leu-lo! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Si la configuració useGrimAdapter no està activada, s'utilitzarà el protocol dbus. Cal tenir en compte que no es recomana l'ús del protocol de dbus en el wayland. Es recomana habilitar l'opció useGrimAdapter a flameshot.ini per activar l'adaptador general de captura de pantalla Wayland basat en grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments El component de captura de pantalla de grim s'implementa en base a wlroots, no es pot utilitzar en el GNOME o en entorns d'escriptori similars Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) No s'ha pogut detectar l'entorn d'escriptori (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Pista: prova de configurar la variable d'entorn XDG_CURRENT_DESKTOP. Unable to capture screen Imposible capturar la pantalla SecondaryInstanceWidget Secondary instance Instància secundària <b>Secondary instance.</b> Send message to primary: <b>Instància secundària.</b> Envia un missatge al primari: Type something here... Escriviu alguna cosa aquí... &Send &Envia Error sending message S'ha produït un error en enviar el missatge The message '%1' could not be sent to the primary. No s'ha pogut enviar el missatge '%1' al primari. SelectionTool Rectangular Selection Selecció rectangular Set Selection as the paint tool Estableix la selecció com a eina de dibuix SetShortcutDialog Set Shortcut Estableix Drecera Enter new shortcut to change Introdueix una nova drecera per canviar Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Prem Esc per cancel·lar o ⌘+Backspace per desactivar la drecera de teclat. Press Esc to cancel or Backspace to disable the keyboard shortcut. Prem Esc per cancel·lar o Backspace per desactivar la drecera de teclat. Flameshot must be restarted for changes to take effect. Flameshot s'ha de reiniciar perquè els canvis tinguin efecte. ShortcutsWidget Hot Keys Tecles d'Accés Ràpid Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. Description Descripció Key Tecla Left Double-click Doble Clic Esquerre Toggle side panel Activa/desactiva el panell lateral Grab a color from the screen Agafa un color de la pantalla Resize selection left 1px Redimensiona la selecció cap a l'esquerra 1px Resize selection right 1px Redimensiona la selecció cap a la dreta 1px Resize selection up 1px Redimensiona la selecció cap a dalt 1px Resize selection down 1px Redimensiona la selecció cap avall 1px Symmetrically decrease width by 2px Redueix l'amplada simètricament en 2px Symmetrically increase width by 2px Augmenta l'amplada simètricament en 2px Symmetrically increase height by 2px Augmenta l'alçada simètricament en 2px Symmetrically decrease height by 2px Redueix l'alçada simètricament en 2px Select entire screen Selecciona tota la pantalla Move selection left 1px Mou la selecció cap a l'esquerra 1 px Move selection right 1px Mou la selecció cap a la dreta 1 px Move selection up 1px Mou la selecció cap a dalt 1 px Move selection down 1px Mou la selecció cap avall 1 px Commit text in text area Confirma el text a l'àrea de text Delete selected drawn object Suprimeix l'objecte dibuixat seleccionat Cancel current selection Cancel·la la selecció actual Delete current tool Delete current tool Capture screen Captura la pantalla Screenshot history Historial de captures de pantalla SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Mida de l'eina activa: Active Color: Color Actiu: Grab Color Agafa Color Display grid Mostra la quadrícula SizeDecreaseTool Decrease Tool Size Disminueix la Mida de l'Eina Decrease the size of the other tools Disminueix la mida de les altres eines SizeIncreaseTool Increase Tool Size Augmenta la Mida de l'Eina Increase the size of the other tools Augmenta la mida de les altres eines SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Segle (00-99) Year (00-99) Any (00-99) Year (2000) Any (2000) Month Name (jan) Nom del mes (jul) Month Name (january) Nom del mes (juliol) Month (01-12) Mes (01-12) Week Day (1-7) Dia de la setmana (1-7) Week (01-53) Setmana (01-53) Day Name (mon) Nom del dia (dg) Day Name (monday) Nom del dia (diumenge) Day (01-31) Dia (01-31) Day of Month (1-31) Dia del mes (1-31) Day (001-366) Dia (001-366) Hour (00-23) Hora (00-23) Hour (01-12) Hora (01-12) Minute (00-59) Minut (00-59) Second (00-59) Segon (00-59) Full Date (%m/%d/%y) Data Completa (%m/%d/%y) Full Date (%Y-%m-%d) Data Completa (%Y-%m-%d) Full Date (%d-%m-%Y) Data Completa (%d-%m-%Y) Time (%H-%M-%S) Hora (%H-%M-%S) Time (%H-%M) Hora (%H-%M) SystemNotification Flameshot Info Informació de Flameshot TextConfig StrikeOut Ratlla Underline Subratlla Bold Negreta Italic Cursiva Left Align Alinea a l'Esquerra Center Align Alinea al Centre Right Align Alinea a la Dreta TextTool Text Text Add text to your capture Afegeix text a la teva captura TrayIcon &Take Screenshot &Fes Captura &Open Launcher &Obre el Llançador d'aplicacions &Configuration &Configuració &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles New version %1 is available Nova versió %1 disponible &Quit &Surt &Latest Uploads &Últimes Càrregues &Open Save Path &Obre la Ruta on Desar UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Canvieu el color movent els selectors i observeu els canvis en els botons de previsualització. Select a Button to modify it Seleccioneu un botó per a modificar-lo Main Color Color principal Click on this button to set the edition mode of the main color. Feu clic en aquest botó per a aplicar el mode d'edició per al color principal. Contrast Color Color de contrast Click on this button to set the edition mode of the contrast color. Feu clic en aquest botó per a aplicar el mode d'edició per al color de contrast. UndoTool Undo Desfés Undo the last modification Desfés l'última modificació UpdateNotificationWidget New Flameshot version %1 is available Nova versió %1 de Flameshot està disponible Ignore Ignora Later Després Update Actualitza UploadHistory Upload History Historial de Càrregues Screenshots history is empty L'historial de captures de pantalla és buit UploadLineItem Form Form TextLabel EtiquetaText Copy URL Copia l'URL Open In Browser Obre Al Navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar una captura de pantalla de les darreres pujades i del servidor? UtilityPanel Close Tanca <Empty> <Buit> VisualsEditor Opacity of area outside selection: Opacitat de la zona fora de la selecció: UI Color Editor Editor de color de la interfície d'usuari Colorpicker Editor Editor de Selector de colors Button Selection Selecció de botó Select All Selecciona-ho tot color_widgets::ColorDialog Pick Selecciona color_widgets::ColorPalette Unnamed Sense nom color_widgets::ColorPaletteModel Unnamed Sense nom %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Obre una nova paleta des de fitxer Create a new palette Crea una nova paleta Duplicate the current palette Duplica la paleta actual Delete the current palette Elimina la paleta actual Revert changes to the current palette Reverteix els canvis a la paleta actual Save changes to the current palette Desa els canvis a la paleta actual Add a color to the palette Afegeix un color a la paleta Remove the selected color from the palette Elimina el color seleccionat de la paleta New Palette Nova Paleta Name Nom GIMP Palettes (*.gpl) Paletes GIMP (*.gpl) Palette Image (%1) Imatge de la Paleta (%1) All Files (*) Tots els Fitxers (*) Open Palette Obre Paleta Failed to load the palette file %1 No s'ha pogut carregar el fitxer de la paleta %1 color_widgets::GradientEditor Add Color Afegeix Color Remove Color Elimina Color Edit Color... Edita Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Neteja Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_cs.ts ================================================ AbstractWidgetList Add New Přidat nový Move Up Posunout nahoru Move Down Posunout dolů Remove Odstranit AcceptTool Accept Přijmout Accept the capture Přijmout zachycenou obrazovku AppLauncher App Launcher Spouštěč programů Choose an app to open the capture Vyberte program pro otevření zachycené obrazovky AppLauncherWidget Open With Otevřít s Launch in terminal Spustit v terminálu Keep open after selection Ponechat otevřené po výběru Error Chyba Unable to write in Nelze zapsat Unable to launch in terminal. Nelze spustit v terminálu. ArrowTool Arrow Šipka Set the Arrow as the paint tool Nastavit šipku jako malovací nástroj BlurTool Blur Rozmazání Set Blur as the paint tool Nastavit rozmazání jako malovací nástroj CaptureLauncher <b>Capture Mode</b> <b>Režim zachytávání</b> Rectangular Region Pravouhlá oblast Full Screen (Current Display) Celá obrazovka (nynější obrazovka) Full Screen (All Monitors) Celá obrazovka (všechny monitory) No Delay Bez zpoždění second sekunda seconds sekund Take new screenshot Zachytit nový snímek Area: Oblast: Capture Launcher Spouštěč zachytávání obrazovky TextLabel Textový štítek Capture Mode Režim zachytávání obrazovky Delay: Zpoždění: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Nelze zachytit obrazovku Mouse Myš Select screenshot area Vybrat oblast snímku obrazovky Mouse Wheel Kolečko myši Change tool size Změnit velikost nástroje Right Click Klepnutí pravým tlačítkem myši Show color picker Ukázat volič barev Open side panel Otevřít postranní panel Esc Esc Exit Ukončit Quit Capture Opustit zachycování Are you sure you want to quit capture? Opravdu chcete opustit zachycování? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot ztratil zaměření. Klávesové zkratky nebudou pracovat, dokud někam neklepnete. Configuration error resolved. Launch `flameshot gui` again to apply it. Chyba v nastavení vyřešena. Spusťte znovu `flameshot gui` pro jeho použití. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Vyberte oblast myší nebo stiskněte Esc pro opuštění. Stiskněte Enter pro zachycení obrazovky Stiskněte pravé tlačítko myši pro zobrazení voliče barev. Použijte kolečko myši pro změnu tloušťky nástroje. Stiskněte mezerník pro otevření postranního panelu. Tool Settings Nastavení nástrojů CircleCountTool Circle Counter Kruhové počítadlo Add an autoincrementing counter bubble Přidat bublinu s počítadlem (s číslem automaticky vždy zvýšeným o jednotku) CircleTool Circle Kruh Set the Circle as the paint tool Nastavit kruh jako malovací nástroj ColorDialog Select Color Vybrat barvu Saturation Sytost Hue Odstín Hex Hex Blue Modrá Value Hodnota Green Zelená Alpha Alfa Red Červená ColorGrabWidget Accept color Přijmout barvu Enter or Left Click Enter or Left Click Precisely select color Přesně vybrat barvu Hold Left Click Hold Left Click Toggle magnifier Přepnout lupu Space or Right Click Space or Right Click Cancel Zrušit Esc Esc ColorPickerEditor Select Preset: Vybrat přednastavení: Select preset using the spinbox Vyberte přednastavení pomocí číselníku Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Aktualizovat Press button to update the selected preset Press button to update the selected preset Delete Smazat Press button to delete the selected preset Stisknutím tlačítka odstraníte vybrané přednastavení Add Preset: Přidat přednastavení: Enter color manually or select it using the color-wheel Zadejte barvu ručně nebo ji vyberte pomocí barevného kolečka Add Přidat Press button to add preset Stiskněte tlačítko pro přidání přednastavení Error Chyba Unable to add preset. Maximum limit reached. Přednastavení nelze přidat. Bylo dosaženo největší meze. Unable to remove preset. Minimum limit reached. Přednastavení nelze odstranit. Bylo dosaženo nejmenší meze. ConfigErrorDetails Configuration errors Chyby v nastavení ConfigHandler Unrecognized setting: '%1' Nerozpoznané nastavení: '%1' Unrecognized shortcut name: '%1'. Nerozpoznaný název klávesové zkratky: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Střet klávesových zkratek: '%1' a '%2' mají stejnou klávesovou zkratku: %3 Bad value in '%1'. Expected: %2 Špatná hodnota v '%1'. Očekáváno: %2 You have successfully resolved the configuration error. Úspěšně jste vyřešili chybu v nastavení. The configuration contains an error. Open configuration to resolve. Nastavení obsahuje chybu. Otevřete nastavení pro její vyřešení. Bad config key '%1' in ConfigHandler. Please report this as a bug. Chybný klíč nastavení '%1' v ConfigHandler. Nahlaste to prosím jako chybu. ConfigResolver Resolve configuration errors Vyřešit chyby v nastavení <b>You must resolve all errors before continuing:</b> <b>Před pokračováním musíte vyřešit všechny chyby:</b> Reset Obnovit výchozí Reset to the default value. Obnovit výchozí hodnotu. Remove Odstranit Remove this setting. Odstranit toto nastavení. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Některé klávesové zkratky jsou ve střetu. To NEZABRÁNÍ spuštění Flameshotu. Vyřešte je, prosím, ručně v souboru s nastavením. Resolve all Vyřešit vše Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Nastavení Interface Rozhraní Filename Editor Editor názvů souborů General Obecné Shortcuts Klávesové zkratky Resolve Vyřešit <b>Configuration file has errors. Resolve them before continuing.</b> <b>Soubor s nastavení obsahuje chyby. Před pokračováním je vyřešte.</b> Controller New version %1 is available Je dostupná nová verze %1 You have the latest version Máte nejnovější verzi Failed to get information about the latest version. Nepodařilo se získat informace o nejnovější verzi. Error Chyba Unable to close active modal widgets Činné modální prvky nelze zavřít &Take Screenshot &Zachytit obrazovku &Open Launcher &Otevřít spouštěč &Configuration &Nastavení &About O &programu Check for updates Kontrola aktualizací &Latest Uploads &Nejnovější nahrané položky URL copied to clipboard. Adresa (URL) zkopírována do schránky. &Information &Informace &Quit &Ukončit CopyTool Copy Kopírovat Copy selection to clipboard Kopírovat výběr do schránky Copy the selection into the clipboard Kopírovat výběr do schránky DBusUtils Unable to connect via DBus Nelze se spojit přes DBus ExitTool Exit Ukončit Leave the capture screen Opustit zachytávací obrazovku FileNameEditor Edit the name of your captures: Upravit názvy zachycených obrazovek: Edit: Upravit: Preview: Náhled: Save Uložit Saves the pattern Uloží vzor Restore Obnovit Reset Nastavit znovu Restores the saved pattern Obnoví uložený vzor Clear Smazat Deletes the name Smaže název Flameshot Error Chyba Unable to close active modal widgets Činné modální prvky nelze zavřít URL copied to clipboard. Adresa (URL) zkopírována do schránky. FlameshotDaemon New version %1 is available Je dostupná nová verze %1 You have the latest version Máte nejnovější verzi Failed to get information about the latest version. Nepodařilo se získat informace o nejnovější verzi. Unable to connect via DBus Nelze se spojit přes DBus GeneneralConf Import Zavést Error Chyba Unable to read file. Nelze přečíst soubor. Unable to write file. Nelze zapsat soubor. Save File Uložit soubor Confirm Reset Potvrdit vrácení na výchozí Are you sure you want to reset the configuration? Opravdu chcete nastavení vrátit do výchozího stavu? Show help message Ukázat zprávu s nápovědou Show the help message at the beginning in the capture mode. Ukázat zprávu s nápovědou na začátku v režimu zachytávání. Show the side panel button Ukázat tlačítko na postranním panelu Show the side panel toggle button in the capture mode. V režimu zachytávání ukazovat tlačítko na postranním panelu. Show desktop notifications Ukázat oznámení Show tray icon Ukázat ikonu v oznamovací oblasti panelu Show the systemtray icon Ukázat ikonu v oznamovací oblasti panelu Configuration File Soubor s nastavením Export Vyvést Reset Nastavit znovu Launch at startup Spustit při spuštění Launch Flameshot Spustit Flameshot Close after capture Zavřít po vytvoření snímku Close after taking a screenshot Zavřít po vytvoření snímku obrazovky Copy URL after upload Kopírovat adresu (URL) po nahrání Copy URL and close window after upload Po nahrání zkopírovat URL a zavřít okno Save image after copy Uložit obrázek po kopírování Save image file after copying it Uložit obrázek se souborem po jeho zkopírování Save Path Cesta pro ukládání Change... Změnit... Choose a Folder Vyberte složku Unable to write to directory. Nelze zapsat do adresáře. GeneralConf Import Zavést Error Chyba Unable to read file. Nelze přečíst soubor. Unable to write file. Nelze zapsat soubor. Save File Uložit soubor Confirm Reset Potvrdit obnovení výchozí hodnoty Are you sure you want to reset the configuration? Opravdu chcete nastavení vrátit do výchozího stavu? Show help message Ukázat zprávu s nápovědou Show the help message at the beginning in the capture mode. Ukázat zprávu s nápovědou na začátku v režimu zachytávání. Show the side panel button Ukázat tlačítko na postranním panelu Show the side panel toggle button in the capture mode. V režimu zachytávání ukazovat tlačítko na postranním panelu. Show desktop notifications Ukázat oznámení na ploše Show tray icon Ukázat ikonu v oznamovací oblasti panelu Show the systemtray icon Ukázat ikonu v oznamovací oblasti panelu Confirmation required to delete screenshot from the latest uploads Pro smazání snímku obrazovky v nejnověji nahraných souborech je vyžadováno potvrzení Configuration File Soubor s nastavením Export Vyvést Reset Obnovit výchozí Automatic check for updates Automaticky se dívat po aktualizacích Allow multiple flameshot GUI instances simultaneously Povolit více instancí grafického uživatelského rozhraní Flameshotu současně This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automaticky zavřít démona, když není potřeba Launch at startup Spustit při spuštění Launch Flameshot Spustit Flameshot Show welcome message on launch Zobrazit uvítací zprávu při spuštění Use large predefined color palette Použít velkou předem stanovenou paletu barev Copy URL after upload Kopírovat adresu (URL) po nahrání Copy URL and close window after upload Po nahrání zkopírovat URL a zavřít okno Save image after copy Uložit obrázek po kopírování Save image file after copying it Uložit obrázek se souborem po jeho zkopírování Show the help message at the beginning in the capture mode Ukázat zprávu s nápovědou na začátku v režimu zachytávání Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode V režimu zachytávání ukazovat tlačítko na postranním panelu Enable desktop notifications Povolit oznámení na ploše Show abort notifications Enable abort notifications Show icon in the system tray Ukázat ikonu v oznamovací oblasti panelu Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads PožádT o potvrzení pro odstranĚNÍ snímKU obrazovky z nejnověji nahraných videí Check for updates automatically Automaticky se dívat po aktualizacích This allows you to take screenshots of Flameshot itself for example To vám například umožňuje pořizovat snímky obrazovky se samotným Flameshotem Launch Flameshot daemon when computer is booted Spustit démona Flameshotu při spuštění počítače Show the welcome message box in the middle of the screen while taking a screenshot Při pořizování snímku obrazovky zobrazit okno s uvítací zprávou uprostřed obrazovky Use a large predefined color palette Použít velkou předem stanovenou paletu barev Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Po úspěšném nahrání zkopírovat adresu (URL) a zavřít okno Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Po zkopírování snímku obrazovky jej uložit do souboru Save Path Cesta pro ukládání Change... Změnit... Use fixed path for screenshots to save Pro uložení snímků obrazovky použít pevnou cestu Preferred save file extension: Upřednostňovaná přípona souboru při uložení: Latest Uploads Max Size Největší velikost nejnověji nahraných souborů Imgur Application Client ID Imgur Application Client ID Undo limit Omezení pro počet kroků zpět Use JPG format for clipboard (PNG default) Použít pro schránku formát JPG (výchozí PNG) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Po uložení zkopírovat cestu k souboru Copy the file path to clipboard after the file is saved Po uložení souboru zkopírovat cestu k souboru do schránky Anti-aliasing image when zoom the pinned image Vyhlazení obrazu při přiblížení připnutého obrázku After zooming the pinned image, should the image get smoothened or stay pixelated Po přiblížení připnutého obrázku se má obrázek vyhladit nebo má zůstat rozčtverečkovaný Upload image without confirmation Nahrát obrázek bez potvrzení Choose a Folder Vyberte složku Unable to write to directory. Nelze zapsat do adresáře. Show magnifier Ukázat lupu Enable a magnifier while selecting the screenshot area Při výběru oblasti snímku obrazovky povolit lupu Square shaped magnifier Lupa čtvercového tvaru Make the magnifier to be square-shaped Zobrazit lupu tak, aby měla čtvercový tvar Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Kopírovat adresu (URL) URL copied to clipboard. Adresa (URL) zkopírována do schránky. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image Nahrává se obrázek URL copied to clipboard. Adresa (URL) zkopírována do schránky. Error Chyba ImgUploadDialog Upload Confirmation Potvrzení nahrání Do you want to upload this capture? Chcete nahrát tento záběr zachycené obrazovky? Upload without confirmation Nahrát bez potvrzení ImgUploader Uploading Image Nahrává se obrázek Unable to open the URL. Nelze otevřít adresu (URL). URL copied to clipboard. Adresa (URL) zkopírována do schránky. Screenshot copied to clipboard. Snímek obrazovky zkopírován do schránky. Copy URL Kopírovat adresu (URL) Open URL Otevřít adresu (URL) Delete image Smazat obrázek Image to Clipboard. Obrázek do schránky. ImgUploaderBase Upload image Nahrát obrázek Uploading Image Nahrává se obrázek Copy URL Kopírovat adresu (URL) Open URL Otevřít adresu (URL) Delete image Smazat obrázek Image to Clipboard. Obrázek do schránky. Save image Uložit obrázek Unable to open the URL. Nelze otevřít adresu (URL). URL copied to clipboard. Adresa (URL) zkopírována do schránky. Screenshot copied to clipboard. Snímek obrazovky zkopírován do schránky. Unable to save the screenshot to disk. Snímek obrazovky nelze uložit na disk. Screenshot saved. Snímek obrazovky uložen. ImgUploaderTool Image Uploader Nahrávač obrázků Upload the selection Nahrát výběr ImgurUploader Upload to Imgur Nahrát do Imgur Uploading Image Nahrává se obrázek Copy URL Kopírovat adresu (URL) Open URL Otevřít adresu (URL) Delete image Smazat obrázek Image to Clipboard. Obrázek do schránky. Unable to open the URL. Nelze otevřít adresu (URL). URL copied to clipboard. Adresa (URL) zkopírována do schránky. Screenshot copied to clipboard. Snímek obrazovky zkopírován do schránky. ImgurUploaderTool Image Uploader Nahrávač obrázků Upload the selection to Imgur Nahrát výběr do Imgur InfoWindow About O programu Icon Ikona License Povolení GPLv3+ GPLv3+ Version Verze Flameshot v Flameshot v OS Info Informace o operačním systému Copy Info Informace o kopírování SPACEBAR MEZERNÍK Right Click Klepnutí pravým tlačítkem myši Mouse Wheel Kolečko myši Move selection 1px Posunout výběr o 1 px Resize selection 1px Změnit velikost výběru o 1 px Quit capture Ukončit zachytávání obrazovky Copy to clipboard Kopírovat do schránky Save selection as a file Uložit výběr jako soubor Undo the last modification Zrušit poslední změnu Toggle visibility of sidebar with options of the selected tool Přepnout viditelnost postranního panelu s volbali pro vybraný nástroj Show color picker Ukázat volič barev Change the tool's thickness Změnit tloušťku nástroje Available shortcuts in the screen capture mode. Dostupné zkratky v režimu zachytávání obrazovky. Key Klávesa Description Popis <u><b>License</b></u> <u><b>Licence</b></u> <u><b>Version</b></u> <u><b>Verze</b></u> <u><b>Shortcuts</b></u> <u><b>Zkratky</b></u> InvertTool Invert Obrátit Set Inverter as the paint tool Nastavit obraceč jako nástroj malování LineTool Line Čára Set the Line as the paint tool Nastavit čáru jako malovací nástroj MarkerTool Marker Zvýrazňovač Set the Marker as the paint tool Nastavit zvýrazňovač jako malovací nástroj MoveTool Move Posunutí Move the selection area Posunout oblast výběru PencilTool Pencil Tužka Set the Pencil as the paint tool Nastavit tužku jako malovací nástroj PinTool Pin Tool Přišpendlení Pin image on the desktop Přišpendlit obrázek na plochu PinWidget Context menu Context menu Copy to clipboard Kopírovat do schránky Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Zavřít PixelateTool Pixelate Rozčtverečkování Set Pixelate as the paint tool. Set Pixelate as the paint tool Nastaviť rozčtverečkování jako nástroj pro úpravy PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Nepodařilo se zaregistrovat %1. Chyba: %2 Failed to unregister %1. Error: %2 Nepodařilo se zrušit registraci %1. Chyba: %2 QObject Save Error Chyba při ukládání Capture saved as Zachycená obrazovka uložena jako Capture saved to clipboard. Zachycená obrazovka uložena do schránky. Capture saved to clipboard Zachycená obrazovka uložena do schránky Error while saving to clipboard Chyba při ukládání do schránky Error trying to save as Chyba při ukládání jako Save screenshot Uložit snímek obrazovky Path copied to clipboard as Cesta zkopírována do schránky jako Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus Nelze se spojit přes DBus Powerful yet simple to use screenshot software. Silný, ale zároveň též jednoduchý program na zachytávání obrazovky. See Podívejte se Capture the entire desktop. Zachytit celou plochu. Open the capture launcher. Otevřít spouštěč zachytávání. Start a manual capture in GUI mode. Spustit ruční zachytávání v režimu uživatelského rozhraní. Configure Nastavit Capture a single screen. Zachytit jednu obrazovku. Path where the capture will be saved Cesta, kam bude snímek uložen Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Stávající adresář nebo nový soubor k uložení Save the capture to the clipboard Uložit snímek do schránky Pin the capture to the screen Připnout záběr se zachycenou obrazovkou k obrazovce Upload screenshot Nahrát snímek obrazovky Delay time in milliseconds Čas zpoždění v milisekundách Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Oblast snímku obrazovky k vybrání Set the filename pattern Nastavit vzor pro pojmenování souborů Accept capture as soon as a selection is made Přijmout zachycení obrazovky, jakmile se provede výběr Enable or disable the trayicon Povolit nebo zakázat ikonu v oznamovací oblasti panelu Enable or disable run at startup Povolit nebo zakázat spuštění při spuštění systému Enable or disable the notifications Check the configuration for errors Zkontrolovat nastavení, zda neobsahuje chyby Show the help message in the capture mode Ukazovat nápovědu v režimu zachytávání Define the main UI color Nastavit barvu hlavního uživatelského rozhraní Define the contrast UI color Nastavit kontrastní barvu uživatelského rozhraní Print raw PNG capture Zobrazit nezpracovaný PNG snímek Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Zobrazit natočení výběru ve formátu Š V X Y. Nedělá nic, pokud je zadáno nezpracovaný Define the screen to capture (starting from 0) Stanovit obrazovku, která bude zachytávána (od 0) Invalid delay, it must be a number greater than 0 Neplatné zpoždění, musí to být číslo větší než 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Neplatná oblast, použijte „ŠxV+X+Y“ nebo „vše“ nebo „screen0/screen1/...“. Invalid path, must be an existing directory or a new file in an existing directory Neplatná cesta, musí se jednat o stávající adresář nebo nový soubor v existujícím adresáři Define the screen to capture Nastavit monitor, který bude zachytáván default: screen containing the cursor výchozí: obrazovka, na které je ukazovátko myši Screen number Číslo obrazovky Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Neplatná barva, tento přepínač podporuje následující formáty: - #RGB (každá ze složek R, G a B je samostatným hexadecimálním číslem) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - anglické názvy barev jako 'blue' nebo 'red' Možná budete muset napsat před '#' opačné (obrácené) lomítko, tedy '\#FFF' Invalid delay, it must be higher than 0 Neplatné zpoždění, musí být vyšší než 0 Invalid screen number, it must be non negative Neplatné číslo obrazovky, může být jen kladné Invalid path, it must be a real path in the system Neplatná cesta, musí se jednat o skutečnou cestu v systému Invalid value, it must be defined as 'true' or 'false' Neplatná hodnota, musí být vymezenná jako 'pravda' nebo 'nepravda' Error Chyba Unable to write in Nelze zapsat Options Volby Arguments Argumenty arguments argumenty Subcommands subcommands Usage Použití options volby Per default runs Flameshot in the background and adds a tray icon for configuration. Ve výchozím nastavení spustí Flameshot na pozadí a v oznamovacím panelu přidá ikonu pro nastavení. Per default runs Flameshot in the background and adds a tray icon for configuration. Obvykle se Flameshot spouští na pozadí a přidává do oznamovací oblasti panelu ikonu, kterou je ho možné ovládat. Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Snímek celé obrazovky připnutý na obrazovku URL copied to clipboard. Adresa (URL) zkopírována do schránky. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Ahoj, jsem tady! Klepnutím na ikonu v oznamovacím panelu pořídíte snímek obrazovky nebo klepnutím pravým tlačítkem zobrazíte další možnosti. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ukončit zachytávání obrazovky Screenshot history Historie snímků obrazovky Capture screen Zachytit obrazovku Show color picker Ukázat volič barev Change the tool's size Změnit velikost nástroje Change the tool's thickness Změnit tloušťku nástroje RectangleTool Rectangle Obdélník Set the Rectangle as the paint tool Nastavit obdélník jako malovací nástroj RedoTool Redo Znovu Redo the next modification Znovu udělat další změnu SaveTool Save Uložit Save screenshot to a file Uložit snímek obrazovky do souboru Save the capture Uložit zachycenou obrazovku ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Nelze zachytit obrazovku SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Obdélníkový výběr Set Selection as the paint tool Nastavit výběr jako malovací nástroj SetShortcutDialog Set Shortcut Nastavit klávesovou zkratku Enter new shortcut to change Zadejte novou zkratku, kterou chcete změnit Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Stiskněte Esc pro zrušení nebo ⌘+Backspace pro vypnutí klávesové zkratky. Press Esc to cancel or Backspace to disable the keyboard shortcut. Stiskněte Esc pro zrušení nebo Backspace pro vypnutí klávesové zkratky. Flameshot must be restarted for changes to take effect. Aby se změny projevily, musí být Flameshot restartován. ShortcutsWidget Hot Keys Klávesové zkratky Available shortcuts in the screen capture mode. Dostupné zkratky v režimu zachytávání obrazovky. Description Popis Key Klávesa Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Zachytit obrazovku Screenshot history Historie snímků obrazovky SidePanelWidget Active color: Nynější barva: Press ESC to cancel Stiskněte Esc pro zrušení Active tool size: Velikost činného nástroje: Active Color: Nynější barva: Grab Color Chytit barvu Display grid Active thickness: Nynější tloušťka: SizeDecreaseTool Decrease Tool Size Zmenšit velikost nástroje Decrease the size of the other tools Zmenšit velikost ostatních nástrojů SizeIncreaseTool Increase Tool Size Zvětšit velikost nástroje Increase the size of the other tools Zvětšit velikost ostatních nástrojů SizeIndicatorTool Selection Size Indicator Ukazatel velikosti výběru Show X and Y dimensions of the selection Zobrazit rozměry X a Y výběru Show the dimensions of the selection (X Y) Ukázat rozměry výběru (X Y) StrftimeChooserWidget Century (00-99) Století (00-99) Year (00-99) Rok (00-99) Year (2000) Rok (2000) Month Name (jan) Název měsíce (led) Month Name (january) Název měsíce (leden) Month (01-12) Měsíc (01-12) Week Day (1-7) Den v týdnu (1-7) Week (01-53) Týden (01-53) Day Name (mon) Název dne (pon) Day Name (monday) Název dne (pondělí) Day (01-31) Den (01-31) Day of Month (1-31) Den v měsíci (1-31) Day (001-366) Den v roce (001-366) Time (%H-%M-%S) Čas (%H-%M-%S) Time (%H-%M) Čas (%H-%M) Hour (00-23) Hodina (00-23) Hour (01-12) Hodina (01-12) Minute (00-59) Minuta (00-59) Second (00-59) Sekunda (00-59) Full Date (%m/%d/%y) Celé datum (%m/%d/%y) Full Date (%Y-%m-%d) Celé datum (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Informace Flameshotu TextConfig StrikeOut Přeškrtnutí Underline Podtržení Bold Tučné Italic Kurzíva Left Align Zarovnání vlevo Center Align Zarovnání na střed Right Align Zarovnání vpravo TextTool Text Text Add text to your capture Přidat text do zachyceného záběru TrayIcon &Take Screenshot &Zachytit obrazovku &Open Launcher &Otevřít spouštěč &Configuration &Nastavení &About O &programu Check for updates Kontrola aktualizací New version %1 is available Je dostupná nová verze %1 &Quit &Ukončit &Latest Uploads &Nejnovější nahrané položky &Open Save Path UIcolorEditor UI Color Editor Editor barvy rozhraní Change the color moving the selectors and see the changes in the preview buttons. Měňte barvu pohybováním voličů a dívejte se na změny v náhledových tlačítcích. Select a Button to modify it Vybrat tlačítko pro jeho změnění Main Color Hlavní barva Click on this button to set the edition mode of the main color. Klepněte na toto tlačítko pro stanovení režimu upravení hlavní barvy. Contrast Color Kontrastní barva Click on this button to set the edition mode of the contrast color. Klepněte na toto tlačítko pro stanovení režimu upravení kontrastní barvy. UndoTool Undo Zpět Undo the last modification Zrušit poslední změnu UpdateNotificationWidget New Flameshot version %1 is available Je dostupná nová verze Flameshotu %1 Ignore Přehlížet Later Později Update Aktualizovat UploadHistory Upload History Historie nahrávání Screenshots history is empty Historie snímků obrazovky je prázdná UploadLineItem Form Formulář TextLabel Textový štítek Copy URL Kopírovat adresu (URL) Open In Browser Otevřít v prohlížeči Confirm to delete Pro smazání potvrďte Are you sure you want to delete a screenshot from the latest uploads and server? Opravdu chcete smazat snímek obrazovky z nejnověji nahraných souborů a serveru? UtilityPanel Close Zavřít <Empty> <Prázdný> VisualsEditor Opacity of area outside selection: Neprůhlednost oblasti vně výběru: UI Color Editor Editor barvy rozhraní Colorpicker Editor Editor voliče barev Button Selection Tlačítko výběru Select All Vybrat vše color_widgets::ColorDialog Pick Zvolit color_widgets::ColorPalette Unnamed Nepojmenovaná color_widgets::ColorPaletteModel Unnamed Nepojmenovaná %1 (%2 colors) %1 (%2 barev) color_widgets::ColorPaletteWidget Open a new palette from file Otevřít novou paletu ze souboru Create a new palette Vytvořit novou paletu Duplicate the current palette Zdvojit nynější paletu Delete the current palette Smazat nynější paletu Revert changes to the current palette Vrátit změny v nynější paletě Save changes to the current palette Uložit změny v nynější paletě Add a color to the palette Přidat barvu do palety Remove the selected color from the palette Odstranit vybranou barvu z palety New Palette Nová paleta Name Název GIMP Palettes (*.gpl) Palety GIMP (*.gpl) Palette Image (%1) Obrázek palety (%1) All Files (*) Všechny soubory (*) Open Palette Otevřít paletu Failed to load the palette file %1 Nepodařilo se nahrát soubor palety %1 color_widgets::GradientEditor Add Color Přidat barvu Remove Color Odstranit barvu Edit Color... Upravit barvu... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 barev) color_widgets::Swatch Clear Color Smazat barvu %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_da.ts ================================================ AbstractWidgetList Add New Tilføj ny Move Up Flyt op Move Down Flyt ned Remove Fjern AcceptTool Accept Accepter Accept the capture Accepter skærmklippet AppLauncher App Launcher App Starter Choose an app to open the capture Vælg en app for at åbne skærmklippet AppLauncherWidget Open With Åben med Launch in terminal Start i terminal Keep open after selection Hold åben efter selektion Error Fejl Unable to launch in terminal. Kan ikke starte i terminalen. Unable to write in Kan ikke skrive i ArrowTool Arrow Pil Set the Arrow as the paint tool Indstil pilen som malingsværktøj BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Skærmklipstilstand</b> Rectangular Region Rektangulær Område Full Screen (Current Display) Fuld Skærm (Nuværende Skærm) Full Screen (All Monitors) Fuld Skærm (Alle Skærme) No Delay Ingen ventetid second anden seconds sekunder Take new screenshot Tag nyt skærmbillede Area: Område: Capture Launcher TextLabel Capture Mode Delay: Ventetid: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Kan ikke indfange skærmen Mouse Mus Select screenshot area Vælg skærmbillede område Mouse Wheel Musehjul Change tool size Ændre værktøjs størrelse Right Click Right Click Show color picker Show color picker Open side panel Open side panel Esc Esc Exit Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings Tool Settings CircleCountTool Circle Counter Circle Counter Add an autoincrementing counter bubble Add an autoincrementing counter bubble CircleTool Circle Circle Set the Circle as the paint tool Set the Circle as the paint tool ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Precisely select color Precisely select color Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset Reset Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Configuration Interface Interface Filename Editor Filename Editor General General Shortcuts Shortcuts Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Error Unable to close active modal widgets Unable to close active modal widgets &Open Launcher &Open Launcher &Configuration &Configuration &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads URL copied to clipboard. URL copied to clipboard. &Information &Informació &Quit &Quit &Take Screenshot &Take Screenshot CopyTool Copy Copy Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Exit Leave the capture screen Leave the capture screen FileNameEditor Edit the name of your captures: Edit the name of your captures: Edit: Edit: Preview: Preview: Save Save Saves the pattern Saves the pattern Restore Restore Reset Reinicialitza Restores the saved pattern Restores the saved pattern Clear Clear Deletes the name Deletes the name Flameshot Error Unable to close active modal widgets Unable to close active modal widgets URL copied to clipboard. FlameshotDaemon New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Unable to connect via DBus Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Import Error Error Unable to read file. Unable to read file. Unable to write file. Unable to write file. Save File Save File Confirm Reset Confirm Reset Are you sure you want to reset the configuration? Are you sure you want to reset the configuration? Show help message Show help message Show the help message at the beginning in the capture mode. Show the help message at the beginning in the capture mode. Show the side panel button Show the side panel button Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Show desktop notifications Show tray icon Show tray icon Show the systemtray icon Show the systemtray icon Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File Configuration File Export Export Reset Reset Automatic check for updates Automatic check for updates Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Launch at startup Launch Flameshot Launch Flameshot Show welcome message on launch Show welcome message on launch Use large predefined color palette Use large predefined color palette Copy URL after upload Copy URL after upload Copy URL and close window after upload Copy URL and close window after upload Save image after copy Save image after copy Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Ask before quit capture Show the confirmation prompt before ESC quit Use a large predefined color palette Copy on double click Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Save Path Change... Change... Use fixed path for screenshots to save Use fixed path for screenshots to save Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder Choose a Folder Unable to write to directory. Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Copy URL URL copied to clipboard. URL copied to clipboard. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Upload image Uploading Image Uploading Image Copy URL Copy URL Open URL Open URL Delete image Delete image Image to Clipboard. Image to Clipboard. Save image Unable to open the URL. Unable to open the URL. URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. Screenshot copied to clipboard. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Image Uploader Upload the selection Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. Unable to open the URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>License</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line Line Set the Line as the paint tool Set the Line as the paint tool MarkerTool Marker Marker Set the Marker as the paint tool Set the Marker as the paint tool MoveTool Move Move Move the selection area Move the selection area PencilTool Pencil Pencil Set the Pencil as the paint tool Set the Pencil as the paint tool PinTool Pin Tool Pin Tool Pin image on the desktop Pin image on the desktop PinWidget Context menu Copy to clipboard Copia al porta-retalls Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Capture saved to clipboard. Capture saved to clipboard. Error while saving to clipboard Error while saving to clipboard Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Save Error Capture saved as Capture saved as Error trying to save as Error trying to save as Unable to connect via DBus Unable to connect via DBus Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in Unable to write in Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Quit capture Screenshot history Screenshot history Capture screen Capture screen Show color picker Show color picker Change the tool's size Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Rectangle Set the Rectangle as the paint tool Set the Rectangle as the paint tool RedoTool Redo Redo Redo the next modification Redo the next modification SaveTool Save Save Save screenshot to a file Save screenshot to a file Save the capture Guarda la captura ScreenGrabber The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Rectangular Selection Set Selection as the paint tool Set Selection as the paint tool SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Available shortcuts in the screen capture mode. Description Description Key Key Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active tool size: Active Color: Active Color: Grab Color Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Selection Size Indicator Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Century (00-99) Year (00-99) Year (00-99) Year (2000) Year (2000) Month Name (jan) Month Name (jan) Month Name (january) Month Name (january) Month (01-12) Month (01-12) Week Day (1-7) Week Day (1-7) Week (01-53) Week (01-53) Day Name (mon) Day Name (mon) Day Name (monday) Day Name (monday) Day (01-31) Day (01-31) Day of Month (1-31) Day of Month (1-31) Day (001-366) Day (001-366) Hour (00-23) Hour (00-23) Hour (01-12) Hour (01-12) Minute (00-59) Minute (00-59) Second (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M-%S) Time (%H-%M) Time (%H-%M) SystemNotification Flameshot Info Flameshot Info TextConfig StrikeOut StrikeOut Underline Underline Bold Bold Italic Italic Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Text Add text to your capture Add text to your capture TrayIcon &Take Screenshot &Take Screenshot &Open Launcher &Open Launcher &Configuration &Configuration &About &About Check for updates Check for updates New version %1 is available New version %1 is available &Quit &Quit &Latest Uploads &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor UI Color Editor Change the color moving the selectors and see the changes in the preview buttons. Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Select a Button to modify it Main Color Main Color Click on this button to set the edition mode of the main color. Click on this button to set the edition mode of the main color. Contrast Color Contrast Color Click on this button to set the edition mode of the contrast color. Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo Undo the last modification Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Screenshots history is empty Screenshots history is empty UploadLineItem Form TextLabel Copy URL Open In Browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: Opacity of area outside selection: UI Color Editor UI Color Editor Colorpicker Editor Button Selection Button Selection Select All Select All color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_de_DE.ts ================================================ AbstractWidgetList Add New Neu Move Up Nach oben verschieben Move Down Nach unten verschieben Remove Entfernen AcceptTool Accept Akzeptieren Accept the capture Aufnahme akzeptieren AppLauncher App Launcher Anwendungs-Launcher Choose an app to open the capture Anwendung wählen, um die Aufnahme zu öffnen AppLauncherWidget Open With Öffne mit Launch in terminal Im Terminal starten Keep open after selection Nach Auswahl geöffnet lassen Error Fehler Unable to write in Kein Schreibzugriff auf Unable to launch in terminal. Kann nicht im Terminal geöffnet werden. ArrowTool Arrow Pfeil Set the Arrow as the paint tool Pfeil als Malwerkzeug festlegen BlurTool Blur Verwischen Set Blur as the paint tool Wähle Verwischen als Werkzeug CaptureLauncher <b>Capture Mode</b> <b>Aufnahmemodus</b> Rectangular Region Rechteckiger Bereich Full Screen (Current Display) Gesamter Bildschirm (aktueller Monitor) Full Screen (All Monitors) Gesamter Bildschirm (alle Monitore) No Delay Keine Verzögerung second Sekunde seconds Sekunden Take new screenshot Neuen Screenshot aufnehmen Area: Bereich: Capture Launcher Aufnahme-Launcher TextLabel TextEtikett Capture Mode Aufnahme-Modus Delay: Verzögerung: WxH+x+y BxH+x+y CaptureWidget Unable to capture screen Bildschirm kann nicht erfasst werden Mouse Maus Select screenshot area Screenshot-Bereich wählen Mouse Wheel Mausrad Change tool size Werkzeuggröße ändern Right Click Rechtsklick Show color picker Farbwähler anzeigen Open side panel Seitenleiste öffnen Esc Esc Exit Beenden Quit Capture Aufnahme beenden Are you sure you want to quit capture? Soll die Aufnahme wirklich beendet werden? Do not show this again Nicht erneut zeigen Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot hat den Fokus verloren. Tastenkombinationen funktionieren nicht, bis du irgendwo klickst. Configuration error resolved. Launch `flameshot gui` again to apply it. Konfigurationsfehler behoben. Starte `flameshot gui` erneut, um sie anzuwenden. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Wähle einen Bereich mit der Maus oder drücke ESC um zu beenden. Drücke Eingabe um den Bereich aufzunehmen. Drücke die rechte Maustaste um die Farbe auszuwählen. Benutze das Mausrad um die Dicke des Werkzeugs auszuwählen. Drücke die Leertaste um das Seitenmenü zu öffnen. Tool Settings Werkzeugeinstellungen CircleCountTool Circle Counter I know it's not ideal, but don't have a better idea how to say it :/ kreisförmiger Zähler Add an autoincrementing counter bubble Eine automatisch hochzählende Zählerblase hinzufügen CircleTool Circle Kreis Set the Circle as the paint tool Kreis als Malwerkzeug festlegen ColorDialog Select Color Farbe wählen Saturation Sättigung Hue Farbton Hex Hex Blue Blau Value Wert Green Grün Alpha Alpha Red Rot ColorGrabWidget Accept color Farbe übernehmen Enter or Left Click Enter oder Linke Maustaste Precisely select color Farbe präzise auswählen Hold Left Click Linke Maustaste halten Toggle magnifier Lupe umschalten Space or Right Click Leertaste oder Rechte Maustaste Cancel Abbrechen Esc Esc ColorPickerEditor Select Preset: Vorgabe wählen: Select preset using the spinbox Vorgabe mit der Spinbox auswählen Edit Preset: Voreinstellung bearbeiten: Enter color to update preset Farbe eingeben, um Voreinstellung zu aktualisieren Update Aktualisieren Press button to update the selected preset Knopf drücken, um die ausgewählte Voreinstellung zu aktualisieren Delete Löschen Press button to delete the selected preset Knopf drücken, um die ausgewählte Voreinstellung zu löschen Add Preset: Voreinstellung hinzufügen: Enter color manually or select it using the color-wheel Farbe manuell eingeben oder mit Hilfe des Farbrads auswählen Add Hinzufügen Press button to add preset Knopf drücken, um eine Voreinstellung hinzuzufügen Error Fehler Unable to add preset. Maximum limit reached. Voreinstellung kann nicht hinzugefügt werden. Maximale Grenze erreicht. Unable to remove preset. Minimum limit reached. Voreinstellung kann nicht entfernt werden. Mindestgrenze erreicht. ConfigErrorDetails Configuration errors Konfigurationsfehler ConfigHandler Unrecognized setting: '%1' Nicht erkannte Einstellung: '%1' Unrecognized shortcut name: '%1'. Nicht erkannter Tastenkürzelname: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Tastenkürzelkonflikt: '%1' und '%2' haben das gleiche Tastenkürzel: %3 Bad value in '%1'. Expected: %2 Falscher Wert in '%1'. Erwartet: %2 You have successfully resolved the configuration error. Du hast den Konfigurationsfehler erfolgreich behoben. The configuration contains an error. Open configuration to resolve. Die Konfiguration enthält einen Fehler. Öffne die Konfiguration, um den Fehler zu beheben. Bad config key '%1' in ConfigHandler. Please report this as a bug. Fehlerhafter Konfigurationsschlüssel '%1' im ConfigHandler. Bitte melde dies als Fehler. ConfigResolver Resolve configuration errors Konfigurationsfehler beheben <b>You must resolve all errors before continuing:</b> <b>Bevor du fortfährst, musst du alle Fehler beheben:</b> Reset Zurücksetzen Reset to the default value. Auf Standardwert zurücksetzen. Remove Entfernen Remove this setting. Diese Einstellung entfernen. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Bei einigen Tastenkürzeln gibt es Konflikte. Diese verhindern NICHT den Start von flameshot. Bitte beseitige sie manuell in der Konfigurationsdatei. Resolve all Alle beheben Resolve all listed errors. Alle aufgeführten Fehler beheben. Details Details ConfigWindow Configuration Einstellungen Interface Benutzeroberfläche Filename Editor Dateinamen Editor General Allgemein Shortcuts Tastenkürzel Resolve Beheben <b>Configuration file has errors. Resolve them before continuing.</b> <b>Die Konfigurationsdatei enthält Fehler. Behebe diese, bevor Du fortfährst.</b> Controller New version %1 is available Neue version %1 ist verfügbar You have the latest version Die neueste Version ist installiert Failed to get information about the latest version. Das Laden der Versionsinformationen ist fehlgeschlagen. Error Fehler Unable to close active modal widgets Kann aktive Widgets nicht schließen &Take Screenshot &Bildschirmaufnahme anfertigen &Open Launcher Anwendung öffnen &Configuration &Einstellungen &About Über Fl&ameshot Check for updates Auf Aktualisierungen überprüfen &Latest Uploads &Letzte Uploads URL copied to clipboard. URL in Zwischenablage kopiert. &Information &Informationen &Quit &Beenden CopyTool Copy Kopieren Copy selection to clipboard Auswahl in die Zwischenablage kopieren Copy the selection into the clipboard Auswahl in die Zwischenablage kopieren DBusUtils Unable to connect via DBus Kann nicht via DBus verbinden ExitTool Exit Beenden Leave the capture screen Aufnahmebildschirm verlassen FileNameEditor Edit the name of your captures: Name deiner Aufnahmen bearbeiten: Edit: Bearbeiten: Preview: Vorschau: Save Speichern Saves the pattern Muster speichern Restore Zurücksetzen Reset Zurücksetzen Restores the saved pattern Gespeichertes Muster zurücksetzen Clear Löschen Deletes the name Löscht den Namen Flameshot Error Fehler Unable to close active modal widgets Aktive Widgets können nicht geschlossen werden URL copied to clipboard. URL wurde in die Zwischenablage kopiert. FlameshotDaemon New version %1 is available Neue Version %1 ist verfügbar You have the latest version Die neueste Version ist installiert Failed to get information about the latest version. Es konnten keine Informationen über die neueste Version abgerufen werden. Unable to connect via DBus Verbindung über DBus fehlgeschlagen GeneneralConf Import Importieren Error Fehler Unable to read file. Datei kann nicht gelesen werden. Unable to write file. Datei kann nicht geschrieben werden. Save File Datei speichern Confirm Reset Zurücksetzen bestätigen Are you sure you want to reset the configuration? Sind Sie sicher, dass sie die Konfiguration zurücksetzen wollen? Show help message Hilfetext anzeigen Show the help message at the beginning in the capture mode. Hilfetext am Start der Auswahl anzeigen. Show desktop notifications Zeige Desktopbenachrichtigungen Show tray icon Zeige Taskleistensymbol Show the systemtray icon Zeigt das Taskleistensymbol Configuration File Konfigurationsdatei Export Exportieren Reset Zurücksetzen Launch at startup Automatisch starten Launch Flameshot Starte Flameshot GeneralConf Import Importieren Error Fehler Unable to read file. Datei konnte nicht gelesen werden. Unable to write file. Datei konnte nicht geschrieben werden. Save File Datei speichern Confirm Reset Zurücksetzen bestätigen Are you sure you want to reset the configuration? Bist du sicher, dass du die Konfiguration zurücksetzen willst? Show help message Hilfetext anzeigen Show the help message at the beginning in the capture mode. Hilfetext zu Beginn der Aufnahme anzeigen. Show the side panel button Schaltfläche für Seitenleiste anzeigen Show the side panel toggle button in the capture mode. Den Knopf zum Umschalten des Seitenpanels im Aufnahmemodus anzeigen. Show desktop notifications Desktopbenachrichtigungen anzeigen Show tray icon Taskleistensymbol zeigen Show the systemtray icon Zeigt das Taskleistensymbol Confirmation required to delete screenshot from the latest uploads Bestätigung nötig zum Entfernen von Screenshots aus den letzten Uploads Configuration File Konfigurationsdatei Export Exportieren Reset Zurücksetzen Automatic check for updates Automatisch auf Updates prüfen Allow multiple flameshot GUI instances simultaneously Mehrere Flameshot-GUI-Instanzen gleichzeitig zulassen This allows you to take screenshots of flameshot itself for example. So kannst du zum Beispiel Screenshots von Flameshot selbst machen. Automatically close daemon when it is not needed Automatisches Schließen des Daemons, wenn er nicht benötigt wird Launch at startup Automatisch starten Launch Flameshot Starte Flameshot Show welcome message on launch Willkommensnachricht beim Start zeigen Use large predefined color palette Große vordefinierte Farbpalette verwenden Copy URL after upload URL nach Upload in Zwischenablage kopieren Copy URL and close window after upload URL nach Upload in Zwischenablage kopieren und Fenster schließen Save image after copy Bild nach dem Kopieren speichern Save image file after copying it Bild nach dem Kopieren in Datei abspeichern Show the help message at the beginning in the capture mode Anzeige der Hilfemeldung am Anfang des Aufnahmemodus Use last region for GUI mode Letzten Bereich für GUI-Modus verwenden Use the last region as the default selection for the next screenshot in GUI mode Letzten Bereich als Standardauswahl für den nächsten Screenshot im GUI-Modus verwenden Show the side panel toggle button in the capture mode Umschalttaste auf der Seitenleiste im Aufnahmemodus anzeigen Enable desktop notifications Desktop-Benachrichtigungen aktivieren Show abort notifications Abbruchbenachrichtigungen anzeigen Enable abort notifications Abbruchbenachrichtigungen aktivieren Show icon in the system tray Symbol in der Taskleiste anzeigen Use grim to capture screenshots Grim zum Aufnehmen von Screenshots verwenden Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim ist ein ausschließlich in Wayland verfügbares Dienstprogramm zur Aufnahme von Screenshots basierend auf dem Screencopy-Protokoll. Es ist im Allgemeinen nur auf minimalen Wayland-Fenstermanagern wie Sway, Hyprland usw. vorhanden. Ask for confirmation to delete screenshot from the latest uploads Nach einer Bestätigung fragen, um einen Screenshot aus den letzten Uploads zu löschen Check for updates automatically Automatisch nach Updates suchen This allows you to take screenshots of Flameshot itself for example Damit kannst du zum Beispiel Screenshots von Flameshot selbst machen Launch Flameshot daemon when computer is booted Flameshot-Daemon beim Hochfahren des Computers starten Show the welcome message box in the middle of the screen while taking a screenshot Anzeige der Willkommensnachricht in der Mitte des Bildschirms, während ein Screenshot gemacht wird Use a large predefined color palette Eine große vordefinierte Farbpalette verwenden Copy on double click Mit Doppelklick kopieren Enable Copy on Double Click Kopieren bei Doppelklick aktivieren Copy URL and close window after uploading was successful URL kopieren und Fenster schließen, nachdem der Upload erfolgreich war Automatically unload from memory when it is not needed Automatisch aus dem Speicher entladen, wenn es nicht benötigt wird Automatically close daemon (background process) when it is not needed Daemon (Hintergrundprozess) automatisch beenden, wenn er nicht benötigt wird Launch in background at startup Beim Systemstart im Hintergrund starten Launch Flameshot daemon (background process) when computer is booted Den Flameshot-Daemon (Hintergrundprozess) starten, wenn der Computer hochgefahren wird Ask before quit capture Vor dem Beenden der Aufnahme fragen Show the confirmation prompt before ESC quit Bestätigungsdialog vor dem Beenden mit ESC anzeigen Enable Copy to clipboard on Double Click Kopieren bei Doppelklick aktivieren Copy URL after uploading was successful URL nach erfolgreichem Upload kopieren After copying the screenshot, save it to a file as well Nach dem Kopieren des Screenshots diesen ebenfalls in einer Datei speichern Save Path Speicherpfad Change... Ändern... Use fixed path for screenshots to save Festen Pfad für das Speichern von Aufnahmen verwenden Preferred save file extension: Bevorzugte Dateierweiterung zum Speichern: Latest Uploads Max Size Maximale Größe der letzten Uploads Imgur Application Client ID Imgur Applikations-Client-ID Undo limit Wiederherstellbare Schritte Use JPG format for clipboard (PNG default) JPG-Format für die Zwischenablage verwenden (PNG standardmäßig) Use lossy JPG format for clipboard (lossless PNG default) Verlustebehaftetes JPG-Format für die Zwischenablage verwenden (standardmäßig verlustfreies PNG) Copy file path after save Dateipfad nach dem Speichern kopieren Copy the file path to clipboard after the file is saved Dateipfad nach dem Speichern der Datei in die Zwischenablage kopieren Anti-aliasing image when zoom the pinned image Anti-Aliasing-Bild beim Zoomen des angehefteten Bildes After zooming the pinned image, should the image get smoothened or stay pixelated Soll das Bild nach dem Zoomen des angehefteten Bildes geglättet werden oder pixelig bleiben Upload image without confirmation Bild ohne Bestätigung hochladen Choose a Folder Ordner wählen Unable to write to directory. Kann nicht in Ordner schreiben. Show magnifier Lupe anzeigen Enable a magnifier while selecting the screenshot area Lupe während der Auswahl des Screenshot-Bereichs aktivieren Square shaped magnifier Quadratische Lupe Make the magnifier to be square-shaped Die Lupe in quadratischer Form einstellen Milliseconds before geometry display hides; 0 means do not hide Millisekunden, bevor die Geometrieanzeige ausgeblendet wird; 0 bedeutet nie ausblenden Set geometry display timeout (ms) Geometrieanzeige ausblenden (ms) Selection Geometry Display Geometrieanzeige Display Location Anzeigeposition None Nicht anzeigen Top Left Oben links Top Right Oben rechts Bottom Left Unten links Bottom Right Unten rechts Center Mitte Quality range of 0-100; Higher number is better quality and larger file size Qualitätsskala von 0-100; Höhere Zahl bedeutet bessere Qualität und größere Dateigröße JPEG Quality JPEG Qualität Reverse arrow Pfeil umkehren Draw the arrow head first Zuerst die Pfeilspitze zeichnen Insecure Pixelate Unsicheres Verpixeln Draw the pixelation effect in an insecure but more asethetic way. Zeichne den Pixelierungseffekt auf unsichere, aber ästhetischere Weise. HistoryWidget Latest Uploads Letzte Uploads Screenshots history is empty Letzte Aufnamen ist leer Copy URL URL kopieren URL copied to clipboard. URL in Zwischenablage kopiert. Open in browser Im Browser öffnen Confirm to delete Löschen bestätigen Are you sure you want to delete a screenshot from the latest uploads and server? Sind Sie sicher, dass Sie die Aufnahme aus den Letzten Aufnahmen und vom Server löschen möchten? ImgS3Uploader Uploading Image Bild hochladen URL copied to clipboard. URL kopiert. Error Fehler ImgUploadDialog Upload Confirmation Hochladebestätigung Do you want to upload this capture? Möchtest du diese Aufnahme hochladen? Upload without confirmation Hochladen ohne Bestätigung ImgUploader Uploading Image Bild hochladen Unable to open the URL. Kann URL nicht öffnen. URL copied to clipboard. URL kopiert. Screenshot copied to clipboard. Bildschirmaufnahme in Zwischenablage kopiert. Copy URL URL kopieren Open URL URL öffnen Delete image Bild löschen Image to Clipboard. Bild in Zwischenablage. ImgUploaderBase Upload image Bild hochladen Uploading Image Bild hochladen Copy URL URL kopieren Open URL URL öffnen Delete image Bild löschen Image to Clipboard. Bild in Zwischenablage. Save image Bild speichern Unable to open the URL. Kann URL nicht öffnen. URL copied to clipboard. URL in Zwischenablage kopiert. Screenshot copied to clipboard. Bildschirmaufnahme in Zwischenablage kopiert. Unable to save the screenshot to disk. Der Screenshot kann nicht auf der Festplatte gespeichert werden. Screenshot saved. Screenshot gespeichert. ImgUploaderTool Image Uploader Bild-Uploader Upload the selection Auswahl hochladen ImgurUploader Upload to Imgur Zu Imgur hochladen Uploading Image Bild hochladen Copy URL URL kopieren Open URL URL öffnen Delete image Bild löschen Image to Clipboard. Bild in Zwischenablage. Unable to open the URL. Kann URL nicht öffnen. URL copied to clipboard. URL kopiert. Screenshot copied to clipboard. Bildschirmaufnahme in Zwischenablage kopiert. ImgurUploaderTool Image Uploader Bild hochladen Upload the selection to Imgur Auswahl zu Imgur hochladen InfoWindow About Über Icon Symbol License Lizenz GPLv3+ GPL v 3+ Version Version Flameshot v Flameshot v OS Info OS-Info Copy Info Info kopieren SPACEBAR Leertaste Right Click Rechtsklick Mouse Wheel Mausrad Move selection 1px Verschiebe Auswahl um 1px Resize selection 1px Größenänderung um 1px Quit capture Auswahl verlassen Copy to clipboard In Zwischenablage kopieren Save selection as a file Speichere Auswahl als Datei Undo the last modification Letze Änderungen zurücksetzen Toggle visibility of sidebar with options of the selected tool Öffne/Schließe Seitenauswahlmenü des gewählten Werkzeugs Show color picker Zeige Farbauswahl Change the tool's thickness Ändere die Dicke des Werkzeugs Available shortcuts in the screen capture mode. Verfügbare Tastenkürzel im Aufnahmemodus. Key Taste Description Beschreibung <u><b>License</b></u> <u><b>Lizenz</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Tastenkürzel</b></u> InvertTool Invert Invertieren Set Inverter as the paint tool Inverter als Malwerkzeug festlegen LineTool Line Linie Set the Line as the paint tool Linie als Malwerkzeug festlegen MarkerTool Marker Markierer Set the Marker as the paint tool Markierer als Malwerkzeug festlegen MoveTool Move Bewegen Move the selection area Auswahlbereich verschieben PencilTool Pencil Stift Set the Pencil as the paint tool Stift als Malwerkzeug festlegen PinTool Pin Tool Pin-Werkzeug Pin image on the desktop Bild auf den Desktop pinnen PinWidget Context menu Kontextmenü Copy to clipboard In Zwischenablage kopieren Save to file In Datei speichern Rotate Right Nach rechts drehen Rotate Left Nach links drehen Increase Opacity Deckkraft erhöhen Decrease Opacity Deckkraft verringern Close Schließen PixelateTool Pixelate Verpixeln Set Pixelate as the paint tool. Verpixeln als Malwerkzeug festlegen. Set Pixelate as the paint tool Verpixeln als Werkzeug wählen PrimaryInstanceWidget Primary instance Primärinstanz <b>Primary instance.</b> Messages received from secondaries: <b>Primärinstanz.</b> Von Sekundärinstanzen empfangene Nachrichten: QHotkey Failed to register %1. Error: %2 Die Registrierung von %1 ist fehlgeschlagen. Fehler: %2 Failed to unregister %1. Error: %2 Die Registrierung von %1 konnte nicht aufgehoben werden. Fehler: %2 QObject Save Error Speicherfehler Capture saved as Aufnahme gespeichert als Capture saved to clipboard. Aufnahme in die Zwischenablage gespeichert. Capture saved to clipboard Aufnahme in Zwischenablage gespeichert Error while saving to clipboard Fehler beim Speichern in die Zwischenablage Error trying to save as Fehler beim Speichern unter Save screenshot Screenshot speichern Path copied to clipboard as Pfad in die Zwischenablage kopiert als Saving canceled Speichern abbrechen Save canceled Speichern abgebrochen Capture is saved and copied to the clipboard as Aufnahme in Zwischenablage kopiert und gespeichert unter Unable to connect via DBus Kann nicht via DBus verbinden Powerful yet simple to use screenshot software. Mächtiges und trotzdem einfach zu bedienendes Bildschirmaufnahme Tool. See Siehe Capture the entire desktop. Gesamten Bildschirm aufnehmen. Open the capture launcher. Aufnahme-Launcher starten. Start a manual capture in GUI mode. Eine manuelle Aufnahme im GUI-Modus starten. Configure Konfigurieren Capture a single screen. Einen einzelnen Monitor aufnehmen. Path where the capture will be saved Verzeichnis wo die Aufnahme gespeichert werden wird Capture screenshot of all monitors at the same time. Screenshot aller Monitore gleichzeitig aufnehmen. Capture a screenshot of the specified monitor. Einen Screenshot des angegebenen Monitors erstellen. Existing directory or new file to save to Vorhandenes Verzeichnis oder neue Datei zum Speichern Save the capture to the clipboard Aufnahme in die Zwischenablage speichern Pin the capture to the screen Aufnahme an den Bildschirm anheften Upload screenshot Screenshot hochladen Delay time in milliseconds Verzögerung in Millisekunden Repeat screenshot with previously selected region Screenshot mit zuvor ausgewähltem Bereich wiederholen Screenshot region to select Zu wählender Screenshot-Bereich Set the filename pattern Dateinamenschema festlegen Accept capture as soon as a selection is made Erfassung akzeptieren, sobald eine Auswahl getroffen wurde Enable or disable the trayicon Taskleistensymbol aktivieren oder deaktivieren Enable or disable run at startup "beim Start ausführen" aktivieren oder deaktivieren Enable or disable the notifications Benachrichtigungen aktivieren oder deaktivieren Check the configuration for errors Konfiguration auf Fehler überprüfen Show the help message in the capture mode Hilfetext im Aufnahmemodus anzeigen Define the main UI color Haupt-Interfacefarbe festlegen Define the contrast UI color Kontrast-Interfacefarbe festlegen Print raw PNG capture PNG-Rohdaten ausgeben Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Geometrie der Auswahl im Format B H X Y ausgeben. Ignoriert, falls raw ausgewählt ist Define the screen to capture (starting from 0) Den zu erfassenden Bildschirm definieren (beginnend bei 0) Invalid delay, it must be a number greater than 0 Ungültige Verzögerung, muss eine Zahl größer als 0 sein Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Ungültiger Bereich, verwende 'WxH+X+Y' oder 'all' oder 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Ungültiger Pfad, muss ein bestehendes Verzeichnis oder eine neue Datei in einem bestehenden Verzeichnis sein Define the screen to capture Definiere Monitor für die Aufnahme default: screen containing the cursor Standard: Bildschirm auf dem sich der Mauszeiger befindet Screen number Bildschirmnummer Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Ungültige Farbe, dieser Parameter unterstützt die folgenden Formate: - #RGB (wobei R, G, und B jeweils ein einzelner HEX-Wert sind) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Benannte Farben wie 'blue' oder 'red' Eventuell muss das '#' Zeichen als '\#FFF' maskiert werden Invalid delay, it must be higher than 0 Ungültige Verzögerung, sie muss größer als 0 sein Invalid screen number, it must be non negative Ungültige Bildschirmnummer, sie darf nicht negativ sein Invalid path, it must be a real path in the system Ungültiges Verzeichnis, es mus sein existierendes Verzeichnis im System angegeben werden Invalid value, it must be defined as 'true' or 'false' Ungültiger Wert, muss als 'true' (wahr) oder 'false' (falsch) angegeben werden Error Fehler Unable to write in Kein Schreibzugriff auf Options Optionen Arguments Parameter arguments Parameter Subcommands Unterbefehle subcommands Unterbefehle Usage Verwendung options Parameter Per default runs Flameshot in the background and adds a tray icon for configuration. Standardmäßig wird Flameshot im Hintergrund ausgeführt und ein Taskleistensymbol zur Konfiguration angezeigt. Requested screen exceeds screen count Angeforderter Bildschirm überschreitet die Anzahl der Bildschirme Full screen screenshot pinned to screen Vollbild-Screenshot an den Bildschirm geheftet URL copied to clipboard. URL in Zwischenablage kopiert. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hallo, hier bin ich! Auf das Symbol in der Taskleiste linksklicken, um eine Aufnahme zu starten, oder rechtsklicken für mehr Optionen. Toggle side panel Seitenpanel umschalten Resize selection left 1px Auswahl links um 1 Pixel verändern Resize selection right 1px Auswahl rechts um 1 Pixel verändern Resize selection up 1px Auswahl oben um 1 Pixel verändern Resize selection down 1px Auswahl unten um 1 Pixel verändern Select entire screen Gesamten Bildschirm auswählen Move selection left 1px Auswahl um 1 Pixel nach Links verschieben Move selection right 1px Auswahl um 1 Pixel nach Rechts verschieben Move selection up 1px Auswahl um 1 Pixel nach Oben verschieben Move selection down 1px Auswahl um 1 Pixel nach Unten verschieben Commit text in text area Text in Textbereich übernehmen Delete current tool Aktuelles Werkzeug löschen Quit capture Aufnahme verlassen Screenshot history Letzte Screenshots Capture screen Bildschirm aufnehmen Show color picker Farbwähler anzeigen Change the tool's size Werkzeuggröße ändern Change the tool's thickness Ändere die Dicke des Werkzeugs RectangleTool Rectangle Rechteck Set the Rectangle as the paint tool Rechteck als Malwerkzeug festlegen RedoTool Redo Wiederholen Redo the next modification Nächste Veränderung wiederholen SaveTool Save Speichern Save screenshot to a file Screenshot in Datei speichern Save the capture Speichere die Aufnahme ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Desktopumgebung wurde nicht erkannt (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Der universelle Wayland-Bildschirmaufnahmeadapter benötigt Grim als Bildschirmaufnahmekomponente von Wayland. Wenn die Bildschirmaufnahmekomponente fehlt, installiere sie bitte! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Wenn die useGrimAdapter-Einstellung nicht aktiviert ist, wird das dbus-Protokoll verwendet. Es ist zu beachten, dass die Verwendung des dbus-Protokolls unter Wayland nicht empfohlen wird. Es wird empfohlen, die useGrimAdapter-Einstellung in flameshot.ini zu aktivieren, um den auf Grim basierenden allgemeinen Wayland-Screenshot-Adapter zu aktivieren grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Die Screenshot-Komponente von grim basiert auf wlroots und wird möglicherweise nicht in GNOME oder ähnlichen Desktop-Umgebungen verwendet Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Kann Desktop-Umgebung nicht erkennen (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hinweis: Versuche, die Umgebungsvariable XDG_CURRENT_DESKTOP festzulegen. Unable to capture screen Bildschirm kann nicht erfasst werden SecondaryInstanceWidget Secondary instance Sekundärinstanz <b>Secondary instance.</b> Send message to primary: <b>Sekundärinstanz.</b> Nachricht an Primärinstanz senden: Type something here... Schreib hier irgendwas... &Send &Senden Error sending message Fehler beim Senden der Nachricht The message '%1' could not be sent to the primary. Die Nachricht '%1' konnte nicht an die Primärinstanz gesendet werden. SelectionTool Rectangular Selection Rechteckige Auswahl Set Selection as the paint tool Rechteck als Malwerkzeig festlegen SetShortcutDialog Set Shortcut Tastenkürzel setzen Enter new shortcut to change Zum Ändern neues Tastenkürzel eingeben Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Abbrechen mit Esc oder ⌘+Rücktaste zum Deaktivieren des Tastenkürzels. Press Esc to cancel or Backspace to disable the keyboard shortcut. Abbrechen mit Esc oder die Rücktaste zum Deaktivieren des Tastenkürzels. Flameshot must be restarted for changes to take effect. Flameshot muss neu gestartet werden, damit die Änderungen wirksam werden. ShortcutsWidget Hot Keys Tastenkürzel Available shortcuts in the screen capture mode. Verfügbare Tastenkürzel im Aufnahmemodus. Description Beschreibung Key Taste Left Double-click Linker Doppelklick Toggle side panel Seitenleiste umschalten Grab a color from the screen Nimm eine Farbe vom Bildschirm Resize selection left 1px Auswahl links um 1 Pixel verändern Resize selection right 1px Auswahl rechts um 1 Pixel verändern Resize selection up 1px Auswahl oben um 1 Pixel verändern Resize selection down 1px Auswahl unten um 1 Pixel verändern Symmetrically decrease width by 2px Breite symmetrisch um 2px verringern Symmetrically increase width by 2px Breite symmetrisch um 2px erhöhen Symmetrically increase height by 2px Höhe symmetrisch um 2px erhöhen Symmetrically decrease height by 2px Höhe symmetrisch um 2px verringern Select entire screen Gesamten Bildschirm auswählen Move selection left 1px Auswahl um 1 Pixel nach Links verschieben Move selection right 1px Auswahl um 1 Pixel nach Rechts verschieben Move selection up 1px Auswahl um 1 Pixel nach Oben verschieben Move selection down 1px Auswahl um 1 Pixel nach Unten verschieben Commit text in text area Text in Textbereich übernehmen Delete selected drawn object Ausgewähltes Objekt löschen Cancel current selection Aktuelle Auswahl aufheben Delete current tool Aktuelles Werkzeug löschen Capture screen Bildschirm aufnehmen Screenshot history Screenshot-Verlauf SidePanelWidget Active thickness: Aktuelle Dicke: Active color: Aktuelle Farbe: Press ESC to cancel Drücke ESC für Abbruch Active tool size: Aktive Werkzeuggröße: Active Color: Aktive Farbe: Grab Color Farbe erfassen Display grid Raster anzeigen SizeDecreaseTool Decrease Tool Size Werkzeuggröße verkleinern Decrease the size of the other tools Größe der anderen Werkzeuge verringern SizeIncreaseTool Increase Tool Size Werkzeuggröße erhöhen Increase the size of the other tools Größe der anderen Werkzeuge erhöhen SizeIndicatorTool Selection Size Indicator Größe der Auswahl Show X and Y dimensions of the selection X- und Y-Abmessungen der Auswahl anzeigen Show the dimensions of the selection (X Y) Zeige die Dimensionen der Auswahl (X Y) StrftimeChooserWidget Century (00-99) Jahrhundert (00-99) Year (00-99) Jahr (00-99) Year (2000) Jahr (2000) Month Name (jan) Monatsname (Jan) Month Name (january) Monatsname (Januar) Month (01-12) Monat (01-12) Week Day (1-7) Wochentag (1-7) Week (01-53) Woche (01-53) Day Name (mon) Wochentag (Mon) Day Name (monday) Wochentag (Montag) Day (01-31) Tag (01-31) Day of Month (1-31) Tag des Monats (1-31) Day (001-366) Tag (001-366) Time (%H-%M-%S) Zeit (%H-%M-%S) Time (%H-%M) Zeit (%H-%M) Hour (00-23) Stunde (00-23) Hour (01-12) Stunde (01-12) Minute (00-59) Minute (00-59) Second (00-59) Sekunde (00-59) Full Date (%m/%d/%y) Komplettes Datum (%m/%d/%y) Full Date (%Y-%m-%d) Komplettes Datum (%Y-%m-%d) Full Date (%d-%m-%Y) Volles Datum (%d-%m-%Y) SystemNotification Flameshot Info Flameshot Info TextConfig StrikeOut Durchstreichen Underline Unterstrichen Bold Fettdruck Italic Kursiv Left Align Links ausrichten Center Align Mittig ausrichten Right Align Rechts ausrichten TextTool Text Text Add text to your capture Füge Text zur Auswahl hinzu TrayIcon &Take Screenshot &Screenshot anfertigen &Open Launcher &Launcher öffnen &Configuration &Konfiguration &About &Über Flameshot Check for updates Auf Aktualisierungen überprüfen New version %1 is available Neue Version %1 ist verfügbar &Quit &Beenden &Latest Uploads &Letzte Uploads &Open Save Path Speicherpfad &öffnen UIcolorEditor UI Color Editor Grafischer Farbeditor Change the color moving the selectors and see the changes in the preview buttons. Ändere die Farbe, indem due die Selektoren bewegst, und sieh dir die Änderungen in den Vorschauschaltflächen an. Select a Button to modify it Wähle einen Knopf, um ihn zu verändern Main Color Hauptfarbe Click on this button to set the edition mode of the main color. Wähle diesen Knopf, um den Bearbeitungsmodus der Hauptfarbe zu wählen. Contrast Color Kontrastfarbe Click on this button to set the edition mode of the contrast color. Wähle diesen Knopf, um den Bearbeitungsmodus der Kontrastfarbe zu wählen. UndoTool Undo Verwerfen Undo the last modification Letzte Änderung verwerfen UpdateNotificationWidget New Flameshot version %1 is available Neue Flameshot Version %1 ist verfügbar Ignore Ignorieren Later Später Update Aktualisieren UploadHistory Upload History Upload-Verlauf Screenshots history is empty Screenshot Verlauf ist leer UploadLineItem Form Formular TextLabel TextEtikett Copy URL URL kopieren Open In Browser Im Browser öffnen Confirm to delete Löschen bestätigen Are you sure you want to delete a screenshot from the latest uploads and server? Bist du sicher, dass du die Aufnahme aus den Letzten Uploads und vom Server löschen möchtest? UtilityPanel Close Schließen <Empty> <Leer> VisualsEditor Opacity of area outside selection: Deckkraft des Bereichs außerhalb der Auswahl: UI Color Editor Grafischer Farbeditor Colorpicker Editor Farbwähler-Editor Button Selection Knopfauswahl Select All Alle wählen color_widgets::ColorDialog Pick Wählen color_widgets::ColorPalette Unnamed Unbenannt color_widgets::ColorPaletteModel Unnamed Unbenannt %1 (%2 colors) %1 (%2 Farben) color_widgets::ColorPaletteWidget Open a new palette from file Neue Palette aus einer Datei öffnen Create a new palette Neue Palette anlegen Duplicate the current palette Aktuelle Palette duplizieren Delete the current palette Aktuelle Palette löschen Revert changes to the current palette Änderungen an der aktuellen Palette rückgängig machen Save changes to the current palette Änderungen an der aktuellen Palette speichern Add a color to the palette Farbe zur Palette hinzufügen Remove the selected color from the palette Ausgewählte Farbe aus der Palette entfernen New Palette Neue Palette Name Name GIMP Palettes (*.gpl) GIMP-Paletten (*.gpl) Palette Image (%1) Palette Bild (%1) All Files (*) Alle Dateien (*) Open Palette Palette öffnen Failed to load the palette file %1 Die Palettendatei konnte nicht geladen werden %1 color_widgets::GradientEditor Add Color Farbe hinzufügen Remove Color Farbe entfernen Edit Color... Farbe bearbeiten ... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 Farben) color_widgets::Swatch Clear Color Farbe löschen %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_el.ts ================================================ AbstractWidgetList Add New Προσθήκη Νέου Move Up Μετακίνηση Επάνω Move Down Μετακίνηση Κάτω Remove Κατάργηση AcceptTool Accept Αποδοχή Accept the capture Αποδοχή της λήψης AppLauncher App Launcher Εκκινητής Εφαρμογής Choose an app to open the capture Επιλέξτε μια εφαρμογή για να ανοίξετε την λήψη AppLauncherWidget Open With Άνοιγμα Με Launch in terminal Άνοιγμα στο τερματικό Keep open after selection Να παραμείνει ανοικτό μετά την επιλογή Error Σφάλμα Unable to launch in terminal. Δεν είναι δυνατή η εκκίνηση στο τερματικό. Unable to write in Δεν είναι δυνατή η εγγραφή στο ArrowTool Arrow Βέλος Set the Arrow as the paint tool Ορίστε το Βέλος ως εργαλείο ζωγραφικής BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Λειτουργία Λήψης</b> Rectangular Region Ορθογώνια Περιοχή Full Screen (Current Display) Πλήρη Οθόνη (Τρέχουσα Οθόνη) Full Screen (All Monitors) Πλήρη Οθόνη (Όλες οι Οθόνες) No Delay Χωρίς Καθυστέρηση second δευτερόλεπτο seconds δευτερόλεπτα Take new screenshot Λήψη νέου στιγμιότυπου οθόνης Area: Περιοχή: Capture Launcher Εκκινητής Λήψης TextLabel Ετικέτα Κειμένου Capture Mode Λειτουργία Λήψης Delay: Καθυστέρηση: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Δεν είναι δυνατή η λήψη της οθόνης Mouse Ποντίκι Select screenshot area Επιλέξτε περιοχή στιγμιότυπου οθόνης Mouse Wheel Τροχός Ποντικιού Change tool size Αλλαγή μεγέθους εργαλείου Right Click Δεξί Κλίκ Show color picker Εμφάνιση επιλογέα χρώματος Open side panel Ανοίξτε το πλαϊνό πλαίσιο Esc Esc Exit Έξοδος Quit Capture Ακύρωση Λήψης Are you sure you want to quit capture? Είστε σίγουροι ότι θέλετε να ακυρώσετε τη λήψη; Do not show this again Μην εμφανιστεί ξανά Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Το Flameshot έχει χάσει την εστίαση. Οι συντομεύσεις πληκτρολογίου δεν θα λειτουργήσουν μέχρι να κάνετε κλικ κάπου. Configuration error resolved. Launch `flameshot gui` again to apply it. Επιλύθηκε το σφάλμα διαμόρφωσης. Εκκινήστε ξανά το «flameshot gui» για να το εφαρμόσετε. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Επιλέξτε μια περιοχή με το ποντίκι, ή πατήστε Esc για έξοδο. Πατήστε Enter για να κάνετε λήψη της οθόνης. Πατήστε δεξί κλικ για να εμφανιστεί ο επιλογέας χρωμάτων. Χρησιμοποιήστε την ροδέλα του ποντικιού για να αλλάξετε το πάχος του επιλεγμένου εργαλείου. Πατήστε καινό για να ανοίξετε τον πλευρικό πίνακα. Tool Settings Ρυθμίσεις Εργαλείου CircleCountTool Circle Counter Κυκλικός Μετρητής Add an autoincrementing counter bubble Προσθέτει ένα αυτόματα αυξανόμενο μετρητή φυσαλίδων CircleTool Circle Κύκλος Set the Circle as the paint tool Ορίστε τον Κύκλο ως εργαλείο ζωφραφικής ColorDialog Select Color Επιλέξτε Χρώμα Saturation Κορεσμός Hue Απόχρωση Hex Hex Blue Μπλε Value Τιμή Green Πράσινο Alpha Alpha Red Κόκκινο ColorGrabWidget Accept color Αποδοχή χρώματος Enter or Left Click Enter ή Αριστερό Κλικ Precisely select color Επιλέξτε με ακρίβεια χρώμα Hold Left Click Κρατήστε Πατημένο το Αριστερό Κλικ Toggle magnifier Εναλλαγή μεγεθυντικού φακού Space or Right Click Space ή Δεξί Κλικ Cancel Ακύρωση Esc Esc ColorPickerEditor Select Preset: Επιλέξτε Προεπιλογή: Select preset using the spinbox Επιλέξτε προεπιλογή χρησιμοποιώντας το spinbox Edit Preset: Επεξεργασία Προεπιλογής: Enter color to update preset Εισαγάγετε χρώμα για ενημέρωση προεπιλογής Update Ενημέρωση Press button to update the selected preset Πατήστε το κουμπί για να ενημερώσετε την επιλεγμένη προεπιλογή Delete Διαγραφή Press button to delete the selected preset Πατήστε το κουμπί για να διαγράψετε την επιλεγμένη προεπιλογή Add Preset: Προσθήκη Προεπιλογής: Enter color manually or select it using the color-wheel Εισαγάγετε το χρώμα χειροκίνητα ή επιλέξτε το χρησιμοποιώντας τον τροχό χρώματος Add Προσθήκη Press button to add preset Πατήστε το κουμπί για να προσθέσετε προεπιλογή Error Σφάλμα Unable to add preset. Maximum limit reached. Δεν είναι δυνατή η προσθήκη προκαθορισμένης ρύθμισης. Συμπληρώθηκε το μέγιστο όριο. Unable to remove preset. Minimum limit reached. Δεν είναι δυνατή η κατάργηση της προεπιλογής. Συμπληρώθηκε το ελάχιστο όριο. ConfigErrorDetails Configuration errors Σφάλματα διαμόρφωσης ConfigHandler Unrecognized setting: '%1' Μη αναγνωρισμένη ρύθμιση: '% 1' Unrecognized shortcut name: '%1'. Μη αναγνωρισμένο όνομα συντόμευσης: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Διένεξη συντομεύσεων: "% 1" και "% 2" έχουν την ίδια συντόμευση: %3 Bad value in '%1'. Expected: %2 Λάθος τιμή στο '% 1'. Αναμενόμενο: %2 You have successfully resolved the configuration error. Επιλύσατε με επιτυχία το σφάλμα διαμόρφωσης. The configuration contains an error. Open configuration to resolve. Η διαμόρφωση περιέχει ένα σφάλμα. Ανοίξτε τη διαμόρφωση για επίλυση. Bad config key '%1' in ConfigHandler. Please report this as a bug. Εσφαλμένο κλειδί διαμόρφωσης '%1' στο ConfigHandler. Αναφέρετε αυτό ως σφάλμα. ConfigResolver Resolve configuration errors Επίλυση σφαλμάτων διαμόρφωσης <b>You must resolve all errors before continuing:</b> <b>Πρέπει να επιλύσετε όλα τα σφάλματα πριν συνεχίσετε:</b> Reset Επαναφορά Reset to the default value. Επαναφορά στην προεπιλεγμένη τιμή. Remove Κατάργηση Remove this setting. Καταργήστε αυτήν τη ρύθμιση. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Ορισμένες συντομεύσεις πληκτρολογίου έχουν διενέξεις. Αυτό ΔΕΝ θα εμποδίσει την εκκίνηση του flameshot. Επιλύστε τα με μη αυτόματο τρόπο στο αρχείο ρυθμίσεων. Resolve all Επίλυση όλων Resolve all listed errors. Επιλύστε όλα τα σφάλματα που αναφέρονται. Details Λεπτομέριες ConfigWindow Configuration Διαμόρφωση Interface Διεπαφή Filename Editor Επεξεργαστής Ονόματος αρχείου General Γενικά Shortcuts Συντομεύσεις Resolve Επίλυση <b>Configuration file has errors. Resolve them before continuing.</b> <b>Το αρχείο διαμόρφωσης έχει σφάλματα. Επιλύστε τα πριν συνεχίσετε.</b> Controller New version %1 is available Η νέα έκδοση % 1 είναι διαθέσιμη You have the latest version Έχετε την πιο πρόσφατη έκδοση Failed to get information about the latest version. Αποτυχία λήψης πληροφοριών για την πιο πρόσφατη έκδοση. Error Σφάλμα Unable to close active modal widgets Δεν είναι δυνατό το κλείσιμο των ενεργών γραφικών στοιχείων &Open Launcher &Άνοιγμα Εκκινητή &Configuration &Διαμόρφωση &About &Σχετικά με Check for updates Έλεγχος για ενημερώσεις &Latest Uploads &Τελευταίες Μεταφορτώσεις URL copied to clipboard. Η διεύθυνση URL αντιγράφηκε στο πρόχειρο. &Information &Informació &Quit %Κλείσιμο &Take Screenshot &Λήψη Στιγμιότυπου οθόνης CopyTool Copy Αντιγραφή Copy selection to clipboard Αντιγραφή επιλογής στο πρόχειρο Copy the selection into the clipboard Copy the selection into the clipboard DBusUtils Unable to connect via DBus Unable to connect via DBus ExitTool Exit Έξοδος Leave the capture screen Αφήστε την οθόνη λήψης FileNameEditor Edit the name of your captures: Επεξεργαστείτε το όνομα των λήψεών σας: Edit: Επεξεργασία: Preview: Προεπισκόπηση: Save Αποθήκευση Saves the pattern Αποθηκεύει το μοτίβο Restore Επαναφορά Restores the saved pattern Επαναφέρει το αποθηκευμένο μοτίβο Clear Καθαρισμός Deletes the name Διαγράφει το όνομα Flameshot Error Σφάλμα Unable to close active modal widgets Δεν είναι δυνατό το κλείσιμο των ενεργών γραφικών στοιχείων URL copied to clipboard. Η διεύθυνση URL αντιγράφηκε στο πρόχειρο. FlameshotDaemon New version %1 is available Η νέα έκδοση % 1 είναι διαθέσιμη You have the latest version Έχετε την πιο πρόσφατη έκδοση Failed to get information about the latest version. Αποτυχία λήψης πληροφοριών για την πιο πρόσφατη έκδοση. Unable to connect via DBus Δεν είναι δυνατή η σύνδεση μέσω DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Εισαγωγή Error Σφάλμα Unable to read file. Δεν είναι δυνατή η ανάγνωση του αρχείου. Unable to write file. Δεν είναι δυνατή η εγγραφή του αρχείου. Save File Αποθήκευση Αρχείου Confirm Reset Επιβεβαίωση Επαναφοράς Are you sure you want to reset the configuration? Είστε βέβαιοι ότι θέλετε να επαναφέρετε τη διαμόρφωση; Show help message Εμφάνιση μηνύματος βοήθειας Show the help message at the beginning in the capture mode. Εμφάνιση του μηνύματος βοήθειας στην αρχή της λειτουργίας λήψης. Show the side panel button Εμφάνιση του κουμπιού του πλαϊνού πίνακα Show the side panel toggle button in the capture mode. Εμφάνιση του κουμπιού εναλλαγής του πλαϊνού πίνακα στη λειτουργία λήψης. Show desktop notifications Εμφάνιση ειδοποιήσεων στην επιφάνειας εργασίας Show tray icon Εμφάνιση εικονιδίου tray Show the systemtray icon Εμφάνιση του εικονιδίου συστήματοςtray Confirmation required to delete screenshot from the latest uploads Απαιτείται επιβεβαίωση για τη διαγραφή στιγμιότυπου οθόνης από τις πιο πρόσφατες μεταφορτώσεις Configuration File Αρχείο Διαμόρφωσης Export Εξαγωγή Reset Επαναφορά Automatic check for updates Αυτόματος έλεγχος για ενημερώσεις Allow multiple flameshot GUI instances simultaneously Επιτρέψτε πολλαπλές παρουσίες GUI flameshot ταυτόχρονα This allows you to take screenshots of flameshot itself for example. Αυτό σας επιτρέπει να τραβάτε στιγμιότυπα οθόνης του ίδιου του flameshot, για παράδειγμα. Automatically close daemon when it is not needed Κλείστε αυτόματα το daemon όταν δεν χρειάζεται Launch at startup Έναρξη κατά την εκκίνηση Launch Flameshot Εκκίνηση Flameshot Show welcome message on launch Εμφάνιση μηνύματος καλωσορίσματος κατά την εκκίνηση Use large predefined color palette Χρησιμοποιήστε μεγάλη προκαθορισμένη παλέτα χρωμάτων Copy URL after upload Αντιγράψτε τη διεύθυνση URL μετά τη μεταφόρτωση Copy URL and close window after upload Αντιγράψτε τη διεύθυνση URL και κλείστε το παράθυρο μετά τη μεταφόρτωση Save image after copy Αποθήκευση εικόνας μετά την αντιγραφή Save image file after copying it Αποθηκεύστε το αρχείο εικόνας αφού το αντιγράψετε Show the help message at the beginning in the capture mode Εμφανίστε το μήνυμα βοήθειας στην αρχή στη λειτουργία λήψης Use last region for GUI mode Χρησιμοποιήστε την τελευταία περιοχή Use the last region as the default selection for the next screenshot in GUI mode Χρησιμοποιεί την τελευταία περιοχή ως προεπιλεγμένη επιλογή για το επόμενο στιγμιότυπο οθόνης Show the side panel toggle button in the capture mode Εμφάνιση του κουμπιού εναλλαγής του πλαϊνού πίνακα στη λειτουργία λήψης Enable desktop notifications Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας Show abort notifications Εμφάνιση ειδοποίησεων ακύρωσης Enable abort notifications Ενεργοποίηση ειδοποιήσεων ακύρωσης Show icon in the system tray Εμφάνιση εικονιδίου στο tray συστήματος Use grim to capture screenshots Χρήση του grim για λήψη στιγμιότυπων οθόνης Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Το grim είναι ένα εργαλείο που λειτουργεί μόνο στο Wayland για λήψη στιγμιότυπων οθόνης, βασισμένο στο πρωτόκολλο screencopy. Συνήθως θα πρέπει να το ενεργοποιείτε μόνο σε minimal διαχειριστές παραθύρων Wayland, όπως το sway, το hyprland κ.λπ. Ask for confirmation to delete screenshot from the latest uploads Ζητήστε επιβεβαίωση για τη διαγραφή στιγμιότυπου οθόνης από τις πιο πρόσφατες μεταφορτώσεις Check for updates automatically Έλεγχος ενημερώσεων αυτόματα This allows you to take screenshots of Flameshot itself for example Αυτό σας επιτρέπει να τραβάτε στιγμιότυπα οθόνης του ίδιου του Flameshot, για παράδειγμα Launch Flameshot daemon when computer is booted Εκκίνηση του Flameshot daemon κατά την έναρξη του υπολογιστή Show the welcome message box in the middle of the screen while taking a screenshot Εμφάνιση του πλαισίου μηνύματος καλωσορίσματος στη μέση της οθόνης κατά τη λήψη ενός στιγμιότυπου οθόνης Use a large predefined color palette Χρήση μιας μεγάλης προκαθορισμένης παλέτα χρωμάτων Copy on double click Αντιγραφή με διπλό κλικ Enable Copy on Double Click Ενεργοποιήστε την Αντιγραφή με Διπλό Κλικ Copy URL and close window after uploading was successful Αντιγραφή της διεύθυνσης URL και κλείσιμο του παραθύρου μετά την επιτυχή μεταφόρτωση Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Εμφάνιση επιβεβαίωσης πριν την έξοδο με το πλήκτρο ESC Enable Copy to clipboard on Double Click Ενεργοποίηση αντιγραφής στο πρόχειρο με διπλό κλικ Copy URL after uploading was successful Αντιγραφή του URL μετά από επιτυχημένη μεταφόρτωση After copying the screenshot, save it to a file as well Αφού αντιγράψετε το στιγμιότυπο οθόνης, αποθηκεύστε το και σε αρχείο Save Path Αποθήκευση Διαδρομής Change... Αλλαγή... Use fixed path for screenshots to save Χρησιμοποιήστε σταθερή διαδρομή για στιγμιότυπα οθόνης για αποθήκευση Preferred save file extension: Προτιμώμενη επέκταση αρχείου αποθήκευσης: Latest Uploads Max Size Τελευταίες Μεταφορτώσεις Μέγιστο Μέγεθος Imgur Application Client ID Κλειδί API Imgur Undo limit Αναίρεση Ορίου Use JPG format for clipboard (PNG default) Χρήση μορφής JPG για το πρόχειρο (προεπιλογή PNG) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Αντιγραφή διαδρομής αρχείου μετά την αποθήκευση Copy the file path to clipboard after the file is saved Αντιγραφή της διαδρομής του αρχείου στο πρόχειρο μετά την αποθήκευση του αρχείου Anti-aliasing image when zoom the pinned image Anti-aliasing της εικόνας κατά τη μεγέθυνση της καρφιτσωμένης εικόνας After zooming the pinned image, should the image get smoothened or stay pixelated Μετά τη μεγέθυνση της καρφιτσωμένης εικόνας, θέλετε η εικόνα να εξομαλυνθεί ή να παραμείνει pixelated Upload image without confirmation Μεταφόρτωση εικόνας χωρίς επιβεβαίωση Choose a Folder Επιλέξτε ένα Φάκελο Unable to write to directory. Δεν είναι δυνατή η εγγραφή στον κατάλογο. Show magnifier Εμφάνιση μεγεθυντικού φακού Enable a magnifier while selecting the screenshot area Ενεργοποιήστε έναν μεγεθυντικό φακό ενώ επιλέγετε την περιοχή στιγμιότυπου οθόνης Square shaped magnifier Μεγεθυντικός φακός τετράγωνου σχήματος Make the magnifier to be square-shaped Κάντε τον μεγεθυντικό φακό να έχει τετράγωνο σχήμα Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Τελευταίες Μεταφορτώσεις Screenshots history is empty Το ιστορικό στιγμιότυπων οθόνης είναι κενό Copy URL Αντιγραφή διεύθυνσης URL URL copied to clipboard. Η διεύθυνση URL αντιγράφηκε στο πρόχειρο. Open in browser Ανοιγμα σε πρόγραμμα περιήγησης Confirm to delete Επιβεβαίωση για διαγραφή Are you sure you want to delete a screenshot from the latest uploads and server? Είστε βέβαιοι ότι θέλετε να διαγράψετε ένα στιγμιότυπο οθόνης από τις πιο πρόσφατες μεταφορτώσεις και διακομιστή; ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Επιβεβαίωση Μεταφόρτωσης Do you want to upload this capture? Θέλετε να ανεβάσετε αυτήν τη λήψη; Upload without confirmation Μεταφόρτωση χωρίς επιβεβαίωση ImgUploader Uploading Image S'està pujant la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Μεταφόρτωση εικόνας Uploading Image Μεταφόρτωση Εικόνας Copy URL Αντιγραφή διεύθυνσης URL Open URL Άνοιγμα διεύθυνσης URL Delete image Διαγραφή εικόνας Image to Clipboard. Εικόνα στο Πρόχειρο. Save image Αποθήκευση εικόνας Unable to open the URL. Δεν είναι δυνατό το άνοιγμα της διεύθυνσης URL. URL copied to clipboard. Η διεύθυνση URL αντιγράφηκε στο πρόχειρο. Screenshot copied to clipboard. Το στιγμιότυπο οθόνης αντιγράφηκε στο πρόχειρο. Unable to save the screenshot to disk. Δεν είναι δυνατή η αποθήκευση του στιγμιότυπου οθόνης στο δίσκο. Screenshot saved. Το στιγμιότυπο οθόνης αποθηκεύτηκε. ImgUploaderTool Image Uploader Πρόγραμμα Μεταφόρτωσης Εικόνων Upload the selection Ανεβάστε την επιλογή ImgurUploader Upload to Imgur Upload to Imgur Uploading Image Μεταφόρτωση εικόνας Copy URL Αντιγραφή διεύθυνσης URL Open URL Άνοιγμα URL Delete image Delete image Image to Clipboard. Εικόνα στο Πρόχειρο. Unable to open the URL. Δεν είναι δυνατό το άνοιγμα της διεύθυνσης URL. URL copied to clipboard. Η διεύθυνση URL αντιγράφηκε στο πρόχειρο. Screenshot copied to clipboard. Το στιγμιότυπο οθόνης αντιγράφηκε στο πρόχειρο. ImgurUploaderTool Image Uploader Image Uploader Upload the selection to Imgur Upload the selection to Imgur InfoWindow About Σχετικά με Icon Εικονίδιο License Άδεια GPLv3+ GPLv3+ Version Έκδοση Flameshot v Flameshot v OS Info Πληροφορίες Λειτουργικού Συστήματος Copy Info Αντιγραφή πληροφοριών Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Άδεια</b></u> <u><b>Version</b></u> <u><b>Έκδοση</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Αντιστροφή Set Inverter as the paint tool Ρυθμίστε την Αντιστροφή ως εργαλείο ζωγραφικής LineTool Line Γραμμή Set the Line as the paint tool Ορίστε τη Γραμμή ως εργαλείο ζωγραφικής MarkerTool Marker Marker Set the Marker as the paint tool Ορίστε το Marker ως εργαλείο ζωγραφικής MoveTool Move Μετακίνηση Move the selection area Μετακίνηση της επιλεγμένης περιοχής PencilTool Pencil Μολύβι Set the Pencil as the paint tool Ορίστε το Μολύβι ως εργαλείο ζωγραφικής PinTool Pin Tool Εργαλείο Καρφίτσας Pin image on the desktop Καρφιτσώστε την εικόνα στην επιφάνεια εργασίας PinWidget Context menu Γενικό πλαίσιο μενού Copy to clipboard Αντιγραφή στο πρόχειρο Save to file Αποθήκευση στο αρχείο Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Κλείσιμο PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Ορίστε το Pixelate ως εργαλείο ζωγραφικής PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Απέτυχε η εγγραφή του %1. Σφάλμα: %2 Failed to unregister %1. Error: %2 Απέτυχε η κατάργηση της εγγραφής του %1. Σφάλμα: %2 QObject Capture saved to clipboard. Η λήψη αποθηκεύτηκε στο πρόχειρο. Error while saving to clipboard Σφάλμα κατά την αποθήκευση στο πρόχειρο Save screenshot Αποθήκευση στιγμιότυπου οθόνης Path copied to clipboard as Η διαδρομή αντιγράφηκε στο πρόχειρο ως Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Αποθήκευση Σφάλματος Capture saved as Η λήψη αποθηκεύτηκε ως Error trying to save as Σφάλμα κατά την προσπάθεια αποθήκευσης ως Unable to connect via DBus Δεν είναι δυνατή η σύνδεση μέσω DBus Powerful yet simple to use screenshot software. Ισχυρό αλλά απλό στη χρήση λογισμικό στιγμιότυπων οθόνης. See Δες Capture the entire desktop. Καταγράψτε ολόκληρη την επιφάνεια εργασίας. Open the capture launcher. Ανοίξτε τον εκκινητή καταγραφής. Start a manual capture in GUI mode. Ξεκινήστε μια χειροκίνητη λήψη σε λειτουργία GUI. Configure Διαμορφώστε Capture a single screen. Λήψη μίας οθόνης. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Υπάρχων κατάλογος ή νέο αρχείο για αποθήκευση Save the capture to the clipboard Αποθηκεύστε τη λήψη στο πρόχειρο Pin the capture to the screen Καρφιτσώστε τη λήψη στην οθόνη Upload screenshot Μεταφόρτωση στιγμιότυπου οθόνης Delay time in milliseconds Χρόνος καθυστέρησης σε χιλιοστά του δευτερολέπτου Repeat screenshot with previously selected region Επαναλάβετε το στιγμιότυπο οθόνης με την προηγουμένως επιλεγμένη περιοχή Screenshot region to select Περιοχή στιγμιότυπου οθόνης για επιλογή Set the filename pattern Ορίστε το μοτίβο ονόματος αρχείου Accept capture as soon as a selection is made Αποδεχτείτε τη λήψη μόλις γίνει μια επιλογή Enable or disable the trayicon Ενεργοποιήστε ή απενεργοποιήστε το εικονίδιο tray Enable or disable run at startup Ενεργοποίηση ή απενεργοποίηση της εκτέλεσης κατά την εκκίνηση Enable or disable the notifications Check the configuration for errors Ελέγξτε τη διαμόρφωση για σφάλματα Show the help message in the capture mode Εμφάνιση του μηνύματος βοήθειας στη λειτουργία λήψης Define the main UI color Καθορίστε το κύριο χρώμα διεπαφής χρήστη Define the contrast UI color Καθορίστε το χρώμα του αντίθεσης διεπαφής χρήστη Print raw PNG capture Εκτυπώστε λήψη raw PNG Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Εκτύπωση γεωμετρίας της επιλογής στη μορφή WxH+X+Y. Δεν κάνει τίποτα εάν έχει καθοριστεί raw Define the screen to capture (starting from 0) Καθορίστε την οθόνη για λήψη (ξεκινώντας από το 0) Invalid delay, it must be a number greater than 0 Μη έγκυρη καθυστέρηση, πρέπει να είναι αριθμός μεγαλύτερος από 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Μη έγκυρη περιοχή, χρησιμοποιήστε 'WxH+X+Y' ή 'όλες' ή 'οθόνη0/οθόνη1/...'. Invalid path, must be an existing directory or a new file in an existing directory Μη έγκυρη διαδρομή, πρέπει να είναι ένας υπάρχων κατάλογος ή ένα νέο αρχείο σε έναν υπάρχοντα κατάλογο Define the screen to capture Define the screen to capture default: screen containing the cursor προεπιλογή: οθόνη που περιέχει τον κέρσορα Screen number Αριθμός οθόνης Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Μη έγκυρο χρώμα, αυτή η σημαία υποστηρίζει τις ακόλουθες μορφές: - #RGB (καθένα από τα R, G και B είναι ένα μόνο εξαψήφιο) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Ονομασμένα χρώματα όπως "μπλε" ή "κόκκινο" Ίσως χρειαστεί να ξεφύγετε από το σύμβολο "#" όπως στο "\#FFF" Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Μη έγκυρος αριθμός οθόνης, δεν πρέπει να είναι αρνητικός Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Μη έγκυρη τιμή, πρέπει να οριστεί ως "true" ή "false" Error Σφάλμα Unable to write in Δεν είναι δυνατή η εγγραφή στο Requested screen exceeds screen count Η ζητούμενη οθόνη υπερβαίνει τον αριθμό οθονών Full screen screenshot pinned to screen Στιγμιότυπο πλήρης οθόνης καρφιτσώθηκε στην οθόνη URL copied to clipboard. Η διεύθυνση URL αντιγράφηκε στο πρόχειρο. Options Επιλογές Arguments Ορίσματα arguments ορίσματα Subcommands subcommands Usage Χρήση options επιλογές Per default runs Flameshot in the background and adds a tray icon for configuration. Από προεπιλογή εκτελείται το Flameshot στο παρασκήνιο και προσθέτει ένα εικονίδιο tray για διαμόρφωση. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Γεια σας, είμαι εδώ! Κάντε κλικ στο εικονίδιο tray για να τραβήξετε ένα στιγμιότυπο οθόνης ή κάντε κλικ με το δεξί κουμπί για να δείτε περισσότερες επιλογές. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Κλείστε την λήψη Screenshot history Ιστορικό στιγμιότυπων οθόνης Capture screen Καταγραφή οθόνης Show color picker Εμφάνιση επιλογέα χρώματος Change the tool's size Αλλάξτε το μέγεθος των εργαλείων Change the tool's thickness Αλλάξτε το πάχος του εργαλείου RectangleTool Rectangle Ορθογώνιο παραλληλόγραμμο Set the Rectangle as the paint tool Ορίστε το Ορθογώνιο ως εργαλείο ζωγραφικής RedoTool Redo Επανάληψη Redo the next modification Επαναλάβετε την επόμενη τροποποίηση SaveTool Save Αποθήκευση Save screenshot to a file Αποθήκευση στιγμιότυπου οθόνης σε αρχείο Save the capture Save the capture ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Δεν είναι δυνατός ο εντοπισμός του περιβάλλοντος επιφάνειας εργασίας (GNOME; KDE; Sway; ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Συμβουλή: δοκιμάστε να ρυθμίσετε τη μεταβλητή περιβάλλοντος XDG_CURRENT_DESKTOP. Unable to capture screen Δεν είναι δυνατή η λήψη της οθόνης SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Ορθογώνια Επιλογή Set Selection as the paint tool Ορίστε την Επιλογή ως το εργαλείο ζωγραφικής SetShortcutDialog Set Shortcut Ορισμός Συντόμευσης Enter new shortcut to change Εισαγάγετε νέα συντόμευση για αλλαγή Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Πατήστε Esc για ακύρωση ή ⌘+Backspace για να απενεργοποιήσετε τη συντόμευση πληκτρολογίου. Press Esc to cancel or Backspace to disable the keyboard shortcut. Πατήστε Esc για ακύρωση ή Backspace για να απενεργοποιήσετε τη συντόμευση πληκτρολογίου. Flameshot must be restarted for changes to take effect. Πρέπει να γίνει επανεκκίνηση του Flameshot για να τεθούν σε ισχύ οι αλλαγές. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Διαθέσιμες συντομεύσεις στη λειτουργία λήψης οθόνης. Description Περιγραφή Key Πλήκτρο Left Double-click Αριστερό Διπλό Κλικ Toggle side panel Εναλλαγή πλαϊνού πάνελ Grab a color from the screen Resize selection left 1px Αλλαγή μεγέθους επιλογής αριστερά 1px Resize selection right 1px Αλλαγή μεγέθους επιλογής δεξιά 1px Resize selection up 1px Αλλαγή μεγέθους επιλογής έως 1px Resize selection down 1px Αλλαγή μεγέθους επιλογής κατά 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Επιλέξτε ολόκληρη την οθόνη Move selection left 1px Μετακίνηση επιλογής αριστερά 1px Move selection right 1px Μετακίνηση επιλογής δεξιά 1px Move selection up 1px Μετακίνηση επιλογής επάνω 1px Move selection down 1px Μετακίνηση επιλογής κάτω 1px Commit text in text area Δέσμευση κειμένου στην περιοχή κειμένου Delete selected drawn object Cancel current selection Delete current tool Διαγραφή τρέχοντος εργαλείου Capture screen Καταγραφή οθόνης Screenshot history Ιστορικό στιγμιότυπων οθόνης SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Ενεργό μέγεθος εργαλείου: Active Color: Ενεργό Χρώμα: Grab Color Πιάσε το Χρώμα Display grid SizeDecreaseTool Decrease Tool Size Μείωση Μεγέθους Εργαλείου Decrease the size of the other tools Μειώστε το μέγεθος των άλλων εργαλείων SizeIncreaseTool Increase Tool Size Αύξηση Μεγέθους Εργαλείου Increase the size of the other tools Αυξήστε το μέγεθος των άλλων εργαλείων SizeIndicatorTool Selection Size Indicator Δείκτης Μεγέθους Επιλογής Show X and Y dimensions of the selection Εμφάνιση των διαστάσεων X και Y της επιλογής Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Αιώνας (00-99) Year (00-99) Έτος (00-99) Year (2000) Έτος (2000) Month Name (jan) Όνομα Μήνα (Ιαν) Month Name (january) Όνομα Μήνα (Ιανουάριος) Month (01-12) Μήνας (01-12) Week Day (1-7) Ημέρα Eβδομάδας (1-7) Week (01-53) Εβδομάδα (01-53) Day Name (mon) Όνομα Hμέρας (Δευτ) Day Name (monday) Όνομα Ημέρας (Δευτέρα) Day (01-31) Ημέρα (01-31) Day of Month (1-31) Ημέρα του Μήνα (1-31) Day (001-366) Ημέρα (001-366) Hour (00-23) Ώρα (00-23) Hour (01-12) Ώρα (01-12) Minute (00-59) Λεπτό (00-59) Second (00-59) Δευτερόλεπτο (00-59) Full Date (%m/%d/%y) Πλήρης Ημερομηνία (%μήνας/%μέρα/%έτος) Full Date (%Y-%m-%d) Πλήρης Ημερομηνία (%έτος-%μήνας-%μέρα) Full Date (%d-%m-%Y) Time (%H-%M-%S) Ώρα (%Ω-%Λ-%Δ) Time (%H-%M) Ώρα (%Ω-%Λ) SystemNotification Flameshot Info Πληροφορίες Flameshot TextConfig StrikeOut StrikeOut Underline Υπογραμμίζω Bold Έντονο Italic Italic Left Align Αριστερή Στοίχιση Center Align Στοίχιση στο Κέντρο Right Align Δεξιά Στοίχιση TextTool Text Κείμενο Add text to your capture Προσθέστε κείμενο στη λήψη σας TrayIcon &Take Screenshot &Λήψη Στιγμιότυπου οθόνης &Open Launcher &Άνοιγμα Εκκινητή &Configuration &Διαμόρφωση &About &Σχετικά με Check for updates Έλεγχος για ενημερώσεις New version %1 is available Η νέα έκδοση % 1 είναι διαθέσιμη &Quit %Κλείσιμο &Latest Uploads &Τελευταίες Μεταφορτώσεις &Open Save Path UIcolorEditor UI Color Editor Επεξεργαστής Χρωμάτων Διεπαφής χρήστη Change the color moving the selectors and see the changes in the preview buttons. Αλλάξτε το χρώμα μετακινώντας τους επιλογείς και δείτε τις αλλαγές στα κουμπιά προεπισκόπησης. Select a Button to modify it Επιλέξτε ένα κουμπί για να το τροποποιήσετε Main Color Κύριο Χρώμα Click on this button to set the edition mode of the main color. Κάντε κλικ σε αυτό το κουμπί για να ορίσετε τη λειτουργία έκδοσης του κύριου χρώματος. Contrast Color Χρώμα Αντίθεσης Click on this button to set the edition mode of the contrast color. Κάντε κλικ σε αυτό το κουμπί για να ορίσετε τη λειτουργία έκδοσης του χρώματος αντίθεσης. UndoTool Undo Αναίρεση Undo the last modification Αναίρεση της τελευταίας τροποποίησης UpdateNotificationWidget New Flameshot version %1 is available Η νέα έκδοση Flameshot % 1 είναι διαθέσιμη Ignore Αγνόησή Later Αργότερα Update Ενημέρωση UploadHistory Upload History Ιστορικό Mεταφόρτωσης Screenshots history is empty Το ιστορικό στιγμιότυπων οθόνης είναι κενό UploadLineItem Form Φόρμα TextLabel Ετικέτα Κειμένου Copy URL Αντιγραφή διεύθυνσης URL Open In Browser Άνοιγμα σε Πρόγραμμα περιήγησης Confirm to delete Επιβεβαίωση για διαγραφή Are you sure you want to delete a screenshot from the latest uploads and server? Είστε βέβαιοι ότι θέλετε να διαγράψετε ένα στιγμιότυπο οθόνης από τις πιο πρόσφατες μεταφορτώσεις και διακομιστή; UtilityPanel Close Κλείσιμο <Empty> <Άδειο> VisualsEditor Opacity of area outside selection: Αδιαφάνεια περιοχής εκτός επιλογής: UI Color Editor Επεξεργαστής Χρωμάτων Διεπαφής χρήστη Colorpicker Editor Επεξεργαστής Επιλογέα Χρώματος Button Selection Επιλογή Κουμπιού Select All Επιλογή Όλων color_widgets::ColorDialog Pick Επιλογή color_widgets::ColorPalette Unnamed Ανώνυμο color_widgets::ColorPaletteModel Unnamed Ανώνυμο %1 (%2 colors) % 1 (% 2 χρώματα) color_widgets::ColorPaletteWidget Open a new palette from file Ανοίξτε μια νέα παλέτα από το αρχείο Create a new palette Δημιουργήστε μια νέα παλέτα Duplicate the current palette Αντιγράψτε την τρέχουσα παλέτα Delete the current palette Διαγράψτε την τρέχουσα παλέτα Revert changes to the current palette Επαναφέρετε τις αλλαγές στην τρέχουσα παλέτα Save changes to the current palette Αποθηκεύστε τις αλλαγές στην τρέχουσα παλέτα Add a color to the palette Προσθέστε ένα χρώμα στην παλέτα Remove the selected color from the palette Αφαιρέστε το επιλεγμένο χρώμα από την παλέτα New Palette Νέα Παλέτα Name Όνομα GIMP Palettes (*.gpl) Παλέτες GIMP (* .gpl) Palette Image (%1) Παλέτα Εικόνας (% 1) All Files (*) Όλα τα Αρχεία (*) Open Palette Ανοίξτε την Παλέτα Failed to load the palette file %1 Αποτυχία φόρτωσης του αρχείου παλέτας %1 color_widgets::GradientEditor Add Color Προσθήκη Χρώματος Remove Color Αφαιρέστε το Χρώμα Edit Color... Επεξεργασία Χρώματος... color_widgets::GradientListModel %1 (%2 colors) % 1 (% 2 χρώματα) color_widgets::Swatch Clear Color Καθαρισμός Χρώματος %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_en.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Unable to write in Unable to launch in terminal. ArrowTool Arrow Set the Arrow as the paint tool CaptureLauncher Capture Launcher TextLabel Capture Mode Area: Delay: WxH+x+y seconds Take new screenshot Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second CaptureWidget Unable to capture screen Mouse Select screenshot area Mouse Wheel Change tool size Right Click Show color picker Open side panel Esc Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Enter or Left Click Accept color Hold Left Click Precisely select color Space or Right Click Toggle magnifier Esc Cancel ColorPickerEditor Edit Preset: Enter color to update preset Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration General Interface Filename Editor Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> CopyTool Copy Copy selection to clipboard ExitTool Exit Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Restores the saved pattern Clear Deletes the name Flameshot Error Unable to close active modal widgets URL copied to clipboard. FlameshotDaemon New version %1 is available You have the latest version Failed to get information about the latest version. Unable to connect via DBus GeneralConf Import Error Unable to read file. Unable to write file. Save File Confirm Reset Are you sure you want to reset the configuration? Show help message Show the help message at the beginning in the capture mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel button Show the side panel toggle button in the capture mode Show desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show tray icon Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Confirmation required to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Configuration File Export Reset Automatic check for updates Check for updates automatically Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of Flameshot itself for example Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Show welcome message on launch Show the welcome message box in the middle of the screen while taking a screenshot Ask before quit capture Show the confirmation prompt before ESC quit Use large predefined color palette Use a large predefined color palette Copy on double click Enable Copy to clipboard on Double Click Copy URL after upload Copy URL after uploading was successful Save image after copy After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploaderBase Upload image Uploading Image Copy URL Open URL Delete image Image to Clipboard. Save image Unable to open the URL. URL copied to clipboard. Screenshot copied to clipboard. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Upload the selection ImgurUploader Unable to open the URL. InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QObject Options Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Quit capture Screenshot history Capture screen Show color picker Change the tool's size Requested screen exceeds screen count Full screen screenshot pinned to screen Unable to connect via DBus Powerful yet simple to use screenshot software. See Capture screenshot of all monitors at the same time. Open the capture launcher. Start a manual capture in GUI mode. Configure Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be a number greater than 0 Invalid screen number, it must be non negative Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid value, it must be defined as 'true' or 'false' Error Unable to write in Capture saved as Error trying to save as Error while saving to clipboard Capture saved to clipboard. Save screenshot Path copied to clipboard as Save Error Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file ScreenGrabber The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Description Key Left Double-click Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection right 1px Resize selection up 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Move selection left 1px Move selection right 1px Move selection up 1px Move selection down 1px Commit text in text area Delete selected drawn object Cancel current selection Capture screen Screenshot history SidePanelWidget Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Time (%H-%M-%S) Time (%H-%M) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Open Launcher &Configuration &About Check for updates New version %1 is available &Quit &Latest Uploads &Open Save Path UIcolorEditor Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty UploadLineItem Form TextLabel Copy URL Open In Browser Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_es.ts ================================================ AbstractWidgetList Add New Añadir Nuevo Move Up Subir Move Down Bajar Remove Eliminar AcceptTool Accept Aceptar Accept the capture Aceptar la captura AppLauncher App Launcher Lanzador de Aplicaciones Choose an app to open the capture Elige una aplicación con la que abrir la captura AppLauncherWidget Open With Abrir Con Launch in terminal Lanzar en terminal Keep open after selection Mantener abierto tras la selección Error Error Unable to write in Imposible escribir en Unable to launch in terminal. Imposible lanzar en terminal. ArrowTool Arrow Flecha Set the Arrow as the paint tool Establecer la Flecha como la herramienta de dibujo BlurTool Blur Desenfoque Set Blur as the paint tool Establece el Desenfoque como herramienta de dibujo CaptureLauncher <b>Capture Mode</b> <b>Modo de captura</b> Rectangular Region Región rectangular Full Screen (Current Display) Pantalla Completa (Monitor Actual) Full Screen (All Monitors) Pantalla Completa (Todos los monitores) No Delay Sin demora second segundo seconds segundos Take new screenshot Tomar nueva captura de pantalla Area: Área: Capture Launcher Capturar Lanzador TextLabel Etiqueta de texto Capture Mode Modo de Captura Delay: Demora: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Imposible capturar la pantalla Mouse Mouse Select screenshot area Seleccionar área de captura de pantalla Mouse Wheel Rueda del Ratón Change tool size Cambiar tamaño de la herramienta Right Click Clic Derecho Show color picker Mostrar el selector de color Open side panel Abrir panel lateral Esc Esc Exit Salir Quit Capture Salir de la Captura Are you sure you want to quit capture? ¿Seguro que quieres dejar de capturar? Do not show this again No mostrar de nuevo Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot ha perdido el foco. Los atajos de teclado no funcionarán a menos de que hagas clic en alguna parte. Configuration error resolved. Launch `flameshot gui` again to apply it. Error de configuración resuelto. Lanza `flameshot gui` de nuevo para aplicarlo. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Selecciona un área con el ratón, o presiona Esc para salir. Presiona Enter para capturar la pantalla. Presion Click Derecho para mostrar el selector de color. Usa la rueda del ratón para cambiar el grosor de la herramienta. Presiona Espacio para abrir el panel lateral. Tool Settings Ajustes de herramienta CircleCountTool Circle Counter Contador Circular Add an autoincrementing counter bubble Añadir una burbuja contadora de incremento automático CircleTool Circle Círculo Set the Circle as the paint tool Establecer el Círculo como la herramienta de dibujo ColorDialog Select Color Seleccionar Color Saturation Saturación Hue Tono Hex Hex Blue Azul Value Valor Green Verde Alpha Alfa Red Rojo ColorGrabWidget Accept color Aceptar color Enter or Left Click Enter o click izquierdo Precisely select color Seleccionar color precisamente Hold Left Click Mantener pulsado el botón izquierdo Toggle magnifier Alternar lupa Space or Right Click Espacio o clic derecho Cancel Cancelar Esc Esc ColorPickerEditor Select Preset: Seleccionar Preajuste: Select preset using the spinbox Seleccione preestablecido usando el cuadro de número Edit Preset: Editar el preajuste: Enter color to update preset Introduce el color para actualizar el preajuste Update Actualizar Press button to update the selected preset Pulsa el botón para actualizar la preselección seleccionada Delete Borrar Press button to delete the selected preset Presiona el botón para borrar el preajuste seleccionado Add Preset: Añadir Preajuste: Enter color manually or select it using the color-wheel Ingresa un color manualmente o selecciónalo utilizando la rueda de colores Add Añadir Press button to add preset Presiona el botón para añadir preajuste Error Error Unable to add preset. Maximum limit reached. No se puede añadir el preajuste. Se ha alcanzado el límite máximo. Unable to remove preset. Minimum limit reached. No se puede borrar el preajuste. Se ha alcanzado el límite mínimo. ConfigErrorDetails Configuration errors Errores de configuración ConfigHandler Unrecognized setting: '%1' Ajuste no reconocido: "%1" Unrecognized shortcut name: '%1'. Nombre de atajo no reconocido: "%1" Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Conflicto de atajos: "%1" y "%2" tienen el mismo atajo: %3 Bad value in '%1'. Expected: %2 Valor inadecuado en "%1". Se espera: %2 You have successfully resolved the configuration error. Has resuelto exitosamente el error de configuración. The configuration contains an error. Open configuration to resolve. La configuración contiene un error. Abre la configuración para resolverlo. The configuration contains an error. Falling back to default. La configuración contiene un error. Revirtiendo a la predeterminada. Bad config key '%1' in ConfigHandler. Please report this as a bug. Clave de configuración inadecuada "%1" en ConfigHandler. Por favor, reporta esto como un error. ConfigResolver Resolve configuration errors Resolver errores de configuración <b>You must resolve all errors before continuing:</b> <b>Debes resolver todos los errores antes de continuar:</b> Reset Reiniciar Reset to the default value. Restablecer al valor por defecto. Remove Eliminar Remove this setting. Eliminar este ajuste. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Algunos atajos de teclado tienen conflictos. Esto NO impedirá que Flameshot inicie. Por favor, resuélvelos manualmente en el archivo de configuración. Resolve all Resolver todo Resolve all listed errors. Resolver todos los errores listados. Details Detalles ConfigWindow Configuration Configuración Interface Interfaz Filename Editor Editor de Nombre General General Shortcuts Atajos Resolve Resolver <b>Configuration file has errors. Resolve them before continuing.</b> <b>El archivo de configuración contiene errores. Resuélvelos antes de continuar.</b> Controller New version %1 is available Nueva version %1 está disponible You have the latest version Tienes la última versión Failed to get information about the latest version. No se pudo obtener información sobre la última versión. Error Error Unable to close active modal widgets No se pueden cerrar los widgets modales activos &Take Screenshot &Tomar Captura de Pantalla &Open Launcher &Abrir Lanzador &Configuration &Configuración &About &Acerca de Check for updates Buscar actualizaciones &Latest Uploads &Últimas Subidas URL copied to clipboard. URL copiada al portapapeles. &Information &Información &Quit &Salir CopyTool Copy Copiar Copy selection to clipboard Copiar selección al portapapeles Copy the selection into the clipboard Copia la selección al portapapeles DBusUtils Unable to connect via DBus Imposible conectarse mediante DBus ExitTool Exit Salir Leave the capture screen Salir de la pantalla de captura FileNameEditor Edit the name of your captures: Edita el nombre de tus capturas: Edit: Editar: Preview: Previsualización: Save Guardar Saves the pattern Guarda el patrón Restore Restaurar Reset Reiniciar Restores the saved pattern Restaura el patrón guardado Clear Limpiar Deletes the name Borra el nombre Flameshot Error Error Unable to close active modal widgets No es posible cerrar los widgets modales activos URL copied to clipboard. URL copiada al portapapeles. FlameshotDaemon New version %1 is available Nueva versión %1 está disponible You have the latest version Tienes la última versión Failed to get information about the latest version. No se pudo obtener información sobre la última versión. Unable to connect via DBus No se puede conectar a través de DBus GeneneralConf Import Importar Error Error Unable to read file. Imposible leer el archivo. Unable to write file. Imposible escribir el archivo. Save File Guardar Archivo Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? ¿Estás seguro de que quieres reiniciar la configuración? Show help message Mostrar mensaje de ayuda Show the help message at the beginning in the capture mode. Muestra el mensaje de ayuda al iniciar el modo de captura. Show desktop notifications Mostrar notificaciones del escritorio Show tray icon Mostrar icono en la barra de tareas Show the systemtray icon Mostrar el icono en la barra de tareas Configuration File Archivo de Configuración Export Exportar Reset Reset Launch at startup Lanzar en el arranque Launch Flameshot Lanzar Flameshot GeneralConf Import Importar Error Error Unable to read file. Imposible leer el archivo. Unable to write file. Imposible escribir el archivo. Save File Guardar Archivo Confirm Reset Confirmar Reinicio Are you sure you want to reset the configuration? ¿Estás seguro de que quieres reiniciar la configuración? Show help message Mostrar mensaje de ayuda Show the help message at the beginning in the capture mode. Muestra el mensaje de ayuda al iniciar el modo de captura. Show the side panel button Mostrar el botón del panel lateral Show the side panel toggle button in the capture mode. Muestra el botón de alternancia del panel lateral en el modo de captura. Show desktop notifications Mostrar notificaciones del escritorio Show tray icon Mostrar icono en la bandeja Show the systemtray icon Mostrar el icono en la bandeja del sistema Confirmation required to delete screenshot from the latest uploads Se requiere confirmación para borrar la captura de pantalla de las últimas subidas Configuration File Archivo de Configuración Export Exportar Reset Reiniciar Automatic check for updates Comprobación automática de actualizaciones Allow multiple flameshot GUI instances simultaneously Permitir múltiples instancias simultáneas del GUI de flameshot This allows you to take screenshots of flameshot itself for example. Esto te permite tomar capturas de pantalla de Flameshot mismo, por ejemplo. Automatically close daemon when it is not needed Cerrar el daemon automáticamente cuando no se lo necesita Launch at startup Lanzar en el arranque Launch Flameshot Lanzar Flameshot Show welcome message on launch Mostrar mensaje de bienvenida en el lanzamiento Use large predefined color palette Usar una gran paleta de colores predefinida Copy URL after upload Copiar URL después de subir Copy URL and close window after upload Copie la URL y cierre la ventana después de la carga Save image after copy Guardar imagen tras copia Save image file after copying it Guardar archivo de imagen luego de copiarlo Show the help message at the beginning in the capture mode Mostrar el mensaje de ayuda al inicio en el modo de captura Use last region for GUI mode Utilizar la última región para el modo GUI Use the last region as the default selection for the next screenshot in GUI mode Utilizar la última región como selección por defecto para la siguiente captura de pantalla en modo GUI Show the side panel toggle button in the capture mode Mostrar el botón de alternancia del panel lateral en el modo de captura Enable desktop notifications Activar notificaciones de escritorio Show abort notifications Mostrar notificaciones de cancelación Enable abort notifications Permitir notificaciones de cancelación Show icon in the system tray Mostrar icono en la bandeja del sistema Use grim to capture screenshots Usar grim para capturar la pantalla Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim es una utilidad solo para wayland para capturar pantallas basadas en el protocolo screencopy. Por lo general, solo se habilita en gestores de ventanas wayland mínimos como sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Pedir confirmación para eliminar las capturas de pantalla de las últimas subidas Check for updates automatically Comprobar las actualizaciones automáticamente This allows you to take screenshots of Flameshot itself for example Esto le permite tomar capturas de pantalla de Flameshot mismo, por ejemplo Launch Flameshot daemon when computer is booted Lanzar daemon de Flameshot al iniciar el equipo Show the welcome message box in the middle of the screen while taking a screenshot Mostrar el cuadro de mensaje de bienvenida en el centro de la pantalla mientras se toma una captura de pantalla Use a large predefined color palette Utilice una amplia paleta de colores predefinida Copy on double click Copiar al hacer doble clic Enable Copy on Double Click Activar la copia con el doble clic Copy URL and close window after uploading was successful Copiar la URL y cerrar la ventana después de que la subida haya sido exitosa Automatically unload from memory when it is not needed Descarga automáticamente de la memoria cuando no se necesite Automatically close daemon (background process) when it is not needed Cerrar automáticamente el daemon (proceso en segundo plano) cuando no se necesite Launch in background at startup Ejecutar en segundo plano al iniciar Launch Flameshot daemon (background process) when computer is booted Ejecutar Flameshot daemon (proceso en segundo plano) cuando se inicie el ordenador Ask before quit capture Preguntar antes de salir de captura Show the confirmation prompt before ESC quit Mostrar aviso de confirmación antes de salir mediante ESC Enable Copy to clipboard on Double Click Habilitar Copiar al portapapeles al hacer doble clic Copy URL after uploading was successful Copiar URL tras una subida exitosa After copying the screenshot, save it to a file as well Después de copiar la captura de pantalla, guardarla también en un archivo Save Path Guardar Ubicación Change... Cambiar... Use fixed path for screenshots to save Usar ubicación fija para guardar las capturas Preferred save file extension: Extensión de archivo preferida al guardar: Latest Uploads Max Size Tamaño Máximo de Últimas Subidas Imgur Application Client ID ID del cliente de la aplicación Imgur Undo limit Límite de deshacer Use JPG format for clipboard (PNG default) Utilizar el formato JPG para el portapapeles (PNG por defecto) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copiar ubicación del archivo después de guardar Copy the file path to clipboard after the file is saved Copiar la ruta del archivo al portapapeles luego de guardar el archivo Anti-aliasing image when zoom the pinned image Realizar antialiasing al hacer zoom en la imagen fijada After zooming the pinned image, should the image get smoothened or stay pixelated Después de ampliar la imagen fijada, debería la imagen ser suavizada o permanecer pixelada Upload image without confirmation Subir imagen sin confirmación Choose a Folder Elegir una carpeta Unable to write to directory. No se puede escribir en el directorio. Show magnifier Mostrar lupa Enable a magnifier while selecting the screenshot area Activar una lupa al seleccionar el área de captura de pantalla Square shaped magnifier Lupa cuadrada Make the magnifier to be square-shaped Hacer que la lupa tenga forma cuadrada Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location Ubicación de la pantalla None Ninguno Top Left Arriba Izquierda Top Right Arriba Derecha Bottom Left Abajo Izquierda Bottom Right Abajo Derecha Center Centro Quality range of 0-100; Higher number is better quality and larger file size Rango de calidad de 0-100;Cuanto mayor sea el número mejor calidad y mayor tamaño de fichero JPEG Quality Calidad de JPEG Reverse arrow Draw the arrow head first Dibuja primero la cabeza de la flecha Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimas Subidas Screenshots history is empty Historial de capturas vacío Copy URL Copiar URL URL copied to clipboard. URL copiada al portapapeles. Open in browser Abrir en navegador Confirm to delete Confirmar para borrar Are you sure you want to delete a screenshot from the latest uploads and server? ¿Estás seguro de que deseas borrar una captura de pantalla de las últimas subidas y el servidor? ImgS3Uploader Uploading Image Subiendo Imagen URL copied to clipboard. URL copiada al portapapeles. Error Error ImgUploadDialog Upload Confirmation Confirmación de Subida Do you want to upload this capture? ¿Deseas subir esta captura? Upload without confirmation Subir sin confirmación ImgUploader Uploading Image Subiendo Imagen Unable to open the URL. No puede abrir la URL. URL copied to clipboard. URL copiada al portapapeles. Screenshot copied to clipboard. Captura copiada al portapapeles. Copy URL Copiar URL Open URL Abrir URL Delete image Borrar imagen Image to Clipboard. Imagen al Portapapeles. ImgUploaderBase Upload image Upload image Uploading Image Subiendo Imagen Copy URL Copiar URL Open URL Abrir URL Delete image Borrar imagen Image to Clipboard. Imagen al Portapapeles. Save image Guardar imagen Unable to open the URL. No se puede abrir la URL. URL copied to clipboard. URL copiada al portapapeles. Screenshot copied to clipboard. Captura copiada al portapapeles. Unable to save the screenshot to disk. No se puede guardar la captura de pantalla en el disco. Screenshot saved. Captura de pantalla guardada. ImgUploaderTool Image Uploader Cargador de Imágenes Upload the selection Subir la selección ImgurUploader Upload to Imgur Subir a Imgur Uploading Image Subiendo Imagen Copy URL Copiar URL Open URL Abrir URL Delete image Borrar imagen Image to Clipboard. Imagen al Portapapeles. Unable to open the URL. No se puede abrir la URL. URL copied to clipboard. URL copiada al portapapeles. Screenshot copied to clipboard. Captura copiada al portapapeles. ImgurUploaderTool Image Uploader Subir Imagen Upload the selection to Imgur Sube la selección a Imgur InfoWindow About Información Icon Ícono License Licencia GPLv3+ GPLv3+ Version Versión Flameshot v Flameshot v OS Info Información del sistema operativo Copy Info Copiar Información Right Click Click Derecho Mouse Wheel Rueda del Ratón Move selection 1px Mover la selección 1px Resize selection 1px Redimensionar la selección 1px Quit capture Salir de la captura Copy to clipboard Copiar al portapapeles Save selection as a file Guardar la selección como un archivo Undo the last modification Deshacer la última modificación Toggle visibility of sidebar with options of the selected tool Alternar la visualización de la barra lateral de opciones de la herramienta seleccionada Show color picker Mostrar el selector de color Change the tool's thickness Cambiar el grosor de la herramienta Available shortcuts in the screen capture mode. Atajos disponibles en el modo captura de pantalla. Key Tecla Description Descripción <u><b>License</b></u> <u><b>Licencia</b></u> <u><b>Version</b></u> <u><b>Versión</b></u> <u><b>Shortcuts</b></u> <u><b>Atajos</b></u> InvertTool Invert Invertir Set Inverter as the paint tool Establecer el Inversor como la herramienta de dibujo LineTool Line Línea Set the Line as the paint tool Establecer la Línea como la herramienta de dibujo MarkerTool Marker Marcador Set the Marker as the paint tool Establecer el Marcador como la herramienta de dibujo MoveTool Move Mover Move the selection area Mover el área seleccionada PencilTool Pencil Lápiz Set the Pencil as the paint tool Establecer el Lápiz como la herramienta de dibujo PinTool Pin Tool Chincheta Pin image on the desktop Fijar imagen en el escritorio PinWidget Context menu Context menu Copy to clipboard Copiar al portapapeles Save to file Guardar en un archivo Rotate Right Rotar hacia la derecha Rotate Left Rotar hacia la izquierda Increase Opacity Aumentar Opacidad Decrease Opacity Disminuir Opacidad Close Cerrar PixelateTool Pixelate Pixelar Set Pixelate as the paint tool. Set Pixelate as the paint tool Establecer Pixelar como la herramienta de pintura PrimaryInstanceWidget Primary instance Instancia principal <b>Primary instance.</b> Messages received from secondaries: <b>Instancia principal.</b> Mensajes recibidos de secundarias: QHotkey Failed to register %1. Error: %2 Falla al registrar %1. Error: %2 Failed to unregister %1. Error: %2 Falla al desregistrar %1. Error: %2 QObject Save Error Error al Guardar Capture saved as Captura guardada como Capture saved to clipboard. Captura guardada en el portapapeles. Capture saved to clipboard Captura guardada en el portapapeles Error while saving to clipboard Error al guardar en el portapapeles Error trying to save as Error intentando guardar como Save screenshot Guardar captura de pantalla Path copied to clipboard as Ruta copiada al portapapeles como Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus Imposible conectar mediante DBus Powerful yet simple to use screenshot software. Software de captura de pantalla poderoso pero sencillo de usar. See Ver Capture the entire desktop. Capturar el escritorio completo. Open the capture launcher. Abrir el lanzador de capturas. Start a manual capture in GUI mode. Iniciar una captura manual en el modo GUI. Configure Configurar Capture a single screen. Capturar una sola pantalla. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Directorio existente o nuevo archivo en el que guardar Save the capture to the clipboard Guarda la captura en el portapapeles Pin the capture to the screen Fija la captura a la pantalla Upload screenshot Upload screenshot Delay time in milliseconds Duración de demora en milisegundos Repeat screenshot with previously selected region Repetir la captura de pantalla con la región previamente seleccionada Screenshot region to select Región de captura de pantalla a seleccionar Set the filename pattern Establecer el patrón de nombre de archivo Accept capture as soon as a selection is made Aceptar captura en cuanto se haga una selección Enable or disable the trayicon Activar o desactivar el icono de la bandeja Enable or disable run at startup Activar o desactivar la ejecución al inicio Enable or disable the notifications Check the configuration for errors Comprobar si hay errores en la configuración Show the help message in the capture mode Mostrar el mensaje de ayuda en el modo de captura Define the main UI color Definir el color principal de la interfaz de usuario Define the contrast UI color Definir el color de contraste de la interfaz de usuario Print raw PNG capture Imprimir la captura PNG sin procesar Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Imprimir geometría de la selección en el formato WxH+X+Y. No hace nada si se especifica que no se procese Define the screen to capture (starting from 0) Definir la pantalla a capturar (empezando por 0) Invalid delay, it must be a number greater than 0 Demora inválida, debe ser un valor mayor a 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Región inválida, utiliza "WxH+X+Y" o "todo" o "pantalla0/pantalla1/...". Invalid path, must be an existing directory or a new file in an existing directory Ruta inválida, debe ser un directorio existente o un nuevo archivo en un directorio existente Define the screen to capture Define the screen to capture default: screen containing the cursor por defecto: pantalla que contiene el cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Color inválido, este flag soporta los siguientes formatos: - #RGB (cada uno de R, G y B es un solo dígito hexadecimal) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Colores con nombre, como "azul" o "rojo" Puede ser que necesites preceder el símbolo "#" con "\", como en "\#FFF" Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Número de pantalla inválido, no debe ser negativo Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Valor inválido, debe ser definido como "verdadero" o "falso" Error Error Unable to write in Imposible escribir en Requested screen exceeds screen count La pantalla solicitada supera el número de pantallas Full screen screenshot pinned to screen Captura de pantalla completa fijada a la pantalla URL copied to clipboard. URL copiada al portapapeles. Options Options Arguments Argumentos arguments argumentos Subcommands subcommands Usage Uso options options Per default runs Flameshot in the background and adds a tray icon for configuration. Por defecto, Flameshot se ejecuta en segundo plano y añade un icono en la bandeja para su configuración. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. ¡Hola, estoy aquí! Haz clic en el icono en la bandeja para tomar una captura de pantalla o clic derecho para ver más opciones. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Salir de la captura Screenshot history Historial de capturas de pantalla Capture screen Capturar pantalla Show color picker Mostrar el selector de color Change the tool's size Cambiar el tamaño de la herramienta Change the tool's thickness Cambiar el grosor de la herramienta RectangleTool Rectangle Rectángulo Set the Rectangle as the paint tool Establecer el Rectángulo como la herramienta de dibujo RedoTool Redo Rehacer Redo the next modification Rehacer la siguiente modificación SaveTool Save Guardar Save screenshot to a file Guardar captura de pantalla en un archivo Save the capture Guardar la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) No se puede detectar el entorno de escritorio (¿GNOME? ¿KDE? ¿Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Sugerencia: intenta configurar la variable del entorno XDG_CURRENT_DESKTOP. Unable to capture screen Imposible capturar la pantalla SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Selección Rectangular Set Selection as the paint tool Establecer Selección como la herramienta de dibujo SetShortcutDialog Set Shortcut Establecer Atajo Enter new shortcut to change Introduce un nuevo atajo para cambiar este Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Presiona Esc para cancelar o ⌘+Retroceso para desactivar el atajo de teclado. Press Esc to cancel or Backspace to disable the keyboard shortcut. Presiona Esc para cancelar o Retroceso para desactivar el atajo de teclado. Flameshot must be restarted for changes to take effect. Flameshot debe ser reiniciado para que los cambios tengan efecto. ShortcutsWidget Hot Keys Teclas de Acceso Rápido Available shortcuts in the screen capture mode. Atajos disponibles en el modo captura de pantalla. Description Descripción Key Tecla Left Double-click Doble clic izquierdo Toggle side panel Alternar panel lateral Grab a color from the screen Resize selection left 1px Cambiar el tamaño de la selección a la izquierda 1px Resize selection right 1px Redimensionar selección hacia la derecha 1px Resize selection up 1px Redimensionar selección hacia arriba 1px Resize selection down 1px Redimensionar selección hacia abajo 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Seleccionar toda la pantalla Move selection left 1px Mover selección a la izquierda 1px Move selection right 1px Mover selección a la derecha 1px Move selection up 1px Mueve la selección 1px hacia arriba Move selection down 1px Mover selección hacia abajo 1px Commit text in text area Confirmar texto en el área de texto Delete selected drawn object Cancel current selection Delete current tool Eliminar herramienta actual Capture screen Capturar pantalla Screenshot history Historial de capturas de pantalla SidePanelWidget Active thickness: Espesor activo: Active color: Color activo: Press ESC to cancel Presiona ESC para cancelar Active tool size: Tamaño de la herramienta activa: Active Color: Active Color: Grab Color Tomar Color Display grid SizeDecreaseTool Decrease Tool Size Disminuir el Tamaño de la Herramienta Decrease the size of the other tools Disminuir el tamaño de las otras herramientas SizeIncreaseTool Increase Tool Size Aumentar el Tamaño de la Herramienta Increase the size of the other tools Aumentar el tamaño de las otras herramientas SizeIndicatorTool Selection Size Indicator Indicador de Tamaño de Selección Show X and Y dimensions of the selection Mostrar las dimensiones X e Y de la selección Show the dimensions of the selection (X Y) Muestra la dimensión de la selección (X Y) StrftimeChooserWidget Century (00-99) Siglo (00-99) Year (00-99) Año (00-99) Year (2000) Año (2000) Month Name (jan) Nombre del Mes (jul) Month Name (january) Nombre del Mes (julio) Month (01-12) Mes (01-12) Week Day (1-7) Día de la Semana (1-7) Week (01-53) Semana (01-53) Day Name (mon) Nombre del Día (dom) Day Name (monday) Nombre del Día (domingo) Day (01-31) Día (01-31) Day of Month (1-31) Día del Mes (1-31) Day (001-366) Día (001-366) Time (%H-%M-%S) Tiempo (%H-%M-%S) Time (%H-%M) Tiempo (%H-%M) Hour (00-23) Hora (00-23) Hour (01-12) Hora (01-12) Minute (00-59) Minuto (00-59) Second (00-59) Segundo (00-59) Full Date (%m/%d/%y) Fecha (%m/%d/%y) Full Date (%Y-%m-%d) Fecha (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Información de Flameshot TextConfig StrikeOut Tachado Underline Subrayado Bold Negrita Italic Cursiva Left Align Alinear a la Izquierda Center Align Alinear al Centro Right Align Alinear a la Derecha TextTool Text Texto Add text to your capture Agregar texto a la captura TrayIcon &Take Screenshot &Capturar Pantalla &Open Launcher &Abrir Lanzador &Configuration &Configuración &About &Acerca de Check for updates Buscar actualizaciones New version %1 is available Nueva versión %1 está disponible &Quit &Salir &Latest Uploads &Últimas Cargas &Open Save Path UIcolorEditor UI Color Editor Editor de Color de Interfaz Change the color moving the selectors and see the changes in the preview buttons. Cambia el color moviendo los selectores y observa los cambios en los botones de previsualización. Select a Button to modify it Selecciona un Botón para modificarlo Main Color Color Principal Click on this button to set the edition mode of the main color. Clica en este botón para aplicar el modo edición para el color primario. Contrast Color Color de Contraste Click on this button to set the edition mode of the contrast color. Clica en este botón para aplicar el modo edición para el color de contraste. UndoTool Undo Deshacer Undo the last modification Borra la última modificación UpdateNotificationWidget New Flameshot version %1 is available Nueva versión %1 de Flameshot está disponible Ignore Ignorar Later Luego Update Actualizar UploadHistory Upload History Subir Historial Screenshots history is empty El historial de capturas está vacío UploadLineItem Form Forma TextLabel Etiqueta de texto Copy URL Copiar URL Open In Browser Abrir en Navegador Confirm to delete Confirmar la eliminación Are you sure you want to delete a screenshot from the latest uploads and server? ¿Estás seguro de que deseas borrar una captura de pantalla de las últimas subidas y el servidor? UtilityPanel Close Cerrar <Empty> <Empty> VisualsEditor Opacity of area outside selection: Opacidad del area fuera de la selección: UI Color Editor Editor de Color de la Interfaz Colorpicker Editor Editor del Selector de Color Button Selection Selección de Botón Select All Seleccionar Todos color_widgets::ColorDialog Pick Elegir color_widgets::ColorPalette Unnamed Sin Nombre color_widgets::ColorPaletteModel Unnamed Sin Nombre %1 (%2 colors) %1 (%2 colores) color_widgets::ColorPaletteWidget Open a new palette from file Abrir una nueva paleta desde un archivo Create a new palette Crear una nueva paleta Duplicate the current palette Duplicar la paleta actual Delete the current palette Borrar la paleta actual Revert changes to the current palette Revertir cambios a la paleta actual Save changes to the current palette Guardar cambios a la paleta actual Add a color to the palette Añadir un color a la paleta Remove the selected color from the palette Eliminar el color seleccionado de la paleta New Palette Nueva Paleta Name Name GIMP Palettes (*.gpl) Paletas de GIMP(*.gpl) Palette Image (%1) Imagen de paleta (%1) All Files (*) Todos los Archivos (*) Open Palette Abrir Paleta Failed to load the palette file %1 No se pudo cargar el archivo de paleta %1 color_widgets::GradientEditor Add Color Add Color Remove Color Eliminar color Edit Color... Editar Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colores) color_widgets::Swatch Clear Color Quitar Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_et.ts ================================================ AbstractWidgetList Add New Lisa uus Move Up Liiguta ülespoole Move Down Liiguta allapoole Remove Eemalda AcceptTool Accept Nõustu Accept the capture Nõustu ekraanitõmmisega AppLauncher App Launcher Rakenduse käivitaja Choose an app to open the capture Vali rakendus, millega ekraanitõmmis avatakse AppLauncherWidget Open With Ava rakendusega Launch in terminal Käivita terminalis Keep open after selection Peale valimist jäta avatuks Error Viga Unable to launch in terminal. Terminalis käivitamine ei õnnestu. Unable to write in Faili kirjutamine ei õnnestu ArrowTool Arrow Nool Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Ristkülikukujuline ala Full Screen (Current Display) Terve ekraan (hetkel aktiivne monitor) Full Screen (All Monitors) Terve ekraan (kõik monitorid) No Delay Ilma viivituseta second sekund seconds sekundit Take new screenshot Tee uus ekraanitõmmis Area: Ala: Capture Launcher Ekraanitõmmise käivitaja TextLabel Tekstisilt Capture Mode Ekraanitõmmise tegemise viis Delay: Viivitus: WxH+x+y LxK+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Ekraanitõmmise tegemine ei õnnestu Mouse Hiir Select screenshot area Vali ekraanitõmmise ala Mouse Wheel Hiire ratas Change tool size Muuda tarviku suurust Right Click Parem hiireklõps Show color picker Näita värvivalijat Open side panel Ava külgriba Esc Esc Exit Välju Quit Capture Lõpeta ekraanitõmmistamine Are you sure you want to quit capture? Kas soovid lõpetada ekraanitõmmise tegemise? Do not show this again Ära näita seda teadet uuesti Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot on kaotanud fookuse. Klaviatuuri kiirklahvid ei toimi enne, kui oled kuhugile klõpsinud. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings Tarviku seadistused CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Vali värv Saturation Värviküllastus Hue Värvitoon Hex 16nd-süsteemis värvikood Blue Sinine Value Väärtus Green Roheline Alpha Alfa-läbipaistvus Red Punane ColorGrabWidget Accept color Nõustu värviga Enter or Left Click Vajuta sisestusklahvi või klõpsa hiire vasakut nuppu Precisely select color Vali täpne värv Hold Left Click Hoia hiire vasakut klahvi all Toggle magnifier Lülita luup sisse/välja Space or Right Click Cancel Esc Esc ColorPickerEditor Edit Preset: Muuda eelseadistust: Enter color to update preset Eelseadistuse muutmiseks sisesta sobilik värv Update Uuenda Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Lisa eelseadistus: Enter color manually or select it using the color-wheel Sisesta värvinumber käsitsi või vali ta värvirattast Add Lisa Press button to add preset Eelseadistuse lisamiseks klõpsi nuppu Error Viga Unable to add preset. Maximum limit reached. Eelseadistuse lisamine ei õnnestu. Variantide arvu ülempiir on käes. Unable to remove preset. Minimum limit reached. Eelseadistuse eemaldamine ei õnnestu. Variantide arvu alampiir on käes. ConfigErrorDetails Configuration errors Seadistusvead ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Eemalda Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details Üksikasjad ConfigWindow Configuration Seadistused Interface Kasutajaliides Filename Editor Failinimede muster General Üldseadistused Shortcuts Kiirklahvid Resolve Lahenda <b>Configuration file has errors. Resolve them before continuing.</b> <b>Seadistuste failis on vigu. Enne jätkamist palun lahenda nad.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Kopeeri Copy selection to clipboard Kopeeri valik lõikelauale Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Välju Leave the capture screen Välju ekraanitõmmise tegemise vaatest FileNameEditor Edit the name of your captures: Määratle ekraanitõmmiste nimi: Edit: Muuda: Preview: Eelvaade: Save Salvesta Saves the pattern Salvestab valitud mustri Restore Taasta Reset Reinicialitza Restores the saved pattern Taastab valitud mustri Clear Tühjenda Deletes the name Kustutab antud nimemustri Flameshot Error Viga Unable to close active modal widgets Aktiivseid modaalseid vidinaid ei õnnestu sulgeda URL copied to clipboard. Võrguaadress on kopeeritud lõikelauale. FlameshotDaemon New version %1 is available Uus versioon %1 on saadaval You have the latest version Sul on kasutusel viimane versioon Failed to get information about the latest version. Viimase versiooni teabe laadimine ei õnnestunud. Unable to connect via DBus No s'ha pogut connectar mitjançant DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Impordi Error Viga Unable to read file. Faili lugemine ei õnnestu. Unable to write file. Faili salvestamine ei õnnestu. Save File Salvesta fail Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Show help message Näita abiteavet Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Näita külgriba nuppu Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Näita töölaua teavitusi Show tray icon Näita süsteemisalve ikooni Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Fitxer de Configuració Export Exportar Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Peale kopeerimist salvesta pilt Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Graafilise kasutajaliidese režiimis kasuta viimast valitud ala Use the last region as the default selection for the next screenshot in GUI mode Graafilise kasutajaliidese režiimis kasuta järgmise ekraanitõmmise jaoks vaikimisi valikuna viimast valitud ala Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Enne ekraanitõmmistamise lõpetamist küsi kinnitust Show the confirmation prompt before ESC quit Küsi kinnitust enne Escape-nupuga ekraanitõmmise tegemise lõpetamist Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Salvestuse asukoht Change... Muuda... Use fixed path for screenshots to save Kasuta ekraanitõmmiste salvestamiseks määratud asukohta Preferred save file extension: Salvestatava faili eelistatud laiend: Latest Uploads Max Size Viimaste üleslaadimiste loendi pikkuse ülempiir Imgur Application Client ID Imgur'i rakenduse klienditunnus Undo limit Tagasivõtmissammude ülempiir Use JPG format for clipboard (PNG default) Kasuta lõikelaua jaoks JPG-vormingut (vaikimisi on kasutusel PNG-vorming) Use lossy JPG format for clipboard (lossless PNG default) Kasuta lõikelaua jaoks kadudega JPG-vormingut (vaikimisi on kasutusel kadudeta PNG-vorming) Copy file path after save Peale salvestamist kopeeri faili asukoht Copy the file path to clipboard after the file is saved Peale faili salvestamist kopeeri tema asukoht lõikelauale Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Üleslaadimise kinnitus Do you want to upload this capture? Kas sa soovid selle ekraanitõmmise üles laadida? Upload without confirmation Laadi üles ilma kinnitust küsimata ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Laadi pilt üles Uploading Image Pilt on üleslaadimisel Copy URL Kopeeri võrguaadress Open URL Ava võrguaadress Delete image Kustuta pilt Image to Clipboard. Pilt lõikelauale. Save image Salvesta pilt Unable to open the URL. Võrguaadressi avamine ei õnnestu. URL copied to clipboard. Võrguaadress on kopeeritud lõikelauale. Screenshot copied to clipboard. Ekraanitõmmis on kopeeritud lõikelauale. Unable to save the screenshot to disk. Ekraanitõmmise salvestamine andmekandjale ei õnnestunud. Screenshot saved. Ekraanitõmmis on salvestatud. ImgUploaderTool Image Uploader Piltide üleslaadija Upload the selection Laadi valik imgur.com teenusesse ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. Võrguaadressi avamine ei õnnestu. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Rakenduse teave Icon Ikoon License Litsents GPLv3+ GPL-i versioon 3 või suurem Version Versioon Flameshot v Flameshoti versioon OS Info Operatsioonisüsteemi teave Copy Info Kopeeri see teave Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Kopeeri lõikelauale Save to file Salvesta faili Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Sulge PixelateTool Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Ekraanitõmmis on salvestatud lõikelauale. Error while saving to clipboard Viga lõikelauale salvestamisel Save screenshot Salvesta ekraanitõmmis Path copied to clipboard as Asukoht on kopeeritud lõikelauale kui Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Salvestusviga Capture saved as Ekraanitõmmis on salvestatud kui Error trying to save as Unable to connect via DBus No s'ha pogut connectar mitjançant DBus Powerful yet simple to use screenshot software. See Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Start a manual capture in GUI mode. Configure Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Viga Unable to write in Faili kirjutamine ei õnnestu Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Arguments Arguments arguments arguments Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Lõpeta ekraanitõmmistamine Screenshot history Ekraanitõmmiste ajalugu Capture screen Tee ekraanitõmmis Show color picker Näita värvivalijat Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Salvesta Save screenshot to a file Salvesta ekraanitõmmis faili Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Ekraanitõmmise tegemine ei õnnestu SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Kiirklahvid Available shortcuts in the screen capture mode. Ekraanitõmmise vaates kasutatavad kiirklahvid. Description Kirjeldus Key Klahv Left Double-click Vasak topeltklõps Toggle side panel Lülita külgriba sisse/välja Grab a color from the screen Resize selection left 1px Suurenda valikut vasakul 1 piksli võrra Resize selection right 1px Suurenda valikut paremal 1 piksli võrra Resize selection up 1px Suurenda valikut üleval 1 piksli võrra Resize selection down 1px Suurenda valikut all 1 piksli võrra Symmetrically decrease width by 2px Vähenda laiust sümmeetriliselt 2 piksli võrra Symmetrically increase width by 2px Suurenda laiust sümmeetriliselt 2 piksli võrra Symmetrically increase height by 2px Suurenda kõrgust sümmeetriliselt 2 piksli võrra Symmetrically decrease height by 2px Vähenda kõrgust sümmeetriliselt 2 piksli võrra Select entire screen Vali kogu ekraan Move selection left 1px Liiguta valikut vasakule 1 piksli võrra Move selection right 1px Liiguta valikut paremale 1 piksli võrra Move selection up 1px Liiguta valikut üles 1 piksli võrra Move selection down 1px Liiguta valikut alla 1 piksli võrra Commit text in text area Lisa tekst tekstialale Delete selected drawn object Kustuta valitud joonistatud objekt Cancel current selection Tühista praegune valik Delete current tool Delete current tool Capture screen Tee ekraanitõmmis Screenshot history Ekraanitõmmiste ajalugu SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Sajand (00-99) Year (00-99) Aasta (00-99) Year (2000) Aasta (2000) Month Name (jan) Kuu nimi (jan) Month Name (january) Kuu nimi (january) Month (01-12) Kuu (01-12) Week Day (1-7) Nädalapäev (1-7) Week (01-53) Nädala number (01-53) Day Name (mon) Päeva nimi (mon) Day Name (monday) Päeva nimi (monday) Day (01-31) Päev kuus (01-31) Day of Month (1-31) Päev kuus (1-31) Day (001-366) Päev aastas (001-366) Hour (00-23) Tund (00-23) Hour (01-12) Tund (01-12) Minute (00-59) Minut (00-59) Second (00-59) Sekund (00-59) Full Date (%m/%d/%y) Täiskuupäev (%m/%d/%y) Full Date (%Y-%m-%d) Täiskuupäev (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Aeg (%H-%M-%S) Time (%H-%M) Aeg (%H-%M) SystemNotification Flameshot Info Flameshoti teave TextConfig StrikeOut Läbikriipsutatud kiri Underline Allajoonitud kiri Bold Paks kiri Italic Kaldkiri Left Align Joonda vasakule Center Align Joonda keskele Right Align Joonda paremale TextTool Text Tekst Add text to your capture Lisa ekraanitõmmisele kirjeldav tekst TrayIcon &Take Screenshot &Tee ekraanitõmmis &Open Launcher &Ava käivitaja &Configuration &Seadistused &About &Rakenduse teave Check for updates Kontrolli uuendusi New version %1 is available Uus versioon %1 on saadaval &Quit &Lõpeta &Latest Uploads &Viimased üleslaadimised &Open Save Path Ava salvestuse asu&koht UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification Desfés l'última modificació UpdateNotificationWidget New Flameshot version %1 is available Flameshoti uus versioon %1 on saadaval Ignore Later Update Uuenda UploadHistory Upload History Screenshots history is empty Ekraanitõmmiste ajalugu on tühi UploadLineItem Form TextLabel Tekstisilt Copy URL Kopeeri võrguaadress Open In Browser Confirm to delete Kinnita kustutamine Are you sure you want to delete a screenshot from the latest uploads and server? Kas oled kindel, et soovid kustutada ekraanitõmmise viimaste üleslaadimiste loendist ja serverist? UtilityPanel Close Sulge <Empty> VisualsEditor Opacity of area outside selection: Väljaspool valikut asuva ala läbipaistvus: UI Color Editor Kasutajaliidese värvihaldus Colorpicker Editor Värvivalija Button Selection Nuppude valik Select All Vali kõik color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_eu.ts ================================================ AbstractWidgetList Add New Gehitu berria Move Up Igo Move Down Jaitsi Remove Kendu AcceptTool Accept Onartu Accept the capture Onartu argazkia AppLauncher App Launcher Aplikazioen abiarazlea Choose an app to open the capture Hautatu pantaila-argazkia irekitzeko aplikazio bat AppLauncherWidget Open With Ireki honekin Launch in terminal Abiarazi terminalean Keep open after selection Mantendu irekita hautapenaren ostean Error Errorea Unable to write in Ezin da hemen idatzi: Unable to launch in terminal. Ezin da terminalean abiarazi. ArrowTool Arrow Gezia Set the Arrow as the paint tool Ezarri Gezia margotzeko tresna gisa BlurTool Blur Desenfoque Set Blur as the paint tool Establece el Desenfoque como herramienta de dibujo CaptureLauncher <b>Capture Mode</b> <b>Argazki-modua</b> Rectangular Region Eremu laukizuzena Full Screen (Current Display) Pantaila osoa (uneko pantaila) Full Screen (All Monitors) Pantaila osoa (pantaila guztiak) No Delay Atzerapenik ez second segundo seconds segundo Take new screenshot Egin pantaila-argazki berria Area: Eremua: Capture Launcher Kapturatzailearen abiarazlea TextLabel Testu etiketa Capture Mode Hartzeko modua Delay: Atzerapena: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Ezin da pantailaren argazkia egin Mouse Mouse Select screenshot area Hautatu pantaila-argazkiaren eremua Mouse Wheel Saguaren gurpila Change tool size Aldatu tresnaren tamaina Right Click Eskuin-klika Show color picker Erakutsi kolore-hautatzailea Open side panel Ireki alboko panela Esc Esc Exit Irten Quit Capture Utzi argazkia Are you sure you want to quit capture? Seguru zaude argazkia utzi nahi duzula? Do not show this again Ez erakutsi hau berriro Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot-ek fokua galdu du. Teklatuko lasterbideek ez dute funtzionatuko nonbait klik egin arte. Configuration error resolved. Launch `flameshot gui` again to apply it. Konfigurazio-errorea konpondu da. Abiarazi `flameshot gui` berriro aplikatzeko. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Hautatu eremua saguarekin edo sakatu Ihes tekla irteteko. Sakatu Sartu pantailaren argazkia egiteko. Egin eskuin-klika kolore-hautagailua erakusteko. Erabili saguaren gurpila hautatutako tresnaren lodiera aldatzeko. Sakatu Zuriunea alboko panela irekitzeko. Tool Settings Tresna-aukerak CircleCountTool Circle Counter Kontagailu biribildua Add an autoincrementing counter bubble Gehitu bere kabuz hazten den kontagailu-burbuila CircleTool Circle Zirkulua Set the Circle as the paint tool Ezarri Zirkulua margotzeko tresna gisa ColorDialog Select Color Hautatu kolorea Saturation Saturazioa Hue Ñabardura Hex Hex Blue Blue Value Balioa Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Onartu kolorea Enter or Left Click Sartu edo egin klik ezkerreko botoian Precisely select color Hautatu kolorea zehatz-mehatz Hold Left Click Eduki sakatuta ezkerreko klik Toggle magnifier Aldatu lupara Space or Right Click Zuriunea edo eskuineko klik Cancel Utzi Esc Esc ColorPickerEditor Edit Preset: Editatu aurrezarpena: Enter color to update preset Idatzi kolorea aurrez ezarritakoa eguneratzeko Update Eguneratu Press button to update the selected preset Sakatu botoia hautatutako aurrezarpena eguneratzeko Delete Ezabatu Press button to delete the selected preset Sakatu botoia hautatutako aurrezarpena ezabatzeko Add Preset: Gehitu aurrezarpena: Enter color manually or select it using the color-wheel Sartu kolorea eskuz edo hautatu kolore-gurpila erabiliz Add Gehitu Press button to add preset Sakatu botoia aurrez ezarritakoa gehitzeko Error Errorea Unable to add preset. Maximum limit reached. Ezin da aurrez ezarri. Gehienezko mugara iritsi da. Unable to remove preset. Minimum limit reached. Ezin izan da aurrez ezarrita kendu. Gutxieneko mugara iritsi da. ConfigErrorDetails Configuration errors Konfigurazio akatsak ConfigHandler Unrecognized setting: '%1' Ezarpen ezezaguna: '%1' Unrecognized shortcut name: '%1'. Ezagutzen ez den lasterbidearen izena: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Lasterbideen gatazka: '%1' eta '%2' lasterbide bera dute: %3 Bad value in '%1'. Expected: %2 Balio txarra '%1'-n. Espero zen: %2 You have successfully resolved the configuration error. Konfigurazio-errorea behar bezala konpondu duzu. The configuration contains an error. Open configuration to resolve. Konfigurazioak errore bat dauka. Ireki konfigurazioa konpontzeko. Bad config key '%1' in ConfigHandler. Please report this as a bug. '%1' konfigurazio-gako txarra ConfigHandler-en. Mesedez, jakinarazi hau akats gisa. ConfigResolver Resolve configuration errors Ebatzi konfigurazio akatsak <b>You must resolve all errors before continuing:</b> <b>Jarraitu aurretik errore guztiak konpondu behar dituzu:</b> Reset Berrezarri Reset to the default value. Berrezarri lehenetsitako baliora. Remove Kendu Remove this setting. Kendu ezarpen hau. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Teklatuko lasterbide batzuek gatazkak dituzte. Honek EZ du eragotziko flameshot abiaraztea. Mesedez, konpon itzazu eskuz konfigurazio fitxategian. Resolve all Ebatzi dena Resolve all listed errors. Ebatzi zerrendatutako akats guztiak. Details Xehetasunak ConfigWindow Configuration Ezarpenak Interface Interfazea Filename Editor Fitxategi-izenaren editorea General Orokorra Shortcuts Laster teklak Resolve Ebatzi <b>Configuration file has errors. Resolve them before continuing.</b> <b>Konfigurazio fitxategiak erroreak ditu. Konpondu itzazu jarraitu aurretik.</b> Controller New version %1 is available %1 bertsio berria eskuragarri dago You have the latest version Azken bertsioa duzu Failed to get information about the latest version. Ezin izan da azken bertsioari buruzko informazioa lortu. Error Errorea Unable to close active modal widgets Ezin dira itxi widget modal aktiboak &Take Screenshot &Pantaila-argazkia egin &Open Launcher &Abiarazlea ireki &Configuration &Ezarpenak &About &Honi buruz Check for updates Bilatu eguneraketak &Latest Uploads &Azken igoerak URL copied to clipboard. Arbelean kopiatu da URLa. &Information &Informazioa &Quit &Irten CopyTool Copy Kopiatu Copy selection to clipboard Kopiatu hautapena arbelean Copy the selection into the clipboard Kopiatu hautapena arbelean DBusUtils Unable to connect via DBus Ezin da DBus bidez konektatu ExitTool Exit Irten Leave the capture screen Irten argazki-hartze pantailatik FileNameEditor Edit the name of your captures: Aldatu zure pantaila-argazkien izenak: Edit: Editatu: Preview: Aurreikuspena: Save Gorde Saves the pattern Gorde txantiloia Restore Berreskuratu Reset Berrezarri Restores the saved pattern Gordetako txantiloia berrezartzen du Clear Garbitu Deletes the name Izena ezabatzen du Flameshot Error Errorea Unable to close active modal widgets Ezin dira itxi trepeta modal aktiboak URL copied to clipboard. URLa arbelean kopiatu da. FlameshotDaemon New version %1 is available %1 bertsio berria eskuragarri dago You have the latest version Azken bertsioa duzu Failed to get information about the latest version. Ezin izan da azken bertsioari buruzko informazioa lortu. Unable to connect via DBus Ezin da DBus bidez konektatu GeneneralConf Import Inportatu Error Errorea Unable to read file. Ezin da fitxategia irakurri. Unable to write file. Ezin da fitxategian idatzi. Save File Gorde fitxategia Confirm Reset Baieztatu berrezartzea Are you sure you want to reset the configuration? Ziur ezarpenak berrezarri nahi dituzula? Show help message Erakutsi laguntza-mezua Show the help message at the beginning in the capture mode. Erakutsi laguntza-mezua argazki-hartze modua irekitzean. Show the side panel button Erakutsi aldeko paneleko botoia Show the side panel toggle button in the capture mode. Erakutsi aldeko panela erakusteko botoia argazki-hartze moduan. Show desktop notifications Erakutsi mahaigaineko jakinarazpenak Show tray icon Erakutsi ikonoa erretiluan Show the systemtray icon Erakutsi ikonoa sistemako erretiluan Configuration File Konfigurazio-fitxategia Export Esportatu Reset Berrezarri Launch at startup Abiarazi saio-hasieran Launch Flameshot Abiarazi Flamsehot Close after capture Itxi argazkia egin ostean Close after taking a screenshot Itxi pantaila-argazkia egin ostean Copy URL after upload Kopiatu URLa igo ostean Copy URL and close window after upload Kopiatu URLa eta itxi leihoa igo ostean Save image after copy Gorde irudia kopiatu ostean Save image file after copying it Gorde irudia fitxategian kopiatu ostean Save Path Gordetzeko bidea Change... Aldatu... Choose a Folder Aukeratu karpeta Unable to write to directory. Ezin da direktorioan idatzi. GeneralConf Import Inportatu Error Errorea Unable to read file. Ezin da fitxategia irakurri. Unable to write file. Ezin da fitxategian idatzi. Save File Gorde fitxategia Confirm Reset Berretsi berrezartzea Are you sure you want to reset the configuration? Ziur ezarpenak berrezarri nahi dituzula? Show help message Bistaratu laguntza-mezua Show the help message at the beginning in the capture mode. Bistaratu laguntza-mezua argazki-hartze modua irekitzean. Show the side panel button Bistaratu aldeko paneleko botoia Show the side panel toggle button in the capture mode. Bistaratu aldeko panela erakusteko botoia argazki-hartze moduan. Show desktop notifications Bistaratu mahaigaineko jakinarazpenak Show tray icon Bistaratu ikonoa erretiluan Show the systemtray icon Bistaratu ikonoa sistemako erretiluan Confirmation required to delete screenshot from the latest uploads Berrespena behar da pantaila-argazkia azken igoeretatik ezabatzeko Configuration File Konfigurazio-fitxategia Export Esportatu Reset Berrezarri Automatic check for updates Automatikoki bilatu eguneraketak Allow multiple flameshot GUI instances simultaneously Baimendu flameshot GUI instantzia anitz aldi berean Automatically close daemon when it is not needed Itxi automatikoki daemon-a behar ez denean Launch at startup Abiarazi saio-hasieran Launch Flameshot Abiarazi Flameshot Show welcome message on launch Bistaratu ongietorri-mezua abioan Use large predefined color palette Erabili aurrez definitutako kolore-paleta handia Copy URL after upload Kopiatu URLa argazkia igo ostean Copy URL and close window after upload Kopiatu URLa eta itxi leihoa argazkia igo ostean Save image after copy Gorde argazkia berbera kopiatu ostean Save image file after copying it Gorde argazkia fitxategian berbera kopiatu ostean Show the help message at the beginning in the capture mode Pantaila argazkia hartzeko moduaren hasieran erakutsi laguntza-mezua Use last region for GUI mode Erabili azken eremua GUI moduan Use the last region as the default selection for the next screenshot in GUI mode Azken eremua erabiltzen du hurrengo pantaila-argazkirako hautaketa-eremu lehenetsi gisa Show the side panel toggle button in the capture mode Erakutsi alboko panelaren txandakatzeko botoia pantaila-argazkia hartzeko moduan Enable desktop notifications Gaitu mahaigaineko jakinarazpenak Show abort notifications Erakutsi uzteko jakinarazpenak Enable abort notifications Gaitu uzteko jakinarazpenak Show icon in the system tray Erakutsi ikonoa sistemaren erretiluan Use grim to capture screenshots Erabili iluntasuna pantaila argazkietan Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim Wayland soilik dabilen serigrafia protokoloan oinarritutako pantailak atzemateko utilitatea da. Orokorrean, gutxieneko Wayland leiho-kudeatzaileak soilik gaitu, hala nola, Sway, Hyprland, etab. Ask for confirmation to delete screenshot from the latest uploads Eskatu berrespena azken kargen pantaila-argazkia ezabatzeko Check for updates automatically Egiaztatu eguneratzeak automatikoki This allows you to take screenshots of Flameshot itself for example Honi esker, adibidez, Flameshot-en pantaila-argazkiak atera ditzakezu Launch Flameshot daemon when computer is booted Abiarazi Flameshot daemon-a ordenagailua abiarazten denean Show the welcome message box in the middle of the screen while taking a screenshot Erakutsi ongietorri-mezuaren koadroa pantailaren erdian pantaila-argazkia egiten duzun bitartean Use a large predefined color palette Erabili aurrez zehaztutako kolore-paleta handi bat Copy on double click Kopiatu klik bikoitzean Enable Copy on Double Click Gaitu Kopiatu klik bikoitzean Copy URL and close window after uploading was successful Kopiatu URLa eta itxi leihoa igo ondoren Automatically unload from memory when it is not needed Deskargatu automatikoki memoriatik beharrezkoa ez denean Automatically close daemon (background process) when it is not needed Automatikoki itxi daemon-a (atzeko planoko prozesua) beharrezkoa ez denean Launch in background at startup Bigarren mailan abiarazi, abioan Launch Flameshot daemon (background process) when computer is booted Abiarazi Flameshot daemon (atzeko planoko prozesua) ordenagailua abiarazten denean Ask before quit capture Galdetu pantaila-argazkitik irten aurretik Show the confirmation prompt before ESC quit Erakutsi berrespen-oharra ESC bidez irten aurretik Enable Copy to clipboard on Double Click Gaitu arbelean kopiatzea klik bikoitzaren bidez Copy URL after uploading was successful Kopiatu URLa kargatu ondoren After copying the screenshot, save it to a file as well Pantaila-argazkia kopiatu ondoren, gorde fitxategi batean ere Save Path Gordetzeko bidea Change... Aldatu... Use fixed path for screenshots to save Erabili bide finkoa pantaila-argazkiak gordetzeko Preferred save file extension: Fitxategia gordetzeko luzapen hobetsia: Latest Uploads Max Size Azken igoeren gehienezko tamaina Imgur Application Client ID Imgur aplikazioaren bezeroaren IDa Undo limit Desegiteen muga Use JPG format for clipboard (PNG default) Erabili JPG formatua arbelean kopiatzeko (PNG lehenetsia) Use lossy JPG format for clipboard (lossless PNG default) Erabili galeradun JPG formatua arbelerako (galerarik gabeko PNG lehenetsia) Copy file path after save Kopiatu fitxategiaren bidea berbera gorde ostean Copy the file path to clipboard after the file is saved Kopiatu fitxategiaren bidea arbelean fitxategia gorde ondoren Anti-aliasing image when zoom the pinned image Anti-aliasing aplikatu irudiari ainguratutako irudia handitzean After zooming the pinned image, should the image get smoothened or stay pixelated Ainguratutako irudia handitu ondoren, irudia leunduta edo pixelizatuta egon beharko luke Upload image without confirmation Igo irudia berrespenik gabe Choose a Folder Aukeratu karpeta Unable to write to directory. Ezin da direktorioan idatzi. Show magnifier Erakutsi lupa Enable a magnifier while selecting the screenshot area Gaitu lupa pantaila-argazkiaren eremua hautatzen duzun bitartean Square shaped magnifier Lupa karratua Make the magnifier to be square-shaped Lupa karratu-forma izan dezan Milliseconds before geometry display hides; 0 means do not hide Milisegundoak geometria bistaratzea ezkutatu aurretik; 0-k ez ezkutatzea esan nahi du Set geometry display timeout (ms) Ezarri geometria bistaratzeko denbora-muga (ms) Selection Geometry Display Hautapen-geometriako pantaila Display Location Bistaratu kokalekua None Bat ere ez Top Left Goian ezkerrean Top Right Goian eskuinean Bottom Left Behean ezkerrean Bottom Right Behean eskuinean Center Erdian Quality range of 0-100; Higher number is better quality and larger file size Kalitate tartea 0-100; Zenbaki handiagoa kalitate hobea eta fitxategi tamaina handiagoa da JPEG Quality JPEG kalitatea Reverse arrow Alderantzikatu gezia Draw the arrow head first Marraztu geziaren burua lehenengo Insecure Pixelate Segurtasunik gabe pixelatua Draw the pixelation effect in an insecure but more asethetic way. Marraztu pixelazio-efektua modu ez-seguru baina estetikoagoan. HistoryWidget Latest Uploads Azken igoerak Screenshots history is empty Pantaila-argazkien erregistroa hutsik dago Copy URL Kopiatu URLa URL copied to clipboard. Arbelean kopiatu da URLa. Open in browser Ireki nabigatzailean Confirm to delete Berretsi ezabatzeko Are you sure you want to delete a screenshot from the latest uploads and server? Ziur pantaila-argazkia azken igoeretatik eta zerbitzaritik ezabatu nahi duzula? ImgS3Uploader Uploading Image Irudia igotzen URL copied to clipboard. Arbelean kopiatu da URLa. Error Errorea ImgUploadDialog Upload Confirmation Igo berrespena Do you want to upload this capture? Harrapaketa hau igo nahi duzu? Upload without confirmation Igo berrespenik gabe ImgUploader Uploading Image Irudia igotzen Unable to open the URL. Ezin da ireki URLa. URL copied to clipboard. Arbelean kopiatu da URLa. Screenshot copied to clipboard. Arbelean kopiatu da pantaila-argazkia. Copy URL Kopiatu URLa Open URL Ireki URLa Delete image Ezabatu irudia Image to Clipboard. Irudia arbelera. ImgUploaderBase Upload image Igo irudia Uploading Image Irudia igotzen Copy URL Kopiatu URLa Open URL Ireki URLa Delete image Ezabatu irudia Image to Clipboard. Irudia arbelera. Save image Gorde irudia Unable to open the URL. Ezin da ireki URLa. URL copied to clipboard. URLa arbelean kopiatu da. Screenshot copied to clipboard. Arbelean kopiatu da pantaila-argazkia. Unable to save the screenshot to disk. Ezin da pantaila-argazkia diskoan gorde. Screenshot saved. Pantaila-argazkia gorde da. ImgUploaderTool Image Uploader Irudi kargatzailea Upload the selection Igo hautapena ImgurUploader Upload to Imgur Igo Imgur-era Uploading Image Irudia igotzen Copy URL Kopiatu URLa Open URL Ireki URLa Delete image Ezabatu irudia Image to Clipboard. Irudia arbelera. Unable to open the URL. Ezin da ireki URLa. URL copied to clipboard. Arbelean kopiatu da URLa. Screenshot copied to clipboard. Arbelean kopiatu da pantaila-argazkia. ImgurUploaderTool Image Uploader Irudi igotzailea Upload the selection to Imgur Igo hautapena Imgur-era InfoWindow About Honi buruz Icon Ikonoa License Lizentzia GPLv3+ GPLv3+ Version Bertsioa Flameshot v Flameshot v OS Info Sistema eragilearen informazioa Copy Info Kopiatu informazioa SPACEBAR ZURIUNEA Right Click Eskuin-klika Mouse Wheel Saguaren gurpila Move selection 1px Mugitu azalera 1px Resize selection 1px Aldatu hautapenaren tamaina 1px Quit capture Irten argazki-hartzetik Copy to clipboard Kopiatu arbelean Save selection as a file Gorde hautapena fitxategi gisa Undo the last modification Desegin azken aldaketa Toggle visibility of sidebar with options of the selected tool Erakutsi/Ezkutatu alboko barra, hautatutako tresnaren aukerak erakusten dituena Show color picker Erakutsi kolore hautagailua Change the tool's thickness Aldatu tresnaren lodiera Available shortcuts in the screen capture mode. Argazki-hartze moduan erabili daitezken laster-teklak. Key Tekla Description Deskribapena <u><b>License</b></u> <u><b>Lizentzia</b></u> <u><b>Version</b></u> <u><b>Bertsioa</b></u> <u><b>Shortcuts</b></u> <u><b>Laster-teklak</b></u> InvertTool Invert Alderantzikatu Set Inverter as the paint tool Ezarri alderantzikatzailea margotzeko tresna gisa LineTool Line Lerroa Set the Line as the paint tool Ezarri Lerroa margotzeko tresna gisa MarkerTool Marker Errotuladorea Set the Marker as the paint tool Ezarri Errotuladorea margotzeko tresna gisa MoveTool Move Mugitu Move the selection area Mugitu hautapena PencilTool Pencil Arkatza Set the Pencil as the paint tool Ezarri arkatza margotzeko tresna gisa PinTool Pin Tool Txintxeta Pin image on the desktop Finkatu irudia mahaigainan PinWidget Context menu Testuinguruko menua Copy to clipboard Kopiatu arbelean Save to file Gorde fitxategian Rotate Right Biratu eskuinera Rotate Left Biratu ezkerrera Increase Opacity Handiagotu opakutasuna Decrease Opacity Txikiagotu opakutasuna Close Itxi PixelateTool Pixelate Pixelatu Set Pixelate as the paint tool. Ezarri pixelatzea marrazketa tresna gisa. Set Pixelate as the paint tool Ezarri Pixelatu margotzeko tresna gisa PrimaryInstanceWidget Primary instance Instantzia nagusia <b>Primary instance.</b> Messages received from secondaries: <b>Instantzia nagusia.</b> Bigarren mailakoetatik jasotako mezuak: QHotkey Failed to register %1. Error: %2 Ezin izan da %1 erregistratu. Errorea: %2 Failed to unregister %1. Error: %2 Ezin izan da %1 erregistrotik kendu. Errorea: %2 QObject Save Error Errorea gordetzean Capture saved as Argazkia honela gorde da: Capture saved to clipboard. Argazkia arbelean gorde da. Capture saved to clipboard Argazkia arbelean gorde da Error while saving to clipboard Errorea arbelean gordetzerakoan Error trying to save as Errorea honela gordetzean: Save screenshot Gorde pantaila-argazkia Path copied to clipboard as Arbelean kopiatu da bidea Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Pantaila-argazkia izen honekin gorde eta kopiatzen da arbelean: Unable to connect via DBus Ezin da DBus bidez konektatu Powerful yet simple to use screenshot software. Pantaila-argazki software ahaltsu baina sinplea. See Ikusi Capture the entire desktop. Pantaila osoaren argazkia egin. Open the capture launcher. Ireki argazki-hartze abiarazlea. Start a manual capture in GUI mode. Hasi eskuzko argazki-hartzea interfaze moduan. Configure Konfiguratu Capture a single screen. Leiho bakar baten argazkia egin. Path where the capture will be saved Argazkia gordeko den bidea Capture screenshot of all monitors at the same time. Egin aldi berean monitore guztien pantaila-argazkia. Capture a screenshot of the specified monitor. Egin monitore zehatz baten pantaila-argazkia. Existing directory or new file to save to Lehendik dagoen direktorio edo fitxategi berria gordetzeko Save the capture to the clipboard Gorde argazkia arbelean Pin the capture to the screen Ainguratu argazkia pantailara Upload screenshot Igo pantaila-argazkia Delay time in milliseconds Atzerapen tartea milisegundotan Repeat screenshot with previously selected region Errepikatu pantaila-argazkia aurrez hautatutako eremuan Screenshot region to select Hautatzeko pantaila-argazkiaren eremua Set the filename pattern Ezarri fitxategi-izenaren txantiloia Accept capture as soon as a selection is made Onartu argazkia hautaketa egin bezain laster Enable or disable the trayicon Gaitu/Desgaitu erretiluko ikonoa Enable or disable run at startup Gaitu/Desgaitu saio hasieran abiaraztea Enable or disable the notifications Gaitu edo ezgaitu jakinarazpenak Check the configuration for errors Begiratu konfigurazioa akatsik dagoen Show the help message in the capture mode Bistaratu laguntza mezua argazki-hartze moduan Define the main UI color Zehaztu interfazearen kolore nagusia Define the contrast UI color Zehaztu interfazearen kontraste kolorea Print raw PNG capture Gorde argazkia PNG gordin gisa Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Inprimatu hautapenaren geometria WxH+X+Y formatuan (Zabalera, Altuera, X ardatza, Y ardatza). Ez du ezer egiten jatorrizkoa zehazten bada Define the screen to capture (starting from 0) Definitu harrapatzeko pantaila (0tik hasita) Invalid delay, it must be a number greater than 0 Atzerapen baliogabea, 0 baino handiagoa den zenbaki bat izan behar du Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Eremu baliogabea, erabili 'WxH+X+Y' edo 'guztia' edo 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Bide baliogabea, lehendik dagoen direktorio bat edo lehendik dagoen direktorio bateko fitxategi berri bat izan behar du Define the screen to capture Zehaztu argazkia egingo zaion leihoa default: screen containing the cursor lehenetsia: kurtsorea gainean duen leihoa Screen number Leiho kopurua Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Kolore baliogabea, bandera honek formatu hauek ditu: - #RGB (R, G eta B-ko bakoitza digitu hexagonal bakarra da) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - 'Urdina' edo 'gorria' deritzen koloreak Baliteke '#' karakterea ihes egin behar izatea, '\#FFF'n bezala Invalid delay, it must be higher than 0 Atzerapen baliogabea, 0 baino handiagoa izan behar du Invalid screen number, it must be non negative Leiho kopuru baliogabe, ezin du negatiboa izan Invalid path, it must be a real path in the system Bide baliogabe, sisteman existitzen den bide bat behar du izan Invalid value, it must be defined as 'true' or 'false' Balio baliogabea, 'true' (egi) edo 'false' (faltsu) gisa definitu behar da Error Errorea Unable to write in Ezin da hemen idatzi: Requested screen exceeds screen count Eskatutako pantailak pantaila kopurua gainditzen du Full screen screenshot pinned to screen Pantaila osoko pantaila-argazkia pantailara ainguratuta URL copied to clipboard. Arbelean kopiatu da URLa. Options Aukerak Arguments Argumentuak arguments argumentu Subcommands Azpi-komandoak subcommands azpi-komandoak Usage Erabilera options aukerak Per default runs Flameshot in the background and adds a tray icon for configuration. Lehenetsita, Flameshot atzealdean abiarazten du eta erretiluko ikono bat bistaratzen du, konfiguratzeko. Per default runs Flameshot in the background and adds a tray icon for configuration. Lehenetsita Flameshot atzealdean abiarazten du eta erretilu ikono bat gehitzen du ezarpenetarako. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Kaixo, hemen nago! Egin klik erretiluko ikonoan pantaila-argazkia hartzeko edo egin klik eskuineko botoiaz aukera gehiago ikusteko. Toggle side panel Bistaratu/Ezkutatu alboko panela Resize selection left 1px Aldatu hautapenaren tamaina pixel 1 ezkerrera Resize selection right 1px Aldatu hautapenaren tamaina pixel 1 eskuinera Resize selection up 1px Aldatu hautapenaren tamaina pixel 1 gora Resize selection down 1px Aldatu hautapenaren tamaina pixel 1 behera Select entire screen Hautatu pantaila osoa Move selection left 1px Mugitu hautapena pixel 1 ezkerrera Move selection right 1px Mugitu hautapena pixel 1 eskuinera Move selection up 1px Mugitu hautapena pixel 1 gora Move selection down 1px Mugitu hautapena pixel 1 behera Commit text in text area Idatzi testu-eremuan Delete current tool Delete current tool Quit capture Irten argazki-hartzetik Screenshot history Pantaila-argazkien erregistroa Capture screen Egin pantailaren argazkia Show color picker Bistaratu kolore hautagailua Change the tool's size Aldatu tresnaren tamaina Change the tool's thickness Aldatu tresnaren lodiera RectangleTool Rectangle Laukizuzena Set the Rectangle as the paint tool Ezarri Laukizuzena margotzeko tresna gisa RedoTool Redo Berregin Redo the next modification Berregin azken aldaketa SaveTool Save Gorde Save screenshot to a file Gorde pantaila-argazkia fitxategi batean Save the capture Gorde argazkia ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Ezin da mahaigaineko ingurunea detektatu (GNOME? KDE? Sway?...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Wayland pantaila-kapturaren egokigailu unibertsalak Grim behar du Wayland-en pantaila-kapturaren osagai gisa. Pantaila-kapturaren osagaia falta bada, instalatu! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter useGrimAdapter ezarpena ez badago gaituta, dbus protokoloa erabiliko da. Kontuan izan behar da dbus protokoloa Wayland-en erabiltzea ez dela gomendagarria. flameshot.ini fitxategian useGrimAdapter ezarpena aktibatzea gomendatzen da, Grim-ean oinarritutako Wayland pantaila-argazkiaren egokigailu orokorra aktibatzeko grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Grim-en pantaila-argazkiaren osagaia 'wlroots'-en oinarritzen da, GNOMEn edo antzeko mahaigaineko inguruneetan ez litzateke erabili behar Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Ezin da mahaigaineko ingurunea detektatu (GNOME? KDE? ¿Qile? {\an2}Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Aholkua: saiatu XDG_CURRENT_DESKTOP ingurune-aldagaia ezartzen. Unable to capture screen Ezin da pantailaren argazkia egin SecondaryInstanceWidget Secondary instance Bigarren mailako instantzia <b>Secondary instance.</b> Send message to primary: <b>Bigarren mailako instantzia.</b> Bidali mezua nagusira: Type something here... Idatzi zerbait hemen... &Send &Bidali Error sending message Errorea mezua bidaltzean The message '%1' could not be sent to the primary. '%1' mezua ezin da bidali nagusira. SelectionTool Rectangular Selection Hautaketa laukizuzena Set Selection as the paint tool Ezarri Hautaketa margotzeko tresna gisa SetShortcutDialog Set Shortcut Ezarri laster-tekla Enter new shortcut to change Sakatu laster-tekla berria aldatzeko Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Sakatu Esc uzteko edo ⌘+Atzera-tekla teklatuko lasterbidea desgaitzeko. Press Esc to cancel or Backspace to disable the keyboard shortcut. Sakatu Esc irteteko edo Atzera tekla hutsik uzteko. Flameshot must be restarted for changes to take effect. Flameshot berrabiarazi behar da aldaketak eragina izan dezan. ShortcutsWidget Hot Keys Laster-teklak Available shortcuts in the screen capture mode. Argazki-hartze moduan erabili daitezken laster-teklak. Description Deskribapena Key Tekla Left Double-click Ezkerreko klik bikoitza Toggle side panel Bistaratu/Ezkutatu alboko panela Grab a color from the screen Hartu kolore bat pantailatik Resize selection left 1px Aldatu hautaketaren tamaina pixel 1 ezkerrera Resize selection right 1px Aldatu hautaketaren tamaina pixel 1 eskuinera Resize selection up 1px Aldatu hautaketaren tamaina pixel 1 gora Resize selection down 1px Aldatu hautaketaren tamaina pixel 1 behera Symmetrically decrease width by 2px Zabalera 2px-tan simetrikoki txikiagotzea Symmetrically increase width by 2px Zabalera 2px-tan simetrikoki handiagotzea Symmetrically increase height by 2px Altuera 2px-tan simetrikoki handiagotzea Symmetrically decrease height by 2px Altuera 2px-tan simetrikoki txikiagotzea Select entire screen Hautatu pantaila osoa Move selection left 1px Mugitu hautaketa pixel 1 ezkerrera Move selection right 1px Mugitu hautaketa pixel 1 eskuinera Move selection up 1px Mugitu hautaketa pixel 1 gora Move selection down 1px Mugitu hautaketa pixel 1 behera Commit text in text area Idatzi testua testu-eremuan Delete selected drawn object Ezabatu hautatutako objektu marraztua Cancel current selection Utzi uneko hautapena Delete current tool Ezabatu uneko tresna Capture screen Egin pantailaren argazkia Screenshot history Pantaila-argazkien erregistroa SidePanelWidget Active thickness: Uneko lodiera: Active color: Uneko kolorea: Press ESC to cancel Sakatu IHES uzteko Active tool size: Tresna aktiboaren tamaina: Active Color: Kolore aktiboa: Grab Color Hartu kolorea Display grid Erakutsi sareta SizeDecreaseTool Decrease Tool Size Txikiagotu tresnaren tamaina Decrease the size of the other tools Txikiagotu gainerako tresnen tamaina SizeIncreaseTool Increase Tool Size Handiagotu tresnaren tamaina Increase the size of the other tools Handiagotu beste tresnen tamaina SizeIndicatorTool Selection Size Indicator Hautaketaren tamaina-adierazlea Show X and Y dimensions of the selection Erakutsi hautaketaren X eta Y dimentsioak Show the dimensions of the selection (X Y) Bistaratu hautapenaren dimentsioak (X Y) StrftimeChooserWidget Century (00-99) Mendea (00-99) Year (00-99) Urtea (00-99) Year (2000) Urtea (2000) Month Name (jan) Hilabetearen izena (ira) Month Name (january) Hilabetearen izena (iraila) Month (01-12) Hilabetea (01-12) Week Day (1-7) Asteko eguna (1-7) Week (01-53) Astea (01-53) Day Name (mon) Egunaren izena (ar.) Day Name (monday) Egunaren izena (asteartea) Day (01-31) Eguna (01-31) Day of Month (1-31) Hilabeteko eguna (1-31) Day (001-366) Urteko eguna (001-366) Time (%H-%M-%S) Ordua (%H-%M-%S) Time (%H-%M) Ordua (%H-%M) Hour (00-23) Eguneko ordua (00-23) Hour (01-12) Eguneko ordua (01-12) Minute (00-59) Minutua (00-59) Second (00-59) Segundoa (00-59) Full Date (%m/%d/%y) Data (%h/%e/%u) Full Date (%Y-%m-%d) Data (%U-%h-%e) Full Date (%d-%m-%Y) Data osoa (%Y-%m-%d) SystemNotification Flameshot Info Flameshot-en informazioa TextConfig StrikeOut Marratua Underline Azpimarratua Bold Lodia Italic Etzana Left Align Lerrokatu ezkerrean Center Align Lerrokatu erdian Right Align Lerrokatu eskuinean TextTool Text Testua Add text to your capture Gehitu testua zure argazkian TrayIcon &Take Screenshot Egin &pantailaren argazkia &Open Launcher &Ireki abiarazlea &Configuration &Ezarpenak &About &Honi buruz Check for updates Bilatu eguneraketak New version %1 is available %1 bertsio berria eskuragarri dago &Quit &Irten &Latest Uploads &Azken kargak &Open Save Path &Ireki gordetzeko bidea UIcolorEditor UI Color Editor Interfaze-kolorearen editorea Change the color moving the selectors and see the changes in the preview buttons. Aldatu kolorea hautagailuak mugituz eta ikusi aldaketak aurrebistako botoietan. Select a Button to modify it Aukeratu botoi bat berbera aldatzeko Main Color Kolore nagusia Click on this button to set the edition mode of the main color. Sakatu botoi hau kolore nagusia aldatzeko. Contrast Color Kontraste kolorea Click on this button to set the edition mode of the contrast color. Sakatu botoi hau kontraste kolorea aldatzeko. UndoTool Undo Desegin Undo the last modification Desegin azken aldaketa UpdateNotificationWidget New Flameshot version %1 is available Flameshot %1 bertsio berria eskuragarri dago Ignore Ezikusi Later Geroago Update Eguneratu UploadHistory Upload History Igo historia Screenshots history is empty Pantaila-argazkien erregistroa hutsik dago UploadLineItem Form Forma TextLabel Testu etiketa Copy URL Kopiatu URLa Open In Browser Ireki nabigatzailean Confirm to delete Berretsi ezabatzea Are you sure you want to delete a screenshot from the latest uploads and server? Ziur pantaila-argazkia azken kargetatik eta zerbitzaritik ezabatu nahi duzula? UtilityPanel Close Itxi <Empty> <Empty> VisualsEditor Opacity of area outside selection: Hautapenaren kanpoko eremuaren opakutasuna : UI Color Editor Interfazearen kolorearen editorea Colorpicker Editor Kolore-hautatzailea editorea Button Selection Botoi-hautaketa Select All Hautatu guztiak color_widgets::ColorDialog Pick Aukeratu color_widgets::ColorPalette Unnamed Izenik gabe color_widgets::ColorPaletteModel Unnamed Izenik gabe %1 (%2 colors) %1 (%2 kolore) color_widgets::ColorPaletteWidget Open a new palette from file Ireki paleta berri bat fitxategitik Create a new palette Sortu paleta berri bat Duplicate the current palette Bikoiztu uneko paleta Delete the current palette Ezabatu uneko paleta Revert changes to the current palette Leheneratu aldaketak uneko paletara Save changes to the current palette Gorde aldaketak uneko paletan Add a color to the palette Gehitu kolore bat paletari Remove the selected color from the palette Kendu hautatutako kolorea paletatik New Palette Paleta berria Name Izena GIMP Palettes (*.gpl) GIMP Paletak (*.gpl) Palette Image (%1) Paleta Irudia (%1) All Files (*) Fitxategi guztiak (*) Open Palette Ireki paleta Failed to load the palette file %1 Ezin izan da paleta fitxategia kargatu %1 color_widgets::GradientEditor Add Color Gehitu kolorea Remove Color Kendu kolorea Edit Color... Editatu kolorea... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 kolore) color_widgets::Swatch Clear Color Kendu kolorea %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_fa.ts ================================================ AbstractWidgetList Add New افزودن جدید Move Up جابه‌جایی به بالا Move Down جابه‌جایی به پایین Remove حذف کردن AcceptTool Accept پذیرش Accept the capture پذیرش نماگرفت AppLauncher App Launcher اجراگر برنامه Choose an app to open the capture برنامه‌ای را برای گشودن نماگرفت انتخاب کنید AppLauncherWidget Open With گشودن با Launch in terminal اجرا در پایانه Keep open after selection پس از انتخاب باز بماند Error خطا Unable to launch in terminal. عدم توانایی اجرا در پایانه. Unable to write in عدم توانایی در نوشتن ArrowTool Arrow پیکان Set the Arrow as the paint tool تنظیم پیکان به عنوان ابزار نقاشی BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>حالت نماگرفت</b> Rectangular Region ناحیه مستطیلی Full Screen (Current Display) تمام صفحه (نمایشگر فعلی) Full Screen (All Monitors) تمام صفحه (همه نمایشگرها) No Delay بدون تاخیر second ثانیه seconds ثانیه Take new screenshot گرفتن نماگرفت جدید Area: مساحت: Capture Launcher گرفتن اجراگر TextLabel برچسب متنی Capture Mode حالت گرفتن Delay: تاخیر: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla نماگرفت از صفحه امکان پذیر نیست Mouse موشواره Select screenshot area گزینش ناحیهٔ نماگرفت Mouse Wheel چرخ موشواره Change tool size تغییر اندازهٔ ابزار Right Click کلیک راست Show color picker نمایش گزینشگر رنگ Open side panel گشودن تابلو کناری Esc Esc Exit خروج Quit Capture دست کشیدن از نماگرفت Are you sure you want to quit capture? مطمئنید که می‌خواهید از نماگرفت دست بکشید؟ Do not show this again این را دیگر نشان نده Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. تمرکز از Flameshot به جای دیگری منتقل شده. کلید های کیبورد کار نخواهند کرد تا زمانی که روی جایی از این صفحه کلیک کنید. Configuration error resolved. Launch `flameshot gui` again to apply it. خطای تنظیمات رفع شد. `flameshot gui` را اجرا کنید تا تغییرات اعمال شوند. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. ناحیه‌ای را با ماوس انتخاب کنید یا برای خروج Esc را فشار دهید. برای نماگرفت از صفحه، کلید ورود را فشار دهید. برای نمایش گزینشگر رنگ، راست کلیک کنید. از لغزنده ماوس برای تغییر ضخامت ابزار خود استفاده کنید. برای بازکردن تابلو کناری، کلید فاصله را فشار دهید. Tool Settings تنظیمات ابزار CircleCountTool Circle Counter شمارنده دایره‌ای Add an autoincrementing counter bubble افزودن حباب شمارش با افزایش خودکار CircleTool Circle دایره Set the Circle as the paint tool تنظیم دایره به عنوان ابزار نقاشی ColorDialog Select Color گزینش رنگ Saturation اشباع Hue فام Hex هگز Blue آبی Value مقدار Green سبز Alpha آلفا Red قرمز ColorGrabWidget Accept color پذیرش رنگ Enter or Left Click کلید Enter یا کلیک چپ Precisely select color گزینش رنگ دقیق Hold Left Click نگه داشتن کلیک چپ Toggle magnifier تغییر حالت ذره‌بین Space or Right Click فاصله یا کلیک راست Cancel لغو Esc گریز ColorPickerEditor Edit Preset: تغییر پیشفرض: Enter color to update preset رنگ را وارد کنید تا پیشفرض عوض شود Update به‌روز رسانی Press button to update the selected preset دکمه را فشار دهید تا پیشفرض انتخاب شده به‌روز شود Delete حذف Press button to delete the selected preset دکمه را فشار دهید تا پیشفرض انتخاب شده حذف شود Add Preset: اضافه کردن رنگ پیشفرض: Enter color manually or select it using the color-wheel اضافه کردن دستی رنگ یا انتخاب رنگ با استفاده از چرخ رنگ Add افزودن Press button to add preset دکمه را فشار دهید تا به رنگهای پیشفرض اضافه شود Error خطا Unable to add preset. Maximum limit reached. افزودن به پیشفرض‌ها ممکن نیست. به مقدار حداکثری رسیده. Unable to remove preset. Minimum limit reached. حذف کردن از پیشفرض‌ها ممکن نیست. به مقدار حداقلی رسیده. ConfigErrorDetails Configuration errors خطاهای پیکربندی ConfigHandler Unrecognized setting: '%1' تنظمیات ناشناخته: '%1' Unrecognized shortcut name: '%1'. نام میان‌بر ناشناخته:‌ '%1' Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. شما با موفقیت تمام خطاها در پیکربندی را اصلاح کردید. The configuration contains an error. Open configuration to resolve. پیکربندی دارای خطا است. پیکربندی را باز کنید تا بتوانید اصلاحشان کنید. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors حل کردن خطاهای پیکربندی <b>You must resolve all errors before continuing:</b> <b>شما باید تمام خطاها را پیش از ادامه، حل کنید:</b> Reset بازنشانی Reset to the default value. به مقدار پیش‌گزیده بازنشانی می‌شود. Remove حذف Remove this setting. حذف این تنظیمات. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. برخی از میانبرهای صفحه کلید تداخل دارند. این مانع از شروع flameshot نمی‌شود. لطفاً آنها را به صورت دستی در فایل پیکربندی حل کنید. Resolve all حل کردن همه Resolve all listed errors. تمام خطاهای فهرست شده حل می‌شوند. Details جزییات ConfigWindow Configuration پیکربندی Interface رابط کاربری Filename Editor ویرایشگر نام پرونده General عمومی Shortcuts میان‌برها Resolve حل کردن <b>Configuration file has errors. Resolve them before continuing.</b> <b>پروندهٔ پیکربندی دارای خطاست. پیش از ادامه آن‌ها را حل کنید.</b> Controller New version %1 is available نگارش جدید %1 در دسترس است You have the latest version شما آخرین نگارش را دارید Failed to get information about the latest version. دریافت اطّلاعات درباره آخرین نگارش شکست خورد. Error خطا Unable to close active modal widgets ناتوان در بستن ابزارک‌های پرکاربرد فعّال &Open Launcher &گشودن اجراگر &Configuration &پیکربندی &About &درباره Check for updates بررسی برای به‌روز رسانی‌ها &Latest Uploads &جدیدترین بارگذاری‌ها URL copied to clipboard. نشانی به تخته‌گیره رونویسی شد. &Information &Informació &Quit &خروج &Take Screenshot &گرفتن نماگرفت CopyTool Copy رونوشت Copy selection to clipboard رونویسی محوطهٔ برگزیده به تخته‌گیره Copy the selection into the clipboard رونوشت گزیده در بُریده‌دان DBusUtils Unable to connect via DBus عدم توانایی در اتصال به DBus ExitTool Exit خروج Leave the capture screen ترک صفحهٔ نماگرفت FileNameEditor Edit the name of your captures: ویرایش نام نماگرفت‌هایتان: Edit: ویرایش: Preview: پیش‌نمایش: Save ذخیره Saves the pattern الگو را ذخیره می‌کند Restore بازگردانی Reset Reinicialitza Restores the saved pattern الگوی ذخیره شده را بازمی‌گرداند Clear پاک‌کردن Deletes the name نام را حذف می‌کند Flameshot Error خطا Unable to close active modal widgets ناتوان در بستن ابزارک‌های فعّال URL copied to clipboard. نشانی در بُریده‌دان ذخیره شد. FlameshotDaemon New version %1 is available نگارش جدید %1 در دسترس است You have the latest version شما آخرین نگارش را دارید Failed to get information about the latest version. دریافت اطّلاعات درباره آخرین نگارش ناموفق بود. Unable to connect via DBus عدم توانایی در اتّصال توسط DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import درون‌ریزی Error خطا Unable to read file. خواندن پرونده امکان‌پذیر نیست. Unable to write file. نوشتن پرونده امکان پذیر نیست. Save File ذخیرهٔ پرونده Confirm Reset تأیید بازنشانی Are you sure you want to reset the configuration? مطمئنید که می‌خواهید پیکربندی را بازنشانی کنید؟ Show help message نمایش پیام راهنما Show the help message at the beginning in the capture mode. نمایش پیام راهنما در آغاز حالت نماگرفت. Show the side panel button نمایش دکمه تابلوی کناری Show the side panel toggle button in the capture mode. نمایش دکمهٔ تغییر وضعیت تابلوی کناری در حالت نماگرفت. Show desktop notifications نمایش آگاهی‌های میزکار Show tray icon نمایش آیکون در سینی Show the systemtray icon نمایش آیکون در سینی سامانه Confirmation required to delete screenshot from the latest uploads نیاز به تایید برای حذف نماگرفت از جدیدترین بارگذاری‌ها Configuration File پروندهٔ پیکربندی Export برون‌ریزی Reset بازنشانی Automatic check for updates بررسی خودکار برای بروزرسانی‌ها Allow multiple flameshot GUI instances simultaneously اجازه دهید چندین نمونه flameshot gui به طور همزمان فعال شوند Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup اجرا در هنگام شروع سامانه Launch Flameshot اجرای فلیم‌شات Show welcome message on launch نمایش پیام خوشامدگویی در هنگام اجرا Use large predefined color palette از پالت بزرگ رنگ های پیشفرض استفاده کن Copy URL after upload رونویسی از نشانی پس از بارگذاری Copy URL and close window after upload رونویسی از نشانی و بستن پنجره، پس از بارگذاری Save image after copy ذخیره تصویر پس از رونویسی Save image file after copying it ذخیرهٔ پروندهٔ تصویر پس از رونویسی آن Show the help message at the beginning in the capture mode نمایش پیام راهنما در ابتدا در حالت نماگرفت Use last region for GUI mode استفاده از آخرین ناحیه برای حالت GUI Use the last region as the default selection for the next screenshot in GUI mode استفاده از آخرین ناحیه به عنوان پیش‌گزیده برای نماگرفت بعدی در حالت گرافیکی Show the side panel toggle button in the capture mode دکمه‌ی تغییر وضعیت تابلو کناری را در حالت نماگرفت نمایش دهید Enable desktop notifications به کار انداختن آگاهی‌های میزکار Show abort notifications نمایش اعلان‌های لغو Enable abort notifications فعال کردن لغو اعلان‌ها Show icon in the system tray نمایش نقشک در سینی سامانه Use grim to capture screenshots استفاده از grim برای نماگرفت Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim یک ابزار فقط برای Wayland است که بر اساس پروتکل کپی صفحه نمایش، از صفحه نمایش عکس می‌گیرد. معمولاً فقط روی مدیران پنجره‌های مینیمال Wayland مانند sway، hyprland و غیره فعال می‌شود. Ask for confirmation to delete screenshot from the latest uploads درخواست تأیید برای حذف نماگرفت از آخرین آپلودها Check for updates automatically بررسی خودکار برای به‌روز رسانی‌‌ها This allows you to take screenshots of Flameshot itself for example این به شما امکان می‌دهد برای مثال از خود Flameshot نماگرفت بگیرید Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot نمایش کادر پیام خوشامدگویی در وسط صفحه هنگام گرفتن نماگرفت Use a large predefined color palette از پالت رنگ بزرگ پیشفرض استفاده کنید Copy on double click کپی کردن با دوبار کلیک Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed تخلیه خودکار از حافظه در صورت عدم نیاز به حظور در حافظه Automatically close daemon (background process) when it is not needed بستن خودکار دیمن (فرآیند پس‌زمینه) در صورت عدم نیاز Launch in background at startup اجرا در پس‌زمینه در زمان شروع برنامه Launch Flameshot daemon (background process) when computer is booted اجرای دیمن Flameshot (فرایند پس‌زمینه) هنگام بوت شدن کامپیوتر Ask before quit capture گرفتن تایید قبل از خروج از نماگرفت Show the confirmation prompt before ESC quit نمایش اعلان تأیید قبل از خروج Enable Copy to clipboard on Double Click فعال کردن کپی در بُریده‌دان با دوبار کلیک Copy URL after uploading was successful پس از آپلود موفقیت‌آمیز، نشانی اینترنتی (URL) را کپی کنید After copying the screenshot, save it to a file as well پس از کپی کردن نماگرفت، آن را در یک فایل نیز ذخیره کن Save Path ذخیره مسیر Change... تغییر... Use fixed path for screenshots to save استفاده از مسیر ثابت برای ذخیرهٔ نماگرفت‌ها Preferred save file extension: پسوند ترجیحی ذخیرهٔ پرونده: Latest Uploads Max Size بیشینهٔ اندازهٔ جدیدترین بارگذاری‌ها Imgur Application Client ID Undo limit محدودیت برگرداندن Use JPG format for clipboard (PNG default) استفاده از قالب JPG برای تخته‌گیره (پیش‌گزیده PNG) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save رونویسی از مسیر پرونده پس از ذخیره Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation بارگذاری تصویر بدون تأییدیه Choose a Folder گزینش یک شاخه Unable to write to directory. نوشتن در شاخه امکان پذیر نیست. Show magnifier نمایش ذرّه‌بین Enable a magnifier while selecting the screenshot area فعال کردن ذره‌بین زمانی که ناحیه ی نماگرفت انتخاب میشود Square shaped magnifier ذره‌بین مربع شکل Make the magnifier to be square-shaped تبدیل ذره‌بین به مربعی شکل Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location مکان نمایش None هیچ کجا Top Left بالا چپ Top Right بالا راست Bottom Left پایین چپ Bottom Right پایین راست Center مرکز Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality کیفیت JPEG Reverse arrow پیکان معکوس Draw the arrow head first کشیدن سر پیکان در ابتدا Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads جدیدترین بارگذاری‌ها Screenshots history is empty تاریخچه نماگرفت، خالی است Copy URL رونویسی نشانی URL copied to clipboard. نشانی به تخته‌گیره رونویسی شد. Open in browser گشودن در مرورگر Confirm to delete تأیید برای حذف Are you sure you want to delete a screenshot from the latest uploads and server? آیا مطمئنید که می‌خواهید نماگرفت را از جدیدترین بارگذاری‌ها و کارساز حذف کنید؟ ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation تأییدیهٔ بارگذاری Do you want to upload this capture? آیا می‌خواهید این نماگرفت را بارگذاری کنید؟ Upload without confirmation بارگذاری بدون تأییدیه ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image بارگذاری تصویر Uploading Image در حال بارگذاری تصویر Copy URL رونویسی نشانی Open URL گشودن نشانی Delete image حذف تصویر Image to Clipboard. تصویر در تخته‌گیره. Save image ذخیرهٔ تصویر Unable to open the URL. نمی‌توان نشانی را گشود. URL copied to clipboard. نشانی در تخته‌گیره رونویسی شد. Screenshot copied to clipboard. نماگرفت در تخته‌گیره رونویسی شد. Unable to save the screenshot to disk. ناتوان در ذخیرهٔ نماگرفت در دیسک. Screenshot saved. نماگرفت ذخیره شد. ImgUploaderTool Image Uploader بارگذار تصویر Upload the selection بارگذاری محوطهٔ برگزیده ImgurUploader Upload to Imgur بارگذاری به Imgur Uploading Image در حال بارگذاری تصویر Copy URL رونوشت نشانی Open URL گشودن نشانی Delete image حذف تصویر Image to Clipboard. تصویر به بُریده‌دان. Unable to open the URL. گشودن نشانی امکان پذیر نیست. URL copied to clipboard. نشانی به بُریده‌دان رونوشت شد. Screenshot copied to clipboard. نماگرفت به بُریده‌دان رونوشت شد. ImgurUploaderTool Image Uploader بارگذار تصویر Upload the selection to Imgur بارگذاری گزیده به Imgur InfoWindow About درباره Icon نقشک License پروانه GPLv3+ نگارش ۳ یا بالاتر جی‌پی‌ال Version نگارش Flameshot v فلیم‌شات ن OS Info اطّلاعات سیستم‌عامل Copy Info رونوشت از اطّلاعات Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>پروانه</b></u> <u><b>Version</b></u> <u><b>نگارش</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert وارونگر Set Inverter as the paint tool تنظیم وارونگر به عنوان ابزار نقاشی LineTool Line خط Set the Line as the paint tool تنظیم خط به عنوان ابزار نقاشی MarkerTool Marker نشانه‌گذار Set the Marker as the paint tool تنظیم نشانه‌گذار به عنوان ابزار نقاشی MoveTool Move جابه‌جایی Move the selection area جابه‌جایی محوطه گزیده شده PencilTool Pencil مداد Set the Pencil as the paint tool تنظیم مداد به عنوان ابزار نقاشی PinTool Pin Tool ابزار سنجاق Pin image on the desktop سنجاق کردن تصویر بر روی میزکار PinWidget Context menu Context menu Copy to clipboard ذخیره در بُریده‌دان Save to file Save to file Rotate Right چرخش به راست Rotate Left چرخش به چپ Increase Opacity کاهش شفافیت Decrease Opacity افزایش شفافیت Close بستن PixelateTool Pixelate شطرنجی Set Pixelate as the paint tool. Set Pixelate as the paint tool تنظیم شطرنجی به عنوان ابزار نقاشی PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 شکست در ثبت %1. خطا: %2 Failed to unregister %1. Error: %2 شکست در لغو ثبت %1. خطا: %2 QObject Capture saved to clipboard. نماگرفت در تخته‌گیره ذخیره شد. Error while saving to clipboard خطا هنگام ذخیره در تخته‌گیره Save screenshot ذخیرهٔ نماگرفت Path copied to clipboard as مسیر در تخته‌گیره رونویسی شد به عنوان Saving canceled ذخیره کردن لغو شد Save canceled ذخیره لغو شد Capture is saved and copied to the clipboard as نماگرفت ذخیره شد و در بُریده‌دان رونوشت شد به عنوان Save Error ذخیره خطا Capture saved as نماگرفت ذخیره شد با نام Error trying to save as خطا هنگام تلاش برای ذخیره به عنوان Unable to connect via DBus عدم توانایی در اتّصال به DBus Powerful yet simple to use screenshot software. نرم‌افزار نماگرفتی قدرتمند و در عین حال، ساده. See دیدن Capture the entire desktop. نماگرفت از کل میزکار. Open the capture launcher. گشودن اجراگر نماگرفت. Start a manual capture in GUI mode. شروع نماگرفت دستی در حالت GUI. Configure پیکربندی Capture a single screen. نماگرفت از یک صفحه. Path where the capture will be saved مسیری که نماگرفت در آن ذخیره خواهد شد Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to شاخهٔ موجود یا پروندهٔ جدید برای ذخیره Save the capture to the clipboard ذخیرهٔ نماگرفت در تخته‌گیره Pin the capture to the screen سنجاق کردن نماگرفت در صفحه Upload screenshot بارگذاری نماگرفت Delay time in milliseconds زمان تاخیر به میلی‌ثانیه Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select منطقهٔ نماگرفت برای گزینش Set the filename pattern تنظیم الگوی نام پرونده Accept capture as soon as a selection is made پذیرش گرفتن به محض ایجاد یک گزینش Enable or disable the trayicon فعّال یا غیرفعّال کردن نقشک در سینی Enable or disable run at startup فعّال یا غیرفعّال کردن اجرا هنگام شروع سامانه Enable or disable the notifications Check the configuration for errors پیکربندی را برای وجود خطاها بررسی کنید Show the help message in the capture mode نمایش پیام راهنما در حالت نماگرفت Define the main UI color تعریف رنگ اصلی رابط کاربری Define the contrast UI color تعریف رنگ متضاد رابط کاربری Print raw PNG capture چاپ نماگرفت PNG خام Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified مختصات گزیده را در قالب «WxH+X+Y» چاپ می‌کند. اگر چیزی مشخص نشده باشد، هیچ کاری انجام نمی‌دهد Define the screen to capture (starting from 0) صفحه را برای نماگرفت مشخص کنید (از ۰ شروع می‌شود) Invalid delay, it must be a number greater than 0 تأخیر نامعتبر است، مقدار باید یک عدد بزرگ‌تر از ۰ باشد Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. منطقهٔ نامعتبر، از «⁦WxH+X+Y⁩» یا «⁦all⁩» یا «⁦screen0/screen1/...⁩» استفاده کنید. Invalid path, must be an existing directory or a new file in an existing directory مسیر نامعتبر است، باید یک شاخهٔ موجود یا یک پروندهٔ جدید در یک شاخهٔ موجود باشد Define the screen to capture صفحه را برای نماگرفت مشخص کنید default: screen containing the cursor پیش‌گزیده: صفحه شامل اشاره‌گر Screen number شمارهٔ صفحه Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' رنگ نامعتبر، این پرچم از قالب‌های زیر پشتیبانی می‌کند: - #RGB (هر یک از R، G و B یک رقم هگز هستند) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - رنگ‌های نامگذاری شده مانند "blue" یا "red" ممکن است لازم باشد از علامت "#" مانند "‎\#FFF" فرار کنید Invalid delay, it must be higher than 0 تأخیر نامعتبر است، مقدار باید بیشتر از 0 باشد Invalid screen number, it must be non negative شماره صفحه نامعتبر است، باید مثبت باشد Invalid path, it must be a real path in the system مسیر نامعتبر است، باید یک مسیر واقعی در سامانه باشد Invalid value, it must be defined as 'true' or 'false' مقدار نامعتبر است، باید به عنوان «true» یا «false» تعریف شود Error خطا Unable to write in نوشتن امکان پذیر نیست URL copied to clipboard. نشانی به بُریده‌دان رونوشت شد. Options گزینه‌ها Arguments آرگومان‌ها arguments آرگومان‌ها Subcommands subcommands Usage کارکرد options گزینه‌ها Per default runs Flameshot in the background and adds a tray icon for configuration. به صورت پیش‌گزیده فلیم‌شات را در پس‌زمینه اجرا و نماد سینی را برای پیکربندی اضافه می‌کند. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. سلام من اینجام! برای گرفتن نماگرفت روی نقشک برنامه در سینی کلیک یا برای مشاهده گزینه‌های بیشتر کلیک راست کنید. Requested screen exceeds screen count Full screen screenshot pinned to screen نماگرفت تمام‌صفحه در صفحه سنجاق شد Toggle side panel تغییر وضعیت تابلو کناری Resize selection left 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به چپ Resize selection right 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به راست Resize selection up 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به بالا Resize selection down 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به پایین Select entire screen گزینش کل صفحه Move selection left 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به چپ Move selection right 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به راست Move selection up 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به بالا Move selection down 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به پایین Commit text in text area متن ثبت در ناحیهٔ متنی Delete current tool حذف ابزار فعلی Quit capture خروج از نماگرفت Screenshot history تاریخچهٔ نماگرفت Capture screen نماگرفت از صفحه Show color picker نمایش گزینشگر رنگ Change the tool's size تغییر اندازهٔ ابزار Change the tool's thickness تغییر ضخامت ابزارها RectangleTool Rectangle مستطیل Set the Rectangle as the paint tool تنظیم مستطیل به عنوان ابزار نقاشی RedoTool Redo انجام دوباره Redo the next modification انجام دوباره تغییر بعدی SaveTool Save ذخیره Save screenshot to a file ذخیرهٔ نماگرفت در یک پرونده Save the capture ذخیره نماگرفت ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! آداپتور ضبط صفحه نمایش جهانی wayland به Grim به عنوان کامپوننت ضبط صفحه wayland نیاز دارد. اگر کامپوننت ضبط صفحه نمایش وجود ندارد، لطفاً آن را نصب کنید! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter اگر تنظیم useGrimAdapter فعال نباشد، از پروتکل DBus استفاده خواهد شد. لازم به ذکر است که استفاده از پروتکل DBus در Wayland توصیه نمی‌شود. توصیه می‌شود تنظیم useGrimAdapter را در flameshot.ini فعال کنید تا آداپتور تصویر عمومی Wayland مبتنی بر grim فعال شود grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments کامپوننت اسکرین‌شات گریم بر اساس wlroots پیاده‌سازی شده است، ممکن است در گنوم یا محیط‌های دسکتاپ مشابه استفاده نشود Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) قادر به شناسایی محیط دسکتاپ (GNOME؟ KDE؟ Qile؟ Sway؟ ...) نیست Hint: try setting the XDG_CURRENT_DESKTOP environment variable. نکته: سعی کنید متغیر محیطی XDG_CURRENT_DESKTOP را تنظیم کنید. Unable to capture screen نماگرفت از صفحه امکان پذیر نیست SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection گزینش مستطیلی Set Selection as the paint tool تنظیم گزینش مستطیلی به عنوان ابزار نقاشی SetShortcutDialog Set Shortcut تنظیم میان‌بر Enter new shortcut to change ورود میان‌بر جدید برای تغییر Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. برای لغو Esc را فشار دهید یا برای غیرفعال کردن میان‌بر صفحه‌کلید ‎⌘+Backspace را فشار دهید. Press Esc to cancel or Backspace to disable the keyboard shortcut. برای لغو Esc را فشار دهید یا برای غیرفعّال کردن میان‌بر صفحه‌کلید Backspace را فشار دهید. Flameshot must be restarted for changes to take effect. برای اعمال تغییرات، فلیم‌شات باید راه‌اندازی مجدد شود. ShortcutsWidget Hot Keys کلیدهای داغ Available shortcuts in the screen capture mode. میان‌برهایی که در حالت نماگرفت از صفحه در دسترس هستند. Description توضیح Key کلید Left Double-click دوبار کلیک Toggle side panel تغییر وضعیت تابلو کناری Grab a color from the screen Resize selection left 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به چپ Resize selection right 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به راست Resize selection up 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به بالا Resize selection down 1px تغییر اندازه محوطه گزیده شده 1 پیکسل به پایین Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen انتخاب تمام صفحه Move selection left 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به چپ Move selection right 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به راست Move selection up 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به بالا Move selection down 1px جابه‌جایی محوطه گزیده شده 1 پیکسل به پایین Commit text in text area ثبت متن در ناحیهٔ متنی Delete selected drawn object شیء ترسیم شده انتخاب شده را حذف کنید Cancel current selection لغو انتخاب فعلی Delete current tool حذف ابزار فعلی Capture screen نماگرفت از صفحه Screenshot history تاریخچهٔ نماگرفت SidePanelWidget Active thickness: ضخامت فعال: Active color: رنگ فعال: Press ESC to cancel برای لغو کلید ESC را فشار دهید Active tool size: اندازهٔ ابزار فعّال: Active Color: رنگ فعّال: Grab Color گرفتن رنگ Display grid نمایش grid SizeDecreaseTool Decrease Tool Size کاهش اندازهٔ ابزار Decrease the size of the other tools کاهش اندازهٔ سایر ابزارها SizeIncreaseTool Increase Tool Size افزایش اندازهٔ ابزار Increase the size of the other tools افزایش اندازهٔ سایر ابزارها SizeIndicatorTool Selection Size Indicator نشانگر اندازهٔ گزینش Show X and Y dimensions of the selection نمایش ابعاد X و Y قسمت برگزیده Show the dimensions of the selection (X Y) نمایش ابعاد گزیده (X Y) StrftimeChooserWidget Century (00-99) قرن (00-99) Year (00-99) سال (00-99) Year (2000) سال (2000) Month Name (jan) نام ماه (jan) Month Name (january) نام ماه (january) Month (01-12) ماه (01-12) Week Day (1-7) روز هفته (1-7) Week (01-53) هفته (01-53) Day Name (mon) نام روز (mon) Day Name (monday) نام روز (monday) Day (01-31) روز (01-31) Day of Month (1-31) روز در ماه (1-31) Day (001-366) روز (001-366) Hour (00-23) ساعت (00-23) Hour (01-12) ساعت (01-12) Minute (00-59) دقیقه (00-59) Second (00-59) ثانیه (00-59) Full Date (%m/%d/%y) تاریخ کامل (%m/%d/%y) Full Date (%Y-%m-%d) تاریخ کامل (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) زمان (%H-%M-%S) Time (%H-%M) زمان (%H-%M) SystemNotification Flameshot Info اطّلاعات فلیم‌شات TextConfig StrikeOut خط‌خورده Underline زیرخط Bold ضخیم Italic مورب Left Align تراز چپ Center Align تراز وسط Right Align تراز راست TextTool Text متن Add text to your capture افزودن متن به نماگرفتتان TrayIcon &Take Screenshot &گرفتن نماگرفت &Open Launcher &گشودن اجراگر &Configuration &پیکربندی &About &درباره نرم‌افزار Check for updates بررسی برای به‌روز رسانی‌ New version %1 is available نگارش جدید %1 در دسترس است &Quit &خروج &Latest Uploads &آخرین بارگذاری‌ها &Open Save Path UIcolorEditor UI Color Editor ویرایشگر رنگ رابط کاربری Change the color moving the selectors and see the changes in the preview buttons. برای تغییر رنگ، گزینشگرها را جابه‌جا کنید و تغییرات را در دکمه‌های پیش‌نمایش مشاهده کنید. Select a Button to modify it دکمه‌ای را برای تغییرش برگزینید Main Color رنگ اصلی Click on this button to set the edition mode of the main color. برای رفتن به حالت ویرایش رنگ اصلی، روی این دکمه کلیک کنید. Contrast Color رنگ متضاد Click on this button to set the edition mode of the contrast color. برای رفتن به حالت ویرایش رنگ متضاد، روی این دکمه کلیک کنید. UndoTool Undo برگردان Undo the last modification برگرداندن آخرین تغییر UpdateNotificationWidget New Flameshot version %1 is available نگارش جدید فلیم‌شات %1 در دسترس است Ignore نادیده گرفتن Later بعداً Update به‌روز رسانی UploadHistory Upload History بارگذاری تاریخچه Screenshots history is empty تاریخچهٔ نماگرفت خالیست UploadLineItem Form فرم TextLabel برچسب متنی Copy URL رونوشت از نشانی Open In Browser گشودن در مرورگر Confirm to delete تأیید برای حذف Are you sure you want to delete a screenshot from the latest uploads and server? مطمئنید که می‌خواهید نماگرفتی را از جدیدترین بارگذاری‌ها و کارساز حذف کنید؟ UtilityPanel Close بستن <Empty> <خالی> VisualsEditor Opacity of area outside selection: کدری مناطق خارج از محوطهٔ گزیده شده: UI Color Editor ویرایشگر رنگ رابط کاربری Colorpicker Editor ویرایشگر گزینشگر رنگ Button Selection گزینش دکمه Select All گزینش همه color_widgets::ColorDialog Pick برگزیدن color_widgets::ColorPalette Unnamed بی‌نام color_widgets::ColorPaletteModel Unnamed بی‌نام %1 (%2 colors) %1 (%2 رنگ) color_widgets::ColorPaletteWidget Open a new palette from file گشودن یک تخته‌رنگ جدید از پرونده Create a new palette ایجاد یک تخته‌رنگ جدید Duplicate the current palette تکرار تخته‌رنگ کنونی Delete the current palette حذف تخته‌رنگ کنونی Revert changes to the current palette مرجوع کردن تغییرات در تخته‌رنگ کنونی Save changes to the current palette ذخیرهٔ تغییرات در تخته‌رنگ کنونی Add a color to the palette افزودن یک رنگ به تخته‌رنگ Remove the selected color from the palette برداشتن رنگ گزیده شده از تخته‌رنگ New Palette تخته‌رنگ جدید Name نام GIMP Palettes (*.gpl) تخته‌رنگ گیمپ (‎*.gpl) Palette Image (%1) تصویر تخته‌رنگ (%1) All Files (*) همهٔ پرونده‌ها (*) Open Palette گشودن تخته‌رنگ Failed to load the palette file %1 بار کردن پروندهٔ تخته‌رنگ شکست خورد %1 color_widgets::GradientEditor Add Color افزودن رنگ Remove Color برداشتن رنگ Edit Color... ویرایش رنگ... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 رنگ) color_widgets::Swatch Clear Color پاک‌کردن رنگ %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_fi.ts ================================================ AbstractWidgetList Add New Lisää uusi Move Up Siirrä ylös Move Down Siirrä alas Remove Poista AcceptTool Accept Hyväksy Accept the capture Hyväksy kaappaus AppLauncher App Launcher Sovelluskäynnistin Choose an app to open the capture Valitse sovellus jossa kaappaus avataan AppLauncherWidget Open With Avaa sovelluksella Launch in terminal Käynnistä päätteessä Keep open after selection Pidä avoinna valinnan jälkeen Error Virhe Unable to launch in terminal. Käynnistäminen päätteessä ei onnistunut. Unable to write in Ei voitu kirjoittaa kohteeseen ArrowTool Arrow Nuoli Set the Arrow as the paint tool Aseta nuoli työkalu BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Kaappaustila</b> Rectangular Region Suorakulmiomainen alue Full Screen (Current Display) Koko näyttö (nykyinen näyttö) Full Screen (All Monitors) Koko näyttö (kaikki näytöt) No Delay Ei viivettä second sekunti seconds sekuntia Take new screenshot Ota uusi kaappaus Area: Alue: Capture Launcher Kaappauksen laukaisija TextLabel Tekstinimi Capture Mode Kaappaustila Delay: Viive: WxH+x+y LxK+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Kaappaaminen ei onnistunut Mouse Hiiri Select screenshot area Valitse kaappauksen alue Mouse Wheel Hiiren rulla Change tool size Vaihda työkalun kokoa Right Click Hiiren oikea näppäin Show color picker Näytä värivalitsin Open side panel Avaa sivupaneeli Esc Esc Exit Poistu Quit Capture Lopeta tallennus Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot menetti kohdistuksen. Pikanäppäimet eivät toimi, ennen kuin napsautat jotain kohtaa. Configuration error resolved. Launch `flameshot gui` again to apply it. Määritysvirhe ratkaistu. Käynnistä "flameshot gui" uudelleen ottaaksesi sen käyttöön. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Valitse alue hiirellä, tai paina Esc poistuaksesi. Paina Enter kaapataksesi näytön sisällön. Paina hiiren oikeaa näppäintä avataksesi värivalitsimen. Käytä hiiren rullaa muuttaaksesi työkalun paksuutta. Paina väliyöntiä avataksesi sivupaneelin. Tool Settings Työkalun asetukset CircleCountTool Circle Counter Ympyrä laskuri Add an autoincrementing counter bubble Lisää laskurikupla, automaattisesti kasvava CircleTool Circle Ympyrä Set the Circle as the paint tool Aseta ympyrä työkalu ColorDialog Select Color Valitse väri Saturation Kylläisyys Hue Värisävy Hex Heksa Blue Sininen Value Arvo Green Vihreä Alpha Alpha Red Punainen ColorGrabWidget Accept color Hyväksy väri Enter or Left Click Enter tai hiiren vasen painike Precisely select color Valitse tarkka väri Hold Left Click Pidä hiiren vasen painettuna Toggle magnifier Suurennuslasi päällä/pois Space or Right Click Välilyönti tai hiiren oikea Cancel Peruuta Esc Esc ColorPickerEditor Select Preset: Valitse esiasetus: Edit Preset: Muokkaa asetusta: Enter color to update preset Anna väri päivittääksesi asetuksen Update Päivitä Press button to update the selected preset Paina painiketta päivittääksesi valitun asetuksen Delete Poista Press button to delete the selected preset Paina painiketta poistaaksesi valitun esiasetuksen Add Preset: Lisää esiasetus: Enter color manually or select it using the color-wheel Määritä väri manuaalisesti tai valitse se väripyörää käyttäen Add Lisää Press button to add preset Paina painiketta lisätäksesi esiasetuksen Error Virhe Unable to add preset. Maximum limit reached. Esiasetuksen lisääminen ei onnistu. Enimmäisraja saavutettu. Unable to remove preset. Minimum limit reached. Asetusta ei voida poistaa. Minimiraja saavutettu. ConfigErrorDetails Configuration errors Määritysvirheet ConfigHandler Unrecognized setting: '%1' Tunnistamaton asetus: '%1' Unrecognized shortcut name: '%1'. Tuntematon pikanäppäimen nimi: "%1". Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Pikanäppäimen ristiriita: "%1" ja "%2" on sama näppäin: %3 Bad value in '%1'. Expected: %2 Virheellinen arvo "%1". Odotettu: %2 You have successfully resolved the configuration error. Olet ratkaissut määritysvirheen. The configuration contains an error. Open configuration to resolve. Määritys sisältää virheen. Avaa määritykset ja korjaa. Bad config key '%1' in ConfigHandler. Please report this as a bug. Virheellinen asetusavain "%1" ConfigHandler:ssa. Ilmoita tämä virhe. ConfigResolver Resolve configuration errors Selvitä määritysvirheet <b>You must resolve all errors before continuing:</b> <b>Selvitä kaikki virheet ennen jatkamista:</b> Reset Nollaa Reset to the default value. Palauta oletusarvoon. Remove Poista Remove this setting. Poista tämä asetus. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Joissakin pikanäppäimissä on ristiriitoja. Tämä ei estä flameshot-ohjelmaa käynnistymästä. Ratkaise ne käsin muuttamalla asetustiedostoa. Resolve all Selvitä kaikki Resolve all listed errors. Selvitä kaikki listatut virheet. Details Yksityiskohdat ConfigWindow Configuration Asetukset Interface Käyttöliittymä Filename Editor Tiedostonimen muokkain General Yleiset Shortcuts Pikanäppäimet Resolve Selvitä <b>Configuration file has errors. Resolve them before continuing.</b> <b>Asetustiedostossa on virheitä. Selvitä virheet ennen jatkamista.</b> Controller New version %1 is available Uusi versio %1 on saatavilla You have the latest version Sinulla on uusin versio Failed to get information about the latest version. Uusimman version tietojen saaminen epäonnistui. Error Virhe Unable to close active modal widgets Aktiivisia modaalisia widgettejä ei voi sulkea &Open Launcher &Avaa käynnistin &Configuration &Asetukset &About &Tietoja Check for updates Tarkista päivitykset &Latest Uploads &Viimeisimmät lähetykset URL copied to clipboard. URL-osoite kopioitu leikepöydälle. &Information &Informació &Quit &Lopeta &Take Screenshot &Ota kuvakaappaus CopyTool Copy Kopioi Copy selection to clipboard Kopioi valinta leikepöydälle Copy the selection into the clipboard Kopioi valinta leikepöydälle DBusUtils Unable to connect via DBus DBusiin yhdistäminen ei onnistunut ExitTool Exit Poistu Leave the capture screen Poistu kaappauksesta FileNameEditor Edit the name of your captures: Muokkaa kaappausten nimiä: Edit: Muokkaa: Preview: Esikatselu: Save Tallenna Saves the pattern Tallentaa kaavan Restore Palauta Reset Reinicialitza Restores the saved pattern Palauttaa tallennetun kaavan Clear Tyhjennä Deletes the name Poistaa nimen Flameshot Error Error Unable to close active modal widgets Aktiivisia modaalisia widgettejä ei voi sulkea URL copied to clipboard. URL-osoite kopioitu leikepöydälle. FlameshotDaemon New version %1 is available Uusi versio %1 on saatavilla You have the latest version Sinulla on uusin versio Failed to get information about the latest version. Uusimman version tietojen saaminen epäonnistui. Unable to connect via DBus Yhdistäminen DBusin kautta ei onnistunut GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Tuo Error Virhe Unable to read file. Tiedoston lukeminen ei onnistunut. Unable to write file. Tiedoston kirjoittaminen ei onnistunut. Save File Tallenna tiedosto Confirm Reset Vahvista nollaus Are you sure you want to reset the configuration? Haluatko varmasti nollata asetukset? Show help message Näytä ohjeviesti Show the help message at the beginning in the capture mode. Show the help message at the beginning in the capture mode. Show the side panel button Näytä sivupaneelin painike Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Näytä ilmoitukset Show tray icon Näytä kuvake paneelissa Show the systemtray icon Show the systemtray icon Confirmation required to delete screenshot from the latest uploads Vahvistus tarvitaan kaappauksen poistamiseksi uusimmista latauksista Configuration File Asetustiedosto Export Vie Reset Nollaa Automatic check for updates Päivitysten automaattinen tarkistaminen Allow multiple flameshot GUI instances simultaneously Salli useita Flameshot käyttöliittymiä samanaikaisesti Automatically close daemon when it is not needed Sulje taustapalvelu automaattisesti kun sitä ei tarvita Launch at startup Suorita käynnistyksen yhteydessä Launch Flameshot Käynnistä Flameshot Show welcome message on launch Näytä tervetuloviesti käynnistyessä Use large predefined color palette Käytä suurta esimääritettyä väripalettia Copy URL after upload Kopioi URL-osoite lähetyksen jälkeen Copy URL and close window after upload Kopioi URL-osoite ja sulje ikkuna lähetyksen jälkeen Save image after copy Tallenna kuva kopioinnin jälkeen Save image file after copying it Tallenna kuvatiedosto sen kopioinnin jälkeen Show the help message at the beginning in the capture mode Näytä ohjeviesti kaappaustilan alussa Use last region for GUI mode Käytä viimeistä aluetta Use the last region as the default selection for the next screenshot in GUI mode Käyttää viimeistä aluetta seuraavan kaappauksen oletusvalintana Show the side panel toggle button in the capture mode Näytä sivupaneelin kytkentäpainike kaappaustilassa Enable desktop notifications Käytä ilmoituksia Show abort notifications Enable abort notifications Show icon in the system tray Näytä kuvake ilmoitusalueella Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Kysy vahvistus kaappauksen poistamiseksi uusimmista lähetyksistä Check for updates automatically Tarkista päivitykset automaattisesti This allows you to take screenshots of Flameshot itself for example Tämä sallii kaappauksen ottamisen esimerkiksi itse Flameshotista Launch Flameshot daemon when computer is booted Käynnistä Flameshot-taustapalvelu kun tietokone käynnistetään Show the welcome message box in the middle of the screen while taking a screenshot Näytä tervetuloa viestiruutu näytön keskellä, kun otat kaappauksen Use a large predefined color palette Käytä suurta esimääritettyä väripalettia Copy on double click Kopioi napsauttamalla kahdesti Enable Copy on Double Click Ota kopiointi käyttöön kaksoisnapsautuksella Copy URL and close window after uploading was successful Kopioi URL-osoite ja sulje ikkuna kun lähetys on onnistunut Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful Kopioi verkko-osoite kun lähetys on onnistunut After copying the screenshot, save it to a file as well Kaappauksen ottamisen jälkeen tallenna se tiedostoksi Save Path Tallennuspolku Change... Muuta... Use fixed path for screenshots to save Käytä kiinteää polkua kaappausten tallentamiseen Preferred save file extension: Tallennuksen tiedostopääte: Latest Uploads Max Size Viimeisimpien lähetysten enimmäiskoko Imgur Application Client ID Imgur-sovelluksen asiakastunnus Undo limit Kumoa rajoitus Use JPG format for clipboard (PNG default) Käytä JPG-muotoa leikepöydälle (PNG on oletus) Use lossy JPG format for clipboard (lossless PNG default) Käytä häviöllistä JPG-muotoa leikepöydälle (häviötön PNG on oletus) Copy file path after save Kopioi tiedoston polku tallentamisen jälkeen Copy the file path to clipboard after the file is saved Kopioi tiedostopolku leikepöydälle sen jälkeen kun tiedosto on tallennettu Anti-aliasing image when zoom the pinned image Pehmennä, kun skaalataan kiinnitettyä kuvaa After zooming the pinned image, should the image get smoothened or stay pixelated Kun kiinnitettyä kuvaa on suurennettu, pitäisikö kuvan tasoittua vai pysyä pikselimäisenä Upload image without confirmation Lähetä kuva ilman vahvistuksen kysymistä Choose a Folder Valitse kansio Unable to write to directory. Kansioon kirjoittaminen ei onnistunut. Show magnifier Näytä suurennuslasi Enable a magnifier while selecting the screenshot area Käytä suurenuslasia kun kaapattavaa aluetta valitaan Square shaped magnifier Neliönmuotoinen suurennuslasi Make the magnifier to be square-shaped Tee suurennuslasista neliönmuotoinen Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality JPEG-laatu Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Viimeisimmät lähetykset Screenshots history is empty Kuvakaappausten historia on tyhjä Copy URL Kopioi URL-osoite URL copied to clipboard. URL-osoite kopioitu leikepöydälle. Open in browser Avaa selaimessa Confirm to delete Vahvista poisto Are you sure you want to delete a screenshot from the latest uploads and server? Haluatko varmasti poistaa kuvakaappauksen viimeisimmistä lähetyksistä ja palvelimelta? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Lähetysvahvistus Do you want to upload this capture? Haluatko lähettää tämän kaappauksen? Upload without confirmation Lähetä ilman vahvistuksen kysymistä ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Lähetä kuva Uploading Image Lähetetään kuva Copy URL Kopioi URL-osoite Open URL Avaa URL-osoite Delete image Poista kuva Image to Clipboard. Kuva leikepöydälle. Save image Tallenna kuva Unable to open the URL. URL-osoitteen avaaminen ei onnistu. URL copied to clipboard. URL-osoite kopioitu leikepöydälle. Screenshot copied to clipboard. Kaappaus kopioitu leikepöydälle. Unable to save the screenshot to disk. Kaappauksen tallentaminen levylle ei onnistu. Screenshot saved. Kaappaus tallennettu. ImgUploaderTool Image Uploader Kuvan lähetys Upload the selection Lähetä valinta imgur.com ImgurUploader Upload to Imgur Lähetä Imguriin Uploading Image Lähetetään kuvaa Copy URL Kopioi URL-osoite Open URL Avaa URL-osoite Delete image Poista kuva Image to Clipboard. Kuva leikepöydälle. Unable to open the URL. Osoitteen avaaminen ei onnistunut. URL copied to clipboard. URL-osoite kopioitu leikepöydälle. Screenshot copied to clipboard. Kuvakaappaus kopioitu leikepöydälle. ImgurUploaderTool Image Uploader Kuvalähetin Upload the selection to Imgur Lähetä valinta Imguriin InfoWindow About Tietoja Icon Kuvake License Lisenssi GPLv3+ GPLv3+ Version Versio Flameshot v Flameshot v OS Info Käyttöjärjestelmän tiedot Copy Info Kopioi tiedot Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Lisenssi</b></u> <u><b>Version</b></u> <u><b>Versio</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Käänteinen Set Inverter as the paint tool Aseta käänteinen väri työkalu LineTool Line Viiva Set the Line as the paint tool Aseta viiva työkalu MarkerTool Marker Merkintäkynä Set the Marker as the paint tool Aseta merkintäkynä työkalu MoveTool Move Siirrä Move the selection area Siirrä valinta-aluetta PencilTool Pencil Kynä Set the Pencil as the paint tool Aseta kynä työkalu PinTool Pin Tool Kiinnitys työkalu Pin image on the desktop Kiinnitä kuva työpöydälle PinWidget Context menu Pudotusvalikko Copy to clipboard Kopioi leikepöydälle Save to file Tallenna tiedostoon Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Sulje PixelateTool Pixelate Pikselöi Set Pixelate as the paint tool. Set Pixelate as the paint tool Aseta pikselöinti työkalu PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Rekisteröinti %1 epäonnistui. Virhe: %2 Failed to unregister %1. Error: %2 Rekisteröinnin poisto %1 epäonnistui. Virhe: %2 QObject Capture saved to clipboard. Kaappaus tallennettu leikepöydälle. Error while saving to clipboard Virhe tallentaessa leikepöydälle Save screenshot Tallenna kaappaus Path copied to clipboard as Polku kopioitiin leikepöydälle Saving canceled Tallentaminen peruttu Save canceled Tallennus peruttu Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Tallennusvirhe Capture saved as Kaappaus tallennettu nimellä Error trying to save as Virhe tallentaessa nimellä Unable to connect via DBus DBusiin yhdistäminen ei onnistunut Powerful yet simple to use screenshot software. Tehokas mutta silti helppokäyttöinen ohjelma näytön kaappausten ottamiseen. See Katso Capture the entire desktop. Kaappaa koko työpöytä. Open the capture launcher. Avaa laukaisija. Start a manual capture in GUI mode. Aloita manuaalinen kaappaus GUI-tilassa. Configure Määritä Capture a single screen. Kaappaa yksittäinen näyttö. Path where the capture will be saved Polku johon kaappaus tallennetaan Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Hakemisto tai uusi tiedosto, johon haluat tallentaa Save the capture to the clipboard Tallenna kaappaus leikepöydälle Pin the capture to the screen Kiinnitä kaappaus näytölle Upload screenshot Lähetä kaappaus Delay time in milliseconds Viiveen aika millisekunneissa Repeat screenshot with previously selected region Toista kaappaus aiemmin valitulla alueella Screenshot region to select Kaappauksen alue valittavaksi Set the filename pattern Aseta tiedostonimen kaava Accept capture as soon as a selection is made Hyväksy kaappaus välittömästi kun valinta on tehty Enable or disable the trayicon Paneelin kuvake käyttöön tai poista se käytöstä Enable or disable run at startup Suorita käynnistyksen yhteydessä tai poista se käytöstä Enable or disable the notifications Check the configuration for errors Tarkista asetukset virheiden varalta Show the help message in the capture mode Näytä ohjeet kaappaustilassa Define the main UI color Määritä käyttöliittymän pääväri Define the contrast UI color Määritä käyttöliittymän kontrastiväri Print raw PNG capture Tulosta raaka PNG-kaappaus Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Tulosta valinta sivuasetuksilla muodossa LxK+X+Y. Ei tee mitään, jos raaka on määritetty Define the screen to capture (starting from 0) Määritä kuvattava näyttö (alkaen nollasta) Invalid delay, it must be a number greater than 0 Virheellinen viive, sen on oltava suurempi kuin 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Virheellinen alue, käytä "LxK+X+Y" tai "kaikki" tai "screen0/screen1/...". Invalid path, must be an existing directory or a new file in an existing directory Virheellinen polku, pitää olla olemassa oleva hakemisto tai uusi tiedosto Define the screen to capture Define the screen to capture default: screen containing the cursor oletus: näyttö, joka sisältää kursorin Screen number Näytön numero Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Virheellinen väri, tämä tukee seuraavia muotoja: - #RGB (kukin R, G ja B on yksi heksadesimaaliluku) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Nimetyt värit kuten "sininen" tai "punainen" Sinun on ehkä vältettävä "#" merkkiä kuten "\#FFF" Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Virheellinen näytön numero, se ei saa olla negatiivinen Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Virheellinen arvo, se on määriteltävä "true" tai "false" Error Virhe Unable to write in Ei voi kirjoittaa URL copied to clipboard. URL-osoite kopioitu leikepöydälle. Options Valinnat Arguments Argumentit arguments argumentit Subcommands subcommands Usage Käyttö options options Per default runs Flameshot in the background and adds a tray icon for configuration. Oletus on suorittaa Flameshot taustalla ja lisätä kuvake paneeliin määritystä varten. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hei, olen täällä! Kaappaa napsauttamalla paneelin kuvaketta tai hiiren oikea lisää vaihtoehtoja. Requested screen exceeds screen count Pyydetty näyttö ylittää näyttöjen määrän Full screen screenshot pinned to screen Koko näytön kaappaus kiinnitetty näyttöön Toggle side panel Näytä/piilota sivupaneeli Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Valitse koko näyttö Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Poista nykyinen työkalu Quit capture Lopeta kaappaus Screenshot history Kaappausten historia Capture screen Kaappaa näyttö Show color picker Näytä värivalitsin Change the tool's size Vaihda työkalun kokoa Change the tool's thickness Vaihda työkalun paksuutta RectangleTool Rectangle Suorakulmio Set the Rectangle as the paint tool Aseta suorakulmio työkalu RedoTool Redo Tee uudelleen Redo the next modification Toista muutos uudelleen SaveTool Save Tallenna Save screenshot to a file Tallenna kaappaus tiedostoon Save the capture Tallenna kaappaus ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Työpöytää ei pystytä tunnistamaan (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Vihje: yritä asettaa XDG_CURRENT_DESKTOP ympäristömuuttuja. Unable to capture screen Näytön kaappaaminen ei onnistunut SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send &Lähetä Error sending message Virhe viestiä lähettäessä The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Suorakulmiomainen valinta Set Selection as the paint tool Aseta valinta työkalu SetShortcutDialog Set Shortcut Aseta pikanäppäin Enter new shortcut to change Anna uusi pikanäppäin muuttaaksesi Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Peruuta painamalla Esc tai ⌘+askelpalautin poistaaksesi pikanäppäimen käytöstä. Press Esc to cancel or Backspace to disable the keyboard shortcut. Peruuta painamalla Esc tai askelpalautin poistaaksesi pikanäppäimen käytöstä. Flameshot must be restarted for changes to take effect. Flameshot tulee käynnistää uudelleen, jotta muutokset tulevat voimaan. ShortcutsWidget Hot Keys Pikanäppäimet Available shortcuts in the screen capture mode. Saatavilla olevat pikanäppäimet kaappaustilassa. Description Kuvaus Key Avain Left Double-click Vasen kaksoisnapsautus Toggle side panel Näytä/piilota sivupaneeli Grab a color from the screen Resize selection left 1px Muuta valinnan kokoa vasen 1px Resize selection right 1px Muuta valinnan kokoa oikea 1px Resize selection up 1px Muuta valinnan kokoa ylös 1px Resize selection down 1px Muuta valinnan kokoa alas 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Valitse koko näyttö Move selection left 1px Siirrä valinta vasen 1px Move selection right 1px Siirrä valinta oikea 1px Move selection up 1px Siirrä valinta ylös 1px Move selection down 1px Siirrä valinta alas 1px Commit text in text area Liittä teksti tekstialueelle Delete selected drawn object Cancel current selection Peru nykyinen valinta Delete current tool Poista nykyinen työkalu Capture screen Kaappaa näyttö Screenshot history Kaappausten historia SidePanelWidget Active thickness: Aktiivinen paksuus: Active color: Aktiivinen väri: Press ESC to cancel Paina ESC peruaksesi Active tool size: Aktiivisen työkalun koko: Active Color: Aktiivinen väri: Grab Color Kaappaa väri Display grid SizeDecreaseTool Decrease Tool Size Pienennä työkalun kokoa Decrease the size of the other tools Pienennä muiden työkalujen kokoa SizeIncreaseTool Increase Tool Size Suurenna työkalun kokoa Increase the size of the other tools Suurenna muiden työkalujen kokoa SizeIndicatorTool Selection Size Indicator Valinnan koon ilmaisin Show X and Y dimensions of the selection Näytä valinnan mitat X ja Y Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Vuosisata (00-99) Year (00-99) Vuosi (00-99) Year (2000) Vuosi (2000) Month Name (jan) Kuukauden nimi (tam) Month Name (january) Kuukauden nimi (tammikuu) Month (01-12) Kuukausi (01-12) Week Day (1-7) Viikonpäivä (1-7) Week (01-53) Viikko (01-53) Day Name (mon) Päivän nimi (ma) Day Name (monday) Päivän nimi (maanantai) Day (01-31) Päivä (01-31) Day of Month (1-31) Kuukauden päivä (1-31) Day (001-366) Vuosipäivä (001-366) Hour (00-23) Tunti (00-23) Hour (01-12) Tunti (01-12) Minute (00-59) Minuutti (00-59) Second (00-59) Sekunti (00-59) Full Date (%m/%d/%y) Päivämäärä (%m/%d/%y) Full Date (%Y-%m-%d) Päivämäärä (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Aika (%H-%M-%S) Time (%H-%M) Aika (%H-%M) SystemNotification Flameshot Info Flameshotin tiedot TextConfig StrikeOut Yliviivaa Underline Alleviivaa Bold Lihavoi Italic Kursivoi Left Align Tasaa vasen Center Align Keskitä Right Align Tasaa oikea TextTool Text Teksti Add text to your capture Lisää tekstiä kaappaukseen TrayIcon &Take Screenshot &Ota kaappaus &Open Launcher &Avaa laukaisija &Configuration &Asetukset &About &Tietoja Check for updates Tarkista päivitykset New version %1 is available Uusi versio %1 on saatavilla &Quit &Lopeta &Latest Uploads &Uusimmat lataukset &Open Save Path UIcolorEditor UI Color Editor Käyttöliittymävärin muokkain Change the color moving the selectors and see the changes in the preview buttons. Vaihda väriä siirtämällä valintaa ja katso muutokset esikatselun painikkeissa. Select a Button to modify it Valitse painike ja muokkaa sitä Main Color Pääväri Click on this button to set the edition mode of the main color. Napsauta tätä painiketta ja aseta pääväri muokkaustilaan. Contrast Color Kontrastiväri Click on this button to set the edition mode of the contrast color. Napsauta tätä painiketta ja aseta kontrastiväri muokkaustilaan. UndoTool Undo Kumoa Undo the last modification Kumoa viimeisin muutos UpdateNotificationWidget New Flameshot version %1 is available Uusi Flameshot-versio %1 on saatavilla Ignore Ohita Later Myöhemmin Update Päivitä UploadHistory Upload History Lähetyshistoria Screenshots history is empty Kaappausten historia on tyhjä UploadLineItem Form Form TextLabel Tekstinimi Copy URL Kopioi URL-osoite Open In Browser Avaa selaimessa Confirm to delete Vahvista poistaaksesi Are you sure you want to delete a screenshot from the latest uploads and server? Haluatko varmasti poistaa kaappauksen lähetyksistä ja palvelimelta? UtilityPanel Close Sulje <Empty> <Tyhjä> VisualsEditor Opacity of area outside selection: Valinnan ulkopuolisen alueen läpinäkyvyys: UI Color Editor Käyttöliittymän väri Colorpicker Editor Värivalitsimen muokkain Button Selection Painikkeen valinta Select All Valitse kaikki color_widgets::ColorDialog Pick Valitse color_widgets::ColorPalette Unnamed Nimetön color_widgets::ColorPaletteModel Unnamed Nimetön %1 (%2 colors) %1 (%2 väriä) color_widgets::ColorPaletteWidget Open a new palette from file Avaa uusi paletti tiedostosta Create a new palette Luo uusi paletti Duplicate the current palette Monista nykyinen paletti Delete the current palette Poista nykyinen paletti Revert changes to the current palette Palauta muutokset nykyiseen palettiin Save changes to the current palette Tallenna muutokset nykyiseen palettiin Add a color to the palette Lisää väri palettiin Remove the selected color from the palette Poista valittu väri paletista New Palette Uusi paletti Name Nimi GIMP Palettes (*.gpl) GIMP-paletit (*.gpl) Palette Image (%1) Palettikuva (%1) All Files (*) Kaikki tiedostot (*) Open Palette Avaa paletti Failed to load the palette file %1 Paletin lataaminen epäonnistui %1 color_widgets::GradientEditor Add Color Lisää väri Remove Color Poista väri Edit Color... Muokkaa väriä... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 väriä) color_widgets::Swatch Clear Color Tyhjennä väri %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_fr.ts ================================================ AbstractWidgetList Add New Ajouter nouveau Move Up Déplacer vers le haut Move Down Déplacer vers le bas Remove Enlever AcceptTool Accept Accepter Accept the capture Accepter la capture AppLauncher App Launcher Lanceur d'applications Choose an app to open the capture Sélectionner une application pour ouvrir la capture AppLauncherWidget Open With Ouvrir avec Launch in terminal Lancer dans le terminal Keep open after selection Maintenir ouvert après la sélection Error Erreur Unable to write in Impossible d'écrire dessus Unable to launch in terminal. Impossible de lancer dans le terminal. ArrowTool Arrow Flèche Set the Arrow as the paint tool Sélectionner l'outil Flèche BlurTool Blur Flou Set Blur as the paint tool Sélectionner l'outil Flou CaptureLauncher <b>Capture Mode</b> <b>Mode de capture</b> Rectangular Region Région rectangulaire Full Screen (Current Display) Plein écran (affichage actuel) Full Screen (All Monitors) Plein écran (tous les moniteurs) No Delay Aucun retard second seconde seconds secondes Take new screenshot Prendre une nouvelle capture Area: Zone : Capture Launcher Lanceur de capture TextLabel Étiquette de texte Capture Mode Mode de capture Delay: Retard : WxH+x+y LxH+x+y CaptureWidget Unable to capture screen Impossible de capturer l'écran Mouse Souris Select screenshot area Sélectionner la zone de capture d'écran Mouse Wheel Molette de la souris Change tool size Changer la taille de l'outil Right Click Clic droit Show color picker Afficher la palette des couleurs Open side panel Ouvrir le panneau latéral Esc Échap Exit Quitter Quit Capture Annuler la capture Are you sure you want to quit capture? Êtes-vous sûr de vouloir annuler la capture ? Do not show this again Ne plus afficher ceci Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot a perdu le focus. Les raccourcis clavier ne fonctionneront pas sans avoir cliqué ailleurs. Configuration error resolved. Launch `flameshot gui` again to apply it. Erreur de configuration résolue. Lancer `flameshot gui` à nouveau. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Sélectionner une zone avec la souris ou appuyer sur Echap pour quitter Appuyer sur Entrée pour capturer l'écran Effectuer un clic droit pour afficher le sélecteur de couleurs. Utiliser la molette de la souris pour changer l'épaisseur de l'outil. Appuyer sur Espace pour ouvrir le panneau latéral. Tool Settings Paramètres des outils CircleCountTool Circle Counter Compteur circulaire Add an autoincrementing counter bubble Ajoute une bulle de comptage auto-incrémentée CircleTool Circle Ellipse Set the Circle as the paint tool Sélectionner l'outil Ellipse ColorDialog Select Color Sélectionner Couleur Saturation Saturation Hue Teinte Hex Hex Blue Bleu Value Valeur Green Vert Alpha Alpha Red Rouge ColorGrabWidget Accept color Accepter couleur Enter or Left Click Touche Entrée ou Clic Gauche Precisely select color Sélection précise de couleur Hold Left Click Maintenir Clic Gauche Toggle magnifier Activer la loupe Space or Right Click Espace ou Clic Droit Cancel Annuler Esc Échap ColorPickerEditor Select Preset: Sélectionner un préréglage : Select preset using the spinbox Sélectionnez un préréglage depuis la liste Edit Preset: Modifier le préréglage : Enter color to update preset Entrer la couleur pour mettre à jour le préréglage Update Mettre à jour Press button to update the selected preset Appuyer pour mettre à jour la sélection Delete Supprimer Press button to delete the selected preset Pressez le bouton pour supprimer le préréglage sélectionné Add Preset: Ajouter un préréglage : Enter color manually or select it using the color-wheel Entrez la couleur manuellement ou la sélectionner à partir de la palette Add Ajouter Press button to add preset Pressez le bouton pour ajouter un réglage Error Erreur Unable to add preset. Maximum limit reached. Impossible d'ajouter un réglage. Limite maximale atteinte. Unable to remove preset. Minimum limit reached. Impossible de supprimer un réglage. Limite minimale atteinte. ConfigErrorDetails Configuration errors Erreurs de configuration ConfigHandler Unrecognized setting: '%1' Préférence inconnue : '%1' Unrecognized shortcut name: '%1'. Nom de raccourcis inconnu : '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Conflit de raccourcis : '%1' et '%2' ont le même raccourci : %3 Bad value in '%1'. Expected: %2 Mauvaise valeur dans '%1'. Attendu : %2 You have successfully resolved the configuration error. Vous avez résolu l'erreur de configuration. The configuration contains an error. Open configuration to resolve. Cette configuration contient une erreur. Ouvrez la configuration pour la résoudre. Bad config key '%1' in ConfigHandler. Please report this as a bug. Mauvaise clé de configuration'%1' dans ConfigHandler. Signaler le en tant que bug. ConfigResolver Resolve configuration errors Résoudre les erreurs de configuration <b>You must resolve all errors before continuing:</b> <b>Vous devez résoudre toutes les erreurs avant de continuer :</b> Reset Réinitialiser Reset to the default value. Rétablir la valeur par défaut. Remove Retirer Remove this setting. Retirer cette préférence. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Certains raccourcis sont en conflits. Cela n'empêchera PAS Flameshot de se lancer. Veuillez résoudre ce problème manuellement depuis le fichier de configuration. Resolve all Tout résoudre Resolve all listed errors. Résoudre toutes les erreurs listées. Details Détails ConfigWindow Configuration Configuration Interface Interface Filename Editor Editeur de Noms General Général Shortcuts Raccourcis Resolve Résoudre <b>Configuration file has errors. Resolve them before continuing.</b> <b>Le fichier de configuration contient des erreurs. Les résoudre avant de continuer.</b> Controller New version %1 is available Nouvelle version %1 est disponible You have the latest version Vous avez la dernière version Failed to get information about the latest version. Impossible d'obtenir des informations sur la dernière version. Error Erreur Unable to close active modal widgets Incapable de fermer le widget modal actif &Take Screenshot &Capturer l'écran &Open Launcher &Ouvrir le lanceur &Configuration &Configuration &About &À propos Check for updates Vérifier les mises à jour &Latest Uploads &Derniers téléversements URL copied to clipboard. URL copiée dans le presse-papiers. &Information &Informations &Quit &Quitter CopyTool Copy Copier Copy selection to clipboard Copier la sélection vers le presse-papiers Copy the selection into the clipboard Copier la sélection dans le presse-papier DBusUtils Unable to connect via DBus Impossible de se connecter via DBus ExitTool Exit Sortir Leave the capture screen Quitter l'écran de capture FileNameEditor Edit the name of your captures: Modifier le nom des captures : Edit: Modifier : Preview: Prévisualisation : Save Sauvegarder Saves the pattern Sauvegarder le modèle Restore Restaurer Reset Réinitialiser Restores the saved pattern Restaurer le modèle sauvegardé Clear Purger Deletes the name Supprime le nom Flameshot Error Erreur Unable to close active modal widgets Impossible de fermer les widgets modales actifs URL copied to clipboard. URL copiée dans le presse-papiers. FlameshotDaemon New version %1 is available La nouvelle version %1 est disponible You have the latest version Vous avez la dernière version Failed to get information about the latest version. Impossible d'obtenir des informations sur la dernière version. Unable to connect via DBus Impossible de se connecter via DBus GeneneralConf Import Importer Error Erreur Unable to read file. Impossible de lire le fichier. Unable to write file. Impossible d'écrire le fichier. Save File Sauvegarder le fichier Confirm Reset Confirmer la Réinitialisation Are you sure you want to reset the configuration? Êtes-vous sûr de vouloir réinitialiser la configuration ? Show help message Montrer le message d'aide Show the help message at the beginning in the capture mode. Afficher ce message au lancement du mode capture. Show desktop notifications Afficher les notifications du bureau Show tray icon Afficher les icones de la barre d'état Show the systemtray icon Afficher l'icône dans la barre de tâches Configuration File Fichier de Configuration Export Exporter Reset Réinitialiser Launch at startup Lancer au démarrage Launch Flameshot Démarrer Flameshot Close after capture Fermer après une capture Close after taking a screenshot Fermer l'application après une capture d'écran GeneralConf Import Importer Error Erreur Unable to read file. Impossible de lire le fichier. Unable to write file. Impossible d'écrire le fichier. Save File Sauvegarder le fichier Confirm Reset Confirmer la réinitialisation Are you sure you want to reset the configuration? Êtes-vous sûr(e) de vouloir réinitialiser la configuration ? Show help message Afficher le message d'aide Show the help message at the beginning in the capture mode. Afficher le message d'aide au lancement du mode capture. Show the side panel button Afficher le bouton du panneau principal Show the side panel toggle button in the capture mode. Afficher le bouton de basculement du panneau latéral en mode capture. Show desktop notifications Afficher les notifications du bureau Show tray icon Afficher les icônes de la barre d'état Show the systemtray icon Afficher l'icône dans la barre de tâches Confirmation required to delete screenshot from the latest uploads Confirmation requise pour supprimer la capture d'écran des derniers téléchargements Configuration File Fichier de configuration Export Exporter Reset Réinitialiser Automatic check for updates Contrôle automatique des mises à jour Allow multiple flameshot GUI instances simultaneously Autoriser plusieurs instances simultanées de flameshot GUI Automatically close daemon when it is not needed Clore automatiquement le démon lorsqu'il n'est plus nécessaire Launch at startup Lancer au démarrage Launch Flameshot Démarrer Flameshot Show welcome message on launch Afficher le message de bienvenue au démarrage Use large predefined color palette Utiliser une large palette de couleurs prédéfinies Copy URL after upload Copier l'URL après le téléchargement Copy URL and close window after upload Copier l'URL et fermer la fenêtre après le téléchargement Save image after copy Enregistrer l'image après la copie Save image file after copying it Enregistrer le fichier image après l'avoir copiée Show the help message at the beginning in the capture mode Afficher un message d'aide au début du mode de capture Use last region for GUI mode Utiliser la dernière région pour le mode GUI Use the last region as the default selection for the next screenshot in GUI mode Utiliser la dernière région en tant que sélection par défaut lors de la prochaine capture d'écran en mode GUI Show the side panel toggle button in the capture mode Afficher le bouton pour ouvrir le panneau latéral en mode capture Enable desktop notifications Activer les notifications sur le bureau Show abort notifications Afficher les notifications d'annulation Enable abort notifications Permettre les notifications d'annulation Show icon in the system tray Afficher une icône dans la barre de tâches Use grim to capture screenshots Utiliser grim pour prendre des captures d'écran Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim est un utilitaire Wayland permettant de capturer des écrans à partir du protocole screencopy. Il ne doit généralement être activé que sur des gestionnaires de fenêtres Wayland minimalistes tels que sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Demander la confirmation avant de supprimer les captures d'écran précédemment envoyées Check for updates automatically Vérifier automatiquement les mises à jour This allows you to take screenshots of Flameshot itself for example Cela permet par exemple de prendre des captures d'écran de Flameshot Launch Flameshot daemon when computer is booted Lancer le démon de Flameshot quand l'ordinateur démarre Show the welcome message box in the middle of the screen while taking a screenshot Afficher la boite de message de bienvenue à milieu de l'écran à la prise d'une capture d'écran Use a large predefined color palette Utiliser une grande palette de couleurs prédéfinie Copy on double click Copier en double-cliquant Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copier l'URL puis fermer la fenêtre au succès de l'envoi Automatically unload from memory when it is not needed Décharger automatiquement de la mémoire quand ce n'est pas utilisé Automatically close daemon (background process) when it is not needed Extinction automatique du Démon (processus en arrière-plan) quand il n'est plus utile Launch in background at startup Démarrage en arrière-plan Launch Flameshot daemon (background process) when computer is booted Démarrer le démon de Flameshot (processus en arrière-plan) lors de la mise en route de l'ordinateur Ask before quit capture Demander avant de quitter la capture d'écran Show the confirmation prompt before ESC quit Afficher la demande de confirmation avant d'annuler via ESC Enable Copy to clipboard on Double Click Activer la copie vers le presse-papiers par double-clic Copy URL after uploading was successful Copier l'URL après le téléchargement réussi After copying the screenshot, save it to a file as well Après la copie de la capture d'écran, l'enregistrer aussi dans un fichier Save Path Enregistrer le chemin Change... modifier... Use fixed path for screenshots to save Utiliser un emplacement spécifique pour l'enregistrement des captures d'écran Preferred save file extension: Extension de fichier préférée pour l'enregistrement : Latest Uploads Max Size Derniers téléchargements, taille maximale Imgur Application Client ID ID Client pour l'application Imgur Undo limit Annuler la limite Use JPG format for clipboard (PNG default) Utiliser le format JPG pour le presse-papiers (PNG par défaut) Use lossy JPG format for clipboard (lossless PNG default) Utiliser un format JPG avec perte pour le presse-papiers (PNG sans perte par défaut) Copy file path after save Copier le chemin du fichier après l'enregistrement Copy the file path to clipboard after the file is saved Copier le chemin vers le fichier dans le presse-papiers quand il a été enregistré Anti-aliasing image when zoom the pinned image Anticrénelage de l'image lors du zoom de l'image épinglée After zooming the pinned image, should the image get smoothened or stay pixelated Après avoir zoomé sur l'image épinglée, l'image doit-elle être lissée ou rester pixelisée Upload image without confirmation Télécharger l'image sans confirmation Choose a Folder Choisir un dossier Unable to write to directory. Impossible d'écrire dans le répertoire. Show magnifier Afficher la loupe Enable a magnifier while selecting the screenshot area Activer la loupe lors de la sélection de l'aire de capture d'écran Square shaped magnifier Loupe carrée Make the magnifier to be square-shaped Affiche la loupe avec une forme carrée Milliseconds before geometry display hides; 0 means do not hide Millisecondes avant que l'affichage géométrique ne se cache ; 0 indique "ne se cache jamais" Set geometry display timeout (ms) Définir l'arrêt de l'affichage géométrique (ms) Selection Geometry Display Sélectionner l'affichage géométrique Display Location Afficher la location None Aucun Top Left Haut gauche Top Right Haut droit Bottom Left Bas gauche Bottom Right Bas droit Center Centre Quality range of 0-100; Higher number is better quality and larger file size Variation de la qualité de 0 à 100. Un nombre plus grand indique une meilleure qualité et un fichier plus volumineux JPEG Quality Qualité JPEG Reverse arrow Flèche inversée Draw the arrow head first Dessiner la pointe de la flèche en premier Insecure Pixelate Pixelisation non sécurisée Draw the pixelation effect in an insecure but more asethetic way. Dessinez l'effet de pixellisation d'une manière moins sûre, mais plus esthétique. HistoryWidget Latest Uploads Derniers téléchargements Screenshots history is empty L'historique des captures d'écrans est vide Copy URL Copier l'URL URL copied to clipboard. URL copiée dans le presse-papier. Open in browser Ouvrir dans le navigateur Confirm to delete Confirmer la suppression Are you sure you want to delete a screenshot from the latest uploads and server? Êtes-vous sûr de vouloir supprimer une capture d'écran des derniers téléchargements et du serveur ? ImgS3Uploader Uploading Image Mise en ligne de l'image URL copied to clipboard. URL copiée dans le Presse-papier. Error Erreur ImgUploadDialog Upload Confirmation Confirmation du téléversement Do you want to upload this capture? Voulez-vous téléverser cette capture ? Upload without confirmation Téléverser sans confirmation ImgUploader Uploading Image Mise en ligne de l'image Unable to open the URL. Impossible d'ouvrir l'URL. URL copied to clipboard. URL copiée dans le Presse-papier. Screenshot copied to clipboard. Capture d'écran copiée dans le Presse-papier. Copy URL Copier l'URL Open URL Ouvrir l'URL Image to Clipboard. Image dans le Presse-papier. ImgUploaderBase Upload image Téléverser l'image Uploading Image Envoyer l'image Copy URL Copier l'URL Open URL Ouvrir l'URL Delete image Effacer l'image Image to Clipboard. Copier l'image dans le presse-papiers. Save image Enregistrer l'image Unable to open the URL. Impossible d'ouvrir l'URL. URL copied to clipboard. URL copiée dans le presse-papiers. Screenshot copied to clipboard. Capture d'écran copiée dans le presse-papiers. Unable to save the screenshot to disk. Impossible d'enregistrer la capture d'écran sur le disque. Screenshot saved. Capture d'écran enregistrée. ImgUploaderTool Image Uploader Envoi d'images Upload the selection Téléverser la sélection ImgurUploader Upload to Imgur Mettre en ligne vers Imgur Uploading Image Mise en ligne de l'image Copy URL Copier l'URL Open URL Ouvrir l'URL Delete image Effacer l'image Image to Clipboard. Image dans le Presse-papier. Unable to open the URL. Impossible d'ouvrir l'URL. URL copied to clipboard. URL copiée dans le Presse-papier. Screenshot copied to clipboard. Capture d'écran copiée dans le Presse-papier. ImgurUploaderTool Image Uploader Mise en ligne d'images Upload the selection to Imgur Mettre en ligne la sélection vers Imgur InfoWindow About À propos Icon Icône License Licence GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info Infos SE Copy Info Copier infos Right Click Clic Droit Mouse Wheel Molette de la Souris Move selection 1px Déplacer la sélection 1px Resize selection 1px Redimensionner la sélection 1px Quit capture Quitter la capture d'écran Copy to clipboard Copier vers le Presse-papier Save selection as a file Sauvegarder la sélection vers un fichier Undo the last modification Annuler la dernière modification Show color picker Afficher la palette de couleurs Change the tool's thickness Changer l'épaisseur des outils Available shortcuts in the screen capture mode. Raccourcis disponibles en mode capture d'écran. Key Clé Description Description <u><b>License</b></u> <u><b>Licences</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Raccourci</b></u> InvertTool Invert Inverser Set Inverter as the paint tool Sélectionner Inverseur comme outil de peinture LineTool Line Ligne Set the Line as the paint tool Sélectionner l'outil Ligne MarkerTool Marker Surligneur Set the Marker as the paint tool Sélectionner l'outil Surligneur MoveTool Move Déplacer Move the selection area Déplacer la sélection PencilTool Pencil Crayon Set the Pencil as the paint tool Sélectionner l'outil Crayon PinTool Pin Tool Outil Épinglage Pin image on the desktop Épingler l'image sur le bureau PinWidget Context menu Context menu Copy to clipboard Copier dans le presse-papiers Save to file Sauvegarder dans un fichier Rotate Right Pivoter à droite Rotate Left Pivoter à gauche Increase Opacity Augmenter l'opacité Decrease Opacity Diminuer l'opacité Close Fermer PixelateTool Pixelate Pixeliser Set Pixelate as the paint tool. Utiliser Pixeliser comme outil de peinture. Set Pixelate as the paint tool Choisir pixeliser comme outil de peinture PrimaryInstanceWidget Primary instance Instance principale <b>Primary instance.</b> Messages received from secondaries: <b>Instance principale.</b> Messages reçus des instances secondaires : QHotkey Failed to register %1. Error: %2 Échec de l'enregistrement %1. Erreur : %2 Failed to unregister %1. Error: %2 Échec de la désinscription %1. Erreur : %2 QObject Save Error Erreur lors de la sauvegarde Capture saved as Capture d'écran sauvegardée sous Capture saved to clipboard. Capture enregistrée dans le presse-papiers. Capture saved to clipboard Capture enregistrée dans le presse-papier. Error while saving to clipboard Erreur lors de l'enregistrement dans le presse-papiers Error trying to save as Erreur lors de la sauvegarde sous Save screenshot Enregistrer la capture d'écran Path copied to clipboard as Chemin d'accès copié dans le presse-papiers en tant que Saving canceled Enregistrement annulé Save canceled Enregistrement annulé Capture is saved and copied to the clipboard as Capture enregistrée et copiée dans le presse-papier Unable to connect via DBus Impossible de se connecter via DBus Powerful yet simple to use screenshot software. Logiciel de capture d'écran puissant mais simple à utiliser. See Voir Capture the entire desktop. Capturer l'écran entier. Open the capture launcher. Ouvrir le menu de capture. Start a manual capture in GUI mode. Démarre une capture manuelle en mode graphique. Configure Configurer Capture a single screen. Capturer un écran seul. Path where the capture will be saved Chemin où la capture sera enregistrée Capture screenshot of all monitors at the same time. Capture d'écran de tous les moniteurs en même temps. Capture a screenshot of the specified monitor. Effectuer une capture d'écran du moniteur spécifié. Existing directory or new file to save to Dossier existant ou nouveau fichier à sauvegarder dans Save the capture to the clipboard Enregistrer la capture dans le presse-papiers Pin the capture to the screen Épingler la capture à l'écran Upload screenshot Upload screenshot Delay time in milliseconds Délai en millisecondes Repeat screenshot with previously selected region Répéter la capture d'écran avec la région précédemment sélectionnée Screenshot region to select Région de capture d'écran à sélectionner Set the filename pattern Définir le modèle de nom de fichier Accept capture as soon as a selection is made Accepter la capture d'écran dès qu'une sélection est faite Enable or disable the trayicon Activer ou désactiver l'icone de la barre des tâches Enable or disable run at startup Activer ou désactiver le lancement au démarrage Enable or disable the notifications Activer ou désactiver les notifications Check the configuration for errors Vérifiez l'absence d'erreurs dans la configuration Show the help message in the capture mode Afficher le message d'aide dans le mode capture Define the main UI color Définir la couleur de base de l'interface Define the contrast UI color Définir le contraste de l'interface utilisateur Print raw PNG capture Imprimer la capture PNG brute Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Imprime la géométrie de la sélection au format LxH+X+Y. Ne fait rien si brut est spécifié Define the screen to capture (starting from 0) Définir l'écran à capturer (en partant de 0) Invalid delay, it must be a number greater than 0 Délai invalide, il doit être supérieur à 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Région non valide, utilisez 'LxH+X+Y' ou 'tout' ou 'écran0/écran1/...'. Invalid path, must be an existing directory or a new file in an existing directory Chemin invalide, doit être un répertoire existant ou un nouveau fichier dans un répertoire existant Define the screen to capture Définir l'écran à capturer default: screen containing the cursor Par défaut : Ecran contenant le curseur Screen number Numéro d'écran Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Couleur incorrecte, ce champs supporte les formats suivants : - #RGB (chacun des R, G, et B est un chiffre hexadécimal unique) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Nom des couleurs tel que "bleu" ou "rouge" Vous devrez probablement remplacer le signe '#' par '\#FFF' Invalid delay, it must be higher than 0 Délai non valable, il doit être plus élevé que 0 Invalid screen number, it must be non negative Numéro d'écran non-valable, il ne doit pas être négatif Invalid path, it must be a real path in the system Chemin non-valable, il doit indiquer un chemin existant du système Invalid value, it must be defined as 'true' or 'false' Valeur non-valable, elle doit être définie comme 'true' ou 'false' Error Erreur Unable to write in Impossible d'écrire par dessus Requested screen exceeds screen count L'écran demandé dépasse le nombre d'écrans Full screen screenshot pinned to screen Capture plein écran épinglée à l'écran URL copied to clipboard. URL copiée dans le Presse-papier. Options Options Arguments Arguments arguments arguments Subcommands Sous-commandes subcommands sous-commandes Usage Utilisation options options Per default runs Flameshot in the background and adds a tray icon for configuration. Par défaut, Flameshot fonctionne en arrière-plan et ajoute une icône dans la barre des tâches pour la configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, je suis là ! Clique sur l’icône dans la barre des tâches pour prendre une capture d'écran ou fait un clic droit pour voir plus d'options. Resize selection left 1px Redimensionner la sélection de 1px vers la gauche Resize selection right 1px Redimensionner la sélection de 1px vers la droite Resize selection up 1px Redimensionner la sélection de 1px vers le haut Resize selection down 1px Redimensionner la sélection de 1px vers le bas Select entire screen Sélectionner l'écran en entier Move selection left 1px Déplacer la sélection de 1px vers la gauche Move selection right 1px Déplacer la sélection de 1px vers la droite Move selection up 1px Déplacer la sélection de 1px vers le haut Move selection down 1px Déplacer la sélection de 1px vers le bas Commit text in text area Insérer du texte dans la zone de texte Delete current tool Effacer l'outil actuel Quit capture Annuler la capture Screenshot history Historique des captures d'écran Capture screen Capturer l'écran Show color picker Afficher la palette de couleurs Change the tool's size Changer la taille de l'outil Change the tool's thickness Modifier l'épaisseur des outils RectangleTool Rectangle Rectangle plein Set the Rectangle as the paint tool Sélectionner l'outil Rectangle plein RedoTool Redo Rétablir Redo the next modification Refaire la prochaine modification SaveTool Save Sauvegarder Save screenshot to a file Enregistrer la capture d'écran dans un fichier Save the capture Sauvegarder la capture d'écran ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Impossible de détecter l’environnement de bureau (GNOME ? KDE ? Sway ? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! L'adaptateur universel de capture d'écran Wayland nécessite Grim comme composant de capture d'écran de Wayland. Si le composant de capture d'écran est manquant, veuillez l'installer ! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Si le paramètre useGrimAdapter n'est pas activé, le protocole dbus sera utilisé. Il convient de noter que l'utilisation du protocole dbus sous Wayland n'est pas recommandée. Il est recommandé d'activer le paramètre useGrimAdapter dans flameshot.ini pour activer l'adaptateur de capture d'écran Wayland général basé sur grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Le composant de capture d'écran de Grim est implémenté sur la base de wlroots, il ne peut donc pas être utilisé dans GNOME ou dans des environnements de bureau similaires Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Impossible de détecter l'environnement de bureau (GNOME ? KDE ? Qile ? Sway ?...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Conseil : essayez de définir la variable d’environnement XDG_CURRENT_DESKTOP. Unable to capture screen Impossible de capturer l'écran SecondaryInstanceWidget Secondary instance Instance secondaire <b>Secondary instance.</b> Send message to primary: <b>Instance secondaire.</b> Envoyer un message à l'instance principale : Type something here... Écrivez quelque chose ici... &Send &Envoyer Error sending message Erreur lors de l'envoi du message The message '%1' could not be sent to the primary. Le message « %1 » n'a pas pu être envoyé à l'instance principale. SelectionTool Rectangular Selection Rectangle Set Selection as the paint tool Sélectionner l'outil Rectangle SetShortcutDialog Set Shortcut Choisir un raccourci Enter new shortcut to change Entrer un nouveau raccourci pour modifier Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Presser Esc pour annuler ou ⌘+Backspace pour désactiver le raccourci clavier. Press Esc to cancel or Backspace to disable the keyboard shortcut. Presser Esc pour annuler ou Backspace pour désactiver le raccourci clavier. Flameshot must be restarted for changes to take effect. Flameshot doit être redémarré pour que les modifications prennent effet. ShortcutsWidget Hot Keys Raccourcis clavier Available shortcuts in the screen capture mode. Raccourcis disponibles en mode capture d'écran. Description Description Key Clé Left Double-click Double-clic gauche Toggle side panel Afficher le panneau latéral Grab a color from the screen Sélectionnez une couleur à l'écran Resize selection left 1px Redimensionner la sélection de 1px vers la gauche Resize selection right 1px Redimensionner la sélection de 1px vers la droite Resize selection up 1px Redimensionner la sélection de 1px vers le haut Resize selection down 1px Redimensionner la sélection de 1px vers le bas Symmetrically decrease width by 2px Diminuer symétriquement la largeur de 2px Symmetrically increase width by 2px Augmenter symétriquement la largeur de 2px Symmetrically increase height by 2px Augmenter symétriquement la hauteur de 2px Symmetrically decrease height by 2px Diminuer symétriquement la hauteur de 2px Select entire screen Sélectionner l'écran en entier Move selection left 1px Déplacer la sélection de 1px vers la gauche Move selection right 1px Déplacer la sélection de 1px vers la droite Move selection up 1px Déplacer la sélection de 1px vers le haut Move selection down 1px Déplacer la sélection de 1px vers le bas Commit text in text area Insérer du texte dans la zone de texte Delete selected drawn object Supprimer l'objet dessiné sélectionné Cancel current selection Effacer la sélection actuelle Delete current tool Effacer l'outil actuel Capture screen Capturer l'écran Screenshot history Historique des captures d'écran SidePanelWidget Active color: Couleur actuelle : Press ESC to cancel Appuyer sur Échap pour annuler Active tool size: Taille de l’outil actif : Active Color: Couleur active : Grab Color Saisir la couleur Display grid Afficher la grille Active thickness: Épaisseur sélectionnée: SizeDecreaseTool Decrease Tool Size Réduire la taille de l'outil Decrease the size of the other tools Réduire la taille des autres outils SizeIncreaseTool Increase Tool Size Augmenter la taille de l'outil Increase the size of the other tools Augmenter la taille des autres outils SizeIndicatorTool Selection Size Indicator Indicateur de la taille de la sélection Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Montrer les dimensions de la sélection (X Y) StrftimeChooserWidget Century (00-99) Siècle (00-99) Year (00-99) Année (00-99) Year (2000) Année (2000) Month Name (jan) Nom des Mois (jan) Month Name (january) nom des Mois (janvier) Month (01-12) Mois (01-12) Week Day (1-7) Jour de la Semaine (1-7) Week (01-53) Semaine (01-53) Day Name (mon) Nom du Jour (lun) Day Name (monday) Nom du Jour (lundi) Day (01-31) Jour (01-31) Day of Month (1-31) Jour du Mois (1-31) Day (001-366) Jour de l'année (001-366) Time (%H-%M-%S) Heure (%H-%M-%S) Time (%H-%M) Heure (%H-%M) Hour (00-23) Heure (00-23) Hour (01-12) Heure (01-12) Minute (00-59) Minute (00-59) Second (00-59) Seconde (00-59) Full Date (%m/%d/%y) Date (%m/%d/%y) Full Date (%Y-%m-%d) Date Complête (%Y-%m-%d) Full Date (%d-%m-%Y) Date complète (%d-%m-%Y) SystemNotification Flameshot Info Info Flameshot TextConfig StrikeOut Rayer Underline Souligner Bold Gras Italic Italique Left Align Aligner à gauche Center Align Aligner au centre Right Align Aligner à droite TextTool Text Texte Add text to your capture Ajouter du texte à la capture TrayIcon &Take Screenshot &Capturer l'écran &Open Launcher &Ouvrir le lanceur &Configuration &Configuration &About &À propos Check for updates Vérifier les mises à jour New version %1 is available La nouvelle version %1 est disponible &Quit &Quitter &Latest Uploads &Derniers téléversements &Open Save Path Répertoire d'&Ouverture et de Sauvegarde UIcolorEditor UI Color Editor Editeur de la Couleur de l'interface Change the color moving the selectors and see the changes in the preview buttons. Modifier la couleur en déplaçant les sélecteur et voir les changements dans les boutons de prévisualisation. Select a Button to modify it Sélectionner un bouton pour le modifier Main Color Couleur principale Click on this button to set the edition mode of the main color. Cliquer sur ce bouton pour définir le mode édition de la couleur principale. Contrast Color Couleur de contraste Click on this button to set the edition mode of the contrast color. Cliquer sur ce bouton pour définir le mode édition de la couleur de contraste. UndoTool Undo Annuler Undo the last modification Annuler la dernière modification UpdateNotificationWidget New Flameshot version %1 is available Une nouvelle version %1 de Flameshot est disponible Ignore Ignorer Later Plus tard Update Mettre à jour UploadHistory Upload History Historique d'envois Screenshots history is empty L'historique des captures d'écrans est vide UploadLineItem Form Formulaire TextLabel étiquette de texte Copy URL Copier l'URL Open In Browser Ouvrir dans le navigateur Confirm to delete Confirmer la suppression Are you sure you want to delete a screenshot from the latest uploads and server? Êtes-vous sûr de vouloir supprimer une capture d'écran depuis les derniers envois et du serveur ? UtilityPanel Close Fermer <Empty> <Vide> VisualsEditor Opacity of area outside selection: Opacité de la zone en dehors de la sélection : UI Color Editor Éditeur de la couleur d'interface Colorpicker Editor Éditeur de la palette Button Selection Sélection du bouton Select All Tout sélectionner color_widgets::ColorDialog Pick Choisir color_widgets::ColorPalette Unnamed Sans nom color_widgets::ColorPaletteModel Unnamed Sans nom %1 (%2 colors) %1 (%2 couleurs) color_widgets::ColorPaletteWidget Open a new palette from file Ouvrir une nouvelle palette depuis un fichier Create a new palette Ouvrir une nouvelle palette Duplicate the current palette Dupliquer la palette actuelle Delete the current palette Supprimer la palette actuelle Revert changes to the current palette Rétablir les modifications de la palette actuelle Save changes to the current palette Sauvegarder les modifications de la palette actuelle Add a color to the palette Ajouter une couleur à la palette Remove the selected color from the palette Retirer la couleur sélectionnée de la palette New Palette Nouvelle palette Name Nom GIMP Palettes (*.gpl) Palettes GIMP (*.gpl) Palette Image (%1) Image palette (%1) All Files (*) Tous les fichiers (*) Open Palette Ouvrir la palette Failed to load the palette file %1 Impossible d'ouvrir le fichier de palette %1 color_widgets::GradientEditor Add Color Ajouter la couleur Remove Color Retirer la couleur Edit Color... Modification de la couleur... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 couleurs) color_widgets::Swatch Clear Color Réinitialiser la couleur %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_ga.ts ================================================ AbstractWidgetList Add New Cuir Nua leis Move Up Bog Suas Move Down Bog Síos Remove Bain AcceptTool Accept Glac leis Accept the capture Glac leis an ngabháil AppLauncher App Launcher Tosaitheoir Aipeanna Choose an app to open the capture Roghnaigh aip chun an ghabháil a oscailt AppLauncherWidget Open With Oscail Le Launch in terminal Seoladh sa teirminéal Keep open after selection Coinnigh ar oscailt tar éis roghnú Error Earráid Unable to launch in terminal. Ní féidir é a sheoladh sa teirminéal. Unable to write in Ní féidir scríobh isteach ArrowTool Arrow Saighead Set the Arrow as the paint tool Socraigh an tSaighead mar uirlis péint BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Réigiún Dronuilleogach Full Screen (Current Display) Scáileán Iomlán (Taispeáint Reatha) Full Screen (All Monitors) Scáileán Iomlán (Gach Monatóir) No Delay Gan Moill second an dara ceann seconds soicind Take new screenshot Tóg scáileán nua Area: Ceantar: Capture Launcher Tosaitheoir Gabhála TextLabel Lipéad Téacs Capture Mode Mód Gabhála Delay: Moill: WxH+x+y LxA+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Ní féidir an scáileán a ghabháil Mouse Luch Select screenshot area Roghnaigh limistéar an scáileáin Mouse Wheel Roth na Luiche Change tool size Athraigh méid na huirlisí Right Click Cliceáil ar dheis Show color picker Taispeáin roghnóir dathanna Open side panel Oscail painéal taoibh Esc Esc Exit Scoir Quit Capture Scoir den Gabháil Are you sure you want to quit capture? An bhfuil tú cinnte gur mian leat scor den ghabháil? Do not show this again Ná taispeáin seo arís Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Tá fócas caillte ag Flameshot. Ní oibreoidh aicearraí méarchláir go dtí go gcliceálann tú áit éigin. Configuration error resolved. Launch `flameshot gui` again to apply it. Réitíodh earráid chumraíochta. Seoladh 'flameshot gui' arís chun é a chur i bhfeidhm. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings Socruithe Uirlisí CircleCountTool Circle Counter Cuntar Ciorcail Add an autoincrementing counter bubble Cuir mboilgeog cuntar autoincrementing leis CircleTool Circle Ciorcal Set the Circle as the paint tool Socraigh an Ciorcal mar uirlis péint ColorDialog Select Color Roghnaigh Dath Saturation Sáithiú Hue Hex Heicsidheachúil Blue Gorm Value Luach Green Glas Alpha Alfa Red Dearg ColorGrabWidget Accept color Glac le dath Enter or Left Click Iontráil nó cliceáil ar chlé Precisely select color Roghnaigh dath go beacht Hold Left Click Coinnigh Cliceáil ar Chlé Toggle magnifier Scoránaigh an formhéadaitheoir Space or Right Click Spás nó cliceáil ar dheis Cancel Cuir ar ceal Esc Esc ColorPickerEditor Edit Preset: Cuir Réamhshocraithe in Eagar: Enter color to update preset Iontráil dath le réamhshocrú a nuashonrú Update Nuashonraigh Press button to update the selected preset Brúigh an cnaipe chun an réamhshocrú roghnaithe a nuashonrú Delete Scrios Press button to delete the selected preset Brúigh an cnaipe chun an réamhshocrú roghnaithe a scriosadh Add Preset: Cuir Réamhshocraithe leis: Enter color manually or select it using the color-wheel Iontráil dath de láimh nó roghnaigh é ag baint úsáide as an roth dathanna Add Cuir leis Press button to add preset Brúigh an cnaipe chun réamhshocrú a chur leis Error Earráid Unable to add preset. Maximum limit reached. Ní féidir réamhshocrú a chur leis. Uasteorainn bainte amach. Unable to remove preset. Minimum limit reached. Ní féidir réamhshocrú a bhaint. An t-íosteorainn bainte amach. ConfigErrorDetails Configuration errors Earráidí cumraíochta ConfigHandler Unrecognized setting: '%1' Socrú anaithnid: '%1' Unrecognized shortcut name: '%1'. Ainm aicearra neamhaitheanta: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Coimhlint aicearra: tá an aicearra céanna ag '%1' agus '%2':% 3 Bad value in '%1'. Expected: %2 Drochluach i '%1'. Ag súil leis: %2 You have successfully resolved the configuration error. D'éirigh leat an earráid chumraíochta a réiteach. The configuration contains an error. Open configuration to resolve. Tá earráid sa chumraíocht. Oscail cumraíocht le réiteach. Bad config key '%1' in ConfigHandler. Please report this as a bug. Droch-eochair chumraíochta '%1' i ConfigurHandler. Tuairiscigh é seo mar fhabht. ConfigResolver Resolve configuration errors Réitigh earráidí cumraíochta <b>You must resolve all errors before continuing:</b> <b>Ní mór duit na hearráidí go léir a réiteach sula leanann tú ar aghaidh:</b> Reset Athshocraigh Reset to the default value. Athshocraigh go dtí an luach réamhshocraithe. Remove Bain Remove this setting. Bain an socrú seo. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Tá coimhlintí ag roinnt aicearraí méarchláir. NÍ chuirfidh sé seo cosc ar flameshot ó thosú. Réitigh iad de láimh sa chomhad cumraíochta. Resolve all Réitigh gach rud Resolve all listed errors. Réitigh gach earráid liostaithe. Details Sonraí ConfigWindow Configuration Cumraíocht Interface Comhéadan Filename Editor Eagarthóir Ainm Comhaid General Ginearálta Shortcuts Aicearraí Resolve Réitigh <b>Configuration file has errors. Resolve them before continuing.</b> <b>Tá earráidí sa chomhad cumraíochta. Réitigh iad sula leanann tú ar aghaidh.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Cóipeáil Copy selection to clipboard Cóipeáil an roghnúchán go gearrthaisce Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Scoir Leave the capture screen Fág an scáileán gabhála FileNameEditor Edit the name of your captures: Cuir ainm do ghabhálacha in eagar: Edit: Cuir in eagar: Preview: Réamhamharc: Save Sábháil Saves the pattern Sábhálann an patrún Restore Athchóirigh Reset Reinicialitza Restores the saved pattern Athchóiríonn sé an patrún a shábháil Clear Glan Deletes the name Scrios an t-ainm Flameshot Error Earráid Unable to close active modal widgets Ní féidir giuirléidí módúla gníomhacha a dhúnadh URL copied to clipboard. URL cóipeáilte chuig an ghearrthaisce. FlameshotDaemon New version %1 is available Tá leagan nua %1 ar fáil You have the latest version Tá an leagan is déanaí agat Failed to get information about the latest version. Theip ar eolas a fháil faoin leagan is déanaí. Unable to connect via DBus Ní féidir ceangal a dhéanamh trí DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Iompórtáil Error Earráid Unable to read file. Ní féidir an comhad a léamh. Unable to write file. Ní féidir comhad a scríobh. Save File Sábháil Comhad Confirm Reset Deimhnigh Athshocraigh Are you sure you want to reset the configuration? An bhfuil tú cinnte gur mhaith leat an chumraíocht a athshocrú? Show help message Taispeáin teachtaireacht chabhrach Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Taispeáin an cnaipe painéil taoibh Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Taispeáin fógraí deisce Show tray icon Taispeáin deilbhín tráidire Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Deimhniú ag teastáil chun an pictiúr a scriosadh ó na huaslódálacha is déanaí Configuration File Comhad Cumraíochta Export Easpórtáil Reset Athshocraigh Automatic check for updates Seiceáil go huathoibríoch le haghaidh nuashonruithe Allow multiple flameshot GUI instances simultaneously Ceadaigh iliomad cásanna GUI flameshot ag an am céanna This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Dún an deamhan go huathoibríoch nuair nach bhfuil sé ag teastáil Launch at startup Seoladh ag tosú Launch Flameshot Inicia el Flameshot Show welcome message on launch Taispeáin teachtaireacht fáilte ar an seoladh Use large predefined color palette Úsáid pailéad mór dathanna réamhshainithe Copy URL after upload Cóipeáil URL tar éis uaslódáil Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Sábháil íomhá tar éis cóipeála Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Taispeáin an teachtaireacht chabhrach ag an tús sa mhodh gabhála Use last region for GUI mode Úsáid an réigiún deireanach le haghaidh mód comhéadain Use the last region as the default selection for the next screenshot in GUI mode Bain úsáid as an réigiún deireanach mar roghnú réamhshocraithe don chéad scáileán eile i mód GUI Show the side panel toggle button in the capture mode Taispeáin an cnaipe scoránaigh painéil taobh sa mhodh gabhála Enable desktop notifications Cumasaigh fógraí deisce Show abort notifications Taispeáin fógraí scoir Enable abort notifications Cumasaigh fógraí scoir Show icon in the system tray Taispeáin deilbhín i dtráidire an chórais Use grim to capture screenshots Úsáid grim chun scáileáin a ghabháil Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Is fóntais de chuid Wayland amháin é Grim chun scáileáin a ghabháil bunaithe ar an bprótacal cóipeála scáileáin. Go ginearálta, ní féidir é a chumasú ach ar bhainisteoirí fuinneoige íosta Wayland ar nós Sway, Hyprland, srl. Ask for confirmation to delete screenshot from the latest uploads Iarr dearbhú chun an pictiúr a scriosadh ó na huaslódáil is déanaí Check for updates automatically Seiceáil le haghaidh nuashonruithe go huathoibríoch This allows you to take screenshots of Flameshot itself for example Ligeann sé seo duit screenshots de Flameshot féin a thógáil, mar shampla Launch Flameshot daemon when computer is booted Seoladh deamhan Flameshot nuair a bhíonn an ríomhaire tosaithe Show the welcome message box in the middle of the screen while taking a screenshot Taispeáin an bosca teachtaireachta fáilte i lár an scáileáin agus scáileán á thógáil agat Use a large predefined color palette Bain úsáid as pailéad mór dathanna réamhshainithe Copy on double click Cóipeáil ar chliceáil dhúbailte Enable Copy on Double Click Cumasaigh Cóip ar Chliceáil Dhúbailte Copy URL and close window after uploading was successful Cóipeáil URL agus dún an fhuinneog tar éis gur éirigh leis an uaslódáil Automatically unload from memory when it is not needed Díluchtú go huathoibríoch ón gcuimhne nuair nach bhfuil gá leis Automatically close daemon (background process) when it is not needed Dún an daemon (próiseas cúlra) go huathoibríoch nuair nach bhfuil gá leis Launch in background at startup Seoladh sa chúlra ag an am tosaithe Launch Flameshot daemon (background process) when computer is booted Seoladh daemon Flameshot (próiseas cúlra) nuair a thosaítear an ríomhaire Ask before quit capture Fiafraigh sula scoireann tú den ghabháil Show the confirmation prompt before ESC quit Taispeáin an leid dheimhnithe sula scoireann ESC Enable Copy to clipboard on Double Click Cumasaigh Cóipeáil chuig an ngearrthaisce ar Chliceáil Dhúbailte Copy URL after uploading was successful Cóipeáil URL tar éis an uaslódála a bheith rathúil After copying the screenshot, save it to a file as well Tar éis an scáileán a chóipeáil, sábháil é i gcomhad freisin Save Path Sábháil Conair Change... Athraigh... Use fixed path for screenshots to save Úsáid cosán seasta le haghaidh screenshots le sábháil Preferred save file extension: An síneadh comhaid sábhála is fearr leat: Latest Uploads Max Size Uaslódáil is déanaí Uasmhéid Imgur Application Client ID Aitheantas Cliant Feidhmchláir Imgur Undo limit Teorainn a chur ar ceal Use JPG format for clipboard (PNG default) Úsáid formáid JPG le haghaidh gearrthaisce (réamhshocrú PNG) Use lossy JPG format for clipboard (lossless PNG default) Úsáid formáid JPG caillteanach don ghearrthaisce (PNG gan chailliúint réamhshocraithe) Copy file path after save Cóipeáil cosán an chomhaid tar éis sábháil Copy the file path to clipboard after the file is saved Cóipeáil cosán an chomhaid go dtí an gearrthaisce tar éis an comhad a shábháil Anti-aliasing image when zoom the pinned image Íomhá frith-ailiasú nuair a bhíonn an íomhá greamaithe á zúmáil After zooming the pinned image, should the image get smoothened or stay pixelated Tar éis an íomhá phionnaithe a súmáil, ba chóir go bhfaigheadh an íomhá smúdáil nó go bhfanfadh sé picteilíneach Upload image without confirmation Uaslódáil íomhá gan deimhniú Choose a Folder Roghnaigh Fillteán Unable to write to directory. Ní féidir scríobh chuig comhadlann. Show magnifier Taispeáin formhéadaitheoir Enable a magnifier while selecting the screenshot area Cumasaigh formhéadúitheoir agus an limistéar pictiúr á roghnú agat Square shaped magnifier Formhéadú-chruthach cearnach Make the magnifier to be square-shaped Déan an formhéadóir a bheith i gcruth cearnach Milliseconds before geometry display hides; 0 means do not hide Mileasoicindí sula bhfolaítear an taispeáint geoiméadrachta; ciallaíonn 0 nach bhfolaítear é Set geometry display timeout (ms) Socraigh am scoir taispeána geoiméadrachta (ms) Selection Geometry Display Taispeántas Geoiméadrachta Roghnúcháin Display Location Suíomh Taispeána None Dada Top Left Barr ar Chlé Top Right Barr ar Dheis Bottom Left Bun ar Chlé Bottom Right Bun ar Dheis Center Lár Quality range of 0-100; Higher number is better quality and larger file size Raon cáilíochta 0-100; Is fearr cáilíocht agus méid comhaid níos mó uimhir níos airde JPEG Quality Cáilíocht JPEG Reverse arrow Saighead droim ar ais Draw the arrow head first Tarraing ceann na saighde ar dtús Insecure Pixelate Picteilín Neamhshábháilte Draw the pixelation effect in an insecure but more asethetic way. Tarraing an éifeacht picteilithe ar bhealach neamhchinnte ach níos neamh-eitiéiteach. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Dearbhú Uaslódáil Do you want to upload this capture? An bhfuil fonn ort an ghabháil seo a uaslódáil? Upload without confirmation Uaslódáil gan deimhniú ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uaslódáil íomhá Uploading Image Íomhá á Uaslódáil Copy URL Cóipeáil URL Open URL Oscail URL Delete image Scrios íomhá Image to Clipboard. Íomhá go Gearrthaisce . Save image Sábháil íomhá Unable to open the URL. Ní féidir an URL a oscailt. URL copied to clipboard. URL cóipeáilte go gearrthaisce. Screenshot copied to clipboard. Scáileán cóipeáilte chuig an ghearrthaisce. Unable to save the screenshot to disk. Ní féidir an scáileán a shábháil ar dhiosca. Screenshot saved. Scáileán sábhálta. ImgUploaderTool Image Uploader Uaslódálaí Íomhá Upload the selection Uaslódáil an roghnúchán ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. Ní féidir an URL a oscailt. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Maidir Icon Deilbhín License Ceadúnas GPLv3+ GPLv3+ Version Leagan Flameshot v Flameshot v OS Info Eolas faoin TOS Copy Info Cóipeáil Eolas Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Inbhéartaigh Set Inverter as the paint tool Socraigh Inverter mar an uirlis péint LineTool Line Líne Set the Line as the paint tool Socraigh an Líne mar uirlis péint MarkerTool Marker Marcóir Set the Marker as the paint tool Socraigh an Marcóir mar uirlis péint MoveTool Move Bog Move the selection area Bog an limistéar roghnúcháin PencilTool Pencil Peann luaidhe Set the Pencil as the paint tool Socraigh an Peann luaidhe mar uirlis péint PinTool Pin Tool Uirlis Bioráin Pin image on the desktop Bioráin íomhá ar an deasc PinWidget Context menu Roghchlár comhthéacs Copy to clipboard Cóipeáil go gearrthaisce Save to file Sábháil i gcomhad Rotate Right Rothlaigh ar Dheis Rotate Left Rothlaigh ar Chlé Increase Opacity Méadaigh Teimhneacht Decrease Opacity Laghdaigh an Teimhneacht Close Dún PixelateTool Pixelate Picteilín Set Pixelate as the paint tool. Socraigh Pixelate mar an uirlis péintéireachta. Set Pixelate as the paint tool Socraigh Pixelate mar uirlis péint PrimaryInstanceWidget Primary instance Príomh-eiseamláir <b>Primary instance.</b> Messages received from secondaries: <b>Príomh-chás.</b> Teachtaireachtaí a fuarthas ó thánaisteacha: QHotkey Failed to register %1. Error: %2 Theip ar chlárú %1. Earráid:%2 Failed to unregister %1. Error: %2 Theip ar dhíchlárú %1. Earráid:%2 QObject Capture saved to clipboard. Gabháil sábháil sa ghearrthaisce . Error while saving to clipboard Earráid agus tú ag sábháil sa ghearrthaisce Save screenshot Sábháil an pictiúr Path copied to clipboard as Cosán cóipeáilte go gearrthaisce mar Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Earráid Sábhála Capture saved as Gabháil mar Error trying to save as Earráid agus é ag iarraidh sábháil mar Unable to connect via DBus Ní féidir ceangal a dhéanamh trí DBus Powerful yet simple to use screenshot software. Bogearraí scáileáin cumhachtach ach simplí le húsáid. See Féach Capture the entire desktop. Gabháil an deasc iomlán. Open the capture launcher. Oscail an tosaitheoir gabhála. Start a manual capture in GUI mode. Tosaigh gabháil láimhe i mód GUI. Configure Cumraigh Capture a single screen. Gabh scáileán amháin. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Gabh pictiúr scáileáin de na monatóirí go léir ag an am céanna. Capture a screenshot of the specified monitor. Gabh pictiúr scáileáin den mhonatóir sonraithe. Existing directory or new file to save to Comhadlann nó comhad nua atá ann cheana le sábháil ann Save the capture to the clipboard Sábháil an ghabháil sa ghearrthaisce Pin the capture to the screen Bioráin an ghabháil ar an scáileán Upload screenshot Uaslódáil an pictiúr Delay time in milliseconds Am moille i milleasoicind Repeat screenshot with previously selected region Déan an pictiúr arís leis an réigiún a roghnaíodh roimhe seo Screenshot region to select Réigiún scáileáin le roghnú Set the filename pattern Socraigh patrún ainm comhaid Accept capture as soon as a selection is made Glac le gabháil chomh luath agus a dhéantar roghnú Enable or disable the trayicon Cumasaigh nó díchumasaigh an deilbhín tráidire Enable or disable run at startup Cumasaigh nó díchumasaigh rith ag an tosaithe Enable or disable the notifications Cumasaigh nó díchumasaigh na fógraí Check the configuration for errors Seiceáil an chumraíocht le haghaidh earráidí Show the help message in the capture mode Taispeáin an teachtaireacht chabhrach sa mhodh gabhála Define the main UI color Sainmhínigh príomhdhath an chomhéadain Define the contrast UI color Sainmhínigh dath an chomhéadain chodarsnachta Print raw PNG capture Priontáil gabháil PNG amh Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Priontáil geoiméadracht an roghnúcháin san fhormáid WxH + X + Y. Ní dhéanann aon rud má tá amh sonraithe Define the screen to capture (starting from 0) Sainmhínigh an scáileán le gabháil (ag tosú ó 0) Invalid delay, it must be a number greater than 0 Moill neamhbhailí, caithfidh sé a bheith ina uimhir níos mó ná 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Réigiún neamhbhailí, bain úsáid as 'WxH+X+Y' nó 'all' nó 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Conair neamhbhailí, caithfidh sé a bheith ina chomhadlann atá ann cheana féin nó comhad nua i gcomhadlann atá ann cheana Define the screen to capture Define the screen to capture default: screen containing the cursor réamhshocrú: scáileán ina bhfuil an cúrsóir Screen number Uimhir scáileáin Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Dath neamhbhailí, tacaíonn an bhratach seo leis na formáidí seo a leanas: - #RGB (is dhigit heicsidheichúil amháin é gach ceann de R, G, agus B) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Dathanna ainmnithe mar 'gorm' nó 'dearg' B'fhéidir go mbeidh ort éalú ón gcomhartha '#' mar atá i '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Uimhir scáileáin neamhbhailí, caithfidh sé a bheith neamhdhiúltach Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Luach neamhbhailí, caithfear é a shainmhíniú mar 'fíor' nó 'bréagach' Error Earráid Unable to write in Ní féidir scríobh isteach Requested screen exceeds screen count Sáraíonn an scáileán iarrtha líon na scáileáin Full screen screenshot pinned to screen Scáileán iomlán greamaithe ar an scáileán URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Roghanna Arguments Argóintí arguments argóintí Subcommands Fo-orduithe subcommands fo-orduithe Usage Úsáid options roghanna Per default runs Flameshot in the background and adds a tray icon for configuration. Ritheann Flameshot sa chúlra agus cuireann sé deilbhín tráidire le haghaidh cumraíochta. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Dia duit, tá mé anseo! Cliceáil ar an deilbhín sa tráidire chun scáileán a thógáil nó cliceáil le cnaipe ar dheis chun níos mó roghanna a fheiceáil. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Scoir de ghabháil Screenshot history Stair an scáileáin Capture screen Gabháil an scáileán Show color picker Taispeáin roghnóir dathanna Change the tool's size Athraigh méid na huirlise Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Dronuilleog Set the Rectangle as the paint tool Socraigh an Dronuilleog mar uirlis péint RedoTool Redo Athdhéanamh Redo the next modification Déan an chéad mhodhnú eile arís SaveTool Save Sábháil Save screenshot to a file Sábháil an pictiúr i gcomhad Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Ní féidir timpeallacht deisce a bhrath (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Éilíonn an t-oiriúntóir gabhála scáileáin uilíoch Wayland Grim mar chomhpháirt gabhála scáileáin de Wayland. Mura bhfuil an chomhpháirt gabhála scáileáin ann, suiteáil é le do thoil! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Mura bhfuil an socrú useGrimAdapter cumasaithe, úsáidfear an prótacal dbus. Ba chóir a thabhairt faoi deara nach moltar an prótacal dbus a úsáid faoi wayland. Moltar an socrú useGrimAdapter a chumasú i flameshot.ini chun an t-oiriúntóir scáileáin wayland ginearálta bunaithe ar grim a ghníomhachtú grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Tá comhpháirt scáileáin grim curtha i bhfeidhm bunaithe ar wlroots, ní fhéadfar é a úsáid i dtimpeallachtaí deisce GNOME nó i dtimpeallachtaí deisce comhchosúla Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Ní féidir timpeallacht deisce a bhrath (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Leid: déan iarracht an athróg timpeallachta XDG_CURRENT_DESKTOP a shocrú. Unable to capture screen Ní féidir an scáileán a ghabháil SecondaryInstanceWidget Secondary instance Sampla tánaisteach <b>Secondary instance.</b> Send message to primary: <b>Ceist thánaisteach.</b> Seol teachtaireacht chuig an bpríomhcheantar: Type something here... Clóscríobh rud éigin anseo... &Send &Seol Error sending message Earráid ag seoladh an teachtaireachta The message '%1' could not be sent to the primary. Níorbh fhéidir an teachtaireacht '%1' a sheoladh chuig an bpríomh-theachtaireacht. SelectionTool Rectangular Selection Roghnú Dronuilleogach Set Selection as the paint tool Socraigh Roghnúchán mar uirlis péint SetShortcutDialog Set Shortcut Socraigh Aicearra Enter new shortcut to change Iontráil aicearra nua le hathrú Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Brúigh Esc chun an aicearra méarchláir a dhíchumasú. Press Esc to cancel or Backspace to disable the keyboard shortcut. Brúigh Esc chun an aicearra méarchláir a dhíchumasú. Flameshot must be restarted for changes to take effect. Caithfear Flameshot a atosú chun go dtiocfaidh athruithe. ShortcutsWidget Hot Keys Eochracha Te Available shortcuts in the screen capture mode. Aicearraí atá ar fáil sa mhodh gabhála scáileáin. Description Cur síos Key Eochair Left Double-click Cliceáil ar chlé faoi dhó Toggle side panel Scoránaigh painéal taoibh Grab a color from the screen Faigh dath ón scáileán Resize selection left 1px Athraigh méid an roghnúcháin ar chlé 1px Resize selection right 1px Athraigh méid an roghnúcháin ar dheis 1px Resize selection up 1px Athraigh méid an roghnúcháin suas 1px Resize selection down 1px Athraigh méid an roghnúcháin síos 1px Symmetrically decrease width by 2px Laghdaigh an leithead go siméadrach faoi 2px Symmetrically increase width by 2px Méadaigh an leithead go siméadrach faoi 2px Symmetrically increase height by 2px Méadaigh an airde go siméadrach faoi 2px Symmetrically decrease height by 2px Laghdaigh an airde go siméadrach faoi 2px Select entire screen Roghnaigh an scáileán iomlán Move selection left 1px Bog an roghnúchán ar chlé 1px Move selection right 1px Bog an roghnúchán ar dheis 1px Move selection up 1px Bog an roghnúchán suas 1px Move selection down 1px Bog an roghnúchán síos 1px Commit text in text area Tiomantaigh téacs i limistéar téacs Delete selected drawn object Scrios an réad tarraingthe roghnaithe Cancel current selection Cealaigh an rogha reatha Delete current tool Scrios uirlis reatha Capture screen Gabháil an scáileán Screenshot history Stair an scáileáin SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Méid uirlisí gníomhach: Active Color: Dath Gníomhach: Grab Color Grab Dath Display grid Eangach taispeána SizeDecreaseTool Decrease Tool Size Laghdaigh Méid na nUirlisí Decrease the size of the other tools Laghdaigh méid na n-uirlisí eile SizeIncreaseTool Increase Tool Size Méadaigh Méid na nUirlisí Increase the size of the other tools Méadaigh méid na n-uirlisí eile SizeIndicatorTool Selection Size Indicator Táscaire Méid Roghnúcháin Show X and Y dimensions of the selection Taispeáin toisí X agus Y an roghnúcháin Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Céad (00-99) Year (00-99) Bliain (00-99) Year (2000) Tá tús á chur amárach le hobair athchóirithe atá beartaithe ar 22 scoil a thóg Western Building Systems Month Name (jan) Ainm Míosa (eanáir) Month Name (january) Ainm na Míosa (Eanáir) Month (01-12) Mí (01-12) Week Day (1-7) Lá na Seachtaine (1-7) Week (01-53) Seachtain (01-53) Day Name (mon) Ainm an Lae (Aigne) Day Name (monday) Ainm an Lae (Dé Luain) Day (01-31) Lá (01-31) Day of Month (1-31) Lá na Míosa (1-31) Day (001-366) Lá (001-366) Hour (00-23) Uair an chloig (00-23) Hour (01-12) Uair (01-12) Minute (00-59) Nóiméad (00-59) Second (00-59) An Dara (00-59) Full Date (%m/%d/%y) Dáta Iomlán (%m/%d/%y) Full Date (%Y-%m-%d) Dáta Iomlán (%Y-%m-%d) Full Date (%d-%m-%Y) Dáta Iomlán (%d-%m-%Y) Time (%H-%M-%S) Am (%H-%M-%S) Time (%H-%M) Am (%H-%M) SystemNotification Flameshot Info Eolas Flameshot TextConfig StrikeOut Bualadh amach Underline Béim Bold Cló trom Italic Iodálach Left Align Ailínigh ar Chlé Center Align Lárnaigh Ailíniú Right Align Ailíniú ar Dheis TextTool Text Téacs Add text to your capture Cuir téacs le do ghabháil TrayIcon &Take Screenshot &Tóg Scáileán den Scáileán &Open Launcher &Oscail an Tosaitheoir &Configuration &Cumraíocht &About &Maidir Check for updates Seiceáil le haghaidh nuashonruithe New version %1 is available Tá leagan nua %1 ar fáil &Quit &Scoir &Latest Uploads &Uaslódálacha is Déanaí &Open Save Path &Oscail an Chonair Shábháilte UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Athraigh an dath ag bogadh na roghnóirí agus féach na hathruithe sna cnaipí réamhamhairc. Select a Button to modify it Roghnaigh Cnaipe chun é a mhodhnú Main Color Príomhdhath Click on this button to set the edition mode of the main color. Cliceáil ar an gcnaipe seo chun modh eagrán an phríomhdhath a shocrú. Contrast Color Dath Codarsnachta Click on this button to set the edition mode of the contrast color. Cliceáil ar an gcnaipe seo chun modh eagrán an dath codarsnachta a shocrú. UndoTool Undo Cealaigh Undo the last modification Cealaigh an mhodhnú deireanach UpdateNotificationWidget New Flameshot version %1 is available Tá leagan nua Flameshot %1 ar fáil Ignore Déan neamhaird Later Níos déanaí Update Nuashonraigh UploadHistory Upload History Stair Uaslódáil Screenshots history is empty Tá stair na screenshots folamh UploadLineItem Form Foirm TextLabel Lipéad Téacs Copy URL Cóipeáil URL Open In Browser Oscail sa bhrabhsálaí Confirm to delete Deimhnigh é a scriosadh Are you sure you want to delete a screenshot from the latest uploads and server? An bhfuil tú cinnte gur mhaith leat scáileán a scriosadh ón uaslódáil agus ón bhfreastalaí is déanaí? UtilityPanel Close Dún <Empty> <Folamh> VisualsEditor Opacity of area outside selection: Teimhneacht an limistéir taobh amuigh den roghnú: UI Color Editor Eagarthóir Dathanna Chomhéadain Colorpicker Editor Eagarthóir Pioctha Dathanna Button Selection Roghnú Cnaipe Select All Roghnaigh Gach Rud color_widgets::ColorDialog Pick Pioc color_widgets::ColorPalette Unnamed Gan ainm color_widgets::ColorPaletteModel Unnamed Gan ainm %1 (%2 colors) %1 (%2 dathanna) color_widgets::ColorPaletteWidget Open a new palette from file Oscail pailéad nua ó chomhad Create a new palette Cruthaigh pailéad nua Duplicate the current palette Dúbailt an pailéad reatha Delete the current palette Scrios an pailéad reatha Revert changes to the current palette Cuir athruithe ar an bpailéad reatha ar ais Save changes to the current palette Sábháil athruithe ar an bpailéad reatha Add a color to the palette Cuir dath leis an bpailéad Remove the selected color from the palette Bain an dath roghnaithe ón bpailéad New Palette Pailéad Nua Name Ainm GIMP Palettes (*.gpl) Pailléid GIMP (*.gpl) Palette Image (%1) Pailéad Íomhá (%1) All Files (*) Gach Comhad (*) Open Palette Oscail Pailéad Failed to load the palette file %1 Theip ar an gcomhad pailéad a luchtú %1 color_widgets::GradientEditor Add Color Cuir Dath leis Remove Color Bain Dath Edit Color... Cuir Dath in Eagar... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 dathanna) color_widgets::Swatch Clear Color Glan Dath %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_gl.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher Lanzador de aplicacións Choose an app to open the capture Escolle unha aplicación para abrir a captura AppLauncherWidget Open With Abrir con Launch in terminal Abrir no terminal Keep open after selection Manter aberto após a selección Error Erro Unable to launch in terminal. Non foi posíbel abrir no terminal. Unable to write in Non é posíbel escribir en ArrowTool Arrow Frecha Set the Arrow as the paint tool Usar a Frecha como ferramenta de deseño BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Modo de captura</b> Rectangular Region Rexión rectangular Full Screen (Current Display) Pantalla enteira (Monitor actual) Full Screen (All Monitors) Pantalla enteira (Todos os monitores) No Delay Sen atraso second segundo seconds segundos Take new screenshot Tirar unha nova captura de pantalla Area: Área: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: Atraso: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Non foi posíbel capturar a pantalla Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel Roda del ratolí Change tool size Change tool size Right Click Clic dret Show color picker Show color picker Open side panel Open side panel Esc Esc Exit Saír Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Selecciona unha área co rato, ou preme Esc para saír. Preme Enter para capturar a pantalla. Preme Click Dereito para mostrar o selector de cor. Usa a roda do rato para cambiar o grosor da ferramenta. Preme Espacio para abrir o panel lateral. Tool Settings Configuración das ferramentas CircleCountTool Circle Counter Contorno do círculo Add an autoincrementing counter bubble Engade unha burbulla de contador autoincrementante CircleTool Circle Círculo Set the Circle as the paint tool Usa o círculo como ferramenta de deseño ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Update Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error Error Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset Reset Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Configuración Interface Interface Filename Editor Editor do nome do arquivo General Xeral Shortcuts Atallos Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available Nova versión %1 está dispoñíbel You have the latest version Tes a versión máis recente Failed to get information about the latest version. Non foi posíbel obter informacións sobre a versión máis recente. Error Erro Unable to close active modal widgets Incapaz de pechar widgets modais activos &Open Launcher &Abrir o lanzador de aplicativos &Configuration &Configuración &About &Sobre Check for updates Verificar se hai actualizacións &Latest Uploads &Últimos envíos &Information &Informació &Quit &Saír &Take Screenshot &Tirar unha captura de pantalla CopyTool Copy Copiar Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard Copia a selección para a área de transferencia DBusUtils Unable to connect via DBus Non foi posible conectar vía DBus ExitTool Exit Saír Leave the capture screen Saír da pantalla de captura FileNameEditor Edit the name of your captures: Edita o nome das túas capturas: Edit: Editar: Preview: Previsualización: Save Gardar Saves the pattern Garda o patrón Restore Restaurar Reset Reinicialitza Restores the saved pattern Restaura o padrón gardado Clear Limpar Deletes the name Apaga o padrón Flameshot Error Error Unable to close active modal widgets Incapaz de pechar widgets modais activos URL copied to clipboard. URL copied to clipboard. FlameshotDaemon New version %1 is available Nova versión %1 está dispoñíbel You have the latest version Tes a versión máis recente Failed to get information about the latest version. Non foi posíbel obter informacións sobre a versión máis recente. Unable to connect via DBus Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importar Error Erro Unable to read file. Incapaz de ler o arquivo. Unable to write file. Incapaz de gardar o arquivo. Save File Gardar arquivo Confirm Reset Confirma a reinicialización Are you sure you want to reset the configuration? Tes certeza que queres reinicializar a configuración? Show help message Mostra a mensaxe de axuda Show the help message at the beginning in the capture mode. Mostra a mensaxe de axuda no inicio do modo de captura. Show the side panel button Mostra o botón no panel lateral Show the side panel toggle button in the capture mode. Mostra o botón de alternancia do panel lateral no modo de captura. Show desktop notifications Amosar as notificacións no escritorio Show tray icon Mostrar icono na barra de tarefas Show the systemtray icon Mostrar o icono na barra de tarefas do sistema Confirmation required to delete screenshot from the latest uploads Confirmación necesaria para excluir a captura de pantalla dos uploads mais recentes Configuration File Arquivo de configuración Export Exportar Reset Reiniciar Automatic check for updates Verificación automática de actualizacións Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Executar no inicio do sistema Launch Flameshot Executar Flameshot Show welcome message on launch Amosar mensaxe de benvida no inicio Use large predefined color palette Use large predefined color palette Copy URL after upload Copiar a URL despois da subida Copy URL and close window after upload Copiar a URL e pechar a xanela despois da subida Save image after copy Gardar a imaxe despois de copiar Save image file after copying it Gardar o arquivo de imaxe despois de copialo Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path Gardar ruta Change... Alterar... Use fixed path for screenshots to save Usar unha ruta fixa para gardar a captura de pantalla Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Tamaño máximo das subidas mais recentes Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Usa o formato JPG para a área de transferencia (PNG por defecto) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copia a ruta do arquivo despois de gardar Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder Escolle un directorio Unable to write to directory. Incapaz de escribir no directorio. Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimos envíos Screenshots history is empty O histórico de capturas de pantalla está valeiro Copy URL Copiar a URL URL copied to clipboard. URL copiada para a área de transferencia. Open in browser Abrir no navegador Confirm to delete Confirma para borrar Are you sure you want to delete a screenshot from the latest uploads and server? Tes certeza de que desexas borrar unha captura de pantalla das últimas subidas e do servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Upload image Uploading Image Uploading Image Copy URL Copy URL Open URL Open URL Delete image Delete image Image to Clipboard. Image to Clipboard. Save image Save image Unable to open the URL. Unable to open the URL. URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. Screenshot copied to clipboard. Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader Cargador de imaxes Upload the selection Upload the selection ImgurUploader Upload to Imgur Enviar para Imgur Uploading Image Enviando imaxe Copy URL Copiar URL Open URL Abrir URL Delete image Borrar imaxe Image to Clipboard. Imaxe a área de transeferencia. Unable to open the URL. Non foi posible abrir a URL. URL copied to clipboard. URL copiada para a área de transferencia. Screenshot copied to clipboard. Captura de pantalla copiada para a área de transferencia. ImgurUploaderTool Image Uploader Image Uploader Upload the selection to Imgur Upload the selection to Imgur InfoWindow About Información Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Licenza</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line Line Set the Line as the paint tool Set the Line as the paint tool MarkerTool Marker Marker Set the Marker as the paint tool Set the Marker as the paint tool MoveTool Move Move Move the selection area Move the selection area PencilTool Pencil Pencil Set the Pencil as the paint tool Set the Pencil as the paint tool PinTool Pin Tool Pin Tool Pin image on the desktop Pin image on the desktop PinWidget Context menu Context menu Copy to clipboard Copia al porta-retalls Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Capture saved to clipboard. Capture saved to clipboard. Error while saving to clipboard Error while saving to clipboard Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Save Error Capture saved as Capture saved as Error trying to save as Error trying to save as Unable to connect via DBus Unable to connect via DBus Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in Unable to write in Capture saved to clipboard Capture saved to clipboard URL copied to clipboard. URL copied to clipboard. Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Quit capture Screenshot history Screenshot history Capture screen Capture screen Show color picker Show color picker Change the tool's size Change the tool's size Change the tool's thickness Change the tool's thickness RectangleTool Rectangle Rectangle Set the Rectangle as the paint tool Set the Rectangle as the paint tool RedoTool Redo Redo Redo the next modification Redo the next modification SaveTool Save Save Save screenshot to a file Save screenshot to a file Save the capture Save the capture ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Rectangular Selection Set Selection as the paint tool Set Selection as the paint tool SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Available shortcuts in the screen capture mode. Description Description Key Key Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active tool size: Active Color: Active Color: Grab Color Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Selection Size Indicator Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Century (00-99) Year (00-99) Year (00-99) Year (2000) Year (2000) Month Name (jan) Month Name (jan) Month Name (january) Month Name (january) Month (01-12) Month (01-12) Week Day (1-7) Week Day (1-7) Week (01-53) Week (01-53) Day Name (mon) Day Name (mon) Day Name (monday) Day Name (monday) Day (01-31) Day (01-31) Day of Month (1-31) Day of Month (1-31) Day (001-366) Day (001-366) Hour (00-23) Hour (00-23) Hour (01-12) Hour (01-12) Minute (00-59) Minute (00-59) Second (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M-%S) Time (%H-%M) Time (%H-%M) SystemNotification Flameshot Info Flameshot Info TextConfig StrikeOut StrikeOut Underline Underline Bold Bold Italic Italic Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Text Add text to your capture Add text to your capture TrayIcon &Take Screenshot &Tirar unha captura de pantalla &Open Launcher &Abrir o lanzador de aplicativos &Configuration &Configuración &About &Sobre Check for updates Verificar se hai actualizacións New version %1 is available Nova versión %1 está dispoñíbel &Quit &Saír &Latest Uploads &Últimos envíos &Open Save Path UIcolorEditor UI Color Editor UI Color Editor Change the color moving the selectors and see the changes in the preview buttons. Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Select a Button to modify it Main Color Main Color Click on this button to set the edition mode of the main color. Click on this button to set the edition mode of the main color. Contrast Color Contrast Color Click on this button to set the edition mode of the contrast color. Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo Undo the last modification Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty O histórico de capturas de pantalla está valeiro UploadLineItem Form Form TextLabel TextLabel Copy URL Copy URL Open In Browser Open In Browser Confirm to delete Confirma para borrar Are you sure you want to delete a screenshot from the latest uploads and server? Tes certeza de que desexas borrar unha captura de pantalla das últimas subidas e do servidor? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: Opacity of area outside selection: UI Color Editor UI Color Editor Colorpicker Editor Colorpicker Editor Button Selection Button Selection Select All Select All color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_grc.ts ================================================ AppLauncher App Launcher App Launcher Choose an app to open the capture Choose an app to open the capture AppLauncherWidget Open With Open With Launch in terminal Launch in terminal Keep open after selection Keep open after selection Error Error Unable to launch in terminal. Unable to launch in terminal. Unable to write in Unable to write in ArrowTool Arrow Arrow Set the Arrow as the paint tool Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Rectangular Region Full Screen (Current Display) Full Screen (Current Display) Full Screen (All Monitors) Full Screen (All Monitors) No Delay No Delay second second seconds seconds Take new screenshot Take new screenshot Area: Area: Delay: Delay: CaptureWidget Unable to capture screen Impossible capturar la pantalla Unable to capture screen Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Tool Settings Tool Settings CircleCountTool Circle Counter Circle Counter Add an autoincrementing counter bubble Add an autoincrementing counter bubble CircleTool Circle Circle Set the Circle as the paint tool Set the Circle as the paint tool ConfigWindow Configuration Configuration Interface Interface Filename Editor Filename Editor General General Shortcuts Shortcuts Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Error Unable to close active modal widgets Unable to close active modal widgets &Open Launcher &Open Launcher &Configuration &Configuration &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads &Information &Informació &Quit &Quit &Take Screenshot &Take Screenshot CopyTool Copy Copy Copy the selection into the clipboard Copy the selection into the clipboard DBusUtils Unable to connect via DBus Unable to connect via DBus ExitTool Exit Exit Leave the capture screen Leave the capture screen FileNameEditor Edit the name of your captures: Edit the name of your captures: Edit: Edit: Preview: Preview: Save Save Saves the pattern Saves the pattern Restore Restore Reset Reinicialitza Restores the saved pattern Restores the saved pattern Clear Clear Deletes the name Deletes the name GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Import Error Error Unable to read file. Unable to read file. Unable to write file. Unable to write file. Save File Save File Confirm Reset Confirm Reset Are you sure you want to reset the configuration? Are you sure you want to reset the configuration? Show help message Show help message Show the help message at the beginning in the capture mode. Show the help message at the beginning in the capture mode. Show the side panel button Show the side panel button Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Show desktop notifications Show tray icon Show tray icon Show the systemtray icon Show the systemtray icon Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File Configuration File Export Export Reset Reset Automatic check for updates Automatic check for updates Launch at startup Launch at startup Launch Flameshot Launch Flameshot Show welcome message on launch Show welcome message on launch Copy URL after upload Copy URL after upload Copy URL and close window after upload Copy URL and close window after upload Save image after copy Save image after copy Save image file after copying it Save image file after copying it Save Path Save Path Change... Change... Use fixed path for screenshots to save Use fixed path for screenshots to save Latest Uploads Max Size Latest Uploads Max Size Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Copy file path after save Copy file path after save Choose a Folder Choose a Folder Unable to write to directory. Unable to write to directory. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Copy URL URL copied to clipboard. URL copied to clipboard. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgurUploader Upload to Imgur Upload to Imgur Uploading Image Uploading Image Copy URL Copy URL Open URL Open URL Delete image Delete image Image to Clipboard. Image to Clipboard. Unable to open the URL. Unable to open the URL. URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. Screenshot copied to clipboard. ImgurUploaderTool Image Uploader Image Uploader Upload the selection to Imgur Upload the selection to Imgur InfoWindow About About Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>License</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. LineTool Line Line Set the Line as the paint tool Set the Line as the paint tool MarkerTool Marker Marker Set the Marker as the paint tool Set the Marker as the paint tool MoveTool Move Move Move the selection area Move the selection area PencilTool Pencil Pencil Set the Pencil as the paint tool Set the Pencil as the paint tool PinTool Pin Tool Pin Tool Pin image on the desktop Pin image on the desktop PixelateTool Pixelate Pixelate Set Pixelate as the paint tool Set Pixelate as the paint tool QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Capture saved to clipboard. Capture saved to clipboard. Error while saving to clipboard Error while saving to clipboard Save screenshot Save screenshot Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Save Error Capture saved as Capture saved as Error trying to save as Error trying to save as Unable to connect via DBus Unable to connect via DBus Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Save the capture to the clipboard Save the capture to the clipboard Delay time in milliseconds Delay time in milliseconds Set the filename pattern Set the filename pattern Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in Unable to write in URL copied to clipboard. URL copied to clipboard. Options Options Arguments Arguments arguments arguments Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Quit capture Screenshot history Screenshot history Capture screen Capture screen Show color picker Show color picker Change the tool's thickness Change the tool's thickness RectangleTool Rectangle Rectangle Set the Rectangle as the paint tool Set the Rectangle as the paint tool RedoTool Redo Redo Redo the next modification Redo the next modification SaveTool Save Save Save the capture Save the capture ScreenGrabber Unable to capture screen Unable to capture screen SelectionTool Rectangular Selection Rectangular Selection Set Selection as the paint tool Set Selection as the paint tool SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Available shortcuts in the screen capture mode. Description Description Key Key SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Grab Color Grab Color SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Selection Size Indicator Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Century (00-99) Year (00-99) Year (00-99) Year (2000) Year (2000) Month Name (jan) Month Name (jan) Month Name (january) Month Name (january) Month (01-12) Month (01-12) Week Day (1-7) Week Day (1-7) Week (01-53) Week (01-53) Day Name (mon) Day Name (mon) Day Name (monday) Day Name (monday) Day (01-31) Day (01-31) Day of Month (1-31) Day of Month (1-31) Day (001-366) Day (001-366) Hour (00-23) Hour (00-23) Hour (01-12) Hour (01-12) Minute (00-59) Minute (00-59) Second (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%Y-%m-%d) Time (%H-%M-%S) Time (%H-%M-%S) Time (%H-%M) Time (%H-%M) SystemNotification Flameshot Info Flameshot Info TextConfig StrikeOut StrikeOut Underline Underline Bold Bold Italic Italic TextTool Text Text Add text to your capture Add text to your capture UIcolorEditor UI Color Editor UI Color Editor Change the color moving the selectors and see the changes in the preview buttons. Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Select a Button to modify it Main Color Main Color Click on this button to set the edition mode of the main color. Click on this button to set the edition mode of the main color. Contrast Color Contrast Color Click on this button to set the edition mode of the contrast color. Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo Undo the last modification Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: Opacity of area outside selection: Button Selection Button Selection Select All Select All ================================================ FILE: data/translations/Internationalization_he.ts ================================================ AbstractWidgetList Add New הוספת חדש Move Up העברה מעלה Move Down העברה מטה Remove הסרה AcceptTool Accept קבלה Accept the capture קבלת הלכידה AppLauncher App Launcher משגר יישומון Choose an app to open the capture נא לבחור יישומון לפתיחת הלכידה AppLauncherWidget Open With פתיחה באמצעות Launch in terminal שיגור במסוף Keep open after selection להשאיר פתוח לאחר בחירה Error שגיאה Unable to launch in terminal. לא ניתן לשגר במסוף. Unable to write in לא ניתן לכתוב ל־ ArrowTool Arrow חץ Set the Arrow as the paint tool הגדרת ה'חץ' ככלי צבע BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>מצב לכידה</b> Rectangular Region אזור מרובע Full Screen (Current Display) מסך מלא (מצג נוכחי) Full Screen (All Monitors) מסך מלא (כל הצגים) No Delay ללא השהייה second שניה seconds שניות Take new screenshot צילום־מסך חדש Area: אזור: Capture Launcher משגר לכידה TextLabel מלל תוית Capture Mode אופן לכידה Delay: אזור: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla לא ניתן ללכוד מסך Mouse עכבר Select screenshot area נא לבחור את אזור צילום־המסך Mouse Wheel גלגל עכבר Change tool size שינוי גודל כלי Right Click הקשה ימנית Show color picker הצגת דוגם צבע Open side panel פתיחת חלונית צד Esc יציאה (Esc) Exit יציאה Quit Capture יציאה מלכידה Are you sure you want to quit capture? האם לצאת מלכידה? Do not show this again לא להציג שוב Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. פליימשוט איבדה מיקוד. קיצורי מקשים לא יפעלו עד להקשה על אזור כול שהוא. Configuration error resolved. Launch `flameshot gui` again to apply it. שגיאת תצורה נפתרה. להחלה, נא לשגר את 'flameshot gui' שוב. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. בחירת אזור באמצעות העכבר, או הקשה על 'Esc' כדי לצאת. הקשה על 'Enter' כדי ללכוד את המסך. לחצה באמצעות לחצן העכבר הימני כדי להציג את דוגם הצבע. נא להשתמש בגלגל העכבר כדי לשנות את עובי כלי הציור. הקשה על 'Space' לפתיחת חלונית הצד. Tool Settings הגדרות כלי CircleCountTool Circle Counter מונה עיגולים Add an autoincrementing counter bubble הוספת בועת־מניה אוטומטית CircleTool Circle עיגול Set the Circle as the paint tool הגדרת ה'עיגול' ככלי צבע ColorDialog Select Color נא לבחור צבע Saturation רִוּוּי Hue גוון Hex הקס Blue כחול Value ערך Green ירוק Alpha אלפא Red אדום ColorGrabWidget Accept color קבלת צבע Enter or Left Click מקש אנטר או הקשת לחצן עכבר שמאלי Precisely select color בחירת צבע במדויק Hold Left Click החזקת והקשת לחצן עכבר שמאלי Toggle magnifier מחלף זכוכית מגדלת Space or Right Click מקש רווח או הקשת לחצן עכבר ימני Cancel ביטול Esc יציאה (Esc) ColorPickerEditor Select Preset: בחירת קיבוע־מראש: Select preset using the spinbox בחירת קיבוע־מראש בעמצאות תיבת־הגלילה Edit Preset: עריכת קיבוע־מראש: Enter color to update preset נא להזין צבע כדי לעדכן קיבוע־מראש Update עדכון Press button to update the selected preset הקשה על הלחצן כדי לעדכן קיבוע־מראש שנבחר Delete מחיקה Press button to delete the selected preset לחיצה על הלחצן למחיקת קיבוע־מראש שנבחר Add Preset: הוספת קיבוע־מראש: Enter color manually or select it using the color-wheel הזנת צבע באופן ידני, או בחירה תוך שימוש ב'גלגל־הצבעים' Add הוספה Press button to add preset לחיצה על הלחצן להוספת קיבוע־מראש Error שגיאה Unable to add preset. Maximum limit reached. לא ניתן להוסיף קיבוע־מראש. מגבלה מירבית הושגה. Unable to remove preset. Minimum limit reached. לא ניתן להסיר קיבוע־מראש. מגבלה מזערית הושגה. ConfigErrorDetails Configuration errors שגיאות תצורה ConfigHandler Unrecognized setting: '%1' הגדרה לא מזוהה: '%1' Unrecognized shortcut name: '%1'. שם קיצור דרך לא מזוהה: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 התנגשות קיצורי דרך: ל־'%1' ול־'%2' קיצור דרך זהה: %3 Bad value in '%1'. Expected: %2 ערך שגוי ב־'%1'. ערך צפוי: %2 You have successfully resolved the configuration error. שגיאת התצורה נפתרה בהצלחה. The configuration contains an error. Open configuration to resolve. התצורה מכילה שגיאה. לתיקון, נא להקיש על 'תצור'. Bad config key '%1' in ConfigHandler. Please report this as a bug. מפתח תצורה '%1' ב־ConfigHandler, שגוי. נא לדווח זאת כתקל. ConfigResolver Resolve configuration errors פתרון שגיאות תצורה <b>You must resolve all errors before continuing:</b> <b>נא לתקן את כל השגיאות כדי להמשיך:</b> Reset שיצוב Reset to the default value. שיצוב לערכי ברירת המחדל. Remove הסרה Remove this setting. הסרת הגדרה זו. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. קיצורי מקשים מסוימים כוללים התנגשויות. אלו לא ימנעו מפליימשוט לאתחל. נא לפתור התנגשויות באופן ידני בקובץ התצורה. Resolve all לפתור הכול Resolve all listed errors. פתורון כל השגיאות שברשימה. Details פרטים ConfigWindow Configuration תצור Interface מנשק Filename Editor עורך שם קובץ General כללי Shortcuts קיצורי־דרך Resolve לפתור <b>Configuration file has errors. Resolve them before continuing.</b> <b>קובץ התצורה מכיל שגיאות. נא לפתור אותם כדי להמשיך.</b> Controller New version %1 is available גרסה חדשה %1, זמינה You have the latest version הגרסה העדכנית ביותר כבר מותקנת Failed to get information about the latest version. קבלת מידע אודות הגרסה העדכנית ביותר, כשלה. Error שגיאה Unable to close active modal widgets לא ניתן לסגור ווידג'טים מודאליים &Open Launcher &פתיחת משגר &Configuration &תצור &About &על אודות Check for updates בדיקת זמינות עדכונים &Latest Uploads &העלאות אחרונות URL copied to clipboard. מען URL הועתק ללוח־הגזירים. &Information &Informació &Quit &יציאה &Take Screenshot &צילום־מסך CopyTool Copy העתקה Copy selection to clipboard העתקת בחירה ללוח־הגזירים Copy the selection into the clipboard העתקת הבחירה ללוח־הגזירים DBusUtils Unable to connect via DBus לא ניתן להתחבר דרך DBus ExitTool Exit יציאה Leave the capture screen עזיבת מסך הלכידה FileNameEditor Edit the name of your captures: עריכת שמות הלכידות: Edit: עריכה: Preview: תצוגה מקדימה: Save שמירה Saves the pattern שמירת הדפוס Restore שחזור Reset Reinicialitza Restores the saved pattern שחזור דפוס שמור Clear ניקוי Deletes the name מחיקת השם Flameshot Error Error Unable to close active modal widgets לא ניתן לסגור ווידג'טים מודאליים URL copied to clipboard. כתובת URL הועתקה ללוח־גזירים. FlameshotDaemon New version %1 is available גרסה חדשה %1, זמינה You have the latest version הגרסה העדכנית ביותר כבר מותקנת Failed to get information about the latest version. קבלת מידע אודות הגרסה העדכנית ביותר, כשלה. Unable to connect via DBus לא ניתן להתחבר דרך DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import ייבוא Error שגיאה Unable to read file. לא ניתן לקרוא קובץ. Unable to write file. לא ניתן לכתוב קובץ. Save File שמירת קובץ Confirm Reset אישור שיצוב Are you sure you want to reset the configuration? האם לשצב את התצורה? Show help message הצגת הודעת עזרה זו Show the help message at the beginning in the capture mode. הצגת הודעת העזרה באתחול, במצב לכידה. Show the side panel button הצגת לחצן חלונית־הצד Show the side panel toggle button in the capture mode. הצגת לחצן מיתוג לוחית־צד במצב לכידה. Show desktop notifications הצגת התראות שולחן־עבודה Show tray icon הצגת סמל מגש Show the systemtray icon הצגת סמל מגש־מערכת Confirmation required to delete screenshot from the latest uploads למחיקת צילום מסך מבין ההעלאות האחרונות, נדרש אישור Configuration File קובץ תצורה Export ייצוא Reset שיצוב Automatic check for updates בדיקת עדכונים אוטומטית Allow multiple flameshot GUI instances simultaneously אפשור ריבוי אדגמי flameshot GUI בה־בעת This allows you to take screenshots of flameshot itself for example. מאפשר צילומי מסך של flameshot עצמו, לדוגמה. Automatically close daemon when it is not needed סגירת שדון באופן אוטומטי כאשר אין בו עוד צורך Launch at startup שיגור באתחול Launch Flameshot שיגור Flameshot Show welcome message on launch הצגת הודעת ברכה בעת השיגור Use large predefined color palette שימוש בלוח צבעים גדול מוגדר מראש Copy URL after upload העתקת מען־URL לאחר ההעלאה Copy URL and close window after upload העתקת מען־URL וסגירת חלון לאחר ההעלאה Save image after copy שמירת תמונה לאחר העתקה Save image file after copying it שמירת קובץ תמונה לאחר העתקתו Show the help message at the beginning in the capture mode הצגת הודעת עזרה עם תחילת מצב לכידה Use last region for GUI mode להשתמש באזור האחרון למצב GUI Use the last region as the default selection for the next screenshot in GUI mode שימוש באזור האחרון כבחירת ברירת מחדל עבור צילום המסך הבא במצב GUI Show the side panel toggle button in the capture mode הצגת לחצן מחלף חלונית צד, במצב לכידה Enable desktop notifications אפשר הודעות שולחן־עבודה Show abort notifications הצגת התראות נטישה Enable abort notifications אפשור התראות נטישה Show icon in the system tray הצגת סמל במגש המערכת Use grim to capture screenshots שחמןש ב־grim ללכידות מרקע Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim היא תוכנה ל־wayland בלבד ללכידת מסכים המבוססת על פרוטוקול screencopy. באופן כללי, ניתן להפעיל אותה רק במנהלי חלונות מזעריים של wayland כמו sway, hyprland וכו'. Ask for confirmation to delete screenshot from the latest uploads בקשת אישור למחיקת צילום־מסך מההעלאות האחרונות Check for updates automatically בדיקת עדכונים אוטומטית This allows you to take screenshots of Flameshot itself for example לדוגמה, פעולה זו מאפשרת לצלם מסך של פליימשוט עצמה Launch Flameshot daemon when computer is booted שיגור שרת פליימשוט עם אתחול המחשב Show the welcome message box in the middle of the screen while taking a screenshot הצגת תיבת הודעת־הפתיחה במרכז המסך בזמן צילום־מסך Use a large predefined color palette שימוש בלוח־צבעים מוגדר מראש, גדול Copy on double click העתק בהקשה כפולה Enable Copy on Double Click אפשר העתקה בהקשה כפולה Copy URL and close window after uploading was successful העתקת מען־URL וסגירת חלון לאחר שהעלאה צלחה Automatically unload from memory when it is not needed פריקה אוטומטית מהזיכרון כאשר אין צורך בכך Automatically close daemon (background process) when it is not needed סגירת שדון באופן אוטומטי (תהליך רקע) כאשר אין בו צורך Launch in background at startup שיגור רקע העת אתחול Launch Flameshot daemon (background process) when computer is booted הפעלת שדון Flameshot (תהליך רקע) כאשר המחשב מאותחל Ask before quit capture לשאול לפני יציאה מלכידה Show the confirmation prompt before ESC quit הצגת הנחיית אישור לפני יציאת ESC Enable Copy to clipboard on Double Click אפשר העתקה ללוח־גזירים בהקשה כפולה Copy URL after uploading was successful העתקת מען־URL לאחר שהעלאה צלחה After copying the screenshot, save it to a file as well לאחר העתקת צילום־המסך, נא לשמור אותו גם לקובץ Save Path שמירת נתיב Change... שינוי... Use fixed path for screenshots to save שימוש בנתיב קבוע לשמירת צילומי־מסך Preferred save file extension: סיומת קובץ מועדפת בעת שמירה : Latest Uploads Max Size גודל מרבי של העלאות אחרונות Imgur Application Client ID מזהה לקוח יישומון Imgur Undo limit ביטול מגבלה Use JPG format for clipboard (PNG default) שימוש בתבנית JPG עבור לוח־הגזירים (ברירת המחדל היא PNG) Use lossy JPG format for clipboard (lossless PNG default) שימוש בתסדיר lossy JPG בלוח־הגזירים (ברירת המחדל היא PNG) Copy file path after save העתקת נתיב קובץ לאחר השמירה Copy the file path to clipboard after the file is saved העתקת הנתיב אל הקובץ, ללוח־גזירים, לאחר שהקובץ נשמר Anti-aliasing image when zoom the pinned image החלקת־עקומת תמונה בעת שינוי גודל מצג תמונה נעוצה After zooming the pinned image, should the image get smoothened or stay pixelated לאחר שינוי גודל מצג התמונה הנעוצה, האם התמונה תוחלק או תישאר מפוקסלת Upload image without confirmation העלאת תמונה ללא אישרור Choose a Folder נא לבחור תיקייה Unable to write to directory. לא ניתן לכתוב למחיצה. Show magnifier הצגת זכוכית מגדלת Enable a magnifier while selecting the screenshot area אפשור זכוכית מגדלת בעת בחירת אזור צילום־מסך Square shaped magnifier זכוכית מגדלת בצורת ריבוע Make the magnifier to be square-shaped הפיכת זכוכית המגדלת לצורת ריבוע Milliseconds before geometry display hides; 0 means do not hide מילי שניות לפני שהצגת הגאומטריה מוסתרת; 0 פירושו לא להסתיר Set geometry display timeout (ms) הגדרת פסק־זמן מצג גיאומטריה (ms) Selection Geometry Display בחירת מצג גאומטריה Display Location הצגת מיקום None ללא Top Left פינה שמאלית עליונה Top Right פינה ימנית עליונה Bottom Left פינה שמאלית תחתונה Bottom Right פינה ימנית תחתונה Center מרכז Quality range of 0-100; Higher number is better quality and larger file size טווח איכות של 0-100; מספר גבוה יותר מציין איכות טובה יותר וקובץ גדול יותר JPEG Quality איכות JPEG Reverse arrow חץ הפוך Draw the arrow head first ציור ראש ה החץ תחילה Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads עדכונים אחרונים Screenshots history is empty היסטוריית צילומי־מסך, ריקה Copy URL העתקת מען־URL URL copied to clipboard. מען־URL הועתק ללוח הגזירים. Open in browser פתיחה בדפדפן Confirm to delete אישור מחיקה Are you sure you want to delete a screenshot from the latest uploads and server? האם למחוק צילום־מסך מבין ההעלאות האחרונות והשרת? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation אישרור העלאה Do you want to upload this capture? האם לעדכן לכישה זו? Upload without confirmation העלאה ללא אישרור ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image העלאת תמונה Uploading Image תמונה מועלת Copy URL העתק מען־URL Open URL פתיחת מען־URL Delete image מחיקת תמונה Image to Clipboard. תמונה ללוח־גזירים. Save image שמירת תמונה Unable to open the URL. לא ניתן לפתוח מען־URL. URL copied to clipboard. מען URL הועתק ללוח־הגזירים. Screenshot copied to clipboard. צילום־מסך הועתק לוח־גזירים. Unable to save the screenshot to disk. לא ניתן לשמור צילום־מסך על הכונן. Screenshot saved. צילום־מסך נשמר. ImgUploaderTool Image Uploader מעלה התמונות Upload the selection העלאת הבחירה ImgurUploader Upload to Imgur העלאה ל־Imgur Uploading Image העלאת תמונה Copy URL העתקת מען־URL Open URL פתיחת מען־URL Delete image מחיקת תמונה Image to Clipboard. תמונה ללוח־גזירים. Unable to open the URL. לא ניתן לפתוח את מען ה־URL. URL copied to clipboard. מען־URL הועתק ללוח הגזירים. Screenshot copied to clipboard. צילום מסך הועתק ללוח. ImgurUploaderTool Image Uploader מעלה תמונות Upload the selection to Imgur העלאת הבחירה ל־Imgur InfoWindow About אודות Icon סמל License רישיון GPLv3+ GPLv3+ Version גרסה Flameshot v Flameshot v OS Info מידע מערכת הפעלה Copy Info העתקת מידע Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u> <b>רישיון</b></u> <u><b>Version</b></u> <u> <b>גרסה</b> </u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert שיכול Set Inverter as the paint tool הגדרת המשכל ככלי צבע LineTool Line קו Set the Line as the paint tool הגדרת 'קו' ככלי צבע MarkerTool Marker מדגש Set the Marker as the paint tool הגדרת 'מדגש' ככלי צבע MoveTool Move העברה Move the selection area העברת אזור הבחירה PencilTool Pencil עפרון Set the Pencil as the paint tool הגדרת 'עיפרון' ככלי צבע PinTool Pin Tool נעיצת כלי Pin image on the desktop נעיצת תמונה על שולחן־העבודה PinWidget Context menu Context menu Copy to clipboard העתקה ללוח־גזירים Save to file שמירה לקובץ Rotate Right סיבוב לימין Rotate Left סיבוב לשמאל Increase Opacity הגדלת אטימות Decrease Opacity הקטנת אטימות Close סגירה PixelateTool Pixelate פיקסול Set Pixelate as the paint tool. הגדרת 'פיקסול' ככלי צבע. Set Pixelate as the paint tool הגדרת 'פיקסול' ככלי צבע PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 רישום %1 כשל. שגיאה: %2 Failed to unregister %1. Error: %2 ביטול רישום %1 כשל. שגיאה: %2 QObject Capture saved to clipboard. לכידה נשמרה בלוח־הגזירים. Error while saving to clipboard שגיאה בעת שמירה בלוח־הגזירים Save screenshot שמירת צילום־מסך Path copied to clipboard as הנתיב הועתק ללוח־הגזירים כ־ Saving canceled שמירה בוטלה Save canceled שמירה בוטלה Capture is saved and copied to the clipboard as הלכידה נשמרת והועתקה ללוח־הגזירים כ־ Save Error שגיאת שמירה Capture saved as לכידה נשמרה כ־ Error trying to save as שגיאה בניסיון שמירה כ־ Unable to connect via DBus לא ניתן להתחבר דרך DBus Powerful yet simple to use screenshot software. תכנות צילומי־מסך, רבת עצמה, אך קלה לשימוש. See ראו Capture the entire desktop. לכידת שולחן־העבודה כולו. Open the capture launcher. פתיחת משגר הלכידה. Start a manual capture in GUI mode. אתחול לכידה ידנית במצב מנשק משתמש גרפי. Configure תצור Capture a single screen. לכידת מסך יחיד. Path where the capture will be saved הנתיב בו תשמר הלכידה Capture screenshot of all monitors at the same time. צילום מסך של כל הצגים בו זמנית. Capture a screenshot of the specified monitor. צילום מסך בצג שצויין. Existing directory or new file to save to שמירה במחיצה קימת או בקובץ חדש Save the capture to the clipboard שמירת הלכידה ללוח־הגזירים Pin the capture to the screen נעיצת הלכידה על־גבי המסך Upload screenshot העלאת צילום־מסך Delay time in milliseconds זמן השהיה באלפיות שניה Repeat screenshot with previously selected region חזרה על צילום־מסך עם האזור שנבחר לאחרונה Screenshot region to select אזור צילום־מסך לבחירה Set the filename pattern הגדרת דפוס שם קובץ Accept capture as soon as a selection is made קבלת לכידה מיד עם הבחירה Enable or disable the trayicon אפשור או השבתת סמל המגש Enable or disable run at startup אפשור או השבתת הפעלה באתחול Enable or disable the notifications לאפשר או להשבית את ההודעות Check the configuration for errors בדיקת תצורה לאיתור שגיאות Show the help message in the capture mode הצגת הודעת העזרה במצב לכידה Define the main UI color הגדרת צבעי מנשק המשתמש הראשי Define the contrast UI color הגדרת נגודיות צבעי מנשק המשתמש Print raw PNG capture הדפסת לכידת PNG גולמית Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified הדפסת גאומטרית הבחירה בתבנית WxH+X+Y. לא עושה דבר אם צוין 'גלמי' Define the screen to capture (starting from 0) הגדרת המסך ללכידה (התחלה מ־0) Invalid delay, it must be a number greater than 0 השהיה לא תקינה, המספר חייב להיות גדול מ־0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. אזור לא תקין, נא להשתמש ב־'WxH+X+Y', או 'הכול', או 'צג0/צג1/...'. Invalid path, must be an existing directory or a new file in an existing directory נתיב לא חוקי, חייב להיות 'מחיצה קיימת', או 'קובץ חדש', במחיצה קיימת Define the screen to capture הגדרת מסך ללכידה default: screen containing the cursor ברירת מחדל: מסך לרבות סמן־העכבר Screen number מספר צג Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' צבע לא תקין, דגל זה תומך בתבניות הבאות: - #RGB (כל R, G, ו־Bהוא תו HEX יחיד) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - שמות צבעים כמו 'blue' או 'red' יתכן שיידרש לחלץ את התו '#' מהמחרוזת'\#FFF' Invalid delay, it must be higher than 0 משך השהייה לא תקין, חייב להיות מספר גדול מ־0 Invalid screen number, it must be non negative מספר מסך לא תקין, לא יכול להיות מספק שלילי Invalid path, it must be a real path in the system נתיב לא תקין, חייב להיות נתיב מערכת אמיתי Invalid value, it must be defined as 'true' or 'false' ערך לא תקין, יש להגדיר כ־'true' או 'false' Error שגיאה Unable to write in לא ניתן לכתוב ב־ Capture saved to clipboard לכידה נשמרה ללוח־הגזירים URL copied to clipboard. מען־URL הועתק ללוח־הגזירים. Options אפשרויות Arguments משתנים arguments משתנים Subcommands פקודות משנה subcommands פקודות משנה Usage שימוש options אפשרויות Per default runs Flameshot in the background and adds a tray icon for configuration. כברירת מחדל Flameshot פועל ברקע ומוסיף סמל מגש לתצורה. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. שלום אני כאן! נא להקיש על הסמל במגש לצילום־מסך או הקשה על לחצן עכבר ימני להצגת אפשרויות נוספות. Requested screen exceeds screen count המסך המבוקש חורג ממספר המסכים Full screen screenshot pinned to screen צילום־מסך מלא, נעוץ למסך Toggle side panel בררת סרגל־צד Resize selection left 1px שינוי גודל הבחירה לשמאל פיקסל 1 Resize selection right 1px שינוי גודל הבחירה לימין פיקסל 1 Resize selection up 1px שינוי גודל הבחירה מעלה פיקסל 1 Resize selection down 1px שינוי גודל הבחירה מטה פיקסל 1 Select entire screen בחירת כל המסך Move selection left 1px העברת בחירה 1px לשמאל Move selection right 1px העברת בחירה 1px לימין Move selection up 1px העברת בחירה 1px מעלה Move selection down 1px העברת בחירה 1px מטה Commit text in text area קיבוע מלל באזור המלל Delete current tool מחיקת כלי נוכחי Quit capture יציאה מלכידה Screenshot history היסטורית צילומי־מסך Capture screen לכידת מסך Show color picker הצגת בורר הצבעים Change the tool's size שינוי גודל הכלי Change the tool's thickness שינוי עובי הכלי RectangleTool Rectangle ריבוע Set the Rectangle as the paint tool הגדרת 'מרובע' ככלי צבע RedoTool Redo החזרה Redo the next modification החזרת ההסגלה הבאה SaveTool Save שמירה Save screenshot to a file שמירת צילו־מסך לקובץ Save the capture שמירת הלכידה ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) לא ניתן לזהות סביבת שולחן עבודה (GNOME? KDE? להתנדנד? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! מתאם לכידת המסך האוניברסלי של Wayland דורש את Grim כרכיב לכידת המסך של Wayland. אם רכיב לכידת המסך חסר, נא להתקין אותו! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter אם ההגדרה useGrimAdapter לא מאופשרת, ייעשה שימוש בפרוטוקול dbus. יש לציין כי לא מומלץ להשתמש בפרוטוקול dbus תחת wayland. מומלץ לאפשר את ההגדרה useGrimAdapter ב־flameshot.ini כדי להפעיל את מתאם צילום המסך הכללי של wayland המבוסס על grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments רכיב צילום המסך של grim מיושם על סמך wlroots, ייתכן שלא ניתן להשתמש בו ב־GNOME או בסביבות שולחן עבודה דומות Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) לא ניתן לזהות סביבת שולחן עבודה (GNOME? KDE? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. רמז: נא לנסות להגדיר את משתנה הסביבה XDG_CURRENT_DESKTOP. Unable to capture screen לא ניתן ללכוד מסך SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection בחירת ריבוע Set Selection as the paint tool הגדרת 'בחירה' ככלי הצביע SetShortcutDialog Set Shortcut הגדרת קיצור־דרך Enter new shortcut to change נא להזין קיצור־דרך חדש לשינוי Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. הקשה על Esc לבטול או ⌘+Backspace כדי להשבית את קיצור המקלדת. Press Esc to cancel or Backspace to disable the keyboard shortcut. הקשה על Esc לבטול או על Backspace כדי להשבית את קיצור המקלדת. Flameshot must be restarted for changes to take effect. נא לאתחל את Flameshot כדי שהשינויים ייכנסו לתוקף. ShortcutsWidget Hot Keys מקשים חמים Available shortcuts in the screen capture mode. קיצורי־דרך זמינים במצב לכידת מסך. Description תיאור Key מקש Left Double-click הקשת־עכבר כפולה שמאלית Toggle side panel מחלף סרגל־צד Grab a color from the screen Resize selection left 1px שינוי גודל הבחירה לשמאל פיקסל 1 Resize selection right 1px שינוי גודל הבחירה לימין פיקסל 1 Resize selection up 1px שינוי גודל הבחירה מעלה פיקסל 1 Resize selection down 1px שינוי גודל הבחירה מטה פיקסל 1 Symmetrically decrease width by 2px להקטין באופן סימטרי רוחב ב־2 פיקסלים Symmetrically increase width by 2px להגדיל באופן סימטרי רוחב ב-2 פיקסלים Symmetrically increase height by 2px להגדיל באופן סימטרי גובה ב-2 פיקסלים Symmetrically decrease height by 2px להקטין באופן סימטרי גובה ב-2 פיקסלים Select entire screen בחירת כל המסך Move selection left 1px העברת בחירה 1px לשמאל Move selection right 1px העברת בחירה 1px לימין Move selection up 1px העברת בחירה 1px מעלה Move selection down 1px העברת בחירה 1px מטה Commit text in text area קיבוע מלל באזור מלל Delete selected drawn object מחיקת העצם המצויר שנבחר Cancel current selection ביטול בחירה נוכחית Delete current tool מחיקת כלי נוכחי Capture screen לכידת מסך Screenshot history היסטורית צילומי־מסך SidePanelWidget Active thickness: עובי פעיל: Active color: צבע פעיל: Press ESC to cancel הקשה על ESC ליציאה Active tool size: גודל כלי פעיל: Active Color: צבע פעיל: Grab Color תפיסת צבע Display grid הצגת רשת SizeDecreaseTool Decrease Tool Size הקטנת גודל כלי Decrease the size of the other tools הקטנת גודל הכלים האחרים SizeIncreaseTool Increase Tool Size הגדלת גודל כלי Increase the size of the other tools הגדלת גודל הכלי האחר SizeIndicatorTool Selection Size Indicator מחוון גודל־בחירה Show X and Y dimensions of the selection הצגת ממדי X ו־Y של האזור שנבחר Show the dimensions of the selection (X Y) הצגת ממדי הבחירה (X Y) StrftimeChooserWidget Century (00-99) מאה (00-99) Year (00-99) שנה (00-99) Year (2000) שנה (2000) Month Name (jan) שם חודש (ינו) Month Name (january) שם חודש (ינואר) Month (01-12) חודש (01-12) Week Day (1-7) יום בשבוע (1-7) Week (01-53) שבוע (01-53) Day Name (mon) שם יום (א') Day Name (monday) שם יום (ראשון) Day (01-31) יום (01-31) Day of Month (1-31) יום בחודש (1-31) Day (001-366) יום (001-366) Hour (00-23) שעה (00-23) Hour (01-12) שעה (01-12) Minute (00-59) דקה (00-59) Second (00-59) שניה (00-59) Full Date (%m/%d/%y) תאריך מלא (%m/%d/%y) Full Date (%Y-%m-%d) תאריך מלא (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) זמן (%H-%M-%S) Time (%H-%M) זמן (%H-%M) SystemNotification Flameshot Info מידע Flameshot TextConfig StrikeOut קו־חוצה Underline קו תחתון Bold מודגש Italic נטוי Left Align יישור לשמאל Center Align יישור למרכז Right Align יישור לימין TextTool Text מלל Add text to your capture הוספת מלל ללכידה TrayIcon &Take Screenshot &צילום־מסך &Open Launcher &פתיחת משגר &Configuration &תצור &About &על אודות Check for updates בדיקת זמינות עדכונים New version %1 is available גרסה חדשה %1, זמינה &Quit &יציאה &Latest Uploads &העלאות אחרונות &Open Save Path &פתיחת 'שמירת נתיב' UIcolorEditor UI Color Editor עורך צבעי מנשק משתמש Change the color moving the selectors and see the changes in the preview buttons. שנוי הצבע שמזיז את הבוררים וצפיה בשינויים בלחצני התצוגה המקדימה. Select a Button to modify it נא לבחור לחצן להסגלה Main Color צבע ראשי Click on this button to set the edition mode of the main color. נא להקיש על לחצן זה להגדרת מצב עריכת צבע הראשי. Contrast Color צבע ניגודיות Click on this button to set the edition mode of the contrast color. נא להקיש על לחצן זה להגדרת מצב עריכת צבע ניגודיות. UndoTool Undo הסגה Undo the last modification הסגת ההסגלה האחרונה UpdateNotificationWidget New Flameshot version %1 is available זמינה גרסת Flamesho %1 חדשה Ignore להתעלם Later מאוחר יותר Update עדכון UploadHistory Upload History העלאת היסטוריה Screenshots history is empty היסטוריית צילומי־מסך, ריקה UploadLineItem Form טופס TextLabel תווית מלל Copy URL העתקת מען־URL Open In Browser פתיחה בדפדפן Confirm to delete אישור מחיקה Are you sure you want to delete a screenshot from the latest uploads and server? האם למחוק צילום־מסך מבין ההעלאות האחרונות והשרת? UtilityPanel Close סגירה <Empty> <ריק> VisualsEditor Opacity of area outside selection: אטימות השטח מחוץ לבחירה: UI Color Editor עורך צבעי מנשק משתמש Colorpicker Editor עורך בוחר־צבעים Button Selection מקטע תחתון Select All בחירת הכל color_widgets::ColorDialog Pick ליקוט color_widgets::ColorPalette Unnamed ללא שם color_widgets::ColorPaletteModel Unnamed ללא שם %1 (%2 colors) %1 (%2 צבעים) color_widgets::ColorPaletteWidget Open a new palette from file פתיחת לוח צבעים חדש מקובץ Create a new palette יצירת לוח־צבעים צבעים חדש Duplicate the current palette שכפול לוח־הצבעים הנוכחי Delete the current palette מחיקת לוח־הצבעים הנוכחי Revert changes to the current palette השבת שינויים בלוח הצבעים הנוכחי לקדמותם Save changes to the current palette שמירת שינויים ללוח־הצבעים הנוכחי Add a color to the palette הוספת צבע לוח־הצבעים Remove the selected color from the palette הסרת הצבע שנבחר מלוח־הצבעים New Palette לוח־צבעים חדש Name שם GIMP Palettes (*.gpl) לוחות־צבעים GIMP (*.gpl) Palette Image (%1) תמונת לוח־צבעים (%1) All Files (*) כול הקבצים (*) Open Palette פתיחת לוח־צבעים Failed to load the palette file %1 טעינת קובץ לוח־הצבעים כשלה %1 color_widgets::GradientEditor Add Color הוספת צבע Remove Color הסרת צבע Edit Color... עריכת צבע... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 צבעים) color_widgets::Swatch Clear Color נקוי צבע %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_hu.ts ================================================ AbstractWidgetList Add New Új hozzáadása Move Up Mozogj feljebb Move Down Mozgás lefelé Remove Eltávolítani AcceptTool Accept Elfogadom Accept the capture Fogadja el az elfogást AppLauncher App Launcher Alkalmazás indító Choose an app to open the capture Válassz egy alkalmazást hogy elinduljon a felvétel AppLauncherWidget Open With Megnyitás ezzel Launch in terminal Futtatás terminálban Keep open after selection Kiválasztás után maradjon nyitva Error Hiba Unable to launch in terminal. Nem lehet megnyitni a terminálban. Unable to write in Nem lehet írni ArrowTool Arrow Nyíl Set the Arrow as the paint tool Beállítja a nyíl eszközt festő eszközként BlurTool Blur Homályosítás Set Blur as the paint tool Beállítja a Homályosítás eszközt festő eszközként CaptureLauncher <b>Capture Mode</b> <b>Rögzítési mód</b> Rectangular Region Téglalapos kijelölő Full Screen (All Monitors) Teljes Képernyő (Minden Kijelzőn) No Delay Késleltetés Nélkül second másodperc seconds másodperc Take new screenshot Új képernyőmentés Area: Terület: Delay: Késleltetés: Full Screen (Current Display) Teljes képernyő (Jelenlegi kijelzőn) Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode WxH+x+y WxH+x+y CaptureWidget Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Válassz egy területet egérrel, vagy nyomj Esc-et a kilépéshez. Nyomj entert a felvételhez. Kattints job egérgombal a szín választásához. Használd a görgőt az eszköz vastagságának állítására. Unable to capture screen Nem lehet felvételt készíteni Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Jelölj ki egy területet az egérrel, vagy lépj ki az Esc billentyűvel. Nyomj Entert a képernyő rögzítéséhez. Nyomd meg a Jobb Egérgombot a szín választó megjelenítéséhez. Használd az egérgörgőt az eszköz vonalvastagságának változtatásáért. Nyomd meg a Space billentyűt, hogy megnyisd az oldalsó panelt. Tool Settings Eszközbeállítások Mouse Mouse Select screenshot area Képernyőkép terület kiválasztása Mouse Wheel Görgő Change tool size Szerszámméret váltás Right Click jobb egérgomb Show color picker Színválasztó mutatása Open side panel Nyitott oldalfal Esc Esc Exit Bezárás Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot elvesztette a fókuszt. A billentyűparancsok nem működnek, amíg nem kattintasz valahol. Configuration error resolved. Launch `flameshot gui` again to apply it. Konfigurációs hiba megoldva. Indítsa el újra a `flameshot gui-t` az alkalmazáshoz. Quit Capture Kilépés a rögzítésből Are you sure you want to quit capture? Biztosan meg akarja szakítani a rögzítést? Do not show this again Ne mutasd újra CircleCountTool Circle Counter Körös Számláló Eszköz Add an autoincrementing counter bubble Hozzáad egy buborékban lévő folyamatosan növekvő számot CircleTool Circle Kör Set the Circle as the paint tool Beálítja a Kör eszközt festő eszközként ColorDialog Select Color Válasszon színt Saturation Telítettség Hue Árnyalat Hex Hex Blue Blue Value Érték Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Szín elfogadása Precisely select color Precisely select color Toggle magnifier Toggle magnifier Cancel Cancel Enter or Left Click Enter or Left Click Hold Left Click Hold Left Click Space or Right Click Space or Right Click Esc Esc ColorPickerEditor Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error Hiba Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Frissítés Press button to update the selected preset Press button to update the selected preset ConfigErrorDetails Configuration errors Configuration errors ConfigHandler You have successfully resolved the configuration error. You have successfully resolved the configuration error. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset Visszaállítás Reset to the default value. Reset to the default value. Remove Eltávolítani Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Beállítások Interface Kezelőfelület Filename Editor Fájlnév szerkesztő General Általános Shortcuts Gyorsbillentyűk <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Resolve Resolve Controller &Configuration &Konfiguráció &Information &Információ &Quit &Bezárás &Take Screenshot &Képernyő Mentés Készítése &Open Launcher &Alkalmazásindító Megnyitása &About &Rólunk &Latest Uploads &Eddigi Feltöltések New version %1 is available Elérhető az új %1 verzió You have the latest version A legfrisebb verzió van feltelepítve Check for updates Frissítések keresése Failed to get information about the latest version. Nem sikerült információt szerezni a legújabb verzióról. Error Hiba Unable to close active modal widgets Nem sikerült bezárni az aktív widgeteket URL copied to clipboard. URL másolva a vágólapra. CopyTool Copy Másolás Copies the selecion into the clipboard Másolja a kiválasztott területet Copy the selection into the clipboard Vágolapra másolja a kijelölt területet Copy selection to clipboard Copy selection to clipboard DBusUtils Unable to connect via DBus Nem lehet csatlakozni DBus-al ExitTool Exit Bezárás Leave the capture screen Bezárja a felvevőt FileNameEditor Edit the name of your captures: Felvételek neveinek szerkesztése: Edit: Szerkesztés: Preview: Előnézet: Save Mentés Saves the pattern Minta mentése Reset Visszaállítás Restores the saved pattern Visszaállítja a mentett mintát Clear Törlés Deletes the name Törli a nevet Restore Restore FileNameHandler screenshot Képernyőmentés Flameshot Error Hiba Unable to close active modal widgets Nem sikerült bezárni az aktív widgeteket URL copied to clipboard. URL másolva a vágólapra. FlameshotDBusAdapter Unable to capture screen Nem lehet képernyőképet készíteni FlameshotDaemon Unable to connect via DBus Unable to connect via DBus New version %1 is available Elérhető az új %1 verzió You have the latest version A legfrisebb verzió van feltelepítve Failed to get information about the latest version. Nem sikerült információt szerezni a legújabb verzióról. GeneneralConf Show help message Mutassa a segítséget Show the help message at the beginning in the capture mode. Mutassa a segítséget a felvevő mód kezdetekor. Show desktop notifications Mutassa az asztali üzeneteket Show tray icon Tray ikon mutatása Show the systemtray icon Systemtray ikon mutatása Import Importálás Error Hiba Unable to read file. Nem lehet olvasni a fájlt. Unable to write file. Nem lehet írni a fájlt. Save File Fájl mentése Confirm Reset Visszaállítás elfogadása Are you sure you want to reset the configuration? Biztos vagy benne hogy viszaállítod a beállításokat? Configuration File Konfigurációs fájl Export Export Reset Visszaállítás Launch at startup Indítás rendszerinduláskor Launch Flameshot Flameshot indítása GeneralConf Import Importálás Error Hiba Unable to read file. Nem lehet olvasni a fájlt. Unable to write file. Nem lehet írni a fájlt. Save File Fájl mentése Confirm Reset Visszaállítás elfogadása Are you sure you want to reset the configuration? Biztos vagy benne hogy viszaállítod a beállításokat? Show help message Súgó üzenet mutatása Show the help message at the beginning in the capture mode. Súgó üzenet mutatása rögzítő mód kezdetekor. Show the side panel button Oldalsó panel nyitó gomb mutatása Show the side panel toggle button in the capture mode. Oldalsó panel nyitó gomb megjelenítése rögzítő módban. Show desktop notifications Asztali értesítések megjelenítése Show tray icon Ikon megjelenítése a tálcán Show the systemtray icon Ikon megjelenítése a tálcán Confirmation required to delete screenshot from the latest uploads Legutóbb feltöltött képek közül törléskor kérjen megerősítést Configuration File Konfigurációs fájl Export Exportálás Reset Visszaállítás Automatic check for updates Frissítések automatikus keresése Launch at startup Indítás rendszerinduláskor Launch Flameshot Flameshot indítása Show welcome message on launch Üdvözlő üzenet mutatása indításkor Copy URL after upload URL vágolapra másolása feltöltés után Copy URL and close window after upload URL vágolapra másolása és ablak bezárása feltöltés után Save image after copy Másolás után kép mentése Save image file after copying it Fénykép elmentése másolás után Save Path Mentés helye Change... Változtatás... Use fixed path for screenshots to save Fix elérési útvonal használata a képernyőmentésekhez Copy file path after save Mentés után elérési útvonal másolása Choose a Folder Válassz egy Mappát Unable to write to directory. Nem lehet menteni ebbe a mappába. Use JPG format for clipboard (PNG default) JPG formátum használata vágolapra másoláskor (PNG az alapértelmezett) Latest Uploads Max Size Latest Uploads Max Size Undo limit Undo limit Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Use large predefined color palette Use large predefined color palette Preferred save file extension: Preferred save file extension: Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show icon in the system tray Show icon in the system tray Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Imgur Application Client ID Imgur Application Client ID Show abort notifications Megszakítási értesítések megjelenítése Enable abort notifications Megszakítási értesítések engedélyezése Use grim to capture screenshots A grim segítségével készíthet képernyőképeket Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. A Grim egy Wayland segédprogram, amely a screencopy protokollon alapuló képernyőképek rögzítésére szolgál. Általában csak minimális Wayland ablakkezelőkön, például sway, hyprland stb. engedélyezhető. Automatically unload from memory when it is not needed Ha nincs rá szükség, automatikusan törölje a memóriából Automatically close daemon (background process) when it is not needed A daemon (háttérfolyamat) automatikus bezárása, ha nincs rá szükség Launch in background at startup Indítás a háttérben a rendszer indításakor Launch Flameshot daemon (background process) when computer is booted A Flameshot daemon (háttérfolyamat) elindítása a számítógép indításakor Ask before quit capture Kérdezzen, mielőtt kilépne a rögzítésből Show the confirmation prompt before ESC quit Az ESC kilépés előtt mutassa meg a megerősítést kérő ablakot Enable Copy to clipboard on Double Click Kattintson duplán a Másolás a vágólapra opcióra Copy URL after uploading was successful A feltöltés sikeres befejezése után másolja az URL-t Use lossy JPG format for clipboard (lossless PNG default) Használjon veszteséges JPG formátumot a vágólaphoz (alapértelmezés szerint veszteségmentes PNG) Milliseconds before geometry display hides; 0 means do not hide A geometria megjelenítésének elrejtése előtti milliszekundumok száma; 0 azt jelenti, hogy ne rejtse el Set geometry display timeout (ms) A geometria megjelenítésének időkorlátja (ms) Selection Geometry Display Kiválasztási geometria megjelenítése Display Location Kijelző helye None Semmelyik Top Left Bal felső sarok Top Right Jobb felső sarok Bottom Left Bal alsó sarok Bottom Right Jobb alsó sarok Center Középpont Quality range of 0-100; Higher number is better quality and larger file size Minőségi tartomány: 0–100; Minél magasabb a szám, annál jobb a minőség és annál nagyobb a fájlmére JPEG Quality JPEG minőség Reverse arrow Fordított nyíl Draw the arrow head first Először rajzolja meg a nyílat Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. Rajzolja meg a pixelizációs hatást bizonytalan, de esztétikusabb módon. HistoryWidget Latest Uploads Korábbi Feltöltések Screenshots history is empty Nincs korábbi képernyőmentésed Copy URL URL másolása URL copied to clipboard. URL másolva a vágólapra. Open in browser Megnyitás böngészőben Confirm to delete Törlés megerősítése Are you sure you want to delete a screenshot from the latest uploads and server? Biztosan törölni szeretnéd a képernyőmentést a korábbi feltöltések közül és a szerverről is? ImgS3Uploader Uploading Image Kép feltöltése URL copied to clipboard. URL másolva a vágólapra. Error Hiba ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image Kép feltöltése Unable to open the URL. Nem lehet az URL-t megnyitni. URL copied to clipboard. URL másolva a vágólapra. Screenshot copied to clipboard. Képernyőmentés másolva a vágólapra. Copy URL URL másolása Open URL URL megnyitása Image to Clipboard. Kép a vágolapra. Delete image Kép törlése ImgUploaderBase Upload image Upload image Uploading Image Kép feltöltése Copy URL URL másolása Open URL URL megnyitása Delete image Kép törlése Image to Clipboard. Image to Clipboard. Unable to open the URL. Unable to open the URL. URL copied to clipboard. URL másolva a vágólapra. Screenshot copied to clipboard. Képernyőmentés másolva a vágólapra. Save image Save image Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader Kép Feltöltő Upload the selection Upload the selection ImgurUploader Upload to Imgur Feltöltés Imgur -ra Uploading Image Kép feltöltése Copy URL URL másolása Open URL URL megnyitása Image to Clipboard. Kép másolása a Vágolapra. Unable to open the URL. Nem lehet megnyitni az URL-t. URL copied to clipboard. URL másolva a vágólapra. Screenshot copied to clipboard. Képernyőmentés másolva a vágólapra. Delete image Kép törlése ImgurUploaderTool Image Uploader Kép Feltöltő Upload the selection to Imgur Feltölti a kiválasztott képet az Imgur -ra InfoWindow About Rólunk Right Click jobb egérgomb Mouse Wheel Görgő Move selection 1px Kijelölés mozgatása 1px Resize selection 1px Kijelölés méretezése 1 px Quit capture Felvétel bezárása Copy to clipboard Másolás vágólapra Save selection as a file Kijelölés mentése fájlba Undo the last modification Utolsó módosítás visszavonása Show color picker Színválasztó mutatása Change the tool's thickness Vastagság állítása Key Kulcs Description Leírás <u><b>License</b></u> <u><b>Licensz</b></u> <u><b>Version</b></u> <u><b>Verzió</b></u> <u><b>Shortcuts</b></u> <u><b>Gyorsbillentyűk</b></u> Available shortcuts in the screen capture mode. Elérhető gyorsbillentyűk a képernyőfelvétel módban. Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line Vonal Set the Line as the paint tool Vonal festőeszköz kiválasztása MarkerTool Marker Kijelölő Set the Marker as the paint tool Kijelőlő festőeszköz kiválaszása MoveTool Move Mozgatás eszköz Move the selection area Mozgatja a kiválasztott területet PencilTool Pencil Ceruza Set the Pencil as the paint tool Ceruza festőeszköz kiválaszása PinTool Pin Tool Gombostű Eszköz Pin image on the desktop Előtérben tartja a képet PinWidget Context menu Context menu Copy to clipboard Másolás vágólapra Save to file Save to file Rotate Right Jobbra forgatás Rotate Left Balra forgatás Increase Opacity Átlátszóság növelése Decrease Opacity Átlátszóság csökkentése Close Bezárás PixelateTool Pixelate Homályosítás Set Pixelate as the paint tool Homályosító festőeszköz kiválasztása Set Pixelate as the paint tool. PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Nem sikerült %1 rögzítése. %2 Hiba Failed to unregister %1. Error: %2 Sikertelen rögzítés törlés %1 -nél. %2 Hiba QObject Save Error Mentési hiba Capture saved as It is hard to esxpress such stence in hungary eg. Capture saved as JPG in hungary : A felvétel JPG -ben mentve lett. (Better solution using expressions in string like: Capture saved as %s ) Felvétel mentve itt: Error trying to save as Hiba a mentésnél Unable to connect via DBus Nem lehet D-Bus -on keresztül csatlakozni Error Hiba Unable to write in Nem írni Capture saved to clipboard Felvétel mentve a vágólapra URL copied to clipboard. URL másolva a vágólapra. Options Opciók Arguments Feltételek arguments feltételek Usage Használat options opciók Powerful yet simple to use screenshot software. Multifunkcionális, könnyen használható képernyőmentő szotver. See Megnézés Capture the entire desktop. Teljes kijelző rögzítése. Open the capture launcher. Rögzítésindító megnyitása. Start a manual capture in GUI mode. Manuális rögzítés indítása GUI módban. Configure Konfiguráció Capture a single screen. Egy kijelző rögzítése. Path where the capture will be saved Rögzítés mentési helye Save the capture to the clipboard Rögzítés másolása a vágólapra Delay time in milliseconds Késleltetési idő milliszekundumban Set the filename pattern Fájlnév minta megadása Enable or disable the trayicon Tálca ikon be- és kikapcsolása Enable or disable run at startup Indítás rendszerinduláskor be- és kikapcsolása Show the help message in the capture mode Súgó szöveg mutatása rögzítő módban Define the main UI color Kezelőfelület fő színének beállítása Define the contrast UI color Kezelőfelület kiemelő színének beállítása Print raw PNG capture Rögzítés nyomtatása PNG -ből Define the screen to capture Rögzítési képernyő megadása default: screen containing the cursor alapértelmezett: a kijelző amin a kurzor is elhelyezkedik Screen number Kijelző száma Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Érvénytelen szín, ez az opció a következő formátumokat támogatja: - #RGB (egyjegyű hexadecimális értékek) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Elnevezett színek, mint 'blue' vagy 'red' Lehet, hogy meg kepp adnod egy '\' karaktert a '#' karakter előtt például: '\#FFF' Invalid delay, it must be higher than 0 Érvénytelen késleltetés, 0-nál nagyobb értéknel kell lennie Invalid screen number, it must be non negative Érvénytelen kijelző szám, nem lehet negatív Invalid path, it must be a real path in the system Érvénytelen elérési útvonal, nincs ilyen elérési útvonal ezen az eszközön Invalid value, it must be defined as 'true' or 'false' Érvénytelen érték, lehetséges értékek a 'true' és a 'false' Capture saved to clipboard. Rögzítés másolva a vágólapra. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Heló, Itt vagyok! Kattints a tálca ikonra, hogy képernyőmentést készíts vagy kattints jobb egérgombbal a további lehetőségekért. Toggle side panel Oldalsó panel ki- és bekapcsolása Resize selection left 1px Kijelölés átméretezése balra 1px-el Resize selection right 1px Kijelölés átméretezése jobbra 1px-el Resize selection up 1px Kijelölés átméretezése fel 1px-el Resize selection down 1px Kijelölés átméretezése le 1px-el Move selection left 1px Kijelölés mozgatása balra 1px-el Move selection right 1px Kijelölés mozgatása jobbra 1px-el Move selection up 1px Kijelölés mozgatása fel 1px-el Move selection down 1px Kijelölés mozgatása le 1px-el Quit capture Felvétel bezárása Screenshot history Képernyőmentési előzmények Capture screen Képernyő rögzítése Show color picker Színválasztó mutatása Change the tool's thickness Eszköz vonalvastagságának állítása Save screenshot Képernyőkép mentése Capture is saved and copied to the clipboard as A rögzítés mentve és vágolara másolva a következőként Per default runs Flameshot in the background and adds a tray icon for configuration. A Flameshot alapértelmezés szerint fut a háttérben és ikont helyez el a tálcán a beállítások elérése érdekében. Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified A kijelölés geometriáját írja ki Sz M X Y (Szélesség Magasság X pozíció Y pozíció) formátumban. Nem csinál semmit, hogyha a nyers opció aktív Select entire screen Teljes kijelző kijelölése Commit text in text area Szöveg megadása a szöveg mezőben Error while saving to clipboard Hiba a vágolapra másolás közben Delete current tool Delete current tool Saving canceled Saving canceled Save canceled Save canceled Change the tool's size Change the tool's size Full screen screenshot pinned to screen Full screen screenshot pinned to screen Existing directory or new file to save to Existing directory or new file to save to Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Screenshot region to select Screenshot region to select Accept capture as soon as a selection is made Accept capture as soon as a selection is made Check the configuration for errors Check the configuration for errors Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Path copied to clipboard as Path copied to clipboard as Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Requested screen exceeds screen count Requested screen exceeds screen count Repeat screenshot with previously selected region Repeat screenshot with previously selected region Subcommands subcommands Capture screenshot of all monitors at the same time. Az összes monitor képernyőképeinek egyidejű rögzítése. Capture a screenshot of the specified monitor. Készítsen képernyőképet a megadott monitorról. Enable or disable the notifications Az értesítések engedélyezése vagy letiltása RectangleTool Rectangle Téglalap Set the Rectangle as the paint tool Téglalap festőeszköz kiválaszása RedoTool Redo Újra Redo the next modification Következő módosítás újra alkalmazása SaveTool Save Mentés Save the capture Menti a felvételt Save screenshot to a file Save screenshot to a file ScreenGrabber Unable to capture screen Nem sikerült rögzíteni a kijelzőt Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Az általános wayland képernyőfelvétel-adapter Grim-et igényel, mint a wayland képernyőfelvétel-komponensét. Ha a képernyőfelvétel-komponens hiányzik, kérjük, telepítse! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments A grim képernyőkép-összetevő wlroots alapján készült, ezért nem használható GNOME vagy hasonló asztali környezetekben Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Nem sikerült felismerni az asztali környezetet (GNOME? KDE? Qile? Sway? ...) SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... Írjon ide valamit... &Send &Küldés Error sending message Hiba az üzenet küldése közben The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Üres téglalap Set Selection as the paint tool Üres téglalap festőeszköz kiválaszása SetShortcutDialog Set Shortcut Gyorsbillentyű beállítása Enter new shortcut to change Adj meg egy új gyorsbillentyűt a változtatáshoz Press Esc to cancel or Backspace to disable the keyboard shortcut. Nyomd meg az Esc billentyűt a kilépéshet vagy a Backspace-t a gyorsbillentyűk kikapcsolásához. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Gyorsbillentyűk Available shortcuts in the screen capture mode. Képernyőfelvétel módban elérhető gyorsbillentyűk. Description Leírás Key Billentyű kombináció Left Double-click Left Double-click Toggle side panel Oldalsó panel ki- és bekapcsolása Grab a color from the screen Válasszon ki egy színt a képernyőről Resize selection left 1px Kijelölés átméretezése balra 1px-el Resize selection right 1px Kijelölés átméretezése jobbra 1px-el Resize selection up 1px Kijelölés átméretezése fel 1px-el Resize selection down 1px Kijelölés átméretezése le 1px-el Select entire screen Teljes kijelző kijelölése Move selection left 1px Kijelölés mozgatása balra 1px-el Move selection right 1px Kijelölés mozgatása jobbra 1px-el Move selection up 1px Kijelölés mozgatása fel 1px-el Move selection down 1px Kijelölés mozgatása le 1px-el Commit text in text area Szöveg megadása a szöveg mezőben Delete current tool Delete current tool Capture screen Képernyő rögzítése Screenshot history Képernyőmentési előzmények Symmetrically decrease width by 2px Szimmetrikusan csökkentse a szélességet 2 képponttal Symmetrically increase width by 2px Szimmetrikusan növelje a szélességet 2 képponttal Symmetrically increase height by 2px Szimmetrikusan növelje a magasságot 2 képponttal Symmetrically decrease height by 2px Szimmetrikusan csökkentse a magasságot 2 képponttal Delete selected drawn object Kiválasztott rajzolt objektum törlése Cancel current selection Jelenlegi kijelölés törlése SidePanelWidget Active thickness: Aktív vastagság: Active color: Aktív szín: Press ESC to cancel Nyomd meg az ESC-et a kilépéshez Grab Color Szín választása Active tool size: Active tool size: Active Color: Active Color: Display grid Rács megjelenítése SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Kiválaszás Méretének Jelzése Show the dimensions of the selection (X Y) Mutatja a kijelölés pozícióját (X Y) Show X and Y dimensions of the selection Show X and Y dimensions of the selection StrftimeChooserWidget Century (00-99) Század (00-99) Year (00-99) Év (00-99) Year (2000) Év (2000) Month Name (jan) Hónapnév (jan) Month Name (january) Hónapnév (január) Month (01-12) Hónap (01-12) Week Day (1-7) Hét napja (1-7) Week (01-53) Hét (01-53) Day Name (mon) Nap neve (Csüt) Day Name (monday) Nap neve (Csütörtök) Day (01-31) Nap (01-31) Day of Month (1-31) Nap a hónapban (1-31) Day (001-366) Nap (001-366) Full Date (%d-%m-%Y) Teljes dátum (%d-%m-%Y) Time (%H:%M:%S) Idő (%H:%M:%S) Time (%H:%M) Idő (%H:%M) Hour (00-23) Óra (00-23) Hour (01-12) Óra (01-12) Minute (00-59) Perc (00-59) Second (00-59) Másodperc (00-59) Full Date (%m/%d/%y) Teljes dátum (%m/%d/%y) Full Date (%Y-%m-%d) Teljes dátum (%Y-%m-%d) Time (%H-%M-%S) Idő (%H-%M-%S) Time (%H-%M) Idő (%H-%M) SystemNotification Flameshot Info A Flameshot-ról TextConfig StrikeOut Áthúzott Underline Aláhúzott Bold Félkövér Italic Dőlt Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Szöveg Add text to your capture Adj szöveget a rögzítéshez TrayIcon &Take Screenshot &Képernyő Mentés Készítése &Open Launcher &Alkalmazásindító Megnyitása &Configuration &Konfiguráció &About &Rólunk Check for updates Frissítések keresése New version %1 is available Elérhető az új %1 verzió &Quit &Bezárás &Latest Uploads &Eddigi Feltöltések &Open Save Path &Nyitás Mentési útvonal UIcolorEditor UI Color Editor Kezelőfelület Színeinek Szerkesztése Change the color moving the selectors and see the changes in the preview buttons. Válassz színt az egér mozgatásával és nézd ahogy változnak az előnézeti gombok. Select a Button to modify it Válassz gombot a módosításához Main Color Fő Szín Click on this button to set the edition mode of the main color. Kattints a gombra hogy beállítsd a szerkesztő módját a fő színnek. Contrast Color Kiemelő Szín Click on this button to set the edition mode of the contrast color. Kattints erre a gombra hogy beállítsd a szerkesztő módját a kiemelő színnek. UndoTool Undo Vissza Undo the last modification Visszavonja az utolsó módosítást UpdateNotificationWidget New Flameshot version %1 is available Elérhető az új %1 Flameshot verzió Ignore Mellőzés Later Később Update Frissítés UploadHistory Upload History Upload History Screenshots history is empty Nincs korábbi képernyőmentésed UploadLineItem Form Form TextLabel TextLabel Copy URL URL másolása Open In Browser Open In Browser Confirm to delete Törlés megerősítése Are you sure you want to delete a screenshot from the latest uploads and server? Biztosan törölni szeretnéd a képernyőmentést a korábbi feltöltések közül és a szerverről is? UtilityPanel Close Bezárás <Empty> <Empty> VisualsEditor Opacity of area outside selection: A kijelölésen kívüli terület átlátszósága: Button Selection Gomb választás Select All Összes kiválasztása UI Color Editor Kezelőfelület Színeinek Szerkesztése Colorpicker Editor Colorpicker Editor color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_id.ts ================================================ AbstractWidgetList Add New Tambah Baru Move Up Pindah Ke Atas Move Down Pindah Ke Bawah Remove Hapus AcceptTool Accept Terima Accept the capture Terima cuplikan AppLauncher App Launcher Peluncur Aplikasi Choose an app to open the capture Pilih aplikasi untuk membuka cuplikan layar AppLauncherWidget Open With Buka Dengan Launch in terminal Luncurkan di terminal Keep open after selection Tetap buka setelah memilih Error Galat Unable to launch in terminal. Tidak dapat meluncurkan pada terminal. Unable to write in Tidak dapat menulis ArrowTool Arrow Panah Set the Arrow as the paint tool Atur Panah sebagai paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode Cuplikan</b> Rectangular Region Daerah Persegi Panjang Full Screen (Current Display) Layar Penuh (Tampilan saat ini) Full Screen (All Monitors) Layar Penuh (Semua Monitor) No Delay Tanpa Jeda second detik seconds detik Take new screenshot Ambil tangkapan layar baru Area: Area: Capture Launcher Peluncur Penangkap TextLabel LabelTeks Capture Mode Mode Penangkapan Delay: Jeda: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Tidak dapat menangkap layar Mouse Mouse Select screenshot area Pilih area tangkapan layar Mouse Wheel Roda Mouse Change tool size Ubah ukuran alat Right Click Klik Kanan Show color picker Tampilkan pemilih warna Open side panel Buka panel samping Esc Esc Exit Keluar Quit Capture Keluar Pengambilan Are you sure you want to quit capture? Apakah Anda yakin ingin mengeluarkan pengambilan? Do not show this again Jangan tampilkan ini lagi Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot telah kehilangan fokus. Pintasan keyboard tidak akan berfungsi sampai Anda mengklik di suatu tempat. Configuration error resolved. Launch `flameshot gui` again to apply it. Kesalahan konfigurasi teratasi. Jalankan `flameshot gui` lagi untuk menerapkannya. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Tool Settings Pengaturan Alat CircleCountTool Circle Counter Penghitung Lingkaran Add an autoincrementing counter bubble Tambahkan gelembung penghitung autoincrementing CircleTool Circle Lingkaran Set the Circle as the paint tool Atur Lingkaran sebagai paint tool ColorDialog Select Color Pilih Warna Saturation Saturasi Hue Warna Hex Hex Blue Biru Value Nilai Green Hijau Alpha Alfa Red Merah ColorGrabWidget Accept color Terima warna Enter or Left Click Enter atau Klik Kiri Precisely select color Pilih warna dengan tepat Hold Left Click Tahan Klik Kiri Toggle magnifier Alihkan kaca pembesar Space or Right Click Spasi or Klik Kanan Cancel Batalkan Esc Esc ColorPickerEditor Select Preset: Pilih Preset: Select preset using the spinbox Pilih preset memakai kotak putar Edit Preset: Sunting Praatur: Enter color to update preset Masukkan warna untuk memperbarui praatur Update Perbarui Press button to update the selected preset Tekan tombol untuk memperbarui praatur yang dipilih Delete Hapus Press button to delete the selected preset Tekan tombol untuk menghapus preset yang dipilih Add Preset: Tambah Prasetel: Enter color manually or select it using the color-wheel Masukkan warna secara manual atau pilih itu dengan menggunakan roda-warna Add Tambah Press button to add preset Tekan tombol untuk menambah prasetel Error Galat Unable to add preset. Maximum limit reached. Tidak dapat menambahkan prasetel. Batas maksimum tercapai. Unable to remove preset. Minimum limit reached. Tidak dapat menghapus prasetel. Batas minimum tercapai. ConfigErrorDetails Configuration errors Kesalahan konfigurasi ConfigHandler Unrecognized setting: '%1' Pengaturan tidak dikenal: '%1' Unrecognized shortcut name: '%1'. Nama shortcut tidak dikenal: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Konflik shortcut: '%1' dan '%2' memiliki shortcut yang samaL %3 Bad value in '%1'. Expected: %2 Nilai buruk pada '%1': Seharusnya: %2 You have successfully resolved the configuration error. Anda telah berhasil mengatasi kesalahan konfigurasi. The configuration contains an error. Open configuration to resolve. Konfigurasi berisi kesalahan. Buka konfigurasi untuk mengatasinya. Bad config key '%1' in ConfigHandler. Please report this as a bug. Kunci konfig '%1' buruk pada ConfigHandler. Mohon laporkan ini sebagai bug. ConfigResolver Resolve configuration errors Atasi kesalahan konfigurasi <b>You must resolve all errors before continuing:</b> <b>Anda harus mengatasi semua kesalahan sebelum lanjut:</b> Reset Atur ulang Reset to the default value. Atur ulang ke nilai default. Remove Hapus Remove this setting. Hapus pengaturan ini. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Beberapa shortcut keyboard memiliki konflik. Ini TIDAK akan menahan flameshot untuk memulai. Mohon atasi mereka secara manual di file konfigurasi. Resolve all Atasi semua Resolve all listed errors. Atasi semua kesalahan yang terdaftar. Details Detail ConfigWindow Configuration Pengaturan Interface Antarmuka Filename Editor Pengaturan Nama File General Umum Shortcuts Pintasan Resolve Atasi <b>Configuration file has errors. Resolve them before continuing.</b> <b>File konfigurasi memiliki kesalahan. Atasi mereka sebelum melanjutkan.</b> Controller New version %1 is available Versi baru %1 tersedia You have the latest version Anda telah menggunakan versi terbaru Failed to get information about the latest version. Gagal mengambil informasi versi terbaru. Error Galat Unable to close active modal widgets Tidak dapat menutup widget modal aktif &Open Launcher &Buka Peluncur &Configuration &Pengaturan &About &Ihwal Check for updates Periksa pembaruan &Latest Uploads &Unggahan Terbaru URL copied to clipboard. URL tersalin ke clipboard. &Information &Informació &Quit &Hentikan Flameshot &Take Screenshot &Ambil Cuplikan Layar CopyTool Copy Salin Copy selection to clipboard Salin pilihan ke clipboard Copy the selection into the clipboard Salin seleksi terpilih ke papan klip DBusUtils Unable to connect via DBus Tidak dapat terhubung melalui DBus ExitTool Exit Keluar Leave the capture screen Tinggalkan cuplikan layar FileNameEditor Edit the name of your captures: Ubah nama hasil tangkapan: Edit: Sunting: Preview: Pratinjau: Save Simpan Saves the pattern Simpan pola Restore Pulihkan Reset Reinicialitza Restores the saved pattern Pulihkan pola yang tersimpan Clear Kosongkan Deletes the name Hapus nama Flameshot Error Error Unable to close active modal widgets Tidak dapat menutup widget modal aktif URL copied to clipboard. URL disalin ke papan klip. FlameshotDaemon New version %1 is available Versi baru %1 tersedia You have the latest version Anda telah menggunakan versi terbaru Failed to get information about the latest version. Gagal mendapatkan informasi tentang versi terbaru. Unable to connect via DBus Tidak dapat terhubung via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Impor Error Galat Unable to read file. Tidak bisa membaca berkas. Unable to write file. Tak bisa menulis berkas. Save File Simpan File Confirm Reset Konfirmasi atur ulang Are you sure you want to reset the configuration? Apakah Anda yakin ingin mengatur ulang konfigurasi? Show help message Tampilkan pesan bantuan Show the help message at the beginning in the capture mode. Tampilkan pesan bantuan di awal dalam mode capture. Show the side panel button Tampilkan tombol panel samping Show the side panel toggle button in the capture mode. Tampilkan tombol panel samping di mode capture. Show desktop notifications Tampilkan notifikasi desktop Show tray icon Tampilkan ikon baki Show the systemtray icon Tampilkan ikon baki sistem Confirmation required to delete screenshot from the latest uploads Konfirmasi diperlukan untuk menghapus screenshot dari unggahan terbaru Configuration File Konfigurasi Berkas Export Ekspor Reset Setel ulang Automatic check for updates Pemeriksaan otomatis pembaruan Allow multiple flameshot GUI instances simultaneously Izinkan beberapa instance flameshot GUI secara bersamaan This allows you to take screenshots of flameshot itself for example. Ini memungkinkan Anda untuk mengambil screenshot dari flameshot itu sendiri misalnya. Automatically close daemon when it is not needed Otomatis tutup daemon ketika tidak dibutuhkan Launch at startup Luncurkan saat startup Launch Flameshot Luncurkan Flameshot Show welcome message on launch Tampilkan pesan selamat datang saat peluncuran Use large predefined color palette Gunakan palet warna besar yang telah ditentukan Copy URL after upload Salin URL setelah mengunggah Copy URL and close window after upload Salin URL dan tutup jendela setelah mengunggah Save image after copy Simpan gambar setelah menyalin Save image file after copying it Simpan file gambar setelah menyalinnya Show the help message at the beginning in the capture mode Tampilkan pesan bantuan pada awal dalam mode penangkapan Use last region for GUI mode Gunakan wilayah terakhir untuk mode GUI Use the last region as the default selection for the next screenshot in GUI mode Gunakan wilayah terakhir sebagai pilihan bawaan untuk tangkapan layar selanjutnya di mode GUI Show the side panel toggle button in the capture mode Tampilkan tombol jungkit Panel samping pada mode penangkapan Enable desktop notifications Aktifkan pemberitahuan desktop Show abort notifications Tampilkan notifikasi pembatalan Enable abort notifications Aktifkan notifikasi pembatalan Show icon in the system tray Tampilkan ikon di baki sistem Use grim to capture screenshots Gunakan grim untuk mengambil tangkapan layar Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim adalah utilitas khusus Wayland untuk menangkap layar berdasarkan protokol screencopy. Umumnya hanya diaktifkan pada pengelola jendela Wayland minimal seperti sway, hyprland, dll. Ask for confirmation to delete screenshot from the latest uploads Tanyakan konfirmasi untuk menghapus cuplikan layar dari upload terbaru Check for updates automatically Periksa pemutakhiran secara otomatis This allows you to take screenshots of Flameshot itself for example Hal ini memungkinkan Anda untuk mengambil cuplikan layar dari nyala api sendiri misalnya Launch Flameshot daemon when computer is booted Luncurkan Jurik Flameshot ketika komputer dinyalakan Show the welcome message box in the middle of the screen while taking a screenshot Tampilkan kotak pesan sambutan di tengah layar saat mengambil cuplikan layar Use a large predefined color palette Palet warna terpradefinisi Copy on double click Salin dengan klik dua kali Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Salin URL dan tutup jendela setelah mengunggah berhasil Automatically unload from memory when it is not needed Secara otomatis menghapus dari memori ketika tidak diperlukan Automatically close daemon (background process) when it is not needed Secara otomatis menutup daemon (proses latar belakang) ketika tidak diperlukan Launch in background at startup Luncurkan di latar belakang saat pemulaian Launch Flameshot daemon (background process) when computer is booted Luncurkan daemon Flameshot (proses latar belakang) ketika komputer diboot Ask before quit capture Tanya sebelum mengeluarkan pengambilan Show the confirmation prompt before ESC quit Tampilkan perintah konfirmasi sebelum keluar ESC Enable Copy to clipboard on Double Click Aktifkan Salin ke papan klip saat Klik Dua Copy URL after uploading was successful Salin URL setelah pengunggahan telah berhasil After copying the screenshot, save it to a file as well Setelah menyalin cuplikan layar, simpan ke berkas juga Save Path Simpan Jalur Change... Ubah... Use fixed path for screenshots to save Gunakan lokasi tetap untuk menyimpan tangkapan layar Preferred save file extension: Ekstensi file penyimpanan yang disukai: Latest Uploads Max Size Ukuran Maksimal Unggahan Terbaru Imgur Application Client ID ID Klien Aplikasi Imgur Undo limit Batas undurkan Use JPG format for clipboard (PNG default) Gunakan format JPG untuk clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Gunakan format JPG terkompres untuk papan klip (PNG tanpa kompres bawaan) Copy file path after save Salin lokasi file setelah menyimpan Copy the file path to clipboard after the file is saved Salin lokasi berkas ke papan klip setelah berkas disimpan Anti-aliasing image when zoom the pinned image Gambar anti-aliasing saat memperbesar gambar yang disematkan After zooming the pinned image, should the image get smoothened or stay pixelated Setelah memperbesar gambar tersemat, harusnya gambar diperhalus atau tetap ber pixel Upload image without confirmation Unggah gambar tanpa konfirmasi Choose a Folder Pilih Folder Unable to write to directory. Tidak dapat menulis ke direktori. Show magnifier Tampilkan pembesar Enable a magnifier while selecting the screenshot area Aktifkan magnifier saat memilih area cuplikan layar Square shaped magnifier Kaca pembesar persegi Make the magnifier to be square-shaped Membuat pembesar harus berbentuk persegi Milliseconds before geometry display hides; 0 means do not hide Milidetik sebelum tampilan geometri menyembunyikan; 0 artinya jangan sembunyikan Set geometry display timeout (ms) Atur batas waktu tampilan geometri (ms) Selection Geometry Display Pemilihan Tampilan Geometri Display Location Lokasi Tampilan None Tidak Ada Top Left Kiri Atas Top Right Kanan Atas Bottom Left Kiri Bawah Bottom Right Kanan Bawan Center Tengah Quality range of 0-100; Higher number is better quality and larger file size Rentang kualitas 0-100; Angka yang lebih tinggi kualitasnya lebih baik dan ukuran berkas yang lebih besar JPEG Quality Kualitas JPEG Reverse arrow Panah terbalik Draw the arrow head first Gambar kepala panah terlebih dahulu Insecure Pixelate Pikselasi Kurang Sempurna Draw the pixelation effect in an insecure but more asethetic way. Gambarlah efek pikselasi dengan cara yang kurang sempurna namun lebih estetis. HistoryWidget Latest Uploads Upload Terbaru Screenshots history is empty Riwayat cuplikan layar kosong Copy URL Salin URL URL copied to clipboard. URL disalin ke papan klip. Open in browser Buka di peramban Confirm to delete Konfirmasi hapus Are you sure you want to delete a screenshot from the latest uploads and server? Apakah Anda yakin ingin menghapus screenshot dari unggahan terbaru dan server? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Konfirmasi Unggahan Do you want to upload this capture? Apakah Anda ingin mengunggah capture ini? Upload without confirmation Unggah tanpa konfirmasi ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Unggah gambar Uploading Image Mengunggah Gambar Copy URL Salin URL Open URL Buka URL Delete image Hapus gambar Image to Clipboard. Gambar ke Clipboard. Save image Simpan gambar Unable to open the URL. Tidak dapat membuka URL. URL copied to clipboard. URL tersalin ke clipboard. Screenshot copied to clipboard. Screenshot tersalin ke clipboard. Unable to save the screenshot to disk. Tidak dapat menyimpan cuplikan layar ke disk. Screenshot saved. Cuplikan layar disimpan. ImgUploaderTool Image Uploader Pengunggah Gambar Upload the selection Unggah pilihan ImgurUploader Upload to Imgur Unggah ke Imgur Uploading Image Mengunggah Gambar Copy URL Salin URL Open URL Buka URL Delete image Hapus gambar Image to Clipboard. Image to Clipboard. Unable to open the URL. Tidak dapat membuka URL. URL copied to clipboard. URL disalin ke papan klip. Screenshot copied to clipboard. Cuplikan layar disalin ke papan klip. ImgurUploaderTool Image Uploader Pengunggah Gambar Upload the selection to Imgur Upload the selection to Imgur InfoWindow About Tentang Icon Ikon License Lisensi GPLv3+ GPL v3+ Version Versi Flameshot v Flameshot v OS Info Info OS Copy Info Salin Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Lisensi</b></u> <u><b>Version</b></u> <u><b>Versi</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Balikkan Set Inverter as the paint tool Atur inverter sebagai paint tool LineTool Line Garis Set the Line as the paint tool Atur garis sebagai alat gambar MarkerTool Marker Penanda Set the Marker as the paint tool Atur penanda sebagai paint tool MoveTool Move Geser Move the selection area Geser daerah terseleksi PencilTool Pencil Pensil Set the Pencil as the paint tool Atur pensil sebagai alat gambar PinTool Pin Tool Alat Semat Pin image on the desktop Sematkan gambar ke desktop PinWidget Context menu Context menu Copy to clipboard Salin ke papan klip Save to file Simpan ke berkas Rotate Right Putar Kanan Rotate Left Putar Kiri Increase Opacity Tingkatkan Opasitas Decrease Opacity Kurangi Opasitas Close Tutup PixelateTool Pixelate Piksel Set Pixelate as the paint tool. Atur Pikselasi sebagai alat cat. Set Pixelate as the paint tool Atur Pixelate sebagai paint tool PrimaryInstanceWidget Primary instance Instansi pertama <b>Primary instance.</b> Messages received from secondaries: <b>Instansi pertama.</b> Pesan diterima dari kedua: QHotkey Failed to register %1. Error: %2 Gagal untuk mendaftarkan %1. Kesalahan: %2 Failed to unregister %1. Error: %2 Gagal untuk membatalkan pendaftaran %1. Kesalahan: %2 QObject Capture saved to clipboard. Cuplikan layar tersimpan ke papan klip. Error while saving to clipboard Gagal saat menyimpan ke papan klip Save screenshot Simpan cuplikan layar Path copied to clipboard as Jalur tersalin ke clipboard sebagai Saving canceled Menyimpan dibatalkan Save canceled Simpan dibatalkan Capture is saved and copied to the clipboard as Cuplikan layar tersimpan dan disalin ke papan klip sebagai Save Error Gagal menyimpan Capture saved as Cuplikan layar disimpan sebagai Error trying to save as Gagal ketika mencoba menyimpan sebagai Unable to connect via DBus Tidak dapat terhubung melalui DBus Powerful yet simple to use screenshot software. Software screenshot yang kuat namun mudah digunakan. See Lihat Capture the entire desktop. Ambil cuplikan layar seluruh desktop. Open the capture launcher. Buka peluncur capture. Start a manual capture in GUI mode. Jalankan capture manual di mode GUI. Configure Konfigurasikan Capture a single screen. Caputre satu layar. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Ambil tangkapan layar semua monitor dalam waktu yang sama. Capture a screenshot of the specified monitor. Ambil tangkapan layar monitor yang ditentukan. Existing directory or new file to save to Direktori yang ada atau file baru untuk disimpan Save the capture to the clipboard Simpan cuplikan layar ke papan klip Pin the capture to the screen Sematkan capture ke layar Upload screenshot Unggah tangkapan layar Delay time in milliseconds Waktu jeda dalam milidetik Repeat screenshot with previously selected region Ulangi tangkapan layar dengan wilayah yang sebelumnya dipilih Screenshot region to select Daerah tangkapan layar untuk dipilih Set the filename pattern Atur pola nama file Accept capture as soon as a selection is made Terima capture segera setelah seleksi dibuat Enable or disable the trayicon Hidupkan atau matikan ikon baki Enable or disable run at startup Hidupkan atau matikan jalan saat startup Enable or disable the notifications Aktifkan atau nonaktifkan notifikasi Check the configuration for errors Cek kesalahan dari konfigurasi Show the help message in the capture mode Tampilkan pesan bantuan di mode capture Define the main UI color Definisikan warna utama UI Define the contrast UI color Definisikan warna kontras UI Print raw PNG capture Cetak capture PNG raw Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Cetak geometri pilihan dalam format WxH+X+Y. Tidak melakukan apa pun jika raw ditentukan Define the screen to capture (starting from 0) Definisikan layar untuk capture (dimulai dari 0) Invalid delay, it must be a number greater than 0 Jeda tidak valid, harus berupa angka yang lebih dari 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Bagian tidak valid, gunakan 'WxH+X+Y' atau 'all' atau 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Jalur tidak valid, harus berupa direkotri yang sudah ada atau file baru di direktori yang sudah ada Define the screen to capture Define the screen to capture default: screen containing the cursor default: layar berisi kursor Screen number Angka layar Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Warna tidak valid, tanda ini mendukung dengan format berikut: - #RGB (masing-masing R, G, dan B adalah satu digit hex) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Warna yang bernama seperti 'blue' atau 'red' Anda mungkin perlu untuk escape dari tanda '#' seperti pada '\#FFF' Invalid delay, it must be higher than 0 Waktu jeda tidak valid, harus lebih besar dari 0 Invalid screen number, it must be non negative Angka layar tidak valid, harus berupa non negatif Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Nilai tidak valid, harus bernilai 'true' atau 'false' Error Galat Unable to write in Gagal menulis Capture saved to clipboard Cuplikan layar tersimpan ke papan klip URL copied to clipboard. URL disalin ke papan klip. Options Opsi Arguments Argumen arguments argumen Subcommands Subperintah subcommands subperintah Usage Penggunaan options opsi Per default runs Flameshot in the background and adds a tray icon for configuration. Per default menjalankan Flameshot di latar belakang dan menambahkan ikon baki untuk konfigurasi. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Halo, Saya disini! Klik ikon di baki untuk mengambil screenshot atau klik dengan tombol kanan untuk melihat opsi lebih banyak. Requested screen exceeds screen count Layar yang diminta melampaui jumlah layar Full screen screenshot pinned to screen Screenshot layar penuh disematkan ke layar Toggle side panel Toggle side panel Resize selection left 1px Ubah ukuran seleksi sebesar 1px ke kiri Resize selection right 1px Ubah ukuran seleksi sebesar 1px ke kanan Resize selection up 1px Ubah ukuran seleksi sebesar 1px ke atas Resize selection down 1px Ubah ukuran seleksi sebesar 1px ke bawah Select entire screen Seleksi seluruh layar Move selection left 1px Geser seleksi sebesar 1px ke kiri Move selection right 1px Geser seleksi sebesar 1px ke kanan Move selection up 1px Geser seleksi sebesar 1px ke atas Move selection down 1px Geser seleksi sebesar 1px ke bawah Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Keluar capture Screenshot history Riwayat screenshot Capture screen Ambil capture Show color picker Tampilkan pemilih warna Change the tool's size Ubah ukuran alat Change the tool's thickness Change the tool's thickness RectangleTool Rectangle Persegi panjang Set the Rectangle as the paint tool Atur persegi panjang sebagai paint tool RedoTool Redo Ulangi Redo the next modification Ulangi modifikasi berikutnya SaveTool Save Simpan Save screenshot to a file Simpan screenshot sebagai file Save the capture Save the capture ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Adapter tangkapan layar wayland universal membutuhkan Grim sebagai komponen tangkapan layar wayland. Jika komponen tangkapan layar tidak ada, silakan pasang! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Jika pengaturan useGrimAdapter tidak diaktifkan, protokol dbus akan digunakan. Perlu dicatat bahwa penggunaan protokol dbus di wayland tidak disarankan. Disarankan untuk mengaktifkan pengaturan useGrimAdapter di flameshot.ini untuk mengaktifkan adaptor tangkapan layar wayland umum berbasis grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments komponen tangkapan layar grim diimplementasikan berdasarkan wlroots, sehingga mungkin tidak dapat digunakan di GNOME atau lingkungan desktop serupa Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Tidak dapat mendeteksi lingkungan desktop (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Petunjuk: coba atur variabel lingkungan XDG_CURRENT_DESKTOP. Unable to capture screen Tidak dapat capture layar SecondaryInstanceWidget Secondary instance Instansi kedua <b>Secondary instance.</b> Send message to primary: <b>Instansi kedua.</b> Kirim pesan ke pertama: Type something here... Ketik sesuatu di sini... &Send &Kirim Error sending message Galat mengirim pesan The message '%1' could not be sent to the primary. Pesan '%1' tidak dapat dikirim ke pertama. SelectionTool Rectangular Selection Seleksi persegi panjang Set Selection as the paint tool Atur Seleksian sebagai paint tool SetShortcutDialog Set Shortcut Atur Shortcut Enter new shortcut to change Masukkan shortcut baru untuk mengubah Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Tekan Esc untuk membatalkan atau ⌘+Backspace untuk mematikan shortcut keyboard. Press Esc to cancel or Backspace to disable the keyboard shortcut. Tekan Esc untuk membatalkan atau Backspace untuk mematikan shorcut keyboard. Flameshot must be restarted for changes to take effect. Flameshot harus di mulai ulang agar perubahan diterapkan. ShortcutsWidget Hot Keys Tombol Panas Available shortcuts in the screen capture mode. Shortcut yang tersedia di mode capture layar. Description Deskripsi Key Kunci Left Double-click Klik Dua Kali Kiri Toggle side panel Ubah panel samping Grab a color from the screen Ambil warna dari layar Resize selection left 1px Ubah ukuran pilihan ke kiri 1px Resize selection right 1px Ubah ukuran pilihan ke kanan 1px Resize selection up 1px Ubah ukuran pilihan ke atas 1px Resize selection down 1px Ubah ukuran pilihan ke bawah 1px Symmetrically decrease width by 2px Kurangi lebar secara simetris sebesar 2px Symmetrically increase width by 2px Tingkatkan lebar secara simetris sebesar 2px Symmetrically increase height by 2px Tingkatkan tinggi secara simetris sebesar 2px Symmetrically decrease height by 2px Kurangi tinggi secara simetris sebesar 2px Select entire screen Pilih seluruh layar Move selection left 1px Geser pilihan ke kiri 1px Move selection right 1px Geser pilihan ke kanan 1px Move selection up 1px Geser pilihan ke atas 1px Move selection down 1px Geser pilihan ke bawah 1px Commit text in text area Komit teks di are teks Delete selected drawn object Hapus objek yang dipilih yang digambar Cancel current selection Batalkan pilihan saat ini Delete current tool Delete current tool Capture screen Ambil layar Screenshot history Riwayat tangkapan layar SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Ukuran alat aktif: Active Color: Warna aktif: Grab Color Ambil Warna Display grid Kisi tampilan SizeDecreaseTool Decrease Tool Size Kecilkan Ukuran Alat Decrease the size of the other tools Kecilkan ukuran dari alat yang lainnya SizeIncreaseTool Increase Tool Size Besarkan Alat Increase the size of the other tools Besarkan ukuran dari alat yang lain SizeIndicatorTool Selection Size Indicator Indikator Ukuran Pilihan Show X and Y dimensions of the selection Tampilkan dimensi X dan Y pada seleksi Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Abad (00-99) Year (00-99) Tahun (00-99) Year (2000) Tahun (2000) Month Name (jan) Nama Bulan (jan) Month Name (january) Nama Bulan (january) Month (01-12) Bulan (01-12) Week Day (1-7) Hari Mingguan (1-7) Week (01-53) Minggu (01-53) Day Name (mon) Nama Hari (mon) Day Name (monday) Nama Hari (monday) Day (01-31) Hari (01-31) Day of Month (1-31) Tanggal (1-31) Day (001-366) Hari (001-366) Hour (00-23) Jam (00-23) Hour (01-12) Jam (01-12) Minute (00-59) Menit (00-59) Second (00-59) Detik (00-59) Full Date (%m/%d/%y) Tanggal Penuh (%m/%d/%y) Full Date (%Y-%m-%d) Tanggal Penuh (%Y-%m-%d) Full Date (%d-%m-%Y) Tanggal Lengkap (%d-%m-%Y) Time (%H-%M-%S) Waktu (%H-%M-%S) Time (%H-%M) Waktu (%H-%M) SystemNotification Flameshot Info Info Flameshot TextConfig StrikeOut Coretan Underline Garis bawah Bold Tebal Italic Miring Left Align Rata Kiri Center Align Rata Tengah Right Align Rata Kanan TextTool Text Teks Add text to your capture Tambahkan teks ke cuplikan layar Anda TrayIcon &Take Screenshot &Ambil Tangkapan Layar &Open Launcher &Buka Peluncur &Configuration &Konfigurasi &About &Tentang Check for updates Periksa pembaruan New version %1 is available Versi baru %1 tersedia &Quit &Hentikan &Latest Uploads &Unggahan Terbaru &Open Save Path &Buka Jalur Penyimpanan UIcolorEditor UI Color Editor Pengedit Warna UI Change the color moving the selectors and see the changes in the preview buttons. Ubah warna dengan memindahkan pemilih dan lihat perubahan di tombol pratinjau. Select a Button to modify it Pilih Tombol untuk mengubahnya Main Color Warna Utama Click on this button to set the edition mode of the main color. Klik pada tombol ini untuk mengatur warna utama dari mode edisi. Contrast Color Warna Kontras Click on this button to set the edition mode of the contrast color. Klik pada tombol ini untuk mengatur warna kontras pada mode edisi. UndoTool Undo Batalkan Undo the last modification Batalkan perubahan terakhir UpdateNotificationWidget New Flameshot version %1 is available Versi Flameshot terbaru %1 tersedia Ignore Abaikan Later Nanti Update Perbarui UploadHistory Upload History Unggah Riwayat Screenshots history is empty Riwayat cuplikan layar kosong UploadLineItem Form Formulir TextLabel LabelTeks Copy URL Salin URL Open In Browser Buka Dalam Peramban Confirm to delete Konfirmasi hapus Are you sure you want to delete a screenshot from the latest uploads and server? Apakah Anda yakin ingin menghapus screenshot dari unggahan terbaru dan server? UtilityPanel Close Tutup <Empty> <Kosong> VisualsEditor Opacity of area outside selection: Opacity area di luar seleksi: UI Color Editor Pengedit Warna UI Colorpicker Editor Penyunting pemilih warna Button Selection Seleksi Tombol Select All Pilih Semua color_widgets::ColorDialog Pick Ambil color_widgets::ColorPalette Unnamed Tidak bernama color_widgets::ColorPaletteModel Unnamed Tidak bernama %1 (%2 colors) %1 (warna %2) color_widgets::ColorPaletteWidget Open a new palette from file Buka palet baru dari file Create a new palette Buat palet baru Duplicate the current palette Duplikat palet saat ini Delete the current palette Hapus palet saat ini Revert changes to the current palette Kembalikan perubahan palet saat ini Save changes to the current palette Simpan perubahan palet saat ini Add a color to the palette Tambahkan warna pada palet Remove the selected color from the palette Hapus warna yang terpilih dari palet New Palette Palet Baru Name Nama GIMP Palettes (*.gpl) Palet GIMP (*.gpl) Palette Image (%1) Gambar Palet (%1) All Files (*) Semua File (*) Open Palette Buka Palet Failed to load the palette file %1 Gagal memuat file palet %1 color_widgets::GradientEditor Add Color Tambahkan Warna Remove Color Hapus Warna Edit Color... Ubah Warna... color_widgets::GradientListModel %1 (%2 colors) %1 (warna %2) color_widgets::Swatch Clear Color Hapus Warna %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_it_IT.ts ================================================ AbstractWidgetList Add New Aggiungi Nuovo Move Up Sposta Su Move Down Sposta Giù Remove Rimuovi AcceptTool Accept Accetta Accept the capture Accetta la cattura AppLauncher App Launcher Avvia App Choose an app to open the capture Scegli un'app per aprire l'acquisizione AppLauncherWidget Open With Apri con Launch in terminal Avvia nel terminale Keep open after selection Mantieni aperto dopo la selezione Error Errore Unable to write in Impossibile scrivere Unable to launch in terminal. Impossibile avviare nel terminale. ArrowTool Arrow Freccia Set the Arrow as the paint tool Imposta la freccia come strumento di disegno CaptureLauncher <b>Capture Mode</b> <b>Modalità Cattura</b> Rectangular Region Regione rettangolare Full Screen (Current Display) Schermo intero (Visualizzazione Corrente) Full Screen (All Monitors) Schermo Intero (tutti i monitor) No Delay Nessun ritardo second secondo seconds secondi Take new screenshot Acquisisci nuovo screenshot Area: Area: Capture Launcher Cattura lanciatore TextLabel Etichetta di testo Capture Mode Modalità di cattura Delay: Ritardo: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossibile acquisire lo schermo Mouse Mouse Select screenshot area Seleziona l'area dello screenshot Mouse Wheel Rotellina del mouse Change tool size Cambia la dimensione dello strumento Right Click Clic destro Show color picker Mostra selettore colore Open side panel Apri pannello laterale Esc Esc Exit Esci Quit Capture Esci da Cattura Are you sure you want to quit capture? Vuoi davvero uscire dall'acquisizione? Do not show this again Non mostrare più questo messaggio Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot ha perso la messa a fuoco. Le scorciatoie da tastiera non funzioneranno finché non fai clic da qualche parte. Configuration error resolved. Launch `flameshot gui` again to apply it. Errore di configurazione risolto. Avvia di nuovo "flameshot gui" per applicarlo. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Seleziona un'area con il mouse o premi Esc per uscire. Premi Invio per catturare lo schermo. Premere il pulsante destro del mouse per visualizzare il selettore dei colori. Usa la rotellina del mouse per modificare lo spessore del tuo strumento. Premi la barra spaziatrice per aprire il pannello laterale. Tool Settings Impostazioni Strumento CircleCountTool Circle Counter Contatore circolare Add an autoincrementing counter bubble Aggiungi un contatore a bolla autoincrementante CircleTool Circle Cerchio Set the Circle as the paint tool Imposta il cerchio come strumento di disegno ColorDialog Select Color Seleziona Colore Saturation Saturazione Hue Tonalità Hex Esadecimale Blue Blu Value Valore Green Verde Alpha Alfa Red Rosso ColorGrabWidget Accept color Accetta colore Enter or Left Click Enter o clic sinistro Precisely select color Seleziona con precisione il colore Hold Left Click Tieni premuto clic sinistro Toggle magnifier Attiva/disattiva lente d'ingrandimento Space or Right Click Spazio o clic destro Cancel Cancella Esc Esc ColorPickerEditor Select Preset: Seleziona Preimpostazione: Select preset using the spinbox Seleziona il preset usando la casella di selezione Edit Preset: Modifica Preset: Enter color to update preset Immettere il colore per aggiornare il preset Update Aggiorna Press button to update the selected preset Premere il pulsante per aggiornare il preset selezionato Delete Cancella Press button to delete the selected preset Premere il pulsante per eliminare il preset selezionato Add Preset: Aggiungi Preimpostazione: Enter color manually or select it using the color-wheel Immettere il colore manualmente o selezionarlo utilizzando la ruota dei colori Add Aggiungi Press button to add preset Premere il pulsante per aggiungere il preset Error Errore Unable to add preset. Maximum limit reached. Impossibile aggiungere il preset. Limite massimo raggiunto. Unable to remove preset. Minimum limit reached. Impossibile rimuovere il preset. Limite minimo raggiunto. ConfigErrorDetails Configuration errors Errori di configurazione ConfigHandler Unrecognized setting: '%1' Impostazione non riconosciuta: '%1' Unrecognized shortcut name: '%1'. Nome del collegamento non riconosciuto: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Conflitto collegamento: '%1' e '%2' hanno lo stesso collegamento: %3 Bad value in '%1'. Expected: %2 Valore errato in '%1'. Previsto: %2 You have successfully resolved the configuration error. Hai risolto con successo l'errore di configurazione. The configuration contains an error. Open configuration to resolve. La configurazione contiene un errore. Apri la configurazione per risolvere. The configuration contains an error. Falling back to default. La configurazione contiene un errore. Ritorno al default. Bad config key '%1' in ConfigHandler. Please report this as a bug. Chiave di configurazione '%1' errata in ConfigHandler. Si prega di segnalare questo come un bug. ConfigResolver Resolve configuration errors Risolvere gli errori di configurazione <b>You must resolve all errors before continuing:</b> <b>Devi risolvere tutti gli errori prima di continuare:</b> Reset Ripristina Reset to the default value. Ripristina il valore predefinito. Remove Rimuovi Remove this setting. Rimuovi questa impostazione. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Alcune scorciatoie da tastiera presentano conflitti. Ciò NON impedirà l'avvio di flameshot. Si prega di risolverli manualmente nel file di configurazione. Resolve all Risolvere tutto Resolve all listed errors. Risolvere tutti gli errori elencati. Details Dettagli ConfigWindow Configuration Configurazione Interface Interfaccia Filename Editor Editor nome file General Generale Shortcuts Scorciatoie Resolve Risolvere <b>Configuration file has errors. Resolve them before continuing.</b> <b>Il file di configurazione contiene errori. Risolvili prima di continuare.</b> Controller New version %1 is available È disponibile la nuova versione %1 You have the latest version Hai l'ultima versione Failed to get information about the latest version. Impossibile ottenere informazioni sull'ultima versione. Error Errore Unable to close active modal widgets Impossibile chiudere i widget modali attivi &Take Screenshot &Acquisisci screenshot &Open Launcher &Apri Launcher &Configuration &Configurazione &About &Informazioni Check for updates Verifica la disponibilità di aggiornamenti &Quit &Esci &Latest Uploads &Ultimi caricamenti URL copied to clipboard. URL copiato negli appunti. CopyTool Copy Copia Copy selection to clipboard Copia la selezione negli appunti Copy the selection into the clipboard Copia la selezione negli appunti DBusUtils Unable to connect via DBus Impossibile connettersi tramite DBus ExitTool Exit Uscita Leave the capture screen Esci dalla schermata di acquisizione FileNameEditor Edit the name of your captures: Modifica il nome delle tue acquisizioni: Edit: Modifica: Preview: Anteprima: Save Salva Saves the pattern Salva il modello Restore Ripristina Reset Ripristina Restores the saved pattern Ripristina il modello salvato Clear Pulisci Deletes the name Elimina il nome Flameshot Error Errore Unable to close active modal widgets Impossibile chiudere i widget modali attivi URL copied to clipboard. URL copiato negli appunti. FlameshotDaemon New version %1 is available È disponibile la nuova versione %1 You have the latest version Hai l'ultima versione Failed to get information about the latest version. Impossibile ottenere informazioni sull'ultima versione. Unable to connect via DBus Impossibile connettersi tramite DBus GeneralConf Import Importa Error Errore Unable to read file. Impossibile leggere il file. Unable to write file. Impossibile scrivere il file. Save File Salva il file Confirm Reset Conferma il ripristino Are you sure you want to reset the configuration? Sei sicuro/a di voler ripristinare la configurazione? Show help message Mostra messaggio di aiuto Show the help message at the beginning in the capture mode. Mostra il messaggio di aiuto all'inizio nella modalità di acquisizione. Show the side panel button Mostra il pulsante del pannello laterale Show the side panel toggle button in the capture mode. Mostra il pulsante di attivazione/disattivazione del pannello laterale nella modalità di acquisizione. Show desktop notifications Mostra notifiche desktop Show tray icon Mostra icona nella barra delle applicazioni Show the systemtray icon Mostra l'icona sulla barra delle applicazioni Confirmation required to delete screenshot from the latest uploads Conferma richiesta per eliminare screenshot dagli ultimi caricamenti Configuration File File di Configurazione Export Esporta Reset Ripristina Automatic check for updates Controllo automatico degli aggiornamenti Allow multiple flameshot GUI instances simultaneously Consenti più istanze della GUI di flameshot contemporaneamente This allows you to take screenshots of flameshot itself for example. Ciò ti consente di acquisire schermate di Flameshot stesso, ad esempio. Automatically close daemon when it is not needed Chiudi automaticamente il demone quando non è necessario Launch at startup Esegui all'avvio Launch Flameshot Esegui Flameshot Show welcome message on launch Mostra il messaggio di benvenuto all'avvio Use large predefined color palette Usa una grande tavolozza di colori predefinita Copy URL after upload Copia l'URL dopo il caricamento Copy URL and close window after upload Copia l'URL e chiudi la finestra dopo il caricamento Save image after copy Salva l'immagine dopo la copia Save image file after copying it Salva il file immagine dopo averlo copiato Show the help message at the beginning in the capture mode Mostra il messaggio di aiuto all'inizio nella modalità di acquisizione Use last region for GUI mode Utilizza l'ultima regione per la modalità GUI Use the last region as the default selection for the next screenshot in GUI mode Utilizza l'ultima regione come selezione predefinita per lo screenshot successivo in modalità GUI Show the side panel toggle button in the capture mode Mostra il pulsante di attivazione/disattivazione del pannello laterale nella modalità di acquisizione Enable desktop notifications Abilita notifiche desktop Show abort notifications Mostra notifiche di interruzione Enable abort notifications Abilita notifiche di interruzione Show icon in the system tray Mostra l'icona nella barra delle applicazioni Use grim to capture screenshots Usa Grim per catturare screenshot Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim è un'utilità esclusiva di Wayland per catturare schermate basata sul protocollo Screencopy. Generalmente è abilitata solo su window manager Wayland minimali come Sway, Hyprland, ecc. Ask for confirmation to delete screenshot from the latest uploads Chiedi conferma per eliminare screenshot dagli ultimi caricamenti Check for updates automatically Controlla automaticamente gli aggiornamenti This allows you to take screenshots of Flameshot itself for example Ciò ti consente, ad esempio, di acquisire schermate di Flameshot stesso Launch Flameshot daemon when computer is booted Avvia il demone Flameshot all'avvio del computer Show the welcome message box in the middle of the screen while taking a screenshot Mostra la finestra del messaggio di benvenuto al centro dello schermo mentre acquisisci uno screenshot Use a large predefined color palette Usa un'ampia tavolozza di colori predefinita Copy on double click Copia con doppio clic Enable Copy on Double Click Abilita copia su doppio clic Copy URL and close window after uploading was successful Copia l'URL e chiudi la finestra dopo che il caricamento è andato a buon fine Automatically unload from memory when it is not needed Scarica automaticamente dalla memoria quando non è necessario Automatically close daemon (background process) when it is not needed Chiudere automaticamente il demone (processo in background) quando non è necessario Launch in background at startup Avvia in background all'avvio Launch Flameshot daemon (background process) when computer is booted Avvia il demone di Flameshot (processo in background) all'avvio del computer Ask before quit capture Chiedi prima di uscire dall'acquisizione Show the confirmation prompt before ESC quit Mostra la richiesta di conferma prima di uscire da ESC Enable Copy to clipboard on Double Click Abilita Copia negli appunti con doppio clic Copy URL after uploading was successful Copia l'URL dopo che il caricamento è riuscito After copying the screenshot, save it to a file as well Dopo aver copiato lo screenshot, salvalo anche su un file Save Path Salva Percorso Change... Cambia... Use fixed path for screenshots to save Usa percorso fisso per salvare gli screenshot Preferred save file extension: Estensione file di salvataggio preferita: Latest Uploads Max Size Dimensione Massima Ultimi Caricamenti Imgur Application Client ID Chiave API Imgur Undo limit Annulla limite Use JPG format for clipboard (PNG default) Usa il formato JPG per gli appunti (impostazione predefinita PNG) Use lossy JPG format for clipboard (lossless PNG default) Utilizza il formato JPG con perdita di dati per gli appunti (il formato predefinito è PNG senza perdita di dati) Copy file path after save Copia il percorso del file dopo il salvataggio Copy the file path to clipboard after the file is saved Copia il percorso del file negli appunti dopo che il file è stato salvato Anti-aliasing image when zoom the pinned image Anti-alias dell'immagine quando si esegue lo zoom dell'immagine bloccata After zooming the pinned image, should the image get smoothened or stay pixelated Dopo aver ingrandito l'immagine bloccata, l'immagine dovrebbe essere smussata o rimanere pixelata Upload image without confirmation Carica immagine senza conferma Choose a Folder Scegli una Cartella Unable to write to directory. Impossibile scrivere nella directory. Show magnifier Mostra lente d'ingrandimento Enable a magnifier while selecting the screenshot area Abilita una lente di ingrandimento durante la selezione dell'area dello screenshot Square shaped magnifier Lente d'ingrandimento a forma quadrata Make the magnifier to be square-shaped Rendi la lente d'ingrandimento di forma quadrata Milliseconds before geometry display hides; 0 means do not hide Millisecondi prima che la visualizzazione della geometria venga nascosta; 0 significa non nascondere Set geometry display timeout (ms) Imposta il timeout di visualizzazione della geometria (ms) Selection Geometry Display Visualizzazione della geometria di selezione Display Location Posizione di visualizzazione None Nessuna Top Left In alto a sinistra Top Right In alto a destra Bottom Left In basso a sinistra Bottom Right In basso a destra Center Centro Quality range of 0-100; Higher number is better quality and larger file size Gamma di qualità da 0 a 100; un numero più alto indica una qualità migliore e una dimensione del file maggiore JPEG Quality Qualità JPEG Reverse arrow Freccia inversa Draw the arrow head first Disegna prima la punta della freccia Insecure Pixelate Pixellamento non sicuro Draw the pixelation effect in an insecure but more asethetic way. Disegna l'effetto pixel in modo insicuro ma più estetico. HistoryWidget Latest Uploads Ultimi Caricamenti Screenshots history is empty La cronologia delle schermate è vuota Copy URL Copia URL URL copied to clipboard. URL copiato negli appunti. Open in browser Apri nel browser Confirm to delete Conferma per eliminare Are you sure you want to delete a screenshot from the latest uploads and server? Sei sicuro di voler eliminare un screenshot dagli ultimi caricamenti e dal server? ImgS3Uploader URL copied to clipboard. URL copiato negli appunti. Error Errore ImgUploadDialog Upload Confirmation Conferma di caricamento Do you want to upload this capture? Vuoi caricare questa acquisizione? Upload without confirmation Carica senza conferma ImgUploader Delete image Elimina immagine Unable to open the URL. Impossibile aprire l'URL. URL copied to clipboard. URL copiato negli appunti. Screenshot copied to clipboard. Screenshot copiato negli appunti. Copy URL Copia URL Open URL Apri URL Image to Clipboard. Immagine negli Appunti. ImgUploaderBase Upload image Carica immagine Uploading Image Caricamento Immagine Copy URL Copia URL Open URL Apri URL Delete image Elimina immagine Image to Clipboard. Immagine negli Appunti. Save image Salva immagine Unable to open the URL. Impossibile aprire l'URL. URL copied to clipboard. URL copiato negli appunti. Screenshot copied to clipboard. Screenshot copiato negli appunti. Unable to save the screenshot to disk. Impossibile salvare lo screenshot su disco. Screenshot saved. Screenshot salvato. ImgUploaderTool Image Uploader Caricatore di immagini Upload the selection Carica la selezione ImgurUploader Upload to Imgur Carica su Imgur Uploading Image Caricamento dell'immagine Copy URL Copia URL Open URL Apri URL Delete image Elimina immagine Image to Clipboard. Immagine negli Appunti. Unable to open the URL. Impossibile aprire l'URL. URL copied to clipboard. URL copiato negli appunti. Screenshot copied to clipboard. Screenshot copiato negli appunti. ImgurUploaderTool Image Uploader Uploader di immagini Upload the selection to Imgur Carica la selezione su Imgur InfoWindow About Informazioni Icon Icona License Licenza GPLv3+ GPLv3+ Version Versione Flameshot v Flameshot v OS Info Info sul sistema operativo Copy Info Copia informazioni <u><b>License</b></u> <u><b>Licenza</b></u> <u><b>Version</b></u> <u><b>Versione</b></u> InvertTool Invert Inverti Set Inverter as the paint tool Imposta l'Inverter come strumento di pittura LineTool Line Linea Set the Line as the paint tool Imposta la Linea come strumento di disegno MarkerTool Marker Marcatore Set the Marker as the paint tool Imposta il Pennarello come strumento di disegno MoveTool Move Sposta Move the selection area Sposta l'area di selezione PencilTool Pencil Matita Set the Pencil as the paint tool Imposta la matita come strumento di pittura PinTool Pin Tool Blocca Strumento Pin image on the desktop Blocca immagine sul desktop PinWidget Context menu Context menu Copy to clipboard Copia negli appunti Save to file Salva su file Rotate Right Ruota a destra Rotate Left Ruota a sinistra Increase Opacity Aumenta l'opacità Decrease Opacity Diminuisci l'opacità Close Chiudi PixelateTool Pixelate Pixellato Set Pixelate as the paint tool. Imposta Pixelate come strumento di disegno. Set Pixelate as the paint tool Imposta Pixelate come strumento di disegno PrimaryInstanceWidget Primary instance Istanza primaria <b>Primary instance.</b> Messages received from secondaries: <b>Istanza primaria.</b> Messaggi ricevuti dalle istanze secondarie: QHotkey Failed to register %1. Error: %2 Impossibile registrare %1. Errore: %2 Failed to unregister %1. Error: %2 Impossibile annullare la registrazione di %1. Errore: %2 QObject Options Opzioni Arguments Argomenti arguments argomenti Subcommands Sottocomandi subcommands Sottocomandi Usage Utilizzo options opzioni Per default runs Flameshot in the background and adds a tray icon for configuration. Per impostazione predefinita, Flameshot viene eseguito in background e aggiunge un'icona nella barra per la configurazione. Unable to connect via DBus Impossibile connettersi tramite DBus Powerful yet simple to use screenshot software. Software di screenshot potente ma semplice da usare. See Vedi Capture the entire desktop. Cattura l'intero desktop. Open the capture launcher. Apri il programma di avvio per l'acquisizione. Start a manual capture in GUI mode. Avvia un'acquisizione manuale in modalità GUI. Configure Configura Capture a single screen. Cattura una singola schermata. Path where the capture will be saved Percorso in cui verrà salvata l'acquisizione Capture screenshot of all monitors at the same time. Cattura screenshot di tutti i monitor contemporaneamente. Capture a screenshot of the specified monitor. Cattura uno screenshot del monitor specificato. Existing directory or new file to save to Directory esistente o nuovo file in cui salvare Save the capture to the clipboard Salva la cattura negli appunti Pin the capture to the screen Blocca l'acquisizione sullo schermo Upload screenshot Upload screenshot Delay time in milliseconds Tempo di ritardo in millisecondi Repeat screenshot with previously selected region Ripeti lo screenshot con la regione precedentemente selezionata Screenshot region to select Screenshot della regione da selezionare Set the filename pattern Imposta il modello del nome del file Accept capture as soon as a selection is made Accetta l'acquisizione non appena viene effettuata una selezione Enable or disable the trayicon Abilita o disabilita l'icona della barra delle applicazioni Enable or disable run at startup Abilita o disabilita l'esecuzione all'avvio Enable or disable the notifications Abilitare o disabilitare le notifiche Check the configuration for errors Controllare la configurazione per errori Show the help message in the capture mode Mostra il messaggio di aiuto nella modalità di acquisizione Define the main UI color Definisci il colore dell'interfaccia utente principale Define the contrast UI color Definisci il colore dell'interfaccia utente del contrasto Print raw PNG capture Stampa l'acquisizione raw PNG Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Stampa la geometria della selezione nel formato WxH+X+Y. Non fa nulla se raw è specificato Define the screen to capture (starting from 0) Definisci lo schermo da catturare (a partire da 0) Invalid delay, it must be a number greater than 0 Ritardo non valido, deve essere un numero maggiore di 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Regione non valida, usa WxH+X+Y' o 'tutto' o 'schermo0/schermo1/...'. Invalid path, must be an existing directory or a new file in an existing directory Percorso non valido, deve essere una directory esistente o un nuovo file in una directory esistente Define the screen to capture Definisci lo schermo da catturare default: screen containing the cursor default: schermata contenente il cursore Screen number Numero di schermo Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Colore non valido, questo flag supporta i seguenti formati: - #RGB (ciascuno di R, G e B è una singola cifra esadecimale) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Colori denominati come 'blu' o 'rosso' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Ritardo non valido, deve essere maggiore di 0 Invalid screen number, it must be non negative Numero di schermo non valido, deve essere non negativo Invalid path, it must be a real path in the system Percorso non valido, deve essere un percorso reale nel sistema Invalid value, it must be defined as 'true' or 'false' Valore non valido, deve essere definito come "vero" o "falso" Requested screen exceeds screen count La schermata richiesta supera il conteggio delle schermate Full screen screenshot pinned to screen Schermata a schermo intero bloccata sullo schermo URL copied to clipboard. URL copiato negli appunti. Error Errore Unable to write in Impossibile scrivere Capture saved to clipboard. Cattura salvata negli appunti. Capture saved to clipboard Cattura salvata negli appunti Error while saving to clipboard Errore durante il salvataggio negli appunti Capture saved as Cattura salvata come Error trying to save as Errore durante il tentativo di salvare come Save screenshot Salva screenshot Path copied to clipboard as Percorso copiato negli appunti come Saving canceled Salvataggio annullato Save canceled Salvataggio annullato Capture is saved and copied to the clipboard as L'acquisizione viene salvata e copiata negli appunti come Save Error Salva errore Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Ciao sono qui! Fare clic sull'icona nella barra delle applicazioni per acquisire uno screenshot o fare clic con il pulsante destro per visualizzare più opzioni. Toggle side panel Attiva/disattiva il pannello laterale Resize selection left 1px Ridimensiona la selezione a sinistra di 1px Resize selection right 1px Ridimensiona la selezione a destra di 1px Resize selection up 1px Ridimensiona la selezione sopra di 1px Resize selection down 1px Ridimensiona la selezione giù di 1 px Select entire screen Seleziona tutto lo schermo Move selection left 1px Sposta la selezione a sinistra di 1 px Move selection right 1px Sposta la selezione a destra di 1 px Move selection up 1px Sposta la selezione sopra di 1 px Move selection down 1px Sposta la selezione giù di 1 px Commit text in text area Conferma testo nell'area testo Delete current tool Elimina lo strumento corrente Quit capture Esci dalla cattura Screenshot history Cronologia degli screenshot Capture screen Cattura schermo Show color picker Mostra selettore colore Change the tool's size Modifica le dimensioni dello strumento Change the tool's thickness Cambia lo spessore dello strumento RectangleTool Rectangle Rettangolo Set the Rectangle as the paint tool Imposta il rettangolo come strumento di disegno RedoTool Redo Rifai Redo the next modification Rifai la modifica successiva SaveTool Save Salva Save screenshot to a file Salva lo screenshot in un file Save the capture Salva la cattura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Impossibile rilevare l'ambiente desktop (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! L'adattatore universale per la cattura dello schermo Wayland richiede Grim come componente di cattura dello schermo di Wayland. Se il componente di cattura dello schermo è mancante, installalo! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Se l'impostazione useGrimAdapter non è abilitata, verrà utilizzato il protocollo dbus. Si prega di notare che l'utilizzo del protocollo dbus in Wayland non è raccomandato. Si consiglia di abilitare l'impostazione useGrimAdapter in flameshot.ini per attivare l'adattatore generico per screenshot Wayland basato su Grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Il componente screenshot di grim è implementato in base a wlroots, non può essere utilizzato in GNOME o ambienti desktop simili Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Impossibile rilevare l'ambiente desktop (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Suggerimento: prova a impostare la variabile di ambiente XDG_CURRENT_DESKTOP. Unable to capture screen Impossibile acquisire lo schermo SecondaryInstanceWidget Secondary instance Istanza secondaria <b>Secondary instance.</b> Send message to primary: <b>Istanza secondaria.</b> Invia messaggio a primaria: Type something here... Scrivi qualcosa qui... &Send &Invia Error sending message Errore durante l'invio del messaggio The message '%1' could not be sent to the primary. Impossibile inviare il messaggio '%1' al server primario. SelectionTool Rectangular Selection Selezione rettangolare Set Selection as the paint tool Imposta Selezione come strumento di disegno SetShortcutDialog Set Shortcut Imposta Scorciatoia Enter new shortcut to change Inserisci una nuova scorciatoia da cambiare Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Premere Esc per annullare o ⌘+Backspace per disabilitare la scorciatoia da tastiera. Press Esc to cancel or Backspace to disable the keyboard shortcut. Premi Esc per annullare o Backspace per disabilitare la scorciatoia da tastiera. Flameshot must be restarted for changes to take effect. Flameshot deve essere riavviato per rendere effettive le modifiche. ShortcutsWidget Hot Keys Tasti di scelta rapida Available shortcuts in the screen capture mode. Scorciatoie disponibili nella modalità di cattura dello schermo. Description Descrizione Key Tasto Left Double-click Doppio clic sinistro Toggle side panel Attiva il pannello laterale Grab a color from the screen Prendi un colore dallo schermo Resize selection left 1px Ridimensiona la selezione sinistra di 1px Resize selection right 1px Ridimensiona la selezione destra di 1px Resize selection up 1px Ridimensiona la selezione sopra di 1px Resize selection down 1px Ridimensiona la selezione giù di 1 px Symmetrically decrease width by 2px Ridurre simmetricamente la larghezza di 2px Symmetrically increase width by 2px Aumentare simmetricamente la larghezza di 2px Symmetrically increase height by 2px Aumentare simmetricamente l'altezza di 2px Symmetrically decrease height by 2px Ridurre simmetricamente l'altezza di 2px Select entire screen Seleziona tutto lo schermo Move selection left 1px Sposta la selezione a sinistra di 1 px Move selection right 1px Sposta la selezione a destra di 1 px Move selection up 1px Sposta la selezione sopra di 1 px Move selection down 1px Sposta la selezione giù di 1 px Commit text in text area Conferma testo nell'area testo Delete selected drawn object Elimina l'oggetto disegnato selezionato Cancel current selection Annulla la selezione corrente Delete current tool Elimina lo strumento corrente Capture screen Cattura schermo Screenshot history Cronologia degli screenshot SidePanelWidget Active thickness: Spessore attivo: Active color: Colore attivo: Press ESC to cancel Premere ESC per annullare Active tool size: Dimensione strumento attivo: Active Color: Active Color: Grab Color Prendi il colore Display grid Griglia di visualizzazione SizeDecreaseTool Decrease Tool Size Diminuisci le Dimensioni dello Strumento Decrease the size of the other tools Diminuisci le dimensioni degli altri strumenti SizeIncreaseTool Increase Tool Size Aumenta la dimensione dello strumento Increase the size of the other tools Aumenta le dimensioni degli altri strumenti SizeIndicatorTool Selection Size Indicator Indicatore della dimensione della selezione Show X and Y dimensions of the selection Mostra le dimensioni X e Y della selezione Show the dimensions of the selection (X Y) Mostra le dimensioni della selezione (X Y) StrftimeChooserWidget Century (00-99) Secolo (00-99) Year (00-99) Anno (00-99) Year (2000) Anno (2000) Month Name (jan) Nome mese (gennaio) Month Name (january) Nome Mese (gennaio) Month (01-12) Mese (01-12) Week Day (1-7) Giorno della settimana (1-7) Week (01-53) Settimana (01-53) Day Name (mon) Nome Giorno (lunedì) Day Name (monday) Nome Giorno (lunedì) Day (01-31) Giorno (01-31) Day of Month (1-31) Giorno del Mese (1-31) Day (001-366) Giorno (001-366) Time (%H-%M-%S) Tempo (%H-%M-%S) Time (%H-%M) Tempo (%H-%M) Hour (00-23) Ora (00-23) Hour (01-12) Ora (01-12) Minute (00-59) Minuto (00-59) Second (00-59) Secondo (00-59) Full Date (%m/%d/%y) Data completa (%m/%d/%y) Full Date (%Y-%m-%d) Data completa (%Y-%m-%d) Full Date (%d-%m-%Y) Data completa (%g-%m-%A) SystemNotification Flameshot Info Informazioni su Flameshot TextConfig StrikeOut Cancella Underline Sottolineare Bold Grassetto Italic Corsivo Left Align Allinea a sinistra Center Align Allinea al centro Right Align Allinea a destra TextTool Text Testo Add text to your capture Aggiungi testo alla tua cattura TrayIcon &Take Screenshot &Acquisisci screenshot &Open Launcher &Apri Launcher &Configuration &Configurazione &About &Informazioni Check for updates Verifica la disponibilità di aggiornamenti New version %1 is available È disponibile la nuova versione %1 &Quit &Esci &Latest Uploads &Ultimi caricamenti &Open Save Path &Apri percorso di salvataggio UIcolorEditor UI Color Editor Editor dei colori dell'interfaccia utente Change the color moving the selectors and see the changes in the preview buttons. Cambia il colore spostando i selettori e guarda le modifiche nei pulsanti di anteprima. Select a Button to modify it Seleziona un pulsante per modificarlo Main Color Colore Principale Click on this button to set the edition mode of the main color. Fare clic su questo pulsante per impostare la modalità di modifica del colore principale. Contrast Color Colore di Contrasto Click on this button to set the edition mode of the contrast color. Fare clic su questo pulsante per impostare la modalità di modifica del colore di contrasto. UndoTool Undo Annulla Undo the last modification Annulla l'ultima modifica UpdateNotificationWidget New Flameshot version %1 is available È disponibile la nuova versione di Flameshot %1 Ignore Ignora Later Dopo Update Aggiorna UploadHistory Upload History Carica cronologia Screenshots history is empty La cronologia degli screenshot è vuota UploadLineItem Form Modulo TextLabel Etichetta di testo Copy URL Copia URL Open In Browser Apri nel browser Confirm to delete Conferma per eliminare Are you sure you want to delete a screenshot from the latest uploads and server? Sei sicuro di voler eliminare uno screenshot dagli ultimi caricamenti e dal server? UtilityPanel Close Chiudi <Empty> <Vuoto> VisualsEditor Opacity of area outside selection: Opacità dell'area al di fuori della selezione: UI Color Editor Editor del colore dell'interfaccia Colorpicker Editor Editor per la selezione dei colori Button Selection Selezione dei Pulsanti Select All Seleziona Tutto color_widgets::ColorDialog Pick Scegli color_widgets::ColorPalette Unnamed Senza nome color_widgets::ColorPaletteModel Unnamed Senza nome %1 (%2 colors) %1 (%2 colori) color_widgets::ColorPaletteWidget Open a new palette from file Apri una nuova tavolozza da file Create a new palette Crea una nuova tavolozza Duplicate the current palette Duplica la tavolozza corrente Delete the current palette Elimina la tavolozza corrente Revert changes to the current palette Ripristina le modifiche alla tavolozza corrente Save changes to the current palette Salva le modifiche alla tavolozza corrente Add a color to the palette Aggiungi un colore alla tavolozza Remove the selected color from the palette Rimuovere il colore selezionato dalla tavolozza New Palette Nuova tavolozza Name Name GIMP Palettes (*.gpl) Tavolozze GIMP (*.gpl) Palette Image (%1) Immagine tavolozza (%1) All Files (*) Tutti i files (*) Open Palette Apri tavolozza Failed to load the palette file %1 Impossibile caricare il file della tavolozza %1 color_widgets::GradientEditor Add Color Add Color Remove Color Rimuovi colore Edit Color... Modifica colore... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colori) color_widgets::Swatch Clear Color Colore chiaro %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_ja.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher アプリケーションランチャー Choose an app to open the capture キャプチャーを開くアプリケーションを選択する AppLauncherWidget Open With 次で開く Launch in terminal 端末内で起動する Keep open after selection 選択後も開いたままにする Error エラー Unable to launch in terminal. 端末内で起動できません。 Unable to write in 書き込めません: ArrowTool Arrow 矢印 Set the Arrow as the paint tool ペイントツールとして「矢印」をセットする BlurTool Blur ぼかし Set Blur as the paint tool ペイントツールとして「ぼかし」をセットする CaptureLauncher <b>Capture Mode</b> <b>キャプチャーモード</b> Rectangular Region 四角形選択 Full Screen (Current Display) 全画面(このディスプレイ) Full Screen (All Monitors) 全画面(すべてのディスプレイ) No Delay ディレイなし second seconds Take new screenshot 新しいキャプチャー Area: 選択タイプ: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: ディレイ: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen 画面をキャプチャーできません Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel マウスホイール Change tool size Change tool size Right Click 右クリック Show color picker カラーピッカーを表示する Open side panel Open side panel Esc Esc Exit 終了 Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. マウスで領域を選択、Esc を押すと終了。 Enter を押すと画面をキャプチャー。 マウスの右ボタンでカラーピッカーを表示。 マウスホイールでツールの太さ等を変更。 スペースを押すとサイドパネルを開く。 Tool Settings ツール設定 CircleCountTool Circle Counter 丸カウンター Add an autoincrementing counter bubble 自動的に増加する丸カウンターを追加する CircleTool Circle 円形 Set the Circle as the paint tool ペイントツールとして「円形」をセットする ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Update Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error エラー Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset リセット Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration 設定 Interface インターフェース Filename Editor ファイル名エディター General 全般 Shortcuts ショートカット Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available 新しいバージョン%1が公開されました You have the latest version 最新バージョンです Failed to get information about the latest version. 最新バージョン情報を取得に失敗しました。 Error エラー Unable to close active modal widgets アクティブなモーダルを閉じることができません &Take Screenshot スクリーンショットを撮る(&T) &Open Launcher ランチャーを開く(&O) &Configuration 設定(&C) &About ついて(&A) Check for updates 更新をチェックする &Latest Uploads 最新アップロード(&L) &Information 情報(&I) &Quit 終了(&Q) CopyTool Copy コピー Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard 選択範囲をクリップボードにコピーする DBusUtils Unable to connect via DBus DBus に接続できません ExitTool Exit 終了 Leave the capture screen 画面キャプチャーを終了する FileNameEditor Edit the name of your captures: キャプチャー名の編集: Edit: 編集: Preview: プレビュー: Save 保存 Saves the pattern パターンを保存する Restore Restore Reset リセット Restores the saved pattern 保存されたパターンに戻す Clear 消去 Deletes the name 名前を削除する Flameshot Error エラー Unable to close active modal widgets アクティブなモーダルを閉じることができません URL copied to clipboard. URL copied to clipboard. FlameshotDaemon New version %1 is available 新しいバージョン%1が公開されました You have the latest version 最新バージョンです Failed to get information about the latest version. 最新バージョン情報を取得に失敗しました。 Unable to connect via DBus DBus に接続できません GeneneralConf Show help message ヘルプメッセージを表示する Show the help message at the beginning in the capture mode. キャプチャーモード開始時にヘルプメッセージを表示する。 Show desktop notifications デスクトップの通知を表示する Show tray icon トレイアイコンを表示する Show the systemtray icon システムトレイアイコンを表示する Import インポート Error エラー Unable to read file. ファイルを読み込めません。 Unable to write file. ファイルに書き込めません。 Save File ファイルを保存 Confirm Reset リセットの確認 Are you sure you want to reset the configuration? 設定をリセットしてもよろしいですか? Configuration File 設定ファイル Export エクスポート Reset リセット Launch at startup スタートアップ時に起動する Launch Flameshot Flameshot を起動する GeneralConf Import インポート Error エラー Unable to read file. ファイルを読み込みに失敗しました。 Unable to write file. ファイルを書き込みに失敗しました。 Save File ファイルを保存する Confirm Reset よろしい Are you sure you want to reset the configuration? 設定をリセットしてよろしいですか? Show help message ヘルプメッセージを表示する Show the help message at the beginning in the capture mode. キャプチャーモード開始時にヘルプメッセージを表示する。 Show the side panel button サイドパネルのボタンを表示する Show the side panel toggle button in the capture mode. キャプチャーモードでサイドパネルのトグルボタンを表示する。 Show desktop notifications デスクトップ通知を表示する Show tray icon トレイアイコンを表示する Show the systemtray icon システムトレイにアプリアイコンを表示する Confirmation required to delete screenshot from the latest uploads 最新アップロードからのキャプチャーを削除する前に確認が必要 Configuration File 設定ファイル Export エクスポート Reset リセット Automatic check for updates 自動的に更新を検索する Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup システム起動時に起動する Launch Flameshot Flameshotを起動する Show welcome message on launch 起動時にようこそメッセージを表示する Use large predefined color palette Use large predefined color palette Copy URL after upload アップロードあとでURLをコピーする Copy URL and close window after upload アップロードあとでURLをコピーしてウィンドウを閉じる Save image after copy コピーあとで画像を保存する Save image file after copying it コピーあとで、画像ファイルを保存する Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path パスを保存する Change... 変更… Use fixed path for screenshots to save 一定なパスにキャプチャーを保存する Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) JPEGフォーマットでクリップボードにコピーする(PNG規定) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save 保存するあとでファイルパスをコピーする Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder フォルダーを選択 Unable to write to directory. フォルダーで書き込みに失敗しました。 Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads 最新のアップロード Screenshots history is empty キャプチャー歴史がない Copy URL URL をコピーする URL copied to clipboard. URL がクリップボードにコピーされました。 Open in browser ブラウザーで開く Confirm to delete よろしい Are you sure you want to delete a screenshot from the latest uploads and server? サーバーとローカルからのキャプチャーを削除してよろしいですか? ImgS3Uploader Uploading Image 画像をアップロード中 URL copied to clipboard. URL をクリップボードにコピーしました。 Error エラー ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image 画像をアップロード中 Unable to open the URL. URL を開けません。 URL copied to clipboard. URL をクリップボードにコピーしました。 Screenshot copied to clipboard. スクリーンショットをクリップボードにコピーしました。 Copy URL URL をコピー Open URL URL を開く Delete image 画像を削除 Image to Clipboard. 画像をクリップボードへ。 ImgUploaderBase Upload image Upload image Uploading Image 画像をアップロード中 Copy URL Copy URL Open URL URL を開く Delete image 画像を削除 Image to Clipboard. 画像をクリップボードへ。 Save image Save image Unable to open the URL. URL を開けません。 URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. スクリーンショットをクリップボードにコピーしました。 Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader 画像アップローダー Upload the selection Upload the selection ImgurUploader Upload to Imgur Imgur にアップロード Uploading Image 画像をアップロード中 Copy URL URL をコピー Open URL URL を開く Delete image 画像を削除 Image to Clipboard. 画像をクリップボードへ。 Unable to open the URL. URL を開けません。 URL copied to clipboard. URL をクリップボードにコピーしました。 Screenshot copied to clipboard. スクリーンショットをクリップボードにコピーしました。 ImgurUploaderTool Image Uploader 画像アップローダー Upload the selection to Imgur Imgur に選択範囲をアップロードする InfoWindow About このアプリケーションについて Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click 右クリック Mouse Wheel マウスホイール Move selection 1px 選択範囲を 1px 動かす Resize selection 1px 選択範囲を 1px リサイズする Quit capture キャプチャーを終了する Copy to clipboard クリップボードにコピーする Save selection as a file 選択範囲をファイルに保存する Undo the last modification 最後の変更を元に戻す Show color picker カラーピッカーを表示する Change the tool's thickness ツールの値 (太さや濃さ) を変更する Key キー Description 説明 <u><b>License</b></u> <u><b>ライセンス</b></u> <u><b>Version</b></u> <u><b>バージョン</b></u> <u><b>Shortcuts</b></u> <u><b>ショートカット</b></u> Available shortcuts in the screen capture mode. スクリーンキャプチャーモードで利用可能なショートカット。 InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line 直線 Set the Line as the paint tool ペイントツールとして「直線」をセットする MarkerTool Marker マーカー Set the Marker as the paint tool ペイントツールとして「マーカー」をセットする MoveTool Move 移動 Move the selection area 選択範囲を移動する PencilTool Pencil 鉛筆 Set the Pencil as the paint tool ペイントツールとして「鉛筆」をセットする PinTool Pin Tool 固定ツール Pin image on the desktop 選択範囲をデスクトップ上に配置する PinWidget Context menu Context menu Copy to clipboard クリップボードにコピーする Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate ピクセル化する Set Pixelate as the paint tool. Set Pixelate as the paint tool ピクセル化がペイントツールとして設定する PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 ショートカット%1を設定に失敗しました。エラー%2 Failed to unregister %1. Error: %2 ショートカット%1を削除に失敗しました。エラー%2 QObject Save Error 保存エラー Capture saved as キャプチャーを保存しました: Capture saved to clipboard. キャプチャーがクリップボードにコピーされました。 Capture saved to clipboard キャプチャーをクリップボードに保存しました Error while saving to clipboard コピーに失敗しました Error trying to save as 保存時にエラーが発生しました: Save screenshot キャプチャーを保存する Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as キャプチャーがコピーされて として保存されました Unable to connect via DBus DBus に接続できません Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See 見る Capture the entire desktop. デスクトップをキャプチャー。 Open the capture launcher. キャプチャーランチャーを開く。 Start a manual capture in GUI mode. 手動的にGUIキャプチャーを開始する。 Configure 設定 Capture a single screen. 単一のディスプレイをキャプチャー。 Path where the capture will be saved キャプチャーの保存パス Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard キャプチャーがクリップボードにコピーする Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds ミリ秒でディレイ時間 Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern ファイル名のパターンを設定する Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon トレイアイコンを無効・有効 Enable or disable run at startup スタートアップに起動を無効・有効 Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode キャプチャーでヘルプメッセージを表示 Define the main UI color マインのUI色を設定する Define the contrast UI color コントラストのUI色を設定する Print raw PNG capture PNGのキャプチャーを印刷する Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error エラー Unable to write in 書き込めません: Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. URL をクリップボードにコピーしました。 Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture キャプチャーを終了する Screenshot history Screenshot history Capture screen Capture screen Show color picker カラーピッカーを表示する Change the tool's size Change the tool's size Change the tool's thickness ツールの値 (太さや濃さ) を変更する RectangleTool Rectangle 矩形 Set the Rectangle as the paint tool ペイントツールとして「矩形」をセットする RedoTool Redo やり直し Redo the next modification 次の変更にやり直す SaveTool Save 保存 Save screenshot to a file Save screenshot to a file Save the capture キャプチャーを保存する ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen 画面をキャプチャーできません SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection 矩形選択 Set Selection as the paint tool ペイントツールとして「矩形選択」をセットする SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. スクリーンキャプチャーモードで利用可能なショートカット。 Description 説明 Key キー Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: アクティブな色: Press ESC to cancel ESC でキャンセル Active tool size: Active tool size: Active Color: Active Color: Grab Color 色の取得 Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator 選択サイズインジケーター Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) 選択範囲の寸法 (X Y) を表示する StrftimeChooserWidget Century (00-99) 世紀 (00-99) Year (00-99) 年 (00-99) Year (2000) 年 (2000) Month Name (jan) 月 (jan) Month Name (january) 月 (january) Month (01-12) 月 (01-12) Week Day (1-7) 週日 (1-7) Week (01-53) 週 (01-53) Day Name (mon) 曜日 (月) Day Name (monday) 曜日 (月曜日) Day (01-31) 日 (01-31) Day of Month (1-31) 日 (1-31) Day (001-366) 日 (001-366) Time (%H-%M-%S) 時刻 (%H-%M-%S) Time (%H-%M) 時刻 (%H-%M) Hour (00-23) 時 (00-23) Hour (01-12) 時 (01-12) Minute (00-59) 分 (00-59) Second (00-59) 秒 (00-59) Full Date (%m/%d/%y) 年月日 (%m/%d/%y) Full Date (%Y-%m-%d) 年月日 (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot の情報 TextConfig StrikeOut 取り消し線 Underline 下線 Bold 太字 Italic 斜体 Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text テキスト Add text to your capture キャプチャーにテキストを追加する TrayIcon &Take Screenshot スクリーンショットを撮る(&T) &Open Launcher ランチャーを開く(&O) &Configuration 設定(&C) &About ついて(&A) Check for updates 更新をチェックする New version %1 is available 新しいバージョン%1が公開されました &Quit 終了(&Q) &Latest Uploads 最新アップロード(&L) &Open Save Path UIcolorEditor UI Color Editor UI カラーエディター Change the color moving the selectors and see the changes in the preview buttons. セレクターを動かして色を変更し、プレビューボタンの色がどう変化するか確認してください。 Select a Button to modify it 変更するボタンを選択してください Main Color メインカラー Click on this button to set the edition mode of the main color. このボタンをクリックすると、メインカラーの編集モードをセットします。 Contrast Color コントラストカラー Click on this button to set the edition mode of the contrast color. このボタンをクリックすると、コントラストカラーの編集モードをセットします。 UndoTool Undo 元に戻す Undo the last modification 最後の変更を元に戻す UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty キャプチャー歴史がない UploadLineItem Form Form TextLabel TextLabel Copy URL Copy URL Open In Browser Open In Browser Confirm to delete よろしい Are you sure you want to delete a screenshot from the latest uploads and server? サーバーとローカルからのキャプチャーを削除してよろしいですか? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: 選択範囲外の不透明度: UI Color Editor UI カラーエディター Colorpicker Editor Colorpicker Editor Button Selection ボタンの選択 Select All すべて選択 color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_ka.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher აპლიკაციის გამშვები Choose an app to open the capture აირჩიეთ აპლიკაცია სურათის გასახსნელად AppLauncherWidget Open With გახსნა პროგრამით Launch in terminal ტერმინალში გაშვება Keep open after selection არ დახურო დიალოგი არჩევის შემდეგ Error შეცდომა Unable to write in შემდეგ მისამართზე ჩაწერა ვერ მოხერხდა: Unable to launch in terminal. ტერმინალში გაშვება ვერ მოხერხდა. ArrowTool Arrow ისარი Set the Arrow as the paint tool ისრის ხელსაწყოს არჩევა სახატავად BlurTool Blur გაბუნდოვნება Set Blur as the paint tool გაბუნდოვნების ხელსაწყოს არჩევა სახატავად CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Rectangular Region Full Screen (Current Display) Full Screen (Current Display) Full Screen (All Monitors) Full Screen (All Monitors) No Delay No Delay second second seconds seconds Take new screenshot Take new screenshot Area: Area: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: Delay: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen ეკრანის გადაღება ვერ მოხერხდა Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel მაუსის გორგოლაჭი Change tool size Change tool size Right Click მაუსის მარჯვენა ღილაკი Show color picker ფერის შესარჩევის ჩვენება Open side panel Open side panel Esc Esc Exit გამოსვლა Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Tool Settings Tool Settings CircleCountTool Circle Counter Circle Counter Add an autoincrementing counter bubble Add an autoincrementing counter bubble CircleTool Circle წრე Set the Circle as the paint tool წრის ხელსაწყოს არჩევა სახატავად ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Update Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error შეცდომა Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset განულება Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration პარამეტრები Interface ინტერფეისი Filename Editor ფაილის სახელის რედაქტორი General ზოგადი Shortcuts Shortcuts Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error შეცდომა Unable to close active modal widgets Unable to close active modal widgets &Take Screenshot &Take Screenshot &Open Launcher &Open Launcher &Configuration &პარამეტრები &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. &Information &ინფორმაცია &Quit &გამოსვლა CopyTool Copy კოპირება Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard Copy the selection into the clipboard DBusUtils Unable to connect via DBus DBus-ით დაკავშირება ვერ მოხერხდა ExitTool Exit გამოსვლა Leave the capture screen ეკრანის გადაღების დატოვება FileNameEditor Edit the name of your captures: შეცვალეთ თქვენი სურათების სახელი: Edit: თარგი: Preview: გადახედვა: Save შენახვა Saves the pattern თარგის შენახვა Restore Restore Reset განულება Restores the saved pattern შენახული შაბლონის განულება Clear გაწმენდა Deletes the name სახელის წაშლა Flameshot Error შეცდომა Unable to close active modal widgets Unable to close active modal widgets URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. FlameshotDaemon New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Unable to connect via DBus DBus-ით დაკავშირება ვერ მოხერხდა GeneneralConf Import იმპორტირება Error შეცდომა Unable to read file. ფაილის წაკითხვა ვერ მოხერხდა. Unable to write file. ფაილის ჩაწერა ვერ მოხერხდა. Save File ფაილის შენახვა Confirm Reset განულების დადასტურება Are you sure you want to reset the configuration? დარწმუნებული ხართ, რომ გსურთ პარამეტრების განულება? Show help message დახმარების შეტყობინების ნახვა Show the help message at the beginning in the capture mode. დახმარების შეტყობინების ნახვა გადაღების რეჟიმის დაწყებისას. Show desktop notifications ცნობების ჩვენება სამუშაო მაგიდაზე Show tray icon ხატულის ჩვენება სისტემურ პანელზე Show the systemtray icon ხატულის ჩვენება სისტემურ პანელზე Configuration File პარამეტრების ფაილი Export ექსპორტირება Reset განულება Launch at startup გაშვება სისტემის ჩატვირთვისას GeneralConf Import იმპორტირება Error შეცდომა Unable to read file. ფაილის წაკითხვა ვერ მოხერხდა. Unable to write file. ფაილის ჩაწერა ვერ მოხერხდა. Save File ფაილის შენახვა Confirm Reset განულების დადასტურება Are you sure you want to reset the configuration? დარწმუნებული ხართ, რომ გსურთ პარამეტრების განულება? Show help message დახმარების შეტყობინების ნახვა Show the help message at the beginning in the capture mode. დახმარების შეტყობინების ნახვა გადაღების რეჟიმის დაწყებისას. Show the side panel button Show the side panel button Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications ცნობების ჩვენება სამუშაო მაგიდაზე Show tray icon ხატულის ჩვენება სისტემურ პანელზე Show the systemtray icon ხატულის ჩვენება სისტემურ პანელზე Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File პარამეტრების ფაილი Export ექსპორტირება Reset განულება Automatic check for updates Automatic check for updates Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup გაშვება სისტემის ჩატვირთვისას Launch Flameshot Launch Flameshot Show welcome message on launch Show welcome message on launch Use large predefined color palette Use large predefined color palette Copy URL after upload Copy URL after upload Copy URL and close window after upload Copy URL and close window after upload Save image after copy Save image after copy Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path Save Path Change... Change... Use fixed path for screenshots to save Use fixed path for screenshots to save Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy file path after save Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder Choose a Folder Unable to write to directory. Unable to write to directory. Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL URL-ის კოპირება URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image სურათის ატვირთვა URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. Error შეცდომა ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image სურათის ატვირთვა Unable to open the URL. URL-ის გახსნა ვერ მოხერხდა. URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. Screenshot copied to clipboard. სურათი დაკოპირდა გაცვლის ბუფერში. Copy URL URL-ის კოპირება Open URL URL-ის გახსნა Image to Clipboard. სურათის გაცვლის ბუფერში გაგზავნა ImgUploaderBase Upload image Upload image Uploading Image სურათის ატვირთვა Copy URL URL-ის კოპირება Open URL URL-ის გახსნა Delete image Delete image Image to Clipboard. სურათის გაცვლის ბუფერში გაგზავნა Save image Save image Unable to open the URL. URL-ის გახსნა ვერ მოხერხდა. URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. Screenshot copied to clipboard. სურათი დაკოპირდა გაცვლის ბუფერში. Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader სურათის ამტვირთველი Upload the selection Upload the selection ImgurUploader Upload to Imgur Imgur-ზე ატვირთვა Uploading Image სურათის ატვირთვა Copy URL URL-ის კოპირება Open URL URL-ის გახსნა Delete image Delete image Image to Clipboard. სურათის გაცვლის ბუფერში გაგზავნა Unable to open the URL. URL-ის გახსნა ვერ მოხერხდა. URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. Screenshot copied to clipboard. სურათი დაკოპირდა გაცვლის ბუფერში. ImgurUploaderTool Image Uploader სურათის ამტვირთველი Upload the selection to Imgur შერჩეულის Imgur-ზე ატვირთვა InfoWindow About პროგრამის შესახებ Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click მაუსის მარჯვენა ღილაკი Mouse Wheel მაუსის გორგოლაჭი Move selection 1px შერჩეულის გადაადგილება 1px-ით Resize selection 1px შერჩეულის ზომის შეცვლა 1px-ით Quit capture გადაღებიდან გამოსვლა Copy to clipboard გაცვლის ბუფერში კოპირება Save selection as a file შერჩეულის ფაილად შენახვა Undo the last modification ბოლო ცვლილების გაუქმება Show color picker ფერის შესარჩევის ჩვენება Change the tool's thickness ხელსაწყოს სისქის შეცვლა Available shortcuts in the screen capture mode. გადაღების რეჟიმში ხელმისაწვდომი მალსახმობები. Key კლავიში Description აღწერა <u><b>License</b></u> <u><b>ლიცენზია</b></u> <u><b>Version</b></u> <u><b>ვერსია</b></u> <u><b>Shortcuts</b></u> <u><b>მალსახმობები</b></u> InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line ხაზი Set the Line as the paint tool ხაზის ხელსაწყოს არჩევა სახატავად MarkerTool Marker მარკერი Set the Marker as the paint tool მარკერის ხელსაწყოს არჩევა სახატავად MoveTool Move გადაადგილება Move the selection area შერჩეული არის გადაადგილება PencilTool Pencil ფანქარი Set the Pencil as the paint tool ფანქრის ხელსაწყოს არჩევა სახატავად PinTool Pin Tool Pin Tool Pin image on the desktop Pin image on the desktop PinWidget Context menu Context menu Copy to clipboard გაცვლის ბუფერში კოპირება Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Save Error შეცდომა შენახვისას Capture saved as სურათი შენახულია როგორც: Capture saved to clipboard. Capture saved to clipboard. Error while saving to clipboard Error while saving to clipboard Error trying to save as შეცდომა მცდელობისას შენახულიყო როგორც: Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus DBus-ით დაკავშირება ვერ მოხერხდა Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error შეცდომა Unable to write in შემდეგ მისამართზე ჩაწერა ვერ მოხერხდა: Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. URL დაკოპირდა გაცვლის ბუფერში. Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture გადაღებიდან გამოსვლა Screenshot history Screenshot history Capture screen Capture screen Show color picker ფერის შესარჩევის ჩვენება Change the tool's size Change the tool's size Change the tool's thickness ხელსაწყოს სისქის შეცვლა RectangleTool Rectangle მართკუთხედი Set the Rectangle as the paint tool მართკუთხედის ხელსაწყოს არჩევა სახატავად RedoTool Redo Redo Redo the next modification Redo the next modification SaveTool Save შენახვა Save screenshot to a file Save screenshot to a file Save the capture სურათის შენახვა ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen ეკრანის გადაღება ვერ მოხერხდა SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection მართკუთხა შერჩევა Set Selection as the paint tool შერჩევის ხელსაწყოს არჩევა სახატავად SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. გადაღების რეჟიმში ხელმისაწვდომი მალსახმობები. Description აღწერა Key კლავიში Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active tool size: Active Color: Active Color: Grab Color Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator შერჩეულის ზომის მაჩვენებელი Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) აჩვენებს შერჩეული არის განზომილებებს (X Y) StrftimeChooserWidget Century (00-99) საუკუნე (00-99) Year (00-99) წელი (00-99) Year (2000) წელი (2000) Month Name (jan) თვის სახელი (იან) Month Name (january) თვის სახელი (იანვარი) Month (01-12) თვე (01-12) Week Day (1-7) კვირის დღე (1-7) Week (01-53) კვირა (01-53) Day Name (mon) დღის სახელი (ორშ) Day Name (monday) დღის სახელი (ორშაბათი) Day (01-31) დღე (01-31) Day of Month (1-31) თვის დღე (1-31) Day (001-366) დღე (001-366) Time (%H-%M-%S) Time (%H-%M-%S) Time (%H-%M) Time (%H-%M) Hour (00-23) საათი (00-23) Hour (01-12) საათი (01-12) Minute (00-59) წუთი (00-59) Second (00-59) წამი (00-59) Full Date (%m/%d/%y) სრული თარიღი (%m/%d/%y) Full Date (%Y-%m-%d) სრული თარიღი (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot Info TextConfig StrikeOut StrikeOut Underline Underline Bold Bold Italic Italic Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Text Add text to your capture Add text to your capture TrayIcon &Take Screenshot &Take Screenshot &Open Launcher &Open Launcher &Configuration &პარამეტრები &About &About Check for updates Check for updates New version %1 is available New version %1 is available &Quit &გამოსვლა &Latest Uploads &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor ინტერფეისის ფერის რედაქტორი Change the color moving the selectors and see the changes in the preview buttons. შეცვალეთ ფერი ნიშნულის გადაადგილებით და შეხედეთ ცვლილებებს გადასახედ ღილაკებზე. Select a Button to modify it აირჩიეთ ღილაკი მის შესაცვლელად Main Color ძირითადი ფერი Click on this button to set the edition mode of the main color. დააწექით ამ ღილაკს ძირითადი ფერის არჩევის რეჟიმის ჩასართავად. Contrast Color კონტრასტული ფერი Click on this button to set the edition mode of the contrast color. დააწექით ამ ღილაკს კონტრასტული ფერის არჩევის რეჟიმის ჩასართავად. UndoTool Undo უკუქმნა Undo the last modification ბოლო ცვლილების გაუქმება UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty Screenshots history is empty UploadLineItem Form Form TextLabel TextLabel Copy URL URL-ის კოპირება Open In Browser Open In Browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: შერჩეულის გარე არეს გაუმჭვირვალობა UI Color Editor ინტერფეისის ფერის რედაქტორი Colorpicker Editor Colorpicker Editor Button Selection ღილაკის არჩევა Select All ყველაფრის შერჩევა color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_km.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Unable to launch in terminal. Unable to write in ArrowTool Arrow Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second seconds Take new screenshot Area: Capture Launcher TextLabel Capture Mode Delay: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Mouse Select screenshot area Mouse Wheel Change tool size Right Click Show color picker Open side panel Esc Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Precisely select color Hold Left Click Toggle magnifier Space or Right Click Cancel Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Unable to close active modal widgets URL copied to clipboard. FlameshotDaemon New version %1 is available You have the latest version Failed to get information about the latest version. Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Error Unable to read file. Unable to write file. Save File Confirm Reset Are you sure you want to reset the configuration? Show help message Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Show tray icon Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Export Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image Copy URL Open URL Delete image Image to Clipboard. Save image Unable to open the URL. URL copied to clipboard. Screenshot copied to clipboard. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus Powerful yet simple to use screenshot software. See Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Start a manual capture in GUI mode. Configure Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Unable to write in Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Arguments Arguments arguments arguments Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Screenshot history Capture screen Show color picker Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Description Key Left Double-click Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection right 1px Resize selection up 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Move selection left 1px Move selection right 1px Move selection up 1px Move selection down 1px Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Open Launcher &Configuration &About Check for updates New version %1 is available &Quit &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty UploadLineItem Form TextLabel Copy URL Open In Browser Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_ko.ts ================================================ AbstractWidgetList Add New 새로 추가 Move Up 위로 이동 Move Down 아래로 이동 Remove 제거 AcceptTool Accept 수락 Accept the capture 캡처 수락 AppLauncher App Launcher 앱 런처 Choose an app to open the capture 캡처를 열 앱 선택 AppLauncherWidget Open With 다음으로 열기 Launch in terminal 터미널에서 실행 Keep open after selection 선택 후에도 열려 있음 유지 Error 오류 Unable to launch in terminal. 터미널에서 실행할 수 없습니다. Unable to write in 작성할 수 없음 ArrowTool Arrow 화살표 Set the Arrow as the paint tool 화살표를 페인트 도구로 설정 BlurTool Blur ぼかし Set Blur as the paint tool ペイントツールとして「ぼかし」をセットする CaptureLauncher <b>Capture Mode</b> <b>캡처 모드</b> Rectangular Region 직사각형 영역 Full Screen (Current Display) 전체 화면 (현재 디스플레이) Full Screen (All Monitors) 전체 화면 (모든 모니터) No Delay 지연 없음 second seconds Take new screenshot 새 스크린샷 찍기 Area: 영역: Capture Launcher 캡처 런처 TextLabel 텍스트 레이블 Capture Mode 캡처 모드 Delay: 지연: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen 화면을 캡처할 수 없습니다 Mouse 마우스 Select screenshot area 스크린샷 영역 선택 Mouse Wheel 마우스 휠 Change tool size 도구 크기 변경 Right Click 오른쪽 클릭 Show color picker 색상 선택기 표시 Open side panel 측면 패널 열기 Esc Esc Exit 종료 Quit Capture 캡처 종료 Are you sure you want to quit capture? 캡처를 종료하시겠습니까? Do not show this again 다시 표시하지 않음 Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot은 초점을 잃었습니다. 키보드 단축키는 어딘가를 클릭하기 전까지는 작동하지 않습니다. Configuration error resolved. Launch `flameshot gui` again to apply it. 구성 오류가 해결되었습니다. 'flameshot gui'를 다시 실행하여 적용합니다. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. 마우스로 영역을 선택하거나 Esc로 종료합니다. Enter로 눌러 화면을 캡처합니다. 우클릭으로 색상선택기를 봅니다. 마우스 휠로 사용자 도구의 두께를 바꿉니다. Space로 사이드 패널을 엽니다. Tool Settings 도구 설정 CircleCountTool Circle Counter 원형 카운터 Add an autoincrementing counter bubble 자동 증가 카운터 버블 추가 CircleTool Circle 원형 Set the Circle as the paint tool 원을 페인트 도구로 설정 ColorDialog Select Color 색상 선택 Saturation 채도 Hue 색조 Hex 16진수 Blue 파랑 Value Green 녹색 Alpha 알파 Red 빨강 ColorGrabWidget Accept color 색상 허용 Enter or Left Click 입력 또는 왼쪽 클릭 Precisely select color 색상을 정확하게 선택하세요 Hold Left Click 왼쪽 클릭 유지 Toggle magnifier 돋보기 전환 Space or Right Click 스페이스 또는 오른쪽 클릭 Cancel 취소 Esc Esc ColorPickerEditor Edit Preset: 프리셋 편집: Enter color to update preset 색상을 입력하여 프리셋 업데이트 Update 업데이트 Press button to update the selected preset 버튼을 눌러 선택한 프리셋 업데이트 Delete 삭제 Press button to delete the selected preset 버튼을 눌러 선택한 프리셋 삭제 Add Preset: 프리셋 추가: Enter color manually or select it using the color-wheel 색상을 수동으로 입력하거나 색상 휠을 사용하여 선택 Add 추가 Press button to add preset 버튼을 눌러 프리셋 추가 Error 오류 Unable to add preset. Maximum limit reached. 프리셋을 추가할 수 없습니다. 최대 한도에 도달했습니다. Unable to remove preset. Minimum limit reached. 프리셋을 제거할 수 없습니다. 최소 한도에 도달했습니다. ConfigErrorDetails Configuration errors 구성 오류 ConfigHandler Unrecognized setting: '%1' 인식되지 않는 설정: '%1' Unrecognized shortcut name: '%1'. 인식되지 않는 단축키 이름: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 단축키 충돌: '%1'과 '%2'는 같은 단축키를 가지고 있습니다: %3 Bad value in '%1'. Expected: %2 '%1'에서 나쁜 값. 예상: %2 You have successfully resolved the configuration error. 구성 오류를 성공적으로 해결했습니다. The configuration contains an error. Open configuration to resolve. 구성에 오류가 있습니다. 해결하려면 구성을 엽니다. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigHandler의 설정 키 '%1'이 잘못되었습니다. 이를 버그로 보고해 주세요. ConfigResolver Resolve configuration errors 구성 오류 해결 <b>You must resolve all errors before continuing:</b> <b>계속하기 전에 모든 오류를 해결해야 합니다:</b> Reset 재설정 Reset to the default value. 기본값으로 재설정합니다. Remove 제거 Remove this setting. 이 설정을 제거합니다. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. 일부 키보드 단축키에는 충돌이 있습니다. 이것은 flameshot이 시작되는 것을 막지 못할 것입니다. 구성 파일에서 수동으로 해결해 주세요. Resolve all 모두 해결 Resolve all listed errors. 나열된 모든 오류를 해결합니다. Details 세부 사항 ConfigWindow Configuration 구성 Interface 인터페이스 Filename Editor 파일 이름 편집기 General 일반 Shortcuts 단축키 Resolve 해결 <b>Configuration file has errors. Resolve them before continuing.</b> <b>구성 파일에 오류가 있습니다. 계속 진행하기 전에 문제를 해결하세요.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error 오류 Unable to close active modal widgets Unable to close active modal widgets &Take Screenshot 스크린샷 촬영(&T) &Open Launcher 런처 열기(&O) &Configuration 설정(&C) &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads URL copied to clipboard. URL을 클립보드에 복사했습니다. &Information 정보(&I) &Quit 종료(&Q) CopyTool Copy 복사 Copy selection to clipboard 클립보드에 선택 항목 복사 Copy the selection into the clipboard 선택 영역을 클립보드에 복사 DBusUtils Unable to connect via DBus DBus에 접속할 수 없습니다 ExitTool Exit 종료 Leave the capture screen 캡처 화면 나가기 FileNameEditor Edit the name of your captures: 캡처 이름 편집: Edit: 편집: Preview: 미리보기: Save 저장 Saves the pattern 패턴 저장 Restore 복원 Reset 초기화 Restores the saved pattern 저장된 패턴 복원 Clear 지우기 Deletes the name 이름 삭제 Flameshot Error 오류 Unable to close active modal widgets 활성 모드 위젯을 닫을 수 없습니다 URL copied to clipboard. URL이 클립보드에 복사되었습니다. FlameshotDaemon New version %1 is available 새 버전 %1 사용 가능 You have the latest version 최신 버전이 있습니다 Failed to get information about the latest version. 최신 버전에 대한 정보를 얻지 못했습니다. Unable to connect via DBus DBus를 통해 연결할 수 없습니다 GeneneralConf Show help message 도움 메세지 보기 Show the help message at the beginning in the capture mode. 캡처 모드 시작에 도움 메세지 보기. Show desktop notifications 데스크톱 알림 사용 Show tray icon 트레이 아이콘 보기 Show the systemtray icon 시스템 트레이 아이콘 보기 Import 불러오기 Error 오류 Unable to read file. 파일을 읽을 수 없습니다. Unable to write file. 파일을 작성할 수 없습니다. Save File 파일을 저장 Confirm Reset 초기화 확인 Are you sure you want to reset the configuration? 설정을 초기화해도 괜찮습니까? Configuration File 설정 파일 Export 내보내기 Reset 초기화 Launch at startup startup의 적절한 번역이 필요합니다. 컴퓨터를 시작할 때 실행 Launch Flameshot Flameshot을 실행 Close after capture 캡처 후 닫기 Close after taking a screenshot 스크린샷을 찍은 후 닫기 Copy URL after upload 업로드 이후 URL 복사 Copy URL and close window after upload 업로드 이후 URL을 복사하고 창 닫기 GeneralConf Import 가져오기 Error 오류 Unable to read file. 파일을 읽을 수 없습니다. Unable to write file. 파일을 쓸 수 없습니다. Save File 파일 저장 Confirm Reset 재설정 확인 Are you sure you want to reset the configuration? 구성을 재설정하시겠습니까? Show help message 도움말 메시지 표시 Show the help message at the beginning in the capture mode. 캡처 모드 시작에 도움 메세지 보기. Show the side panel button 측면 패널 버튼 표시 Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications 데스크톱 알림 표시 Show tray icon 트레이 아이콘 표시 Show the systemtray icon 시스템 트레이 아이콘 보기 Confirmation required to delete screenshot from the latest uploads 최신 업로드에서 스크린샷을 삭제하려면 확인이 필요합니다 Configuration File 구성 파일 Export 내보내기 Reset 재설정 Automatic check for updates 업데이트 자동 확인 Allow multiple flameshot GUI instances simultaneously 여러 개의 flameshot GUI 인스턴스 동시 허용 Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup 컴퓨터를 시작할 때 실행 Launch Flameshot Flameshot을 실행 Show welcome message on launch 시작 시 환영 메시지 표시 Use large predefined color palette 미리 정의된 큰 색상 팔레트 사용 Copy URL after upload 업로드 후 URL 복사 Copy URL and close window after upload 업로드 이후 URL을 복사하고 창 닫기 Save image after copy 복사 후 이미지 저장 Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode 캡처 모드의 시작 부분에 도움말 메시지 표시 Use last region for GUI mode GUI 모드에 마지막 영역 사용 Use the last region as the default selection for the next screenshot in GUI mode GUI 모드에서 마지막 영역을 다음 스크린샷의 기본 선택으로 사용 Show the side panel toggle button in the capture mode 캡처 모드에서 측면 패널 전환 버튼 표시 Enable desktop notifications 데스크톱 알림 활성화 Show abort notifications 중단 알림 표시 Enable abort notifications 중단 알림 활성화 Show icon in the system tray 시스템 트레이에 아이콘 표시 Use grim to capture screenshots 스크린샷을 캡처하려면 grim 사용 Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim은 화면 복사 프로토콜을 기반으로 화면을 캡처하는 유일한 wayland 유틸리티입니다. 일반적으로 Sway, hyprland 등과 같은 최소한의 wayland 창 관리자에서만 활성화됩니다. Ask for confirmation to delete screenshot from the latest uploads 최신 업로드에서 스크린샷 삭제 확인 요청 Check for updates automatically 자동으로 업데이트 확인 This allows you to take screenshots of Flameshot itself for example 이를 통해 예를 들어 Flameshot 자체의 스크린샷을 찍을 수 있습니다 Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot 스크린샷을 찍을 때 화면 중앙에 환영 메시지 상자 표시 Use a large predefined color palette 미리 정의된 큰 색상 팔레트 사용 Copy on double click 더블 클릭 시 복사 Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed 필요하지 않을 때 메모리에서 자동으로 로드 해제 Automatically close daemon (background process) when it is not needed 필요하지 않을 때 데몬 (배경 프로세스)을 자동으로 닫습니다 Launch in background at startup 시작 시 백그라운드에서 실행 Launch Flameshot daemon (background process) when computer is booted 컴퓨터가 부팅될 때 Flameshot 데몬 (배경 프로세스) 실행 Ask before quit capture 캡처를 중단하기 전에 묻기 Show the confirmation prompt before ESC quit ESC 종료 전 확인 프롬프트 표시 Enable Copy to clipboard on Double Click 더블 클릭 시 클립보드에 복사 활성화 Copy URL after uploading was successful 업로드 후 URL 복사에 성공했습니다 After copying the screenshot, save it to a file as well 스크린샷을 복사한 후 파일에도 저장 Save Path 경로 저장 Change... 변경... Use fixed path for screenshots to save 스크린샷에 고정 경로를 사용하여 저장 Preferred save file extension: 선호하는 저장 파일 확장자: Latest Uploads Max Size 최신 업로드 최대 크기 Imgur Application Client ID Imgur 응용 프로그램 클라이언트 ID Undo limit 실행 취소 제한 Use JPG format for clipboard (PNG default) 클립보드에 JPG 형식 사용 (PNG 기본값) Use lossy JPG format for clipboard (lossless PNG default) 클립보드에 손실이 없는 JPG 형식 사용 (손실 없는 PNG 기본값) Copy file path after save 저장 후 파일 경로 복사 Copy the file path to clipboard after the file is saved 파일이 저장된 후 클립보드에 파일 경로 복사 Anti-aliasing image when zoom the pinned image 고정된 이미지를 확대할 때 안티에일리어싱 이미지 After zooming the pinned image, should the image get smoothened or stay pixelated 고정된 이미지를 확대한 후, 이미지가 매끄러워지거나 픽셀화된 상태로 유지 Upload image without confirmation 확인 없이 이미지 업로드 Choose a Folder 폴더 선택 Unable to write to directory. 디렉터리에 쓸 수 없습니다. Show magnifier 돋보기 표시 Enable a magnifier while selecting the screenshot area 스크린샷 영역을 선택하는 동안 돋보기 활성화 Square shaped magnifier 정사각형 돋보기 Make the magnifier to be square-shaped 돋보기를 정사각형 모양으로 만들기 Milliseconds before geometry display hides; 0 means do not hide 지오메트리 표시 숨기기 전 밀리초, 0은 숨기기 않음을 의미합니다 Set geometry display timeout (ms) 지오메트리 표시 시간 초과 설정 (ms) Selection Geometry Display 선택 지오메트리 표시 Display Location 표시 위치 None 없음 Top Left 왼쪽 상단 Top Right 오른쪽 상단 Bottom Left 왼쪽 하단 Bottom Right 오른쪽 하단 Center 가운데 Quality range of 0-100; Higher number is better quality and larger file size 품질 범위는 0-100이며, 숫자가 높을수록 품질이 좋고 파일 크기가 커집니다 JPEG Quality JPEG 품질 Reverse arrow 역방향 화살표 Draw the arrow head first 화살표 머리 먼저 그리기 Insecure Pixelate 불안정 픽셀레이트 Draw the pixelation effect in an insecure but more asethetic way. 픽셀화 효과를 불안정하지만 더 미학적인 방식으로 그리세요. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL URL을 복사 URL copied to clipboard. URL을 클립보드에 복사했습니다. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader URL copied to clipboard. URL을 클립보드에 복사했습니다. Error 오류 ImgUploadDialog Upload Confirmation 업로드 확인 Do you want to upload this capture? 이 캡처를 업로드하시겠습니까? Upload without confirmation 확인 없이 업로드 ImgUploader Delete image 이미지를 삭제 Unable to open the URL. URL을 열 수 없습니다. URL copied to clipboard. URL을 클립보드에 복사했습니다. Screenshot copied to clipboard. 스크린샷을 클립보드에 복사했습니다. Copy URL URL을 복사 Open URL URL 열기 Image to Clipboard. 이미지를 클립보드로. ImgUploaderBase Upload image Upload image Uploading Image 이미지 업로드 Copy URL URL 복사 Open URL URL 열기 Delete image 이미지 삭제 Image to Clipboard. 이미지를 클립보드에 복사합니다. Save image 이미지 저장 Unable to open the URL. URL을 열 수 없습니다. URL copied to clipboard. URL이 클립보드에 복사되었습니다. Screenshot copied to clipboard. 스크린샷이 클립보드에 복사되었습니다. Unable to save the screenshot to disk. 스크린샷을 디스크에 저장할 수 없습니다. Screenshot saved. 스크린샷이 저장되었습니다. ImgUploaderTool Image Uploader 이미지 업로더 Upload the selection 선택 항목 업로드 ImgurUploader Upload to Imgur Imgur에 업로드 Uploading Image 이미지를 업로드하는 중 Copy URL URL을 복사 Open URL URL 열기 Delete image 이미지를 삭제 Image to Clipboard. 이미지를 클립보드로. Unable to open the URL. URL을 열 수 없습니다. URL copied to clipboard. URL을 클립보드에 복사했습니다. Screenshot copied to clipboard. 스크린샷을 클립보드에 복사했습니다. ImgurUploaderTool Image Uploader 이미지 업로더 Upload the selection to Imgur Imgur에 선택영역을 업로드 InfoWindow About 이 어플리케이션에 대하여 Icon Icon License 라이선스 GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info 복사 정보 SPACEBAR 스페이스바 Right Click 우클릭 Mouse Wheel 마우스 휠 Move selection 1px 선택 영역을 1px 이동 Resize selection 1px 선택 영역을 1px 조정 Quit capture 캡처를 종료 Copy to clipboard 클립보드에 복사 Save selection as a file 선택 영역을 파일로 저장 Undo the last modification 마지막 변경 되돌리기 Toggle visibility of sidebar with options of the selected tool 사이드바를 열어 선택한 도구의 옵션보기 Show color picker 색상 선택기를 표시 Change the tool's thickness 도구 두께 변경 Key Description 설명 <u><b>License</b></u> <u><b>라이센스</b></u> <u><b>Version</b></u> <u><b>버전</b></u> <u><b>Shortcuts</b></u> <u><b>단축키</b></u> Available shortcuts in the screen capture mode. 화면 캡처 모드에서 단축키를 사용할 수 있습니다. InvertTool Invert 반전 Set Inverter as the paint tool 인버터를 페인트 도구로 설정 LineTool Line 직선 Set the Line as the paint tool 페인트 도구로 직선을 설정 MarkerTool Marker 마커 Set the Marker as the paint tool 페인트 도구로 마커를 설정 MoveTool Move 이동 Move the selection area 선택 영역을 이동 PencilTool Pencil 연필 Set the Pencil as the paint tool 페인트 도구로 연필을 설정 PinTool Pin Tool 고정 도구 Pin image on the desktop 선택 영역을 데스크톱 위에 고정 PinWidget Context menu 컨텍스트 메뉴 Copy to clipboard 클립보드에 복사 Save to file 파일에 저장 Rotate Right 오른쪽으로 회전 Rotate Left 왼쪽으로 회전 Increase Opacity 불투명도 증가 Decrease Opacity 불투명도 감소 Close 닫기 PixelateTool Pixelate 픽셀화 Set Pixelate as the paint tool. 페인트 도구로 픽셀화를 설정합니다. Set Pixelate as the paint tool 페인트 도구로 픽셀화를 설정 PrimaryInstanceWidget Primary instance 기본 인스턴스 <b>Primary instance.</b> Messages received from secondaries: <b>기본 인스턴스.</b> 보조로부터 받은 메시지: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Save Error 저장 오류 Capture saved as 캡처를 다음으로 저장: Capture saved to clipboard. 캡처가 클립보드에 저장되었습니다. Capture saved to clipboard 캡처를 클립보드에 저장했습니다 Error while saving to clipboard 클립보드에 저장하는 중 오류 발생 Error trying to save as 저장하려고 하는 중 오류 발생: Save screenshot 스크린샷 저장 Path copied to clipboard as 클립보드에 복사된 경로 Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus DBus에 접속할 수 없습니다 Powerful yet simple to use screenshot software. 강력하면서도 사용하기 쉬운 스크린샷 소프트웨어입니다. See 참조 Capture the entire desktop. Capture the entire desktop. Open the capture launcher. 캡처 런처를 엽니다. Start a manual capture in GUI mode. GUI 모드에서 수동 캡처를 시작합니다. Configure 구성 Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. 모든 모니터의 스크린샷을 동시에 캡처합니다. Capture a screenshot of the specified monitor. 지정된 모니터의 스크린샷을 캡처합니다. Existing directory or new file to save to 저장할 기존 디렉터리 또는 새 파일 Save the capture to the clipboard 캡처를 클립보드에 저장 Pin the capture to the screen 캡처를 화면에 고정 Upload screenshot Upload screenshot Delay time in milliseconds 지연 시간 (밀리초) Repeat screenshot with previously selected region 이전에 선택한 영역으로 스크린샷 반복 Screenshot region to select 선택할 스크린샷 영역 Set the filename pattern 파일 이름 패턴 설정 Accept capture as soon as a selection is made 선택이 이루어지면 즉시 캡처 수락 Enable or disable the trayicon 트레이 아이콘 활성화 또는 비활성화 Enable or disable run at startup 시작 시 실행 활성화 또는 비활성화 Enable or disable the notifications 알림 활성화 또는 비활성화 Check the configuration for errors 구성에 오류가 있는지 확인 Show the help message in the capture mode 캡처 모드에서 도움말 메시지 표시 Define the main UI color 기본 UI 색상 정의 Define the contrast UI color 대비 UI 색상 정의 Print raw PNG capture 원시 PNG 캡처 인쇄 Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified 선택 항목의 지오메트리를 WxH+X+Y 형식으로 인쇄합니다. 원시가 지정된 경우 아무 작업도 수행하지 않습니다 Define the screen to capture (starting from 0) 캡처할 화면을 정의합니다 (0부터 시작) Invalid delay, it must be a number greater than 0 잘못된 지연, 0보다 큰 숫자여야 합니다 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. 잘못된 영역, 'WxH+X+Y' 또는 '모두' 또는 'screen0/screen1/...'를 사용합니다. Invalid path, must be an existing directory or a new file in an existing directory 잘못된 경로, 기존 디렉터리 또는 기존 디렉터리의 새 파일이어야 합니다 Define the screen to capture Define the screen to capture default: screen containing the cursor 기본값: 커서가 포함된 화면 Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' 색상이 잘못되었습니다. 이 플래그는 다음 형식을 지원합니다: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - '파랑' 또는 '빨강'과 같은 명명된 색상 '#FFF'에서처럼 '#' 기호를 피해야 할 수도 있습니다 Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative 잘못된 화면 번호입니다. 음수가 아니어야 합니다 Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' 잘못된 값이므로 '참' 또는 '거짓'으로 정의해야 합니다 Error 오류 Unable to write in 작성할 수 없습니다: Requested screen exceeds screen count 요청된 화면이 화면 수를 초과합니다 Full screen screenshot pinned to screen 화면에 고정된 전체 화면 스크린샷 URL copied to clipboard. URL을 클립보드에 복사했습니다. Options Options Arguments Arguments arguments arguments Subcommands 하위 명령어 subcommands 하위 명령어 Usage 사용법 options options Per default runs Flameshot in the background and adds a tray icon for configuration. 기본적으로 Flameshot을 백그라운드에서 실행하고 설정을 위한 트레이 아이콘을 추가합니다. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture 캡처 종료 Screenshot history 스크린샷 기록 Capture screen 화면 캡처 Show color picker 색상 선택기 표시 Change the tool's size 도구 크기 변경 Change the tool's thickness 도구 두께 변경 Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. 안녕하세요, 여기 있습니다! 트레이에 있는 아이콘을 클릭해서 스크린샷을 찍거나, 마우스 오른쪽 버튼을 클릭해서 더 많은 옵션을 확인하세요. RectangleTool Rectangle 직사각형 Set the Rectangle as the paint tool 페인트 도구로 직사각형을 설정 RedoTool Redo 되돌리기 Redo the next modification 다음 변경을 되돌리기 SaveTool Save 저장 Save screenshot to a file 스크린샷을 파일에 저장 Save the capture 캡처를 저장 ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! 화면 캡처 어댑터는 wayland의 화면 캡처 구성 요소로 그림이 필요합니다. 화면 캡처 구성 요소가 누락된 경우 설치해 주세요! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter useGrimAdapter 설정이 활성화되지 않은 경우 dbus 프로토콜이 사용됩니다. 경유지에서 dbus 프로토콜을 사용하는 것은 권장되지 않습니다. flameshot.ini에서 useGrimAdapter 설정을 활성화하여 그림 기반의 일반 경유지 스크린샷 어댑터를 활성화하는 것이 좋습니다 grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments grim의 스크린샷 구성 요소는 wlroot 기반으로 구현되었으며, GNOME 또는 유사한 데스크톱 환경에서는 사용되지 않을 수 있습니다 Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) 데스크톱 환경을 감지할 수 없습니다 (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. 힌트: XDG_CURRENT_DESKTOP 환경 변수를 설정해 보세요. Unable to capture screen 화면을 캡처할 수 없음 SecondaryInstanceWidget Secondary instance 보조 인스턴스 <b>Secondary instance.</b> Send message to primary: <b>보조 인스턴스.</b> 기본으로 메시지 보내기: Type something here... 여기에 무언가를 입력하세요... &Send 보내기(&S) Error sending message 메시지 전송 오류 The message '%1' could not be sent to the primary. '%1' 메시지를 기본 메시지로 보낼 수 없습니다. SelectionTool Rectangular Selection selection에 대한 적절한 번역이 필요합니다. 직사각형 Selection Set Selection as the paint tool 페인트 도구로 직사각형 선택을 설정 SetShortcutDialog Set Shortcut 단축키 설정 Enter new shortcut to change 변경할 새 단축키 입력 Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Esc 키를 눌러 취소하거나 ⌘+Backspace 키를 눌러 키보드 바로 가기를 비활성화합니다. Press Esc to cancel or Backspace to disable the keyboard shortcut. Esc 키를 눌러 취소하거나 백스페이스 키를 눌러 키보드 단축키를 비활성화합니다. Flameshot must be restarted for changes to take effect. 변경 사항을 적용하려면 Flameshot을 재시작해야 합니다. ShortcutsWidget Hot Keys 단축키 Available shortcuts in the screen capture mode. 화면 캡처 모드에서 사용 가능한 단축키입니다. Description 설명 Key Left Double-click 왼쪽 더블 클릭 Toggle side panel 측면 패널 전환 Grab a color from the screen 화면에서 색상 잡기 Resize selection left 1px 선택 영역 왼쪽 1px 크기 조정 Resize selection right 1px 선택 영역 크기를 오른쪽 1px 조정 Resize selection up 1px 선택 영역 크기를 위쪽 1px 조정 Resize selection down 1px 선택 영역 크기를 아래쪽 1px 조정 Symmetrically decrease width by 2px 대칭적으로 너비 2px 감소 Symmetrically increase width by 2px 대칭적으로 너비 2px 증가 Symmetrically increase height by 2px 대칭적으로 높이 2px 증가 Symmetrically decrease height by 2px 대칭적으로 높이 2px 감소 Select entire screen 전체 화면 선택 Move selection left 1px 선택 항목을 왼쪽으로 1px 이동 Move selection right 1px 선택 영역을 오른쪽으로 1px 이동 Move selection up 1px 선택 영역을 위로 1px 이동 Move selection down 1px 선택 영역을 아래로 1px 이동 Commit text in text area 텍스트 영역에 텍스트 적용 Delete selected drawn object 선택한 그려진 객체 삭제 Cancel current selection 현재 선택 영역 취소 Delete current tool Delete current tool Capture screen 화면 캡처 Screenshot history 스크린샷 기록 SidePanelWidget Active thickness: 활성 두께: Active color: 활성 색상: Press ESC to cancel ESC를 눌러 취소 Active tool size: 활성 도구 크기: Active Color: 활성 색상: Grab Color 색상 잡기 Display grid 격자 표시 SizeDecreaseTool Decrease Tool Size 도구 크기 줄이기 Decrease the size of the other tools 다른 도구의 크기 줄이기 SizeIncreaseTool Increase Tool Size 도구 크기 늘리기 Increase the size of the other tools 다른 도구의 크기 늘리기 SizeIndicatorTool Selection Size Indicator 선택 크기 표시기 Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) 선택 범위의 치수 (X Y)를 표시 StrftimeChooserWidget Century (00-99) 세기 (00-99) Year (00-99) 년도 (00-99) Year (2000) 년도 (2000) Month Name (jan) 월 이름 (1월) Month Name (january) 월 이름 (1월) Month (01-12) 월 (01-12) Week Day (1-7) 주중 (1-7) Week (01-53) 주 (01-53) Day Name (mon) 요일 이름 (월) Day Name (monday) 요일 이름 (월요일) Day (01-31) 일 (01-31) Day of Month (1-31) 매월의 일 (1-31) Day (001-366) 일 (001-366) Time (%H-%M-%S) 시간 (%H-%M-%S) Time (%H-%M) 시간 (%H-%M) Hour (00-23) 시간 (00-23) Hour (01-12) 시간 (01-12) Minute (00-59) 분 (00-59) Second (00-59) 초 (00-59) Full Date (%m/%d/%y) 전체 날짜 (%m/%d/%y) Full Date (%Y-%m-%d) 전체 날짜 (%Y-%m-%d) Full Date (%d-%m-%Y) 전체 날짜 (%d-%m-%Y) SystemNotification Flameshot Info Flameshot 정보 TextConfig StrikeOut 취소선 Underline 밑줄 Bold 굵게 Italic 기울임꼴 Left Align 왼쪽 정렬 Center Align 가운데 정렬 Right Align 오른쪽 정렬 TextTool Text 텍스트 Add text to your capture 캡처에 텍스트 추가 TrayIcon &Take Screenshot 스크린샷 찍기(&T) &Open Launcher 런처 열기(&O) &Configuration 구성(&C) &About 정보(&A) Check for updates 업데이트 확인 New version %1 is available 새 버전 %1 사용 가능 &Quit 종료(&Q) &Latest Uploads 최신 업로드(&L) &Open Save Path 저장 경로 열기(&O) UIcolorEditor UI Color Editor UI 컬러 편집기 Change the color moving the selectors and see the changes in the preview buttons. 선택기를 이동하는 색상을 변경하고 미리보기 버튼의 변경 사항을 확인합니다. Select a Button to modify it 버튼을 선택하여 수정 Main Color 기본 색상 Click on this button to set the edition mode of the main color. 이 버튼을 클릭하여 기본 색상의 에디션 모드를 설정하세요. Contrast Color 대비 색상 Click on this button to set the edition mode of the contrast color. 이 버튼을 클릭하여 대비 색상의 편집 모드를 설정합니다. UndoTool Undo 실행 취소 Undo the last modification 마지막 수정 실행 취소 UpdateNotificationWidget New Flameshot version %1 is available 새 Flameshot 버전 %1 사용 가능 Ignore 무시 Later 나중에 Update 업데이트 UploadHistory Upload History 업로드 기록 Screenshots history is empty 스크린샷 기록이 비어 있습니다 UploadLineItem Form Form TextLabel 텍스트 레이블 Copy URL URL 복사 Open In Browser 브라우저에서 열기 Confirm to delete 삭제 확인 Are you sure you want to delete a screenshot from the latest uploads and server? 최신 업로드 및 서버에서 스크린샷을 삭제하시겠습니까? UtilityPanel Close 닫기 <Empty> <비어 있음> VisualsEditor Opacity of area outside selection: 선택을 벗어난 영역의 불투명성: UI Color Editor UI 색상 편집기 Colorpicker Editor 색상 선택기 편집기 Button Selection 버튼 선택 Select All 모두 선택 color_widgets::ColorDialog Pick 선택 color_widgets::ColorPalette Unnamed 이름 없음 color_widgets::ColorPaletteModel Unnamed 이름 없음 %1 (%2 colors) %1 (%2 색) color_widgets::ColorPaletteWidget Open a new palette from file 파일에서 새 팔레트 열기 Create a new palette 새 팔레트 만들기 Duplicate the current palette 현재 팔레트 복제 Delete the current palette 현재 팔레트 삭제 Revert changes to the current palette 현재 팔레트로 변경 사항 되돌리기 Save changes to the current palette 현재 팔레트에 변경 사항 저장 Add a color to the palette 팔레트에 색상 추가 Remove the selected color from the palette 팔레트에서 선택한 색상 제거 New Palette 새 팔레트 Name 이름 GIMP Palettes (*.gpl) GIMP 팔레트 (*.gpl) Palette Image (%1) 팔레트 이미지 (%1) All Files (*) 모든 파일 (*) Open Palette 팔레트 열기 Failed to load the palette file %1 팔레트 파일을 로드하지 못했습니다 %1 color_widgets::GradientEditor Add Color 색상 추가 Remove Color 색상 제거 Edit Color... 색상 편집... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 색) color_widgets::Swatch Clear Color 색 지우기 %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_nb_NO.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher App Launcher Choose an app to open the capture Choose an app to open the capture AppLauncherWidget Open With Open With Launch in terminal Launch in terminal Keep open after selection Keep open after selection Error Error Unable to launch in terminal. Unable to launch in terminal. Unable to write in Unable to write in ArrowTool Arrow Arrow Set the Arrow as the paint tool Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Rectangular Region Full Screen (Current Display) Full Screen (Current Display) Full Screen (All Monitors) Full Screen (All Monitors) No Delay No Delay second second seconds seconds Take new screenshot Take new screenshot Area: Area: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: Delay: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Unable to capture screen Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel Roda del ratolí Change tool size Change tool size Right Click Clic dret Show color picker Mostra el selector de color Open side panel Open side panel Esc Esc Exit Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Tool Settings Tool Settings CircleCountTool Circle Counter Circle Counter Add an autoincrementing counter bubble Add an autoincrementing counter bubble CircleTool Circle Circle Set the Circle as the paint tool Set the Circle as the paint tool ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Update Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error Error Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset Reset Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Configuration Interface Interface Filename Editor Filename Editor General General Shortcuts Shortcuts Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Error Unable to close active modal widgets Unable to close active modal widgets &Open Launcher &Open Launcher &Configuration &Configuration &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Quit &Take Screenshot &Take Screenshot CopyTool Copy Copy Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard Copy the selection into the clipboard DBusUtils Unable to connect via DBus Unable to connect via DBus ExitTool Exit Exit Leave the capture screen Leave the capture screen FileNameEditor Edit the name of your captures: Edit the name of your captures: Edit: Edit: Preview: Preview: Save Save Saves the pattern Saves the pattern Restore Restore Reset Reset Restores the saved pattern Restores the saved pattern Clear Clear Deletes the name Deletes the name Flameshot Error Error Unable to close active modal widgets Unable to close active modal widgets URL copied to clipboard. L'URL s'ha copiat al porta-retalls. FlameshotDaemon New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Unable to connect via DBus Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel button Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File Fitxer de Configuració Export Exportar Reset Reset Automatic check for updates Automatic check for updates Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llançament a l'inici Launch Flameshot Launch Flameshot Show welcome message on launch Show welcome message on launch Use large predefined color palette Use large predefined color palette Copy URL after upload Copy URL after upload Copy URL and close window after upload Copy URL and close window after upload Save image after copy Save image after copy Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path Save Path Change... Change... Use fixed path for screenshots to save Use fixed path for screenshots to save Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy file path after save Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder Choose a Folder Unable to write to directory. Unable to write to directory. Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Upload image Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obri l'URL Delete image Delete image Image to Clipboard. Imatge al porta-retalls. Save image Save image Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader Image Uploader Upload the selection Upload the selection ImgurUploader Upload to Imgur Upload to Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obri l'URL Delete image Delete image Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Image Uploader Upload the selection to Imgur Upload the selection to Imgur InfoWindow About About Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>License</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line Line Set the Line as the paint tool Set the Line as the paint tool MarkerTool Marker Marker Set the Marker as the paint tool Set the Marker as the paint tool MoveTool Move Move Move the selection area Move the selection area PencilTool Pencil Pencil Set the Pencil as the paint tool Set the Pencil as the paint tool PinTool Pin Tool Pin Tool Pin image on the desktop Pin image on the desktop PinWidget Context menu Context menu Copy to clipboard Copia al porta-retalls Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Capture saved to clipboard. Capture saved to clipboard. Error while saving to clipboard Error while saving to clipboard Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Save Error Capture saved as Capture saved as Error trying to save as Error trying to save as Unable to connect via DBus Unable to connect via DBus Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in Unable to write in Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ix de la captura Screenshot history Screenshot history Capture screen Capture screen Show color picker Mostra el selector de color Change the tool's size Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Rectangle Set the Rectangle as the paint tool Set the Rectangle as the paint tool RedoTool Redo Redo Redo the next modification Redo the next modification SaveTool Save Save Save screenshot to a file Save screenshot to a file Save the capture Save the capture ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Rectangular Selection Set Selection as the paint tool Set Selection as the paint tool SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. Description Descripció Key Tecla Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active tool size: Active Color: Active Color: Grab Color Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Selection Size Indicator Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Century (00-99) Year (00-99) Year (00-99) Year (2000) Year (2000) Month Name (jan) Month Name (jan) Month Name (january) Month Name (january) Month (01-12) Month (01-12) Week Day (1-7) Week Day (1-7) Week (01-53) Week (01-53) Day Name (mon) Day Name (mon) Day Name (monday) Day Name (monday) Day (01-31) Day (01-31) Day of Month (1-31) Day of Month (1-31) Day (001-366) Day (001-366) Hour (00-23) Hour (00-23) Hour (01-12) Hour (01-12) Minute (00-59) Minute (00-59) Second (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M-%S) Time (%H-%M) Time (%H-%M) SystemNotification Flameshot Info Flameshot Info TextConfig StrikeOut StrikeOut Underline Underline Bold Bold Italic Italic Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Text Add text to your capture Add text to your capture TrayIcon &Take Screenshot &Take Screenshot &Open Launcher &Open Launcher &Configuration &Configuration &About &About Check for updates Check for updates New version %1 is available New version %1 is available &Quit &Quit &Latest Uploads &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor UI Color Editor Change the color moving the selectors and see the changes in the preview buttons. Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Select a Button to modify it Main Color Main Color Click on this button to set the edition mode of the main color. Click on this button to set the edition mode of the main color. Contrast Color Contrast Color Click on this button to set the edition mode of the contrast color. Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo Undo the last modification Desfés l'última modificació UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty Screenshots history is empty UploadLineItem Form Form TextLabel TextLabel Copy URL Copia l'URL Open In Browser Open In Browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: Opacity of area outside selection: UI Color Editor UI Color Editor Colorpicker Editor Colorpicker Editor Button Selection Button Selection Select All Select All color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_nl.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher App-starter Choose an app to open the capture Kies een app om de schermafdruk mee te openen AppLauncherWidget Open With Openen met Launch in terminal Openen in terminalvenster Keep open after selection Openhouden na selectie Error Fout Unable to write in Kan niet schrijven naar Unable to launch in terminal. Kan niet openen in terminalvenster. ArrowTool Arrow Cursor Set the Arrow as the paint tool Cursor instellen als verfgereedschap BlurTool Blur Vervaging Set Blur as the paint tool Vervaging instellen als verfgereedschap CaptureLauncher <b>Capture Mode</b> <b>Vastlegmodus</b> Rectangular Region Rechthoekig gebied Full Screen (Current Display) Volledig scherm (huidig beeldscherm) Full Screen (All Monitors) Volledig scherm (alle beeldschermen) No Delay Geen wachttijd second seconde seconds seconden Take new screenshot Nieuwe schermfoto maken Area: Gebied: Capture Launcher TextLabel Capture Mode Delay: Wachttijd: WxH+x+y CaptureWidget Unable to capture screen Kan scherm niet vastleggen Mouse Select screenshot area Mouse Wheel Muiswiel Change tool size Right Click Rechtsklikken Show color picker Kleurkiezer tonen Open side panel Esc Exit Afsluiten Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Selecteer een gebied met de cursor of druk op Esc om af te sluiten. Druk op Enter om het scherm vast te leggen. Klik met de rechtermuisknop om de kleurkiezer te tonen. Gebruik het muiswiel om de gereedschapsdikte aan te passen. Druk op spatie om het zijpaneel te openen. Tool Settings Gereedschapsinstellingen CircleCountTool Circle Counter Cirkelteller Add an autoincrementing counter bubble Voeg een automatisch verhogende cirkelvormige teller toe CircleTool Circle Cirkel Set the Circle as the paint tool Cirkel instellen als verfgereedschap ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Precisely select color Hold Left Click Toggle magnifier Space or Right Click Cancel Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Bijwerken Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Standaardwaarden Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Configuratie Interface Uiterlijk Filename Editor Bestandsnaambewerker General Algemeen Shortcuts Sneltoetsen Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available Er is een nieuwe versie beschikbaar: %1 You have the latest version Je beschikt over de nieuwste versie Failed to get information about the latest version. Er kan geen versie-informatie worden opgehaald. Error Foutmelding Unable to close active modal widgets De actieve, modale widgets kunnen niet worden gesloten &Take Screenshot Schermafdruk &maken &Open Launcher Starter &openen &Configuration &Configuratie &About &Over Check for updates Controleren op updates &Latest Uploads Recentste up&loads URL copied to clipboard. URL gekopieerd naar klembord. &Information &Informatie &Quit &Afsluiten CopyTool Copy Kopiëren Copy selection to clipboard Copy the selection into the clipboard Selectie kopiëren naar klembord DBusUtils Unable to connect via DBus Kan niet verbinden via DBus ExitTool Exit Afsluiten Leave the capture screen Verlaat het vastlegscherm FileNameEditor Edit the name of your captures: Bewerk de naam van je schermafdrukken: Edit: Bewerken: Preview: Voorbeeld: Save Opslaan Saves the pattern Slaat het patroon op Restore Reset Standaardwaarden Restores the saved pattern Herstelt het standaardpatroon Clear Wissen Deletes the name Wist de naam Flameshot Error Unable to close active modal widgets De actieve, modale widgets kunnen niet worden gesloten URL copied to clipboard. URL gekopieerd naar klembord. FlameshotDaemon New version %1 is available Er is een nieuwe versie beschikbaar: %1 You have the latest version Je beschikt over de nieuwste versie Failed to get information about the latest version. Er kan geen versie-informatie worden opgehaald. Unable to connect via DBus Kan niet verbinden via DBus GeneneralConf Import Importeren Error Fout Unable to read file. Kan bestand niet uitlezen. Unable to write file. Kan bestand niet wegschrijven. Save File Bestand opslaan Confirm Reset Herstellen bevestigen Are you sure you want to reset the configuration? Weet je zeker dat je de standwaardwaarden van de configuratie wilt herstellen? Show help message Uitleg tonen Show the help message at the beginning in the capture mode. Toont een bericht met uitleg bij het openen van de vastlegmodus. Show desktop notifications Bureaubladmeldingen tonen Show tray icon Systeemvakpictogram tonen Show the systemtray icon Toont het systeemvakpictogram Configuration File Configuratiebestand Export Exporteren Reset Standaardwaarden Launch at startup Automatisch opstarten Launch Flameshot Flameshot openen GeneralConf Import Importeren Error Foutmelding Unable to read file. Kan bestand niet uitlezen. Unable to write file. Kan bestand niet wegschrijven. Save File Bestand opslaan Confirm Reset Herstellen bevestigen Are you sure you want to reset the configuration? Weet je zeker dat je de standwaardwaarden van de configuratie wilt herstellen? Show help message Uitleg tonen Show the help message at the beginning in the capture mode. Toont een bericht met uitleg bij het openen van de vastlegmodus. Show the side panel button Zijpaneelknop tonen Show the side panel toggle button in the capture mode. Toont de zijpaneelknop in de vastlegmodus. Show desktop notifications Bureaubladmeldingen tonen Show tray icon Systeemvakpictogram tonen Show the systemtray icon Toont het systeemvakpictogram Confirmation required to delete screenshot from the latest uploads Schermfoto verwijderen uit recentste uploads bevestigen Configuration File Configuratiebestand Export Exporteren Reset Standaardwaarden Automatic check for updates Automatisch controleren op updates Allow multiple flameshot GUI instances simultaneously Launch at startup Automatisch opstarten Launch Flameshot Flameshot openen Show welcome message on launch Welkomstbericht tonen na opstarten Use large predefined color palette Copy URL after upload URL kopiëren na uploaden Copy URL and close window after upload Kopieer de url en sluit het venster na het uploaden Save image after copy Afbeelding opslaan na kopiëren Save image file after copying it Sla de afbeelding op na deze gekopieerd te hebben Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Opslaglocatie Change... Wijzigen... Use fixed path for screenshots to save Schermfoto's altijd opslaan op dezelfde locatie Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) JPG-formaat gebruiken op klembord (standaard: png) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Bestandspad kopiëren na opslaan Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Kies een map Unable to write to directory. Kan niet wegschrijven naar map. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Recentste uploads Screenshots history is empty Er zijn nog geen schermfoto's gemaakt Copy URL URL kopiëren URL copied to clipboard. URL gekopieerd naar klembord. Open in browser Openen in browser Confirm to delete Verwijderen bevestigen Are you sure you want to delete a screenshot from the latest uploads and server? Weet je zeker dat je de schermfoto wilt verwijderen uit de recentste uploads en van de server? ImgS3Uploader Uploading Image Bezig met uploaden van afbeelding... URL copied to clipboard. URL gekopieerd naar klembord. Error Fout ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image Bezig met uploaden van afbeelding... Unable to open the URL. Kan URL niet openen. URL copied to clipboard. URL gekopieerd naar klembord. Screenshot copied to clipboard. Schermafdruk gekopieerd naar klembord. Copy URL URL kopiëren Open URL URL openen Delete image Afbeelding verwijderen Image to Clipboard. Afbeelding naar klembord. ImgUploaderBase Upload image Uploading Image Bezig met uploaden van afbeelding... Copy URL URL kopiëren Open URL URL openen Delete image Afbeelding verwijderen Image to Clipboard. Afbeelding naar klembord. Save image Unable to open the URL. Kan URL niet openen. URL copied to clipboard. URL gekopieerd naar klembord. Screenshot copied to clipboard. Schermafdruk gekopieerd naar klembord. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Afbeeldingsuploader Upload the selection ImgurUploader Upload to Imgur Uploaden naar Imgur Uploading Image Bezig met uploaden van afbeelding... Copy URL URL kopiëren Open URL URL openen Delete image Afbeelding verwijderen Image to Clipboard. Afbeelding naar klembord. Unable to open the URL. Kan URL niet openen. URL copied to clipboard. URL gekopieerd naar klembord. Screenshot copied to clipboard. Schermafdruk gekopieerd naar klembord. ImgurUploaderTool Image Uploader Afbeeldingsuploader Upload the selection to Imgur Upload de selectie naar Imgur InfoWindow About Over Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Rechtsklikken Mouse Wheel Muiswiel Move selection 1px Selectie 1px verplaatsen Resize selection 1px Afmetingen van selectie 1px aanpassen Quit capture Vastleggen afsluiten Copy to clipboard Kopiëren naar klembord Save selection as a file Selectie opslaan als bestand Undo the last modification Laatste wijziging ongedaan maken Toggle visibility of sidebar with options of the selected tool Zijbalk met gereedschapsopties tonen/verbergen Show color picker Kleurkiezer tonen Change the tool's thickness Wijzig de gereedschapsdikte Available shortcuts in the screen capture mode. Beschikbare sneltoetsen in de vastlegmodus. Key Toets Description Omschrijving <u><b>License</b></u> <u><b>Лиценца</b></u> <u><b>Version</b></u> <u><b>Верзија</b></u> <u><b>Shortcuts</b></u> <u><b>Пречице</b></u> InvertTool Invert Set Inverter as the paint tool LineTool Line Lijn Set the Line as the paint tool Lijn instellen als verfgereedschap MarkerTool Marker Markeerstift Set the Marker as the paint tool Markeerstift instellen als verfgereedschap MoveTool Move Verplaatsen Move the selection area Selectiegebied verplaatsen PencilTool Pencil Potlood Set the Pencil as the paint tool Potlood instellen als verfgereedschap PinTool Pin Tool Vastmaken Pin image on the desktop Afbeelding vastmaken op bureaublad PinWidget Context menu Copy to clipboard Kopiëren naar klembord Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Sluiten PixelateTool Pixelate Pixelvorming Set Pixelate as the paint tool. Set Pixelate as the paint tool Pixelvorming instellen als verfgereedschap PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 '%1' kan niet worden ingesteld. Foutmelding: %2 Failed to unregister %1. Error: %2 '%1' kan niet worden vrijgegeven. Foutmelding: %2 QObject Save Error Fout tijdens opslaan Capture saved as Schermafdruk opgeslagen als Capture saved to clipboard. Schermfoto vastgelegd op klembord. Capture saved to clipboard Schermafdruk vastgelegd op klembord Error while saving to clipboard Fout tijdens opslaan op klembord Error trying to save as Fout tijdens opslaan als Save screenshot Schermfoto opslaan Path copied to clipboard as Capture is saved and copied to the clipboard as De schermfoto is opgeslagen en gekopieerd naar het klembord als Unable to connect via DBus Kan niet verbinden via DBus Powerful yet simple to use screenshot software. Eenvoudig doch krachtig schermfotoprogramma. See Bekijken Capture the entire desktop. Leg de volledige werkomgeving vast. Open the capture launcher. Open de schermfotostarter. Start a manual capture in GUI mode. Start een handmatige vastlegging in programmamodus. Configure Instellen Capture a single screen. Leg een beeldscherm vast. Path where the capture will be saved Het pad waar de schermfoto wordt opgeslagen Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Schermfoto opslaan op klembord Pin the capture to the screen Upload screenshot Delay time in milliseconds Wachttijd (in milliseconden) Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Bestandsnaampatroon instellen Accept capture as soon as a selection is made Enable or disable the trayicon Systeemvakpictogram in- of uitschakelen Enable or disable run at startup Automatisch opstarten in- of uitschakelen Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Uitleg tonen in vastlegmodus Define the main UI color Standaard vormgevingskleur instellen Define the contrast UI color Standaard contrasterende vormgevingskleur instellen Print raw PNG capture Onbewerkte png-schermfoto tonen Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Afmetingen van de selectie tonen in B H X Y. Niet van toepassing als 'onbewerkt' is opgegeven. Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Kies het vast te leggen scherm default: screen containing the cursor standaard: het scherm met de cursor Screen number Beeldschermnummer Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Ongeldige kleur. Deze optie ondersteunt de volgende opmaken: - #RGB (elke van R, G en B is een los hex-getal) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Kleurnamen, zoals 'blue' of 'red' Mogelijk moet je het '#'-teken insluiten. Voorbeeld: '\#FFF' Invalid delay, it must be higher than 0 Ongeldige wachttijd: de wachttijd moet hoger dan 0 zijn Invalid screen number, it must be non negative Ongeldig beeldschermnummer: het nummer mag geen negatief getal zijn Invalid path, it must be a real path in the system Ongeldig pad: het pad moet bestaan Invalid value, it must be defined as 'true' or 'false' Ongeldige waarde: deze moet worden opgegeven als 'true' of 'false' Error Fout Unable to write in Kan niet wegschrijven naar Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. URL gekopieerd naar klembord. Options Opties Arguments Aanvullende opties arguments aanvullende opties Subcommands subcommands Usage Gebruik options opties Per default runs Flameshot in the background and adds a tray icon for configuration. Standaard wordt Flameshot op de achtergrond uitgevoerd en toont daarbij een systeemvakpictogram. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hallo, hier ben ik! Klik op het systeemvakpictogram om een schermfoto te maken of rechtsklik om meer opties te tonen. Toggle side panel Zijpaneel in-/uitklappen Resize selection left 1px Afmetingen van selectie 1px aanpassen (links) Resize selection right 1px Afmetingen van selectie 1px aanpassen (rechts Resize selection up 1px Afmetingen van selectie 1px aanpassen (omhoog) Resize selection down 1px Afmetingen van selectie 1px aanpassen (omlaag) Select entire screen Gehele scherm selecteren Move selection left 1px Selectie 1px naar links verschuiven Move selection right 1px Selectie 1px naar rechts verschuiven Move selection up 1px Selectie 1px omhoog verschuiven Move selection down 1px Selectie 1px omlaag verschuiven Commit text in text area Tekst in tekstvak Quit capture Vastleggen afsluiten Screenshot history Schermfotogeschiedenis Capture screen Scherm vastleggen Show color picker Kleurkiezer tonen Change the tool's size Change the tool's thickness Wijzig de gereedschapsdikte RectangleTool Rectangle Rechthoek Set the Rectangle as the paint tool Rechthoek instellen als verfgereedschap RedoTool Redo Opnieuw Redo the next modification Volgende wijziging opnieuw toepassen SaveTool Save Сачувај Opslaan Save screenshot to a file Save the capture Schermafdruk opslaan ScreenGrabber The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Kan scherm niet vastleggen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Rechthoekige selectie Set Selection as the paint tool Selectie instellen als verfgereedschap SetShortcutDialog Set Shortcut Sneltoets instellen Enter new shortcut to change Druk op een nieuwe sneltoets voor Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Druk op Esc om af te breken of Backspace om de sneltoets uit te schakelen. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Sneltoetsen Available shortcuts in the screen capture mode. Beschikbare sneltoetsen in de vastlegmodus. Description Omschrijving Key Toets Left Double-click Toggle side panel Zijpaneel in-/uitklappen Grab a color from the screen Resize selection left 1px Afmetingen van selectie 1px aanpassen (links) Resize selection right 1px Afmetingen van selectie 1px aanpassen (rechts Resize selection up 1px Afmetingen van selectie 1px aanpassen (omhoog) Resize selection down 1px Afmetingen van selectie 1px aanpassen (omlaag) Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Gehele scherm selecteren Move selection left 1px Selectie 1px naar links verschuiven Move selection right 1px Selectie 1px naar rechts verschuiven Move selection up 1px Selectie 1px omhoog verschuiven Move selection down 1px Selectie 1px omlaag verschuiven Commit text in text area Tekst in tekstvak Delete selected drawn object Cancel current selection Capture screen Scherm vastleggen Screenshot history Schermfotogeschiedenis SidePanelWidget Active thickness: Actieve dikte: Active color: Actieve kleur: Press ESC to cancel Druk op Esc om te annuleren Active tool size: Active Color: Grab Color Kleur opnemen Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Grootteindicatie van selectie Show the dimensions of the selection (X Y) Toon de afmetingen van de selectie (X Y) StrftimeChooserWidget Century (00-99) Eeuw (00-99) Year (00-99) Jaar (00-99) Year (2000) Jaar (2000) Month Name (jan) Naam van de maand (јаn) Month Name (january) Naam van de maand (јаnuari) Month (01-12) Maand (01-12) Week Day (1-7) Weekdag (1-7) Week (01-53) Week (01-53) Day Name (mon) Naam van de dag (ma) Day Name (monday) Naam van de dag (maandag) Day (01-31) Dag (01-31) Day of Month (1-31) Dag van de maand (1-31) Day (001-366) Dag (001-366) Time (%H-%M-%S) Tijd (%H-%M-%S) Time (%H-%M) Tijd (%H-%M) Hour (00-23) Uur (00-23) Hour (01-12) Uur (01-12) Minute (00-59) Minuten (00-59) Second (00-59) Seconden (00-59) Full Date (%m/%d/%y) Volledige datum (%m/%d/%y) Full Date (%Y-%m-%d) Volledige datum (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot-informatie TextConfig StrikeOut Doorhalen Underline Onderstrepen Bold Vetgedrukt Italic Cursief Left Align Center Align Right Align TextTool Text Tekst Add text to your capture Voeg tekst toe aan je schermafdruk TrayIcon &Take Screenshot Schermafdruk &maken &Open Launcher Starter &openen &Configuration &Configuratie &About &Over Check for updates Controleren op updates New version %1 is available Er is een nieuwe versie beschikbaar: %1 &Quit &Afsluiten &Latest Uploads Recentste up&loads &Open Save Path UIcolorEditor UI Color Editor Kleurenschemabewerker Change the color moving the selectors and see the changes in the preview buttons. Wijzig de kleur d.m.v. de selectie-indicators en bekijk de wijzigingen op de voorbeeldknoppen. Select a Button to modify it Kies een te bewerken knop Main Color Hoofdkleur Click on this button to set the edition mode of the main color. Klik op deze knop om de hoofdkleur te bwerken. Contrast Color Contrastkleur Click on this button to set the edition mode of the contrast color. Klik op deze knop om de contrastkleur te bewerken. UndoTool Undo Ongedaan mken Undo the last modification Laatste wijziging ongedaan maken UpdateNotificationWidget New Flameshot version %1 is available Er is een nieuwe versie beschikbaar: %1 Ignore Negeren Later Later Update Bijwerken UploadHistory Upload History Screenshots history is empty Er zijn nog geen schermfoto's gemaakt UploadLineItem Form TextLabel Copy URL URL kopiëren Open In Browser Confirm to delete Verwijderen bevestigen Are you sure you want to delete a screenshot from the latest uploads and server? Weet je zeker dat je de schermfoto wilt verwijderen uit de recentste uploads en van de server? UtilityPanel Close Sluiten <Empty> VisualsEditor Opacity of area outside selection: Doorzichtigheid van gebied buiten selectie: UI Color Editor Kleurenschemabewerker Colorpicker Editor Button Selection Knopselectie Select All Alles selecteren color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_nl_NL.ts ================================================ AbstractWidgetList Add New Nieuwe Toevoegen Move Up Naar boven Move Down Naar beneden Remove Verwijderen AcceptTool Accept Accepteren Accept the capture Opname accepteren AppLauncher App Launcher App-starter Choose an app to open the capture Kies een programma om de schermfoto mee te openen AppLauncherWidget Open With Openen met Launch in terminal Openen in terminalvenster Keep open after selection Openhouden na selectie Error Fout Unable to write in Kan niet schrijven naar Unable to launch in terminal. Kan niet openen in terminalvenster. ArrowTool Arrow Cursor Set the Arrow as the paint tool Cursor instellen als verfgereedschap BlurTool Blur Vervaging Set Blur as the paint tool Vervaging instellen als verfgereedschap CaptureLauncher <b>Capture Mode</b> <b>Vastlegmodus</b> Rectangular Region Rechthoekig gebied Full Screen (Current Display) Volledig scherm (huidig beeldscherm) Full Screen (All Monitors) Volledig scherm (alle beeldschermen) No Delay Geen wachttijd second seconde seconds seconden Take new screenshot Nieuwe schermfoto maken Area: Gebied: Capture Launcher Opname starter TextLabel TekstLabel Capture Mode Opname-modus Delay: Wachttijd: WxH+x+y BxH+x+y CaptureWidget Unable to capture screen Kan scherm niet vastleggen Mouse Muis Select screenshot area Schermfotogebied selecteren Mouse Wheel Muiswiel Change tool size Gereedschapsmaat wijzigen Right Click Rechterklik Show color picker Kleurkiezer tonen Open side panel Zijpaneel openen Esc Esc Exit Afsluiten Quit Capture Opname beëindigen Are you sure you want to quit capture? Opname beëindigen? Do not show this again Laat dit niet meer zien Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot is de focus kwijt. Toetsenbord sneltoetsen werken niet totdat je ergens klikt. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuratiefout opgelost. Start `flameshot gui` opnieuw om het toe te passen. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Selecteer een gebied met de cursor of druk op Esc om af te sluiten. Druk op Enter om het scherm vast te leggen. Klik met de rechtermuisknop om de kleurkiezer te tonen. Gebruik het muiswiel om de gereedschapsdikte aan te passen. Druk op spatie om het zijpaneel te openen. Tool Settings Gereedschapsinstellingen CircleCountTool Circle Counter Cirkelteller Add an autoincrementing counter bubble Voeg een automatisch verhogende cirkelvormige teller toe CircleTool Circle Cirkel Set the Circle as the paint tool Cirkel instellen als verfgereedschap ColorDialog Select Color Selecteer Kleur Saturation Verzadiging Hue Tint Hex Hex Blue Blauw Value Waarde Green Groen Alpha Alpha Red Rood ColorGrabWidget Accept color Kleur accepteren Enter or Left Click Enter of Linkermuisknop Precisely select color Kies precies de kleur Hold Left Click Linkermuisknop ingedrukt houden Toggle magnifier Vergrootglas Space or Right Click Spatie of Rechtermuisknop Cancel Annuleren Esc Esc ColorPickerEditor Select Preset: Voorinstelling selecteren: Select preset using the spinbox Selecteer de voorinstelling met de draaischijf Edit Preset: Voorinstelling bewerken: Enter color to update preset Kleur invoeren om de voorinstelling bij te werken Update Bijwerken Press button to update the selected preset Druk op de knop om de geselecteerde voorinstelling bij te werken Delete Verwijderen Press button to delete the selected preset Druk op de knop om de geselecteerde preset te wissen Add Preset: Voorinstelling toevoegen: Enter color manually or select it using the color-wheel Voer kleur handmatig in of selecteer deze met het kleurenwiel Add Toevoegen Press button to add preset Druk op de knop om een voorinstelling toe te voegen Error Fout Unable to add preset. Maximum limit reached. Kan geen voorinstelling toevoegen. Maximum limiet bereikt. Unable to remove preset. Minimum limit reached. Kan voorinstelling niet verwijderen. Minimum limiet bereikt. ConfigErrorDetails Configuration errors Configuratiefouten ConfigHandler Unrecognized setting: '%1' Niet-herkende instelling: '%1' Unrecognized shortcut name: '%1'. Niet-herkende snelkoppelingsnaam: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Snelkoppelingsconflict: '%1' en '%2' hebben dezelfde snelkoppeling: %3 Bad value in '%1'. Expected: %2 Slechte waarde in '%1'. Verwacht: %2 You have successfully resolved the configuration error. Configuratiefout met succes opgelost. The configuration contains an error. Open configuration to resolve. De configuratie bevat een fout. Open de configuratie om dit op te lossen. Bad config key '%1' in ConfigHandler. Please report this as a bug. Slechte config key '%1' in ConfigHandler. Gelieve dit als een bug te melden. ConfigResolver Resolve configuration errors Configuratiefouten oplossen <b>You must resolve all errors before continuing:</b> <b>U moet alle fouten oplossen voordat u verdergaat:</b> Reset Herstellen Reset to the default value. Terugzetten op de standaardwaarde. Remove Verwijderen Remove this setting. Verwijder deze instelling. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Sommige sneltoetsen hebben conflicten. Dit zal NIET voorkomen dat flameshot start. Los ze alstublieft handmatig op in het configuratiebestand. Resolve all Alles oplossen Resolve all listed errors. Alle vermelde fouten oplossen. Details Informatie ConfigWindow Configuration Configuratie Interface Uiterlijk Filename Editor Bestandsnaambewerker General Algemeen Shortcuts Sneltoetsen Resolve Oplossen <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuratie bestand heeft fouten. Los ze op alvorens verder te gaan.</b> Controller New version %1 is available Er is een nieuwe versie beschikbaar: %1 You have the latest version Je beschikt over de nieuwste versie Failed to get information about the latest version. Er kan geen versie-informatie worden opgehaald. Error Foutmelding Unable to close active modal widgets De actieve, modale widgets kunnen niet worden gesloten &Take Screenshot Schermfo&to maken &Open Launcher Starter &openen &Configuration &Configuratie &About &Over Check for updates Controleren op updates &Latest Uploads Recentste up&loads URL copied to clipboard. URL gekopieerd naar klembord. &Information &Informatie &Quit &Afsluiten CopyTool Copy Kopiëren Copy selection to clipboard Selectie naar klembord kopiëren Copy the selection into the clipboard Selectie kopiëren naar klembord DBusUtils Unable to connect via DBus Kan niet verbinden via DBus ExitTool Exit Afsluiten Leave the capture screen Opnamescherm verlaten FileNameEditor Edit the name of your captures: Naam van de schermfoto's bewerken: Edit: Bewerken: Preview: Voorbeeld: Save Opslaan Saves the pattern Slaat het patroon op Restore Herstellen Reset Standaardwaarden Restores the saved pattern Herstelt het standaardpatroon Clear Wissen Deletes the name Wist de naam Flameshot Error Fout Unable to close active modal widgets Actieve widgets kunnen niet worden gesloten URL copied to clipboard. URL gekopieerd naar klembord. FlameshotDaemon New version %1 is available Nieuwe versie %1 is beschikbaar You have the latest version Dit is de nieuwste versie Failed to get information about the latest version. Kan geen informatie krijgen over de nieuwste versie. Unable to connect via DBus Kan niet verbinden via DBus GeneneralConf Import Importeren Error Fout Unable to read file. Kan bestand niet uitlezen. Unable to write file. Kan bestand niet wegschrijven. Save File Bestand opslaan Confirm Reset Herstellen bevestigen Are you sure you want to reset the configuration? Weet je zeker dat je de standwaardwaarden van de configuratie wilt herstellen? Show help message Uitleg tonen Show the help message at the beginning in the capture mode. Toont een bericht met uitleg bij het openen van de vastlegmodus. Show desktop notifications Bureaubladmeldingen tonen Show tray icon Systeemvakpictogram tonen Show the systemtray icon Toont het systeemvakpictogram Configuration File Configuratiebestand Export Exporteren Reset Standaardwaarden Launch at startup Automatisch opstarten Launch Flameshot Flameshot openen GeneralConf Import Importeren Error Foutmelding Unable to read file. Kan bestand niet uitlezen. Unable to write file. Kan bestand niet wegschrijven. Save File Bestand opslaan Confirm Reset Herstellen bevestigen Are you sure you want to reset the configuration? Weet u zeker dat u de standwaardwaarden van de configuratie wilt herstellen? Show help message Uitleg tonen Show the help message at the beginning in the capture mode. Toont een bericht met uitleg bij het openen van de vastlegmodus. Show the side panel button Zijpaneelknop tonen Show the side panel toggle button in the capture mode. Toont de zijpaneelknop in de vastlegmodus. Show desktop notifications Bureaubladmeldingen tonen Show tray icon Systeemvakpictogram tonen Show the systemtray icon Toont het systeemvakpictogram Confirmation required to delete screenshot from the latest uploads Bevestiging vereist bij verwijdering van schermfoto uit recente uploads Configuration File Configuratiebestand Export Exporteren Reset Standaardwaarden Automatic check for updates Automatisch controleren op updates Allow multiple flameshot GUI instances simultaneously Meerdere instanties van flameshot GUI toestaan This allows you to take screenshots of flameshot itself for example. Hiermee kunt u screenshots maken van bijvoorbeeld Flameshot zelf. Automatically close daemon when it is not needed Automatisch sluiten van de daemon wanneer deze niet nodig is Launch at startup Automatisch opstarten Launch Flameshot Flameshot openen Show welcome message on launch Welkomstbericht tonen na opstarten Use large predefined color palette Groot voorgedefinieerd kleurenpalet gebruiken Copy URL after upload URL kopiëren na uploaden Copy URL and close window after upload Kopieer de url en sluit het venster na het uploaden Save image after copy Afbeelding opslaan na kopiëren Save image file after copying it Sla de afbeelding op na deze gekopieerd te hebben Show the help message at the beginning in the capture mode Toon het helpbericht aan het begin in de opnamemodus Use last region for GUI mode Vorige gebied gebruiken bij GUI-modus Use the last region as the default selection for the next screenshot in GUI mode In GUI-modus het laatste gebied als standaardselectie voor de volgende schermfotogebied gebruiken Show the side panel toggle button in the capture mode Toon de schakelknop op het zijpaneel in de vastlegmodus Enable desktop notifications Meldingen op bureaublad inschakelen Show abort notifications Meldingen van afbreking tonen Enable abort notifications Meldingen van afbreking inschakelen Show icon in the system tray Pictogram in systeemvak tonen Use grim to capture screenshots Grim gebruiken om schermfoto's te maken Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim is een hulpprogramma in Wayland om schermen vast te leggen op basis van het screencopy-protocol. Schakel het in principe alleen in op minimale wayland-vensterbeheerders zoals sway, hyprland, enz. Ask for confirmation to delete screenshot from the latest uploads Om bevestiging vragen bij het verwijderen van schermfoto's van de laatste uploads Check for updates automatically Automatisch controleren op updates This allows you to take screenshots of Flameshot itself for example Hiermee kunt u schermfoto's maken van Flameshot zelf, bijvoorbeeld Launch Flameshot daemon when computer is booted Start Flameshot daemon wanneer de computer wordt opgestart Show the welcome message box in the middle of the screen while taking a screenshot Toon de welkomstboodschap in het midden van het scherm tijdens het maken van een schermfoto Use a large predefined color palette Een groot voorgedefinieerd kleurenpalet gebruiken Copy on double click Kopiëren met dubbelklik Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Kopieer URL en sluit venster nadat het uploaden succesvol was Automatically unload from memory when it is not needed Automatisch uit het geheugen verwijderen wanneer het niet meer nodig is Automatically close daemon (background process) when it is not needed Daemon (achtergrondproces) automatisch afsluiten wanneer deze niet meer nodig is Launch in background at startup Bij systeemstart op de achtergrond starten Launch Flameshot daemon (background process) when computer is booted Flameshot-daemon (achtergrondproces) starten wanneer de computer wordt opgestart Ask before quit capture Beëindiging van opname bevestigen Show the confirmation prompt before ESC quit Bevestigingsprompt tonen bij afbreken met ESC Enable Copy to clipboard on Double Click Kopiëren naar klembord met Dubbelklik inschakelen Copy URL after uploading was successful URL kopiëren na uploaden was succesvol After copying the screenshot, save it to a file as well Schermfoto, na het kopiëren, ook opslaan in bestand Save Path Opslaglocatie Change... Wijzigen... Use fixed path for screenshots to save Vaste locatie gebruiken voor het opslaan van schermfoto's Preferred save file extension: Voorkeursbestandsextensie: Latest Uploads Max Size Max. grootte van recente uploads Imgur Application Client ID Imgur Application-Client-ID Undo limit Beperking ongedaan maken Use JPG format for clipboard (PNG default) JPG-formaat gebruiken op klembord (standaard: png) Use lossy JPG format for clipboard (lossless PNG default) Verliesgevend JPG-formaat gebruiken voor klembord (standaard verliesvrij PNG) Copy file path after save Bestandspad kopiëren na opslaan Copy the file path to clipboard after the file is saved Kopieer het bestandspad naar het klembord nadat het bestand is opgeslagen Anti-aliasing image when zoom the pinned image Anti-aliasing afbeelding bij het inzoomen van de vastgepinde afbeelding After zooming the pinned image, should the image get smoothened or stay pixelated Na het zoomen van de vastgepinde afbeelding, moet de afbeelding gladder worden of pixelig blijven Upload image without confirmation Afbeelding uploaden zonder bevestiging Choose a Folder Kies een map Unable to write to directory. Kan niet wegschrijven naar map. Show magnifier Vergrootglas tonen Enable a magnifier while selecting the screenshot area Vergrootglas inschakelen bij het selecteren van het schermfotogebied Square shaped magnifier Vierkant vergrootglas Make the magnifier to be square-shaped Maak de loep vierkant Milliseconds before geometry display hides; 0 means do not hide Milliseconden voordat de geometrieweergave zich verbergt; 0 betekent niet verbergen Set geometry display timeout (ms) Dimmen van geometrieweergave (ms) Selection Geometry Display Geometrieweergave Display Location Locatie weergeven None Geen Top Left Linksboven Top Right Rechtsboven Bottom Left Linksonder Bottom Right Rechtsonder Center Midden Quality range of 0-100; Higher number is better quality and larger file size Kwaliteitsbereik van 0-100; Hogere waarde is betere kwaliteit en grotere bestandsgrootte JPEG Quality JPEG-kwaliteit Reverse arrow Pijl omkeren Draw the arrow head first De pijlpunt eerst tekenen Insecure Pixelate Onbeveiligde pixelvorming Draw the pixelation effect in an insecure but more asethetic way. Teken het pixelvormingeffect op een onbeveiligde, maar meer esthetische wijze. HistoryWidget Latest Uploads Recentste uploads Screenshots history is empty Er zijn nog geen schermfoto's gemaakt Copy URL URL kopiëren URL copied to clipboard. URL gekopieerd naar klembord. Open in browser Openen in browser Confirm to delete Verwijderen bevestigen Are you sure you want to delete a screenshot from the latest uploads and server? Weet je zeker dat je de schermfoto wilt verwijderen uit de recentste uploads en van de server? ImgS3Uploader Uploading Image Bezig met uploaden van afbeelding... URL copied to clipboard. URL gekopieerd naar klembord. Error Fout ImgUploadDialog Upload Confirmation Upload Bevestigingn Do you want to upload this capture? Wil je deze opname uploaden? Upload without confirmation Uploaden zonder bevestiging ImgUploader Uploading Image Bezig met uploaden van afbeelding... Unable to open the URL. Kan URL niet openen. URL copied to clipboard. URL gekopieerd naar klembord. Screenshot copied to clipboard. Schermafdruk gekopieerd naar klembord. Copy URL URL kopiëren Open URL URL openen Delete image Afbeelding verwijderen Image to Clipboard. Afbeelding naar klembord. ImgUploaderBase Upload image Upload image Uploading Image Afbeelding uploaden Copy URL URL kopiëren Open URL URL openen Delete image Afbeelding verwijderen Image to Clipboard. Afbeelding naar klembord. Save image Beeld bewaren Unable to open the URL. Kan URL niet openen. URL copied to clipboard. URL gekopieerd naar klembord. Screenshot copied to clipboard. Schermfoto gekopieerd naar klembord. Unable to save the screenshot to disk. Kan de schermfoto niet op schijf opslaan. Screenshot saved. Schermfoto opgeslagen. ImgUploaderTool Image Uploader Afbeelding uploader Upload the selection Uploaden van de selectie ImgurUploader Upload to Imgur Uploaden naar Imgur Uploading Image Uploaden van afbeelding Copy URL URL kopiëren Open URL URL openen Delete image Afbeelding verwijderen Image to Clipboard. Afbeelding naar klembord. Unable to open the URL. Kan URL niet openen. URL copied to clipboard. URL gekopieerd naar klembord. Screenshot copied to clipboard. De schermfoto is gekopieerd naar het klembord. ImgurUploaderTool Image Uploader Afbeelding uploader Upload the selection to Imgur Upload de selectie naar Imgur InfoWindow About Over Icon Ikoontje License Licentie GPLv3+ GPLv3+ Version Versie Flameshot v Flameshot versie OS Info Besturingssysteem info Copy Info Kopieer Info Right Click Rechtsklikken Mouse Wheel Muiswiel Move selection 1px Selectie 1px verplaatsen Resize selection 1px Afmetingen van selectie 1px aanpassen Quit capture Vastleggen afsluiten Copy to clipboard Kopiëren naar klembord Save selection as a file Selectie opslaan als bestand Undo the last modification Laatste wijziging ongedaan maken Toggle visibility of sidebar with options of the selected tool Zijbalk met gereedschapsopties tonen/verbergen Show color picker Kleurkiezer tonen Change the tool's thickness Wijzig de gereedschapsdikte Available shortcuts in the screen capture mode. Beschikbare sneltoetsen in de vastlegmodus. Key Toets Description Omschrijving <u><b>License</b></u> <u><b>Overeenkomst</b></u> <u><b>Version</b></u> <u><b>Versie</b></u> <u><b>Shortcuts</b></u> <u><b>Пречице</b></u> InvertTool Invert Omkeren Set Inverter as the paint tool Inverter instellen als schildergereedschap LineTool Line Lijn Set the Line as the paint tool Lijn instellen als verfgereedschap MarkerTool Marker Markeerstift Set the Marker as the paint tool Markeerstift instellen als verfgereedschap MoveTool Move Verplaatsen Move the selection area Selectiegebied verplaatsen PencilTool Pencil Potlood Set the Pencil as the paint tool Potlood instellen als verfgereedschap PinTool Pin Tool Vastmaken Pin image on the desktop Afbeelding vastmaken op bureaublad PinWidget Context menu Context menu Copy to clipboard Kopiëren naar klembord Save to file Opslaan naar bestand Rotate Right Rechtsom roteren Rotate Left Linksom roteren Increase Opacity Dekking vergroten Decrease Opacity Dekking verminderen Close Sluiten PixelateTool Pixelate Pixelvorming Set Pixelate as the paint tool. Pixelvorming als werktuig instellen. Set Pixelate as the paint tool Pixelvorming instellen als verfgereedschap PrimaryInstanceWidget Primary instance Primaire instantie <b>Primary instance.</b> Messages received from secondaries: <b>Primaire instantie.</b> Berichten ontvangen van secundaire instanties: QHotkey Failed to register %1. Error: %2 '%1' kan niet worden ingesteld. Foutmelding: %2 Failed to unregister %1. Error: %2 '%1' kan niet worden vrijgegeven. Foutmelding: %2 QObject Save Error Fout tijdens opslaan Capture saved as De schermfoto is opgeslagen als Capture saved to clipboard. Schermfoto vastgelegd op klembord. Capture saved to clipboard De schermfoto is vastgelegd op het klembord Error while saving to clipboard Fout tijdens opslaan op klembord Error trying to save as Fout tijdens opslaan als Save screenshot Schermfoto opslaan Path copied to clipboard as Pad gekopieerd naar klembord als Saving canceled Het opslaan is afgebroken Save canceled Het opslaan is afgebroken Capture is saved and copied to the clipboard as De schermfoto is opgeslagen en gekopieerd naar het klembord als Unable to connect via DBus Kan niet verbinden via DBus Powerful yet simple to use screenshot software. Krachtige doch eenvoudige software voor schermfoto's. See Bekijken Capture the entire desktop. Leg de volledige werkomgeving vast. Open the capture launcher. Open de schermfotostarter. Start a manual capture in GUI mode. Start een handmatige vastlegging in programmamodus. Configure Instellen Capture a single screen. Leg een beeldscherm vast. Path where the capture will be saved Het pad waar de schermfoto wordt opgeslagen Capture screenshot of all monitors at the same time. Schermfoto maken van alle beeldschermen tegelijk. Capture a screenshot of the specified monitor. Schermfoto maken van het gespecialiseerde beeldscherm. Existing directory or new file to save to Bestaande map of nieuw bestand om op te slaan Save the capture to the clipboard Schermfoto opslaan op klembord Pin the capture to the screen Zet de opname vast op het scherm Upload screenshot Schermfoto uploaden Delay time in milliseconds Wachttijd (in milliseconden) Repeat screenshot with previously selected region Schermfoto herhalen met voorgaande gebied Screenshot region to select Te selecteren schermfotogebied Set the filename pattern Bestandsnaampatroon instellen Accept capture as soon as a selection is made Accepteer vastlegging zodra een selectie is gemaakt Enable or disable the trayicon Systeemvakpictogram in- of uitschakelen Enable or disable run at startup Automatisch opstarten in- of uitschakelen Enable or disable the notifications Meldingen in- of uitschakelen Check the configuration for errors Controleer de configuratie op fouten Show the help message in the capture mode Uitleg tonen in vastlegmodus Define the main UI color Standaard vormgevingskleur instellen Define the contrast UI color Standaard contrasterende vormgevingskleur instellen Print raw PNG capture Onbewerkte PNG schermfoto tonen Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print de geometrie van de selectie in het formaat WxH+X+Y. Doet niets als raw is opgegeven Define the screen to capture (starting from 0) Definieer het vast te leggen scherm (beginnend bij 0) Invalid delay, it must be a number greater than 0 Ongeldige vertraging, het moet een getal groter dan 0 zijn Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Ongeldige regio, gebruik 'BxH+X+Y' of 'alle' of 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Ongeldig pad, moet een bestaande map zijn of een nieuw bestand in een bestaande map Define the screen to capture Kies het vast te leggen scherm default: screen containing the cursor standaard: het scherm met de cursor Screen number Beeldschermnummer Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Ongeldige kleur. Deze optie ondersteunt de volgende opmaken: - #RGB (elke van R, G en B is een los hex-getal) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Kleurnamen, zoals 'blue' of 'red' Mogelijk moet je het '#'-teken insluiten. Voorbeeld: '\#FFF' Invalid delay, it must be higher than 0 Ongeldige wachttijd: de wachttijd moet hoger dan 0 zijn Invalid screen number, it must be non negative Ongeldig beeldschermnummer: het nummer mag geen negatief getal zijn Invalid path, it must be a real path in the system Ongeldig pad: het pad moet bestaan Invalid value, it must be defined as 'true' or 'false' Ongeldige waarde: deze moet worden opgegeven als 'true' of 'false' Error Fout Unable to write in Kan niet wegschrijven naar Requested screen exceeds screen count Opgevraagd scherm overschrijdt het aantal schermen Full screen screenshot pinned to screen Volledige schermfoto op scherm vastgemaakt URL copied to clipboard. URL gekopieerd naar klembord. Options Opties Arguments Argumenten arguments argumenten Subcommands Nevenopdrachten subcommands nevenopdrachten Usage Gebruik options opties Per default runs Flameshot in the background and adds a tray icon for configuration. Standaard wordt Flameshot op de achtergrond uitgevoerd en toont daarbij een systeemvakpictogram. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hallo, hier ben ik! Klik op het pictogram in het systeemvak om een schermfoto te maken of gebruik de rechtermuisknop voor meer opties. Toggle side panel Zijpaneel in-/uitklappen Resize selection left 1px Afmetingen van selectie 1px aanpassen (links) Resize selection right 1px Afmetingen van selectie 1px aanpassen (rechts Resize selection up 1px Afmetingen van selectie 1px aanpassen (omhoog) Resize selection down 1px Afmetingen van selectie 1px aanpassen (omlaag) Select entire screen Gehele scherm selecteren Move selection left 1px Selectie 1px naar links verschuiven Move selection right 1px Selectie 1px naar rechts verschuiven Move selection up 1px Selectie 1px omhoog verschuiven Move selection down 1px Selectie 1px omlaag verschuiven Commit text in text area Tekst in tekstvak Delete current tool Huidig gereedschap verwijderen Quit capture Vastleggen afsluiten Screenshot history Laatste schermfoto's Capture screen Scherm vastleggen Show color picker Kleurkiezer tonen Change the tool's size De grootte van het gereedschap wijzigen Change the tool's thickness Wijzig de gereedschapsdikte RectangleTool Rectangle Rechthoek Set the Rectangle as the paint tool Rechthoek instellen als verfgereedschap RedoTool Redo Opnieuw Redo the next modification Volgende wijziging opnieuw toepassen SaveTool Save Сачувај Opslaan Save screenshot to a file Schermfoto opslaan naar bestand Save the capture Schermfoto opslaan ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! De universele wayland schermopname-adapter vereist Grim als de schermopname-component van wayland. Als de component voor het vastleggen van het scherm ontbreekt, installeer deze dan! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Als de instelling useGrimAdapter niet is ingeschakeld, wordt het dbus-protocol gebruikt. Let op dat het gebruik van het dbus-protocol onder wayland wordt aangeraden. Het advies is om in flameshot.ini de instelling useGrimAdapter in te schakelen om de grim-based algemene wayland schermfoto-adapter te activeren grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments de schermafdrukcomponent van grim is geïmplementeerd op basis van wlroots en kan niet worden gebruikt in GNOME of vergelijkbare desktopomgevingen Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Kan desktopomgeving niet detecteren (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Tip: stel de omgevingsvariabele XDG_CURRENT_DESKTOP in. Unable to capture screen Kan scherm niet vastleggen SecondaryInstanceWidget Secondary instance Secundaire instantie <b>Secondary instance.</b> Send message to primary: <b>Secundaire instantie.</b> Bericht verzenden naar primaire: Type something here... Typ hier iets... &Send &Verzenden Error sending message Fout bij verzenden bericht The message '%1' could not be sent to the primary. Het bericht '%1' kon niet naar de primaire instantie worden verzonden. SelectionTool Rectangular Selection Rechthoekige selectie Set Selection as the paint tool Selectie instellen als verfgereedschap SetShortcutDialog Set Shortcut Sneltoets instellen Enter new shortcut to change Druk op een nieuwe sneltoets voor Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Druk op Esc om af te breken of ⌘+Backspace om deze sneltoets uit te schakelen. Press Esc to cancel or Backspace to disable the keyboard shortcut. Druk op Esc om af te breken of Backspace om de sneltoets uit te schakelen. Flameshot must be restarted for changes to take effect. Flameshot moet opnieuw worden opgestart om de wijzigingen van kracht te laten worden. ShortcutsWidget Hot Keys Sneltoetsen Available shortcuts in the screen capture mode. Beschikbare sneltoetsen in de vastlegmodus. Description Omschrijving Key Toets Left Double-click Linker dubbelklik Toggle side panel Zijpaneel in-/uitklappen Grab a color from the screen Kleur kiezen van het scherm Resize selection left 1px Selectie 1px naar links aanpassen Resize selection right 1px Selectie 1px naar rechts aanpassen Resize selection up 1px Selectie 1px omhoog aanpassen Resize selection down 1px Selectie 1px omlaag aanpassen Symmetrically decrease width by 2px Breedte symmetrisch met 2px verkleinen Symmetrically increase width by 2px Breedte symmetrisch met 2px vergroten Symmetrically increase height by 2px Hoogte symmetrisch met 2px vergroten Symmetrically decrease height by 2px Hoogte symmetrisch met 2px verkleinen Select entire screen Volledig scherm selecteren Move selection left 1px Selectie 1px naar links verschuiven Move selection right 1px Selectie 1px naar rechts verschuiven Move selection up 1px Selectie 1px omhoog verschuiven Move selection down 1px Selectie 1px omlaag verschuiven Commit text in text area Tekst in tekstgebied vastleggen Delete selected drawn object Geselecteerd object verwijderen Cancel current selection Huidige selectie annuleren Delete current tool Huidig gereedschap verwijderen Capture screen Scherm vastleggen Screenshot history Laatste schermfoto's SidePanelWidget Active thickness: Actieve dikte: Active color: Actieve kleur: Press ESC to cancel Druk op Esc om te annuleren Active tool size: Actief gereedschap: Active Color: Active Color: Grab Color Kleur opnemen Display grid Raster weergeven SizeDecreaseTool Decrease Tool Size Gereedschapsomvang verlagen Decrease the size of the other tools Verlaag de omvang van andere gereedschappen SizeIncreaseTool Increase Tool Size Gereedschapsomvang verhogen Increase the size of the other tools Verhoog de omvang van andere gereedschappen SizeIndicatorTool Selection Size Indicator Grootte indicatie van selectie Show X and Y dimensions of the selection Toon X en Y afmetingen van de selectie Show the dimensions of the selection (X Y) Toon de afmetingen van de selectie (X Y) StrftimeChooserWidget Century (00-99) Eeuw (00-99) Year (00-99) Jaar (00-99) Year (2000) Jaar (2000) Month Name (jan) Naam van de maand (јаn) Month Name (january) Naam van de maand (јаnuari) Month (01-12) Maand (01-12) Week Day (1-7) Weekdag (1-7) Week (01-53) Wek (01-53) Day Name (mon) Naam van de dag (ma) Day Name (monday) Naam van de dag (maandag) Day (01-31) Dag (01-31) Day of Month (1-31) Dag van de maand (1-31) Day (001-366) Dag (001-366) Time (%H-%M-%S) Tijd (%H-%M-%S) Time (%H-%M) Tijd (%H-%M) Hour (00-23) Uur (00-23) Hour (01-12) Uur (01-12) Minute (00-59) Minuten (00-59) Second (00-59) Seconden (00-59) Full Date (%m/%d/%y) Volledige datum (%m/%d/%y) Full Date (%Y-%m-%d) Volledige datum (%Y-%m-%d) Full Date (%d-%m-%Y) Volledige datum (%d-%m-%Y) SystemNotification Flameshot Info Flameshot informatie TextConfig StrikeOut Doorhalen Underline Onderstrepen Bold Vetgedrukt Italic Cursief Left Align Links uitlijnen Center Align Midden uitlijnen Right Align Rechts uitlijnen TextTool Text Tekst Add text to your capture Voeg tekst toe aan je schermfoto TrayIcon &Take Screenshot &Schermfoto maken &Open Launcher Starter &openen &Configuration &Configuratie &About &Over Check for updates Controleren op updates New version %1 is available Nieuwe versie %1 is beschikbaar &Quit &Afsluiten &Latest Uploads Recente up&loads &Open Save Path Opslaglocatie &openen UIcolorEditor UI Color Editor Kleurenschemabewerker Change the color moving the selectors and see the changes in the preview buttons. Wijzig de kleur d.m.v. de selectie-indicators en bekijk de wijzigingen op de voorbeeldknoppen. Select a Button to modify it Selecteer een knop om deze te bewerken Main Color Hoofdkleur Click on this button to set the edition mode of the main color. Klik op deze knop om de hoofdkleur te bewerken. Contrast Color Contrastkleur Click on this button to set the edition mode of the contrast color. Klik op deze knop om de contrastkleur te bewerken. UndoTool Undo Ongedaan maken Undo the last modification Laatste wijziging ongedaan maken UpdateNotificationWidget New Flameshot version %1 is available Er is een nieuwe versie beschikbaar: %1 Ignore Negeren Later Straks Update Bijwerken UploadHistory Upload History Uploaden Geschiedenis Screenshots history is empty Geen laatste schermfoto's UploadLineItem Form Formulier TextLabel TekstLabel Copy URL Kopieer URL Open In Browser Openen in browser Confirm to delete Bevestig om te verwijderen Are you sure you want to delete a screenshot from the latest uploads and server? Weet u zeker dat u een schermfoto van de recente uploads en server wilt verwijderen? UtilityPanel Close Sluiten <Empty> <Leeg> VisualsEditor Opacity of area outside selection: Doorzichtigheid van gebied buiten selectie: UI Color Editor Gebruikersomgeving kleur bewerker Colorpicker Editor Kleurkiezer bewerker Button Selection Knopselectie Select All Alles selecteren color_widgets::ColorDialog Pick Kies color_widgets::ColorPalette Unnamed Naamloos color_widgets::ColorPaletteModel Unnamed Naamloos %1 (%2 colors) %1 (%2 kleuren) color_widgets::ColorPaletteWidget Open a new palette from file Open een nieuw palet vanuit een bestand Create a new palette Maak een nieuw palet Duplicate the current palette Dupliceer het huidige palet Delete the current palette Verwijder het huidige palet Revert changes to the current palette Wijzigingen terugdraaien naar het huidige palet Save changes to the current palette Wijzigingen opslaan in het huidige palet Add a color to the palette Voeg een kleur toe aan het palet Remove the selected color from the palette Verwijder de geselecteerde kleur uit het palet New Palette Nieuw Palet Name Name GIMP Palettes (*.gpl) GIMP Paletten (*.gpl) Palette Image (%1) Palet afbeelding (%1) All Files (*) Alle bestanden (*) Open Palette Palet openen Failed to load the palette file %1 Het laden van het paletbestand is mislukt %1 color_widgets::GradientEditor Add Color Kleur toevoegen Remove Color Verwijder Kleur Edit Color... Bewerk Kleur... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 kleuren) color_widgets::Swatch Clear Color Heldere Kleur %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_pl.ts ================================================ AbstractWidgetList Add New Dodaj nowy Move Up Ruch w górę Move Down Ruch w dół Remove Usuń AcceptTool Accept Akceptuj Accept the capture Akceptuj zrzut AppLauncher App Launcher Uruchamianie aplikacji Choose an app to open the capture Wybierz aplikację do otwierania zrzutu AppLauncherWidget Open With Otwórz za pomocą Launch in terminal Otwórz w konsoli Keep open after selection Pozostaw otwarte po zaznaczeniu Error Błąd Unable to write in Nie można zapisać Unable to launch in terminal. Nie można uruchomić w terminalu. ArrowTool Arrow Strzałka Set the Arrow as the paint tool Wybierz strzałkę jako narzędzie rysowania BlurTool Blur Rozmycie Set Blur as the paint tool Rozmywanie obszarów CaptureLauncher <b>Capture Mode</b> <b>Tryb przechwytywania</b> Rectangular Region Zaznaczony obszar Full Screen (Current Display) Pełny ekran (obecny monitory) Full Screen (All Monitors) Pełny ekran (wszystkie monitory) No Delay Bez opóźnienia second sekunda seconds sekundy Take new screenshot Wykonaj nowy zrzut ekranu Area: Obszar: Capture Launcher Program uruchamiający przechwytanie TextLabel Etykieta tekstowa Capture Mode Tryb przechwytywania Delay: Opóźnienie: WxH+x+y Szerokość (W) x Wysokość (H) + x + y CaptureWidget Unable to capture screen Nie można przechwycić ekranu Mouse Myszka Select screenshot area Wybierz obszar zrzutu ekranu Mouse Wheel Kółko myszy Change tool size Zmień rozmiar narzędzia Right Click Prawy przycisk Show color picker Pokaż próbnik kolorów Open side panel Otwórz panel boczny Esc Esc Exit Wyjdź Quit Capture Zakończ przechwytywanie Are you sure you want to quit capture? Czy na pewno chcesz zakończyć przechwytywanie? Do not show this again Nie pokazuj więcej Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot przeszedł w tryb działania w tle. Skróty klawiszowe nie zadziałają dopóki gdzieś nie klikniesz. Configuration error resolved. Launch `flameshot gui` again to apply it. Błąd konfiguracji rozwiązany. Otwórz 'flameshot gui' ponownie. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Wybierz obszar za pomocą myszy lub wciśnij Esc aby wyjść. Wciśnij Enter, aby wykonać zrzut ekranu. Prawy klik, aby pokazać próbnik kolorów. Użyj kółka myszy aby zmienić grubość narzędzia. Spacja, aby pokazać panel boczny. Tool Settings Ustawienia narzędzi CircleCountTool Circle Counter Licznik Add an autoincrementing counter bubble Dodaj automatycznie zwiększający się bąbelek licznika CircleTool Circle Okręgi Set the Circle as the paint tool Rysowanie okręgów i elips ColorDialog Select Color Wybierz kolor Saturation Nasycenie Hue Barwa Hex Kod heksadecymalny Blue Niebieski Value Wartość Green Zielony Alpha Alfa Red Czerwony ColorGrabWidget Accept color Akceptuj kolor Enter or Left Click Enter lub kliknij lewym przyciskiem myszy Precisely select color Wybierz kolor precyzyjnie Hold Left Click Przytrzymaj lewy przycisk myszy Toggle magnifier Włącz/wyłącz lupę Space or Right Click Spacja lub kliknięcie prawym przyciskiem myszy Cancel Anuluj Esc Esc ColorPickerEditor Edit Preset: Edytuj ustawienia wstępne: Enter color to update preset Wprowadź kolor, aby zaktualizować ustawienie wstępne Update Aktualizuj Press button to update the selected preset Naciśnij przycisk, aby zaktualizować wybrane ustawienie wstępne Delete Usuń Press button to delete the selected preset Naciśnij przycisk, aby usunąć wybrane ustawienie wstępne Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Dodaj Press button to add preset Press button to add preset Error Błąd Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Błędy konfiguracji ConfigHandler Unrecognized setting: '%1' Nieznane ustawienie: '%1' Unrecognized shortcut name: '%1'. Nieznany skrót klawiszowy: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Konflikt skrótów klawiszowych: '%1' i '%2' mają przypisany ten sam skrót: %3 Bad value in '%1'. Expected: %2 Nieprawidłowa wartość w '%1'. Oczekiwano: %2 You have successfully resolved the configuration error. Rozwiązałeś błąd konfiguracji. The configuration contains an error. Open configuration to resolve. Konfiguracja zawiera błąd. Otwórz konfigurację by go rozwiązać. Bad config key '%1' in ConfigHandler. Please report this as a bug. Nieprawidłowy klucz konfiguracji: '%1'. Zgłoś to jako błąd. ConfigResolver Resolve configuration errors Rozwiąż błędy konfiguracji <b>You must resolve all errors before continuing:</b> <b>Musisz rozwiązać wszystkie błędy przed kontynuowaniem:</b> Reset Przywróć Reset to the default value. Przywróć do wartości domyślnej. Remove Usuń Remove this setting. Usuń to ustawienie. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Niektóre skróty klawiszowe są w konflikcie. To NIE spowoduje zamknięcia programu. Rozwiąż błędy ręcznie w pliku konfiguracyjnym. Resolve all Rozwiąż wszystkie Resolve all listed errors. Rozwiąż wszystkie błędy. Details Szczegóły ConfigWindow Configuration Konfiguracja Interface Interfejs Filename Editor Edytor nazw plików General Ogólne Shortcuts Skróty Resolve Rozwiąż <b>Configuration file has errors. Resolve them before continuing.</b> <b>Plik konfiguracyjny zawiera błędy. Rozwiąż je przed kontynuowaniem.</b> Controller New version %1 is available Nowa wersja %1 jest dostępna You have the latest version Masz najnowszą wersję Failed to get information about the latest version. Nie udało się uzyskać informacji o najnowszej wersji. Error Błąd Unable to close active modal widgets Nie można zamknąć aktywnych widżetów modalnych &Take Screenshot &Zrzut ekranu &Open Launcher &Pokaż ekran startowy &Configuration &Konfiguracja &About &O programie Check for updates Sprawdź aktualizacje &Latest Uploads &Ostatnio wysłane URL copied to clipboard. URL skopiowany do schowka. &Information &Informacje &Quit &Wyjdź CopyTool Copy Kopiuj Copy selection to clipboard Kopiuj zaznaczenie do schowka Copy the selection into the clipboard Kopiuj zaznaczony obszar do schowka DBusUtils Unable to connect via DBus Nie można się połączyć za pomocą DBus ExitTool Exit Wyjdź Leave the capture screen Opuść ekran przechwytywania FileNameEditor Edit the name of your captures: Edycja wzorca nazwy plików: Edit: Edytuj: Preview: Podgląd: Save Zapisz Saves the pattern Zapisuje wzorzec Restore Przywróć Reset Reset Restores the saved pattern Przywraca zapisany wzorzec Clear Wyczyść Deletes the name Usuwa nazwę Flameshot Error Błąd Unable to close active modal widgets Nie można zamknąć aktywnych widżetów modalnych URL copied to clipboard. Adres URL został skopiowany do schowka. FlameshotDaemon New version %1 is available Dostępna jest nowa wersja %1 You have the latest version Masz najnowszą wersję Failed to get information about the latest version. Nie udało się uzyskać informacji o najnowszej wersji. Unable to connect via DBus Nie można nawiązać połączenia z DBus GeneneralConf Import Import Error Błąd Unable to read file. Nie można odczytać pliku. Unable to write file. Nie można zapisać pliku. Save File Zapisz plik Confirm Reset Potwierdź Reset Are you sure you want to reset the configuration? Czy na pewno chcesz zresetować konfigurację? Show help message Pokaż podpowiedzi Show the help message at the beginning in the capture mode. Pokaż podpowiedzi na początku trybu przechwytywania. Show desktop notifications Pokaż powiadomienia ekranowe Show tray icon Pokaż ikonę w trayu Show the systemtray icon Pokaż ikonę w zasobniku systemowym Configuration File Plik konfiguracyjny Export Export Reset Reset Launch at startup Uruchom podczas startu Launch Flameshot Uruchom Flameshot Close after capture Zamknij po wykonaniu zrzutu Close after taking a screenshot Zamknij po wykonaniu zrzutu ekranu Copy URL after upload Kopiuj adres URL po wysłaniu Copy URL and close window after upload Kopiuj adres URL po wysłaniu i zamknij okno GeneralConf Import Importuj Error Błąd Unable to read file. Nie można odczytać pliku. Unable to write file. Nie można zapisać pliku. Save File Zapisz plik Confirm Reset Potwierdź przywracanie Are you sure you want to reset the configuration? Czy na pewno chcesz przywrócić konfigurację domyślną? Show help message Pokaż podpowiedzi Show the help message at the beginning in the capture mode. Pokaż podpowiedzi na początku trybu przechwytywania. Show the side panel button Pokaż przycisk panelu bocznego Show the side panel toggle button in the capture mode. Pokaż przełącznik panelu bocznego w trybie przechwytywania. Show desktop notifications Pokaż powiadomienia ekranowe Show tray icon Pokaż ikonę w centrum akcji Show the systemtray icon Pokaż ikonę w zasobniku systemowym Confirmation required to delete screenshot from the latest uploads Potwierdź aby usunąć zrzuty z ostatnio wysłanych Configuration File Plik konfiguracyjny Export Eksportuj Reset Przywróć Automatic check for updates Automatycznie sprawdzaj aktualizacje Allow multiple flameshot GUI instances simultaneously Zezwól na wiele instancji flameshot GUI jednocześnie This allows you to take screenshots of flameshot itself for example. To ustawienie zezwala na chociażby tworzenie zrzutu ekranów samego flameshot'a. Automatically close daemon when it is not needed Automatycznie zamykaj deamon, gdy nie jest już potrzebny Launch at startup Uruchom podczas startu Launch Flameshot Uruchom Flameshot Show welcome message on launch Pokaż wiadomość powitalną przy starcie Use large predefined color palette Używaj dużej predefiniowanej palety kolorów Copy URL after upload Kopiuj adres URL po wysłaniu Copy URL and close window after upload Kopiuj adres URL i zamknij okno po wysłaniu Save image after copy Zapisz obraz po skopiowaniu Save image file after copying it Zapisz plik obrazu po skopiowaniu Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Pokaż powiadomienia o przerwaniu Enable abort notifications Włącz powiadomienia o przerwaniu Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Użyj programu grim (Wayland) do robienia zrzutów ekranu. Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim to narzędzie dostępne wyłącznie w środowisku Wayland, służące do przechwytywania ekranów w oparciu o protokół screencopy. Zasadniczo należy je włączać tylko w minimalnych menedżerach okien Wayland, takich jak sway, hyprland itp. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatycznie usuwaj z pamięci, gdy nie jest potrzebne Automatically close daemon (background process) when it is not needed Automatycznie zamykaj demona (proces działający w tle), gdy nie jest potrzebny Launch in background at startup Uruchom w tle podczas startu systemu Launch Flameshot daemon (background process) when computer is booted Uruchom demona Flameshot (proces w tle) podczas uruchamiania komputera Ask before quit capture Zapytaj przed zakończeniem przechwytywania Show the confirmation prompt before ESC quit Pokaż monit potwierdzający przed zamknięciem ESC Enable Copy to clipboard on Double Click Włącz kopiowanie do schowka po dwukrotnym kliknięciu Copy URL after uploading was successful Skopiuj adres URL po pomyślnym przesłaniu pliku After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path Zapisz ścieżkę Change... Zmień... Use fixed path for screenshots to save Użyj ustalonej ścieżki do zapisywania zrzutów Preferred save file extension: Preferowane rozszerzenie plików zapisu: Latest Uploads Max Size Maksymalny rozmiar ostatniego wysyłania Imgur Application Client ID Imgur Application Client ID Undo limit Limit cofania Use JPG format for clipboard (PNG default) Użyj formatu JPG dla schowka (domyślnie PNG) Use lossy JPG format for clipboard (lossless PNG default) Użyj stratnego formatu JPG dla schowka (domyślnie bezstratny format PNG) Copy file path after save Skopiuj ścieżkę pliku po zapisaniu Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Zastosuj anti-aliasing podczas przybliżania przypiętego obrazu After zooming the pinned image, should the image get smoothened or stay pixelated Po przybliżeniu przypiętego obrazu, obraz powinien zostać wygładzony czy rozmazany Upload image without confirmation Wyślij obraz bez potwierdzenia Choose a Folder Wybierz folder Unable to write to directory. Nie można zapisać do folderu. Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Milisekundy przed ukryciem wyświetlania geometrii; 0 oznacza nie ukrywaj Set geometry display timeout (ms) Ustaw limit czasu wyświetlania geometrii (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Ostatnio wysłane Screenshots history is empty Historia zrzutów jest pusta Copy URL Kopiuj URL URL copied to clipboard. URL skopiowany do schowka. Open in browser Otwórz w przeglądarce Confirm to delete Potwierdź usunięcie Are you sure you want to delete a screenshot from the latest uploads and server? Czy na pewno chcesz usunąć zrzut ekranu z ostatnio wysłanych i z serwera? ImgS3Uploader Uploading Image Wysyłanie obrazka URL copied to clipboard. URL skopiowany do schowka. Error Błąd ImgUploadDialog Upload Confirmation Potwierdzenie wysyłania Do you want to upload this capture? Czy na pewno chcesz wysłać ten zrzut ekranu? Upload without confirmation Wyślij bez potwierdzenia ImgUploader Uploading Image Wysyłanie obrazka Unable to open the URL. Nie można otworzyć adresu URL. URL copied to clipboard. URL skopiowany do schowka. Screenshot copied to clipboard. Zrzut ekranu skopiowany do schowka. Copy URL Kopiuj URL Open URL Otwórz URL Delete image Usuń obrazek Image to Clipboard. Obrazek do schowka. ImgUploaderBase Upload image Wyślij obraz Uploading Image Wysyłanie obrazu Copy URL Kopiuj URL Open URL Otwórz URL Delete image Usuń obraz Image to Clipboard. Obraz do schowka. Save image Zapisz obraz Unable to open the URL. Nie można otworzyć adresu URL. URL copied to clipboard. URL skopiowany do schowka. Screenshot copied to clipboard. Zrzut ekranu skopiowany do schowka. Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader Wysyłanie obrazów Upload the selection Wyślij zaznaczenie ImgurUploader Upload to Imgur Wyślij do Imgur Uploading Image Wysyłanie obrazka Copy URL Kopiuj URL Open URL Otwórz URL Delete image Usuń obrazek Image to Clipboard. Obrazek do schowka. Unable to open the URL. Nie można otworzyć adresu URL. URL copied to clipboard. URL skopiowany do schowka. Screenshot copied to clipboard. Zrzut ekranu skopiowany do schowka. ImgurUploaderTool Image Uploader Uploader obrazów Upload the selection to Imgur Wyślij zaznaczenie do Imgur InfoWindow About O programie Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info SPACEBAR SPACJA Right Click Prawy klik Mouse Wheel Kółko myszy Move selection 1px Przesuń zaznaczenie o 1px Resize selection 1px Zmień rozmiar zaznaczenia o 1px Quit capture Zakończ przechwytywanie Copy to clipboard Kopiuj do schowka Save selection as a file Zapisz zaznaczenie jako plik Undo the last modification Cofnij ostatnią modyfikację Toggle visibility of sidebar with options of the selected tool Przełącz widoczność paska bocznego z opcjami wybranego narzędzia Show color picker Pokaż próbnik kolorów Change the tool's thickness Zmień grubość narzędzia Available shortcuts in the screen capture mode. Dostępne skróty w trybie przechwytywania obrazu. Key Klawisz Description Działanie <u><b>License</b></u> <u><b>Licencja</b></u> <u><b>Version</b></u> <u><b>Wersja</b></u> <u><b>Shortcuts</b></u> <u><b>Skróty klawiszowe</b></u> InvertTool Invert Odwróć Set Inverter as the paint tool Wybierz Odwrócenie jako narzędzie rysowania LineTool Line Linia Set the Line as the paint tool Ustaw Linię jako narzędzie rysowania MarkerTool Marker Marker Set the Marker as the paint tool Ustaw Marker jako narzędzie rysowania MoveTool Move Przesuwanie Move the selection area Przesuń zaznaczenie PencilTool Pencil Ołówek Set the Pencil as the paint tool Ustaw Ołówek jako narzędzie rysowania PinTool Pin Tool Narzędzie przypinania Pin image on the desktop Przypnij obraz do pulpitu PinWidget Context menu Context menu Copy to clipboard Kopiuj do schowka Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Zamknij PixelateTool Pixelate Rozmazywanie Set Pixelate as the paint tool. Set Pixelate as the paint tool Ustaw Rozmazywanie jako narzędzie rysowania PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Nie udało się zarejestrować %1. Błąd: %2 Failed to unregister %1. Error: %2 Nie udało się wyrejestrować %1. Błąd: %2 QObject Save Error Błąd zapisu Capture saved as Zrzut ekranu zapisany jako Capture saved to clipboard. Zrzut ekranu skopiowano do schowka. Capture saved to clipboard Zrzut skopiowano do schowka Error while saving to clipboard Błąd podczas kopiowania do schowka Error trying to save as Błąd przy próbie zapisu jako Save screenshot Zapisz zrzut ekranu Path copied to clipboard as Ścieżka zapisana do schowka jako Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Zrzut jest zapisywany i kopiowany do schowka jako Unable to connect via DBus Nie udało się połączyć za pomocą DBus Powerful yet simple to use screenshot software. Zaawansowany lecz prosty w użyciu program do zrzutów ekranu. See Zobacz Capture the entire desktop. Przechwyć cały pulpit. Open the capture launcher. Otwórz program do zrzutów. Start a manual capture in GUI mode. Rozpocznij przechwytywanie w trybie GUI. Configure Konfiguruj Capture a single screen. Przechwyć pojedynczy ekran. Path where the capture will be saved Ścieżka do której zrzut zostanie zapisany Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Docelowy istniejący folder lub nowy plik Save the capture to the clipboard Zapisz zrzut do schowka Pin the capture to the screen Przypnij zrzut do ekranu Upload screenshot Wyślij zrzut ekranu Delay time in milliseconds Opóźnienie w milisekundach Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Obszar zrzutu ekranu do zaznaczenia Set the filename pattern Ustaw wzorzec nazwy pliku Accept capture as soon as a selection is made Zatwierdź zrzut ekranu w momencie zaznaczenia Enable or disable the trayicon Włącz lub wyłącz ikonę w centrum akcji Enable or disable run at startup Włącz lub wyłącz uruchamianie przy starcie Enable or disable the notifications Check the configuration for errors Szukaj błędów w konfiguracji Show the help message in the capture mode Pokaż pomoc w trybie przechwytywania Define the main UI color Zdefiniuj główny kolor interfejsu Define the contrast UI color Zdefiniuj kontrastowy kolor interfejsu Print raw PNG capture Wydrukuj nieprzetworzony zrzut PNG Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Drukuj geometrię zaznaczenia w formacie WxH+X+Y. Brak efektu jeśli wybrano nieprzetwarzanie Define the screen to capture (starting from 0) Wybierz ekran do zrzutu (zaczynając od 0) Invalid delay, it must be a number greater than 0 Nieprawidłowe opóźnienie; wartość musi być liczbą większą od 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Nieprawidłowy region; wybierz 'WxH+X+Y' lub 'all' lub 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Nieprawidłowa ścieżka; musi być istniejącym folderem lub nowym plikiem w istniejącym folderze Define the screen to capture Zdefiniuj ekran do przechwycenia default: screen containing the cursor domyślnie: ekran zawierający kursor Screen number Numer ekranu Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Niepoprawny kolor, wspierane są następujące formaty: - #RGB (każdy R, G, i B jest pojedynczym numerem szesnastkowym) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Nazwane kolory jak 'blue' lub 'red' Może być konieczne opuszczenie znaku '#' jak np.: '\#FFF' Invalid delay, it must be higher than 0 Niepoprawne opóźnienie, musi być większe od 0 Invalid screen number, it must be non negative Niepoprawny numer ekranu, musi być liczbą nieujemną Invalid path, it must be a real path in the system Niepoprawna ścieżka, to musi być rzeczywista ścieżka w systemie Invalid value, it must be defined as 'true' or 'false' Niepoprawna wartość, musi być zdefiniowana jako 'true' lub 'false' Error Błąd Unable to write in Nie można zapisać w Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Zrzut pełnoekranowy przypięty do ekranu URL copied to clipboard. URL skopiowany do schowka. Options Opcje Arguments Argumenty arguments argumenty Subcommands subcommands Usage Użycie options opcje Per default runs Flameshot in the background and adds a tray icon for configuration. Domyślnie uruchamia Flameshot w tle i dodaje ikonę w zasobniku do konfiguracji. Per default runs Flameshot in the background and adds a tray icon for configuration. Domyślnie uruchamia Flameshot w tle i dodaje ikonę w zasobniku systemowym do konfiguracji. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Cześć, jestem tutaj! Kliknij ikonę w zasobniku, aby zrobić zrzut ekranu, lub kliknij prawym przyciskiem, aby zobaczyć więcej opcji. Toggle side panel Przełącz panel boczny Resize selection left 1px Zmień rozmiar zaznaczenia w lewo o 1 piksel Resize selection right 1px Zmień rozmiar zaznaczenia w prawo o 1 piksel Resize selection up 1px Zmień rozmiar zaznaczenia w górę o 1 piksel Resize selection down 1px Zmień rozmiar zaznaczenia w dół o 1 piksel Select entire screen Wybierz cały ekran Move selection left 1px Przesuń zaznaczenie w lewo o 1 piksel Move selection right 1px Przesuń zaznaczenie w prawo o 1 piksel Move selection up 1px Przesuń zaznaczenie w górę o 1 piksel Move selection down 1px Przesuń zaznaczenie w dół o 1 piksel Commit text in text area Zatwierdź tekst w obszarze tekstowym Delete current tool Delete current tool Quit capture Zakończ przechwytywanie Screenshot history Historia zrzutów ekranu Capture screen Przechwyć ekran Show color picker Pokaż próbnik kolorów Change the tool's size Zmień rozmiar narzędzia Change the tool's thickness Zmień grubość narzędzia RectangleTool Rectangle Prostokąt Set the Rectangle as the paint tool Ustaw Prostokąt jako narzędzie rysowania RedoTool Redo Ponów Redo the next modification Ponów następną modyfikację SaveTool Save Zapisz Save screenshot to a file Zapisz zrzut ekranu do pliku Save the capture Zapisz zaznaczenie ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Nie można przechwycić ekranu SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Zaznaczenie prostokątne Set Selection as the paint tool Ustawia Zaznaczenie prostokątne jako narzędzie rysowania SetShortcutDialog Set Shortcut Ustaw skróty klawiszowe Enter new shortcut to change Wprowadź nowy skrót klawiszowy do zmiany Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Naciśnij Esc, by anulować lub ⌘+Backspace by wyłączyć skrót klawiszowy. Press Esc to cancel or Backspace to disable the keyboard shortcut. Naciśnij Esc, by anulować lub Backspace aby wyłączyć skrót klawiszowy. Flameshot must be restarted for changes to take effect. Flameshot musi zostać uruchomiony ponownie, by zmiany miały efekt. ShortcutsWidget Hot Keys Skróty klawiszowe Available shortcuts in the screen capture mode. Dostępne skróty klawiszowe w trybie przechwytywania obrazu. Description Opis Key Klawisz Left Double-click Left Double-click Toggle side panel Przełącz panel boczny Grab a color from the screen Resize selection left 1px Zmień rozmiar zaznaczenia w lewo o 1 piksel Resize selection right 1px Zmień rozmiar zaznaczenia w prawo o 1 piksel Resize selection up 1px Zmień rozmiar zaznaczenia w górę o 1 piksel Resize selection down 1px Zmień rozmiar zaznaczenia w dół o 1 piksel Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Wybierz cały ekran Move selection left 1px Przesuń zaznaczenie w lewo o 1 piksel Move selection right 1px Przesuń zaznaczenie w prawo o 1 piksel Move selection up 1px Przesuń zaznaczenie w górę o 1 piksel Move selection down 1px Przesuń zaznaczenie w dół o 1 piksel Commit text in text area Zatwierdź tekst w obszarze tekstowym Delete selected drawn object Cancel current selection Delete current tool Usuń bieżące narzędzie Capture screen Przechwyć ekran Screenshot history Historia zrzutów ekranu SidePanelWidget Active thickness: Grubość: Active color: Kolor: Press ESC to cancel Wciśnij ESC, aby anulować Active tool size: Rozmiar aktywnego narzędzia: Active Color: Aktywny kolor: Grab Color Pobierz kolor Display grid SizeDecreaseTool Decrease Tool Size Zmniejsz rozmiar narzędzia Decrease the size of the other tools Zmniejsz rozmiar pozostałych narzędzi SizeIncreaseTool Increase Tool Size Zwiększ rozmiar narzędzia Increase the size of the other tools Zwiększ rozmiar pozostałych narzędzi SizeIndicatorTool Selection Size Indicator Miernik zaznaczenia Show X and Y dimensions of the selection Pokaż wymiary X i Y zaznaczenia Show the dimensions of the selection (X Y) Pokazuje wymiary zaznaczenia (X Y) StrftimeChooserWidget Century (00-99) Stulecie (00-99) Year (00-99) Rok (00-99) Year (2000) Rok (2000) Month Name (jan) Nazwa miesiąca (sty) Month Name (january) Nazwa miesiąca (styczeń) Month (01-12) Miesiąc (01-12) Week Day (1-7) Dzień tygodnia (1-7) Week (01-53) Tydzień (01-53) Day Name (mon) Nazwa dnia (pon) Day Name (monday) Nazwa dnia (poniedziałek) Day (01-31) Dzień (01-31) Day of Month (1-31) Dzień miesiąca (1-31) Day (001-366) Dzień (001-366) Time (%H-%M-%S) Czas (%H-%M-%S) Time (%H-%M) Czas (%H-%M) Hour (00-23) Godzina (00-23) Hour (01-12) Godzina (01-12) Minute (00-59) Minuta (00-59) Second (00-59) Sekunda (00-59) Full Date (%m/%d/%y) Data (%d/%m/%y) Full Date (%Y-%m-%d) Data (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info O Flameshot TextConfig StrikeOut Przekreślenie Underline Podkreślenie Bold Pogrubienie Italic Kursywa Left Align Wyrównanie do lewej Center Align Wyśrodkowanie Right Align Wyrównanie do prawej TextTool Text Tekst Add text to your capture Dodaj tekst do zrzutu ekranu TrayIcon &Take Screenshot &Zrób zrzut ekranu &Open Launcher &Pokaż okno &Configuration &Konfiguracja &About &O programie Check for updates Sprawdź dostępność aktualizacji New version %1 is available Dostępna jest nowa wersja %1 &Quit &Wyjdź &Latest Uploads &Ostatnio wysłane &Open Save Path UIcolorEditor UI Color Editor Edytor kolorów interfejsu Change the color moving the selectors and see the changes in the preview buttons. Zmień kolor przesuwając selektory i obserwując podgląd przycisków. Select a Button to modify it Wybierz przycisk do zmodyfikowania Main Color Kolor główny Click on this button to set the edition mode of the main color. Kliknij ten przycisk, by móc modyfikować kolor główny. Contrast Color Kolor kontrastowy Click on this button to set the edition mode of the contrast color. Kliknij ten przycisk, by móc modyfikować kolor kontrastowy. UndoTool Undo Cofnij Undo the last modification Cofnij ostatnią zmianę UpdateNotificationWidget New Flameshot version %1 is available Nowa wersja Flameshot %1 jest dostępna Ignore Ignoruj Later Później Update Aktualizuj UploadHistory Upload History Upload History Screenshots history is empty Historia zrzutów jest pusta UploadLineItem Form Form TextLabel TextLabel Copy URL Kopiuj adres URL Open In Browser Otwórz w przeglądarce Confirm to delete Potwierdź usunięcie Are you sure you want to delete a screenshot from the latest uploads and server? Czy na pewno chcesz usunąć zrzut ekranu z ostatnio wysłanych i z serwera? UtilityPanel Close Zamknij <Empty> <Pusto> VisualsEditor Opacity of area outside selection: Przezroczystość obszaru poza zaznaczeniem: UI Color Editor Edytor kolorów interfejsu Colorpicker Editor Colorpicker Editor Button Selection Wybór przycisków Select All Wybierz wszystkie color_widgets::ColorDialog Pick Wybierz color_widgets::ColorPalette Unnamed Bez nazwy color_widgets::ColorPaletteModel Unnamed Bez nazwy %1 (%2 colors) %1 (%2 kolory) color_widgets::ColorPaletteWidget Open a new palette from file Otwórz nową paletę z pliku Create a new palette Utwórz nową paletę Duplicate the current palette Duplikuj obecną paletę Delete the current palette Usuń obecną paletę Revert changes to the current palette Cofnij zmiany obecnej palety Save changes to the current palette Zapisz zmiany do obecnej palety Add a color to the palette Dodaj kolor do palety Remove the selected color from the palette Zmień wybrany kolor z palety New Palette Nowa paleta Name Nazwa GIMP Palettes (*.gpl) Palety GIMP (*.gpl) Palette Image (%1) Obraz palety (%1) All Files (*) Wszystkie pliki (*) Open Palette Otwórz paletę Failed to load the palette file %1 Nie udało się otworzyć palety z pliku %1 color_widgets::GradientEditor Add Color Dodaj kolor Remove Color Usuń kolor Edit Color... Edytuj kolor... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 kolory) color_widgets::Swatch Clear Color Wyczyść kolor %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_pt.ts ================================================ AbstractWidgetList Add New Adicionar novo Move Up Mover para cima Move Down Mover para baixo Remove Remover AcceptTool Accept Aceitar Accept the capture Aceitar a captura AppLauncher App Launcher Iniciar aplicação Choose an app to open the capture Escolha uma aplicação para abrir a captura AppLauncherWidget Open With Abrir com Launch in terminal Abrir no terminal Keep open after selection Manter aberto após seleção Error Erro Unable to launch in terminal. Não foi possível abrir no terminal. Unable to write in Não foi possível gravar em ArrowTool Arrow Seta Set the Arrow as the paint tool Usar a Seta como ferramenta de desenho BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Região retangular Full Screen (Current Display) Ecrã Inteiro (Monitor atual) Full Screen (All Monitors) Ecrã inteiro (Todos os monitores) No Delay Sem atraso second segundo seconds segundos Take new screenshot Tirar nova captura de ecrã Area: Área: Capture Launcher Lançador de captura TextLabel TextLabel Capture Mode Modo de Captura Delay: Atraso: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Não foi possível capturar o ecrã Mouse Rato Select screenshot area Área de seleção Mouse Wheel Roda do rato Change tool size Alterar tamanho da ferramenta Right Click Clique direito Show color picker Mostrar seletor de cores Open side panel Abrir painel lateral Esc Esc Exit Sair Quit Capture Sair de captura Are you sure you want to quit capture? Pretende sair da captura? Do not show this again Não mostrar isto novamente Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot perdeu o foco. As teclas de atalho não funcionarão até que clique em algum lugar. Configuration error resolved. Launch `flameshot gui` again to apply it. Erro de configuração resolvido. Inicie o “flameshot gui” novamente para aplicá-lo. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings Definições das ferramentas CircleCountTool Circle Counter Contorno do círculo Add an autoincrementing counter bubble Adicionar um balão de contorno de incremento automático CircleTool Circle Círculo Set the Circle as the paint tool Definir o Círculo como ferramenta de desenho ColorDialog Select Color Selecionar cor Saturation Saturação Hue Matiz Hex Hex Blue Azul Value Valor Green Verde Alpha Alfa Red Vermelho ColorGrabWidget Accept color Aceitar cor Enter or Left Click Enter ou Clique Esquerdo Precisely select color Selecione a cor com precisão Hold Left Click Segurar o Clique Esquerdo Toggle magnifier Habilitar/Desabilitar a lupa Space or Right Click Espaço ou Clique Direito Cancel Cancelar Esc Esc ColorPickerEditor Edit Preset: Editar predefinição: Enter color to update preset Insira a cor para atualizar a predefinição Update Atualizar Press button to update the selected preset Prima o botão para atualizar a predefinição selecionada Delete Eliminar Press button to delete the selected preset Prima o botão para eliminar a predefinição selecionada Add Preset: Adicionar predefinição: Enter color manually or select it using the color-wheel Insira a cor manualmente ou selecione-a usando a roda de cores Add Adicionar Press button to add preset Prima o botão para adicionar predefinição Error Erro Unable to add preset. Maximum limit reached. Não foi possível adicionar a predefinição. Limite máximo atingido. Unable to remove preset. Minimum limit reached. Não foi possível remover a predefinição. Limite mínimo atingido. ConfigErrorDetails Configuration errors Erros de configuração ConfigHandler Unrecognized setting: '%1' Definição não reconhecida: '%1' Unrecognized shortcut name: '%1'. Nome de atalho não reconhecido: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Conflito de atalho: '%1' e '%2' têm o mesmo atalho: %3 Bad value in '%1'. Expected: %2 Valor incorreto em '%1'. Esperado: %2 You have successfully resolved the configuration error. Resolveu com sucesso o erro de configuração. The configuration contains an error. Open configuration to resolve. A configuração contém um erro. Abra a configuração para resolver. Bad config key '%1' in ConfigHandler. Please report this as a bug. Chave de configuração inválida '%1' no ConfigHandler. Por favor, relate isso como um bug. ConfigResolver Resolve configuration errors Resolver erros de configuração <b>You must resolve all errors before continuing:</b> <b>Deve resolver todos os erros antes de continuar:</b> Reset Repor Reset to the default value. Repor para o valor predefinido. Remove Remover Remove this setting. Remova esta definição. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Algumas teclas de atalho apresentam conflitos. Isto NÃO impedirá o Flameshot de iniciar. Resolva-as manualmente no ficheiro de configuração. Resolve all Resolver tudo Resolve all listed errors. Resolva todos os erros listados. Details Details ConfigWindow Configuration Configuração Interface Interface Filename Editor Editor de nome de ficheiro General Geral Shortcuts Atalhos Resolve Resolver <b>Configuration file has errors. Resolve them before continuing.</b> <b>O ficheiro de configuração contém erros. Resolva-os antes de continuar.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copiar Copy selection to clipboard Copiar seleção para a área de transferência Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Sair Leave the capture screen Sair da ferramenta de captura FileNameEditor Edit the name of your captures: Edite o nome das suas capturas: Edit: Editar: Preview: Pré-visualização: Save Guardar Saves the pattern Guarda o padrão Restore Restaurar Reset Reinicialitza Restores the saved pattern Restaura o padrão guardado Clear Limpar Deletes the name Elimina o nome Flameshot Error Erro Unable to close active modal widgets Incapaz de fechar widgets modais ativos URL copied to clipboard. URL copiada para a área de transferência. FlameshotDaemon New version %1 is available Nova versão %1 está disponível You have the latest version Você está com a versão mais recente Failed to get information about the latest version. Não foi possível obter informações sobre a versão mais recente. Unable to connect via DBus Não foi possível conectar via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importar Error Erro Unable to read file. Incapaz de ler o ficheiro. Unable to write file. Incapaz de gravar o ficheiro. Save File Guardar Ficheiro Confirm Reset Confirmar reposição Are you sure you want to reset the configuration? Tem a certeza que pretende repor a configuração? Show help message Mostrar mensagem de ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Mostrar botão no painel lateral Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Mostrar notificações na área de trabalho Show tray icon Mostrar ícone na bandeja Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Confirmação necessária para excluir a captura de ecrã dos uploads mais recentes Configuration File Ficheiro de configuração Export Exportar Reset Repor Automatic check for updates Verificação automática de atualizações Allow multiple flameshot GUI instances simultaneously Permitir várias instâncias GUI do flameshot simultaneamente This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Mostrar mensagem de boas-vindas na inicialização Use large predefined color palette Usar paleta de cores predefinida grande Copy URL after upload Copiar URL após upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Guardar imagem após copiar Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Mostrar a mensagem de ajuda no início no modo de captura Use last region for GUI mode Usar a última região para modo GUI Use the last region as the default selection for the next screenshot in GUI mode Usa a última região como a seleção predefinida para a próxima captura de ecrã em modo GUI Show the side panel toggle button in the capture mode Mostrar o botão de alternância do painel lateral no modo de captura Enable desktop notifications Habilitar notificações da área de trabalho Show abort notifications Mostrar notificações de abortar Enable abort notifications Ativar as notificações de abortar Show icon in the system tray Mostrar ícone na bandeja do sistema Use grim to capture screenshots Utilizar o grim para capturar imagens de ecrã Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim é um utilitário exclusivo do Wayland para captura de tela com base no protocolo screencopy. Geralmente só é habilitado em gerenciadores de janelas Wayland minimalistas, como Sway, Hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Peça confirmação para eliminar a captura de ecrã dos envios mais recentes Check for updates automatically Procurar por atualizações automaticamente This allows you to take screenshots of Flameshot itself for example Isto permite que tire capturas de ecrã do próprio Flameshot, por exemplo Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Mostrar a caixa de mensagem de boas-vindas no meio do ecrã enquanto faz uma captura de ecrã Use a large predefined color palette Usar uma paleta de cores predefinida grande Copy on double click Copiar com duplo clique Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Liberar automaticamente da memória quando não for necessário Automatically close daemon (background process) when it is not needed Fechar automaticamente o daemon (processo em segundo plano) quando não for necessário Launch in background at startup Iniciar em segundo plano na inicialização Launch Flameshot daemon (background process) when computer is booted Iniciar o Flameshot em segundo plano quando o computador for inicializado Ask before quit capture Confirmar antes de sair da captura Show the confirmation prompt before ESC quit Mostrar uma janela de confirmação antes de sair da ferramenta de captura Enable Copy to clipboard on Double Click Habilitar cópia para a área de transferência com duplo clique Copy URL after uploading was successful Copiar URL após o upload ser bem-sucedido After copying the screenshot, save it to a file as well Depois de copiar a captura de ecrã, guarde-a num ficheiro também Save Path Guardar Caminho Change... Alterar... Use fixed path for screenshots to save Use o caminho fixo para guardar captura de ecrã Preferred save file extension: Extensão de ficheiro preferida para guardar: Latest Uploads Max Size Tamanho máximo dos envios mais recentes Imgur Application Client ID ID do Cliente do Aplicativo Imgur Undo limit Limite de desfazer Use JPG format for clipboard (PNG default) Use o formato JPG para a área de transferência (PNG padrão) Use lossy JPG format for clipboard (lossless PNG default) Usar o formato JPG com perdas para a área de transferência (PNG sem perdas por padrão) Copy file path after save Copiar o caminho do ficheiro após guardar Copy the file path to clipboard after the file is saved Copie o caminho do ficheiro para a área de transferência depois que o ficheiro for guardado Anti-aliasing image when zoom the pinned image Imagem sem serrilhado ao ampliar a imagem fixada After zooming the pinned image, should the image get smoothened or stay pixelated Depois de aplicar zoom na imagem fixada, a imagem deve ser suavizada ou permanecer pixelada Upload image without confirmation Enviar imagem sem confirmação Choose a Folder Escolha uma pasta Unable to write to directory. Incapaz de escrever no diretório. Show magnifier Mostrar lupa Enable a magnifier while selecting the screenshot area Ativar uma lupa ao selecionar a área de captura de ecrã Square shaped magnifier Lupa de forma quadrada Make the magnifier to be square-shaped Alterar a lupa para um formato quadrado Milliseconds before geometry display hides; 0 means do not hide Milissegundos antes da exibição da geometria ser ocultada; 0 significa não ocultar Set geometry display timeout (ms) Definir tempo limite de exibição da geometria (ms) Selection Geometry Display Exibição de geometria de seleção Display Location Localização de exibição None Nenhum Top Left Canto superior esquerdo Top Right Canto superior direito Bottom Left Canto inferior esquerdo Bottom Right Canto inferior direito Center Centro Quality range of 0-100; Higher number is better quality and larger file size Nível de qualidade de 0 a 100; Qualidade maior aumenta o peso do ficheiro JPEG Quality Qualidade do JPEG Reverse arrow Seta reversa Draw the arrow head first Desenhar primeiro a ponta da seta Insecure Pixelate Pixelização insegura Draw the pixelation effect in an insecure but more asethetic way. Desenhar o efeito de pixelização de uma forma menos segura, mas mais estética. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Confirmação de Envio Do you want to upload this capture? Deseja fazer o envio desta captura? Upload without confirmation Enviar sem confirmação ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Upload image Uploading Image Enviando Imagem Copy URL Copiar URL Open URL Abrir URL Delete image Deletar imagem Image to Clipboard. Imagem para a Área de Transferência. Save image Guardar imagem Unable to open the URL. Não foi possível abrir o URL. URL copied to clipboard. URL copiada para a área de transferência. Screenshot copied to clipboard. Captura de acrã copiada para a área de transferência. Unable to save the screenshot to disk. Não foi possível guardar a captura de ecrã no disco. Screenshot saved. Captura de ecrã guardada. ImgUploaderTool Image Uploader Carregador de Imagem Upload the selection Envie a seleção ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. Não foi possível abrir a URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Sobre Icon Icon License Licença GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copiar Informações Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Inverter Set Inverter as the paint tool Defina o Inversor como a ferramenta de pintura LineTool Line Linha Set the Line as the paint tool Usar a Linha como ferramenta de desenho MarkerTool Marker Marcador Set the Marker as the paint tool Usar o marcador como ferramenta de desenho MoveTool Move Mover Move the selection area Mover a área de seleção PencilTool Pencil Pincel Set the Pencil as the paint tool Usar o Lápis como ferramenta de desenho PinTool Pin Tool Ferramenta de fixação Pin image on the desktop Fixar imagem na área de trabalho PinWidget Context menu Menu de contexto Copy to clipboard Copiar para área de transferência Save to file Guardar no ficheiro Rotate Right Girar para a direita Rotate Left Girar para a esquerda Increase Opacity Aumentar a opacidade Decrease Opacity Diminuir a opacidade Close Fechar PixelateTool Pixelate Pixelador Set Pixelate as the paint tool. Definir pixelizar como a ferramenta de pintura. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance Instância principal <b>Primary instance.</b> Messages received from secondaries: <b>Instância principal.</b> Mensagens recebidas das secundárias: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Captura guardada na área de transferência. Error while saving to clipboard Erro ao guardar na área de transferência Save screenshot Guardar captura de ecrã Path copied to clipboard as Caminho copiado para a área de transferência como Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Erro ao guardar Capture saved as Captura guardada como Error trying to save as Erro ao tentar guardar como Unable to connect via DBus Não foi possível ligar via DBus Powerful yet simple to use screenshot software. Software de captura de ecrã poderoso, mas simples de usar. See Ver Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Abrir a ferramente de captura. Start a manual capture in GUI mode. Iniciar uma captura manual no modo GUI. Configure Configurar Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capturar o ecrã de todos os monitores ao mesmo tempo. Capture a screenshot of the specified monitor. Capture ao ecrã do monitor especificado. Existing directory or new file to save to Diretório existente ou novo ficheiro para guardar Save the capture to the clipboard Guardar a captura na Área de Transferência Pin the capture to the screen Fixar a captura no ecrã Upload screenshot Enviar captura de ecrã Delay time in milliseconds Tempo do atraso em milissegundos Repeat screenshot with previously selected region Repetir captura de ecrã com a região selecionada anteriormente Screenshot region to select Região da captura de ecrã a ser selecionada Set the filename pattern Defina o padrão do nome do ficheiro Accept capture as soon as a selection is made Aceitar captura assim que uma seleção for feita Enable or disable the trayicon Ativar ou desativar o ícone de bandeja Enable or disable run at startup Ativar ou desativar a execução na inicialização Enable or disable the notifications Ativar ou desativar as notificações Check the configuration for errors Verifique se há erros na configuração Show the help message in the capture mode Mostrar a mensagem de ajuda no modo captura Define the main UI color Defina a cor principal da IU Define the contrast UI color Defina a cor de contraste da IU Print raw PNG capture Imprimir captura PNG bruta Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Imprime a geometria da seleção no formato WxH+X+Y. Não faz nada se raw for especificado Define the screen to capture (starting from 0) Definir o ecrã a ser capturado (a partir de 0) Invalid delay, it must be a number greater than 0 Atraso inválido, deve ser um número maior que 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Região inválida, use 'WxH+X+Y' ou 'all' ou 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Caminho inválido, deve ser um diretório existente ou um novo ficheiro em um diretório existente Define the screen to capture Define the screen to capture default: screen containing the cursor padrão: ecrã contendo o cursor Screen number Número do ecrã Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Cor inválida, esta bandeira suporta os seguintes formatos: - #RGB (sendo R, G, e B simbolos hexadecimal simples) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Nome de cores como 'azul' ou 'vermelho' Você pode ter que invalidar o sinal '#', por exemplo '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Número de ecrã inválido, deve ser maior que zero Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Valor inválido, deve ser definido como 'verdadeiro' ou 'falso' Error Erro Unable to write in Não foi possível escrever em Requested screen exceeds screen count O ecrã solicitado excede a contagem de ecrãs Full screen screenshot pinned to screen Captura de ecrã inteiro fixado no ecrã URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Opções Arguments Arguments arguments arguments Subcommands Subcomandos subcommands subcomandos Usage Uso options opções Per default runs Flameshot in the background and adds a tray icon for configuration. Por padrão, o Flameshot é executado em segundo plano e adiciona um ícone de bandeja para configuração. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Ola, eu estou aqui! Clique no ícone na áre de notificação para fazer uma captura de ecrã ou clique com o botão direito para ver mais opções. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Sair da captura Screenshot history Histórico de captura de ecrã Capture screen Captura de ecrã Show color picker Mostrar seletor de cores Change the tool's size Alterar o tamanho da ferramenta Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Retângulo Set the Rectangle as the paint tool Usar o Retângulo como ferramenta de desenho RedoTool Redo Refazer Redo the next modification Refazer última modificação SaveTool Save Guardar Save screenshot to a file Guardar captura de ecrã num ficheiro Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! O adaptador universal de captura do ecrã do Wayland requer o Grim como componente de captura de ecrã do Wayland. Se o componente de captura de ecrã estiver ausente, instale-o! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Se a configuração useGrimAdapter não estiver ativada, o protocolo dbus será usado. Observe que o uso do protocolo dbus no Wayland não é recomendado. Recomenda-se ativar a configuração useGrimAdapter no flameshot.ini para ativar o adaptador de captura de ecrã geral do Wayland baseado em Grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments O componente de captura de ecrã do grim é implementado com base no wlroots, não pode ser usado no GNOME ou em ambientes de desktop semelhantes Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Não foi possível detetar o ambiente de trabalho (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Dica: tente definir a variável de ambiente XDG_CURRENT_DESKTOP. Unable to capture screen Não foi possível capturar o ecrã SecondaryInstanceWidget Secondary instance Instância secundária <b>Secondary instance.</b> Send message to primary: <b>Instância secundária.</b> Enviar mensagem para a instância principal: Type something here... Escreva algo aqui... &Send &Enviar Error sending message Erro ao enviar mensagem The message '%1' could not be sent to the primary. Não foi possível enviar a mensagem '%1' para o destinatário principal. SelectionTool Rectangular Selection Seleção Retangular Set Selection as the paint tool Usar o Selecionador como ferramenta de desenho SetShortcutDialog Set Shortcut Definir atalho Enter new shortcut to change Insira um novo atalho para definir Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Pressione Esc para cancelar ou ⌘+Backspace para desativar o atalho de teclado. Press Esc to cancel or Backspace to disable the keyboard shortcut. Pressione Esc para cancelar ou Backspace para desabilitar o atalho de teclado. Flameshot must be restarted for changes to take effect. O Flameshot deve ser reiniciado para que as alterações entrem em vigor. ShortcutsWidget Hot Keys Teclas de atalho Available shortcuts in the screen capture mode. Atalhos disponíveis no modo de captura de ecrã. Description Descrição Key Tecla Left Double-click Clique Duplo com o Botão Esquerdo Toggle side panel Alternar painel lateral Grab a color from the screen Selecione uma cor do ecrã Resize selection left 1px Redimensionar seleção para a esquerda em 1px Resize selection right 1px Redimensionar seleção para a direita em 1px Resize selection up 1px Redimensionar a seleção para cima em 1px Resize selection down 1px Redimensionar seleção para baixo em 1px Symmetrically decrease width by 2px Diminuir simetricamente a largura em 2px Symmetrically increase width by 2px Aumentar simetricamente a largura em 2px Symmetrically increase height by 2px Aumentar simetricamente a altura em 2px Symmetrically decrease height by 2px Diminuir simetricamente a altura em 2px Select entire screen Selecionar o ecrã inteiro Move selection left 1px Mover seleção para a esquerda em 1px Move selection right 1px Mover seleção para a direita em 1px Move selection up 1px Mover seleção para cima em 1px Move selection down 1px Mover seleção para baixo 1px Commit text in text area Confirmar texto na área de texto Delete selected drawn object Apagar o objeto desenhado selecionado Cancel current selection Cancelar seleção atual Delete current tool Delete current tool Capture screen Ecrã de captura Screenshot history Histórico de captura de ecrã SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Tamanho ativo da ferramenta: Active Color: Active Color: Grab Color Pegar Cor Display grid Grelha de exibição SizeDecreaseTool Decrease Tool Size Diminuir tamanho da ferramenta Decrease the size of the other tools Diminui o tamanho das outras ferramentas SizeIncreaseTool Increase Tool Size Aumentar tamanho da ferramenta Increase the size of the other tools Aumenta o tamanho das outras ferramentas SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Século (00-99) Year (00-99) Ano (00-99) Year (2000) Ano (2000) Month Name (jan) Nome do mês (jan) Month Name (january) Nome do mês (janeiro) Month (01-12) Mês (01-12) Week Day (1-7) Dia da semana (1-7) Week (01-53) Semana (01-53) Day Name (mon) Nome do dia (seg) Day Name (monday) Nome do dia (segunda) Day (01-31) Dia (01-31) Day of Month (1-31) Dia do Mês (1-31) Day (001-366) Dia (001-366) Hour (00-23) Hora (00-23) Hour (01-12) Hora (01-12) Minute (00-59) Minuto (00-59) Second (00-59) Segundos (00-59) Full Date (%m/%d/%y) Data Completa (%m/%d/%y) Full Date (%Y-%m-%d) Data Completa (%Y-%m-%d) Full Date (%d-%m-%Y) Data completa (%d-%m-%Y) Time (%H-%M-%S) Tempo (%H-%M-%S) Time (%H-%M) Tempo (%H-%M) SystemNotification Flameshot Info Informações do Flameshot TextConfig StrikeOut Sobrescrito Underline Sublinhado Bold Negrito Italic Itálico Left Align Alinhamento à Esquerda Center Align Alinhamento Central Right Align Alinhamento à Direita TextTool Text Texto Add text to your capture Adicionar texto à captura TrayIcon &Take Screenshot &Tirar Captura de Ecrã &Open Launcher &Abrir Lançador &Configuration &Configuração &About &Sobre Check for updates Verifique se há atualizações New version %1 is available Nova versão %1 está disponível &Quit &Sair &Latest Uploads &Últimos Envios &Open Save Path &Abrir local de gravação UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Modifique a cor movendo os seletores e veja as mudanças nos botões de preview. Select a Button to modify it Selecione um botão para modificá-lo Main Color Cor Principal Click on this button to set the edition mode of the main color. Clique neste botão para setar o modo de edição da cor principal. Contrast Color Cor de Contraste Click on this button to set the edition mode of the contrast color. Clique neste botão para setar o modo de edição da cor de contraste. UndoTool Undo Desfazer Undo the last modification Desfazer a última modificação UpdateNotificationWidget New Flameshot version %1 is available Nova versão Flameshot %1 está disponível Ignore Ignorar Later Depois Update Atualizar UploadHistory Upload History Histórico de Envio Screenshots history is empty O histórico de capturas de ecrã está vazio UploadLineItem Form Form TextLabel TextLabel Copy URL Copiar URL Open In Browser Open In Browser Confirm to delete Confirme para deletar Are you sure you want to delete a screenshot from the latest uploads and server? Tem a certeza que pretende eliminar uma captura de ecrã dos últimos envios e do servidor? UtilityPanel Close Fechar <Empty> <Vazio> VisualsEditor Opacity of area outside selection: Opacidade da área fora da seleção: UI Color Editor Interface de Edição de Cores Colorpicker Editor Editor do Seletor de Cores Button Selection Botão de seleção Select All Selecionar Todos color_widgets::ColorDialog Pick Escolher color_widgets::ColorPalette Unnamed Sem-nome color_widgets::ColorPaletteModel Unnamed Sem-nome %1 (%2 colors) %1 (%2 cores) color_widgets::ColorPaletteWidget Open a new palette from file Abrir uma nova paleta a partir do ficheiro Create a new palette Criar uma nova paleta Duplicate the current palette Duplicar a paleta atual Delete the current palette Excluir a paleta atual Revert changes to the current palette Reverter alterações na paleta atual Save changes to the current palette Guardar alterações na paleta atual Add a color to the palette Adicionar uma cor à paleta Remove the selected color from the palette Remover a cor selecionada da paleta New Palette Nova Paleta Name Name GIMP Palettes (*.gpl) Paletas do GIMP (*.gpl) Palette Image (%1) Imagem da Paleta (%1) All Files (*) Todos os Ficheiros (*) Open Palette Abrir Paleta Failed to load the palette file %1 Falha ao carregar o ficheiro de paleta %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remover Cor Edit Color... Editar Cor... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 cores) color_widgets::Swatch Clear Color Limpar Cor %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_pt_BR.ts ================================================ AbstractWidgetList Add New Add New Move Up Mover para Cima Move Down Mover para Baixo Remove Remover AcceptTool Accept Aceitar Accept the capture Aceitar a captura AppLauncher App Launcher Iniciar app Choose an app to open the capture Escolha uma aplicação para abrir a captura AppLauncherWidget Open With Abrir Com Launch in terminal Abrir no terminal Keep open after selection Manter aberto após seleção Error Erro Unable to write in Não é possível escrever em Unable to launch in terminal. Não foi possível abrir no terminal. ArrowTool Arrow Flecha Set the Arrow as the paint tool Usar a Flecha como ferramenta de desenho BlurTool Blur Desfoque Set Blur as the paint tool Usar o Desfoque como ferramenta de desenho CaptureLauncher <b>Capture Mode</b> <b>Modo Captura</b> Rectangular Region Região Retangular Full Screen (Current Display) Tela Inteira (Monitor Atual) Full Screen (All Monitors) Tela Inteira (Todos os Monitores) No Delay Sem atraso second segundo seconds segundos Take new screenshot Tirar uma nova captura de tela Area: Área: Capture Launcher Lançador de Captura TextLabel TextLabel Capture Mode Modo de Captura Delay: Atraso: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Não foi possível capturar a tela Mouse Mouse Select screenshot area Área de seleção Mouse Wheel Roda do mouse ("scroll") Change tool size Alterar tamanho da ferramenta Right Click Botão Direito Show color picker Mostrar seletor de cores Open side panel Abrir painel lateral Esc Esc Exit Sair Quit Capture Sair da captura Are you sure you want to quit capture? Tem certeza de que deseja sair da captura? Do not show this again Não mostre isso novamente Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot perdeu o foco. Os atalhos de teclado não funcionarão até que você clique em algum lugar. Configuration error resolved. Launch `flameshot gui` again to apply it. Erro de configuração resolvido. Inicie o “flameshot gui” novamente para aplicá-lo. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Selecione uma área com o mouse, ou pressione Esc para sair. Pressione Enter para capturar a tela. Pressione o botão direito do mouse para abrir o seletor de cores. Use a roda do mouse para alterar a espessura do pincel. Pressione espaço para abrir o painel lateral. Tool Settings Configurações das ferramentas CircleCountTool Circle Counter Contorno do círculo Add an autoincrementing counter bubble Adicionar um balão de contador de incremento automático CircleTool Circle Círculo Set the Circle as the paint tool Usar o Círculo como ferramenta de desenho ColorDialog Select Color Selecionar Color Saturation Saturação Hue Matiz Hex Hex Blue Azul Value Valor Green Verde Alpha Alpha Red Vermelho ColorGrabWidget Accept color Aceitar cor Enter or Left Click Enter ou Clique Esquerdo Precisely select color Selecione a cor com precisão Hold Left Click Segurar o Clique Esquerdo Toggle magnifier Habilitar/Desabilitar a lupa Space or Right Click Espaço ou Clique Direito Cancel Cancelar Esc Esc ColorPickerEditor Select Preset: Selecione Predefinição: Edit Preset: Editar Predefinição: Enter color to update preset Insira a cor para atualizar a predefinição Update Atualizar Press button to update the selected preset Pressione o botão para atualizar a predefinição selecionada Delete Apagar Press button to delete the selected preset Pressione o botão para deletar a predefinição selecionada Add Preset: Adicionar Predefinição: Enter color manually or select it using the color-wheel Insira a cor manualmente ou selecione-a usando a roda de cores Add Adicionar Press button to add preset Pressione o botão para adicionar predefinição Error Erro Unable to add preset. Maximum limit reached. Não foi possível adicionar a predefinição. Limite máximo atingido. Unable to remove preset. Minimum limit reached. Não foi possível remover a predefinição. Limite mínimo atingido. ConfigErrorDetails Configuration errors Detalhes dos erros ConfigHandler Unrecognized setting: '%1' Configuração não reconhecida: '%1' Unrecognized shortcut name: '%1'. Nome de atalho não reconhecido: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Conflito de atalho: '%1' e '%2' têm o mesmo atalho: %3 Bad value in '%1'. Expected: %2 Valor incorreto em '%1'. Esperado: %2 You have successfully resolved the configuration error. Você resolveu com sucesso o erro de configuração. The configuration contains an error. Open configuration to resolve. A configuração contém um erro. Abra a configuração para resolver. Bad config key '%1' in ConfigHandler. Please report this as a bug. Chave de configuração inválida '%1' no ConfigHandler. Por favor, relate isso como um bug. ConfigResolver Resolve configuration errors Resolver erros de configuração <b>You must resolve all errors before continuing:</b> <b>Você deve resolver todos os erros antes de continuar:</b> Reset Reset Reset to the default value. Redefina para o valor padrão. Remove Remover Remove this setting. Remova esta configuração. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Alguns atalhos de teclado apresentam conflitos. Isso NÃO impedirá que o Flameshot comece. Por favor, resolva-os manualmente no arquivo de configuração. Resolve all Resolver tudo Resolve all listed errors. Resolva todos os erros listados. Details Details ConfigWindow Configuration Configuração Interface Interface Filename Editor Editor de nome de arquivo General Geral Shortcuts Atalhos Resolve Resolver <b>Configuration file has errors. Resolve them before continuing.</b> <b>O arquivo de configuração contém erros. Resolva-os antes de continuar.</b> Controller New version %1 is available Nova versão %1 está disponível You have the latest version Você está com a versão mais recente Failed to get information about the latest version. Não foi possível obter informações sobre a versão mais recente. Error Erro Unable to close active modal widgets Incapaz de fechar widgets modais ativos &Take Screenshot &Tirar Captura de Tela &Open Launcher &Abrir Launcher &Configuration &Configuração &About &Sobre Check for updates Verifique se há atualizações &Latest Uploads &Últimos Envios URL copied to clipboard. URL copiada para a área de transferência. &Information &Informações &Quit &Sair CopyTool Copy Copiar Copy selection to clipboard Copiar seleção para a área de transferência Copy the selection into the clipboard Copie a seleção para a área de transferência DBusUtils Unable to connect via DBus Não foi possível conectar via DBus ExitTool Exit Sair Leave the capture screen Sair da ferramenta de captura FileNameEditor Edit the name of your captures: Edite o nome das suas capturas: Edit: Editar: Preview: Pré-visualização: Save Salvar Saves the pattern Salva o padrão Restore Restaurar Reset Restaurar Restores the saved pattern Restaura o padrão salvo Clear Limpar Deletes the name Deletar o nome Flameshot Error Erro Unable to close active modal widgets Incapaz de fechar widgets modais ativos URL copied to clipboard. URL copiada para a área de transferência. FlameshotDaemon New version %1 is available Nova versão %1 está disponível You have the latest version Você está com a versão mais recente Failed to get information about the latest version. Não foi possível obter informações sobre a versão mais recente. Unable to connect via DBus Não foi possível conectar via DBus GeneneralConf Import Importar Error Erro Unable to read file. Não foi possível ler o arquivo. Unable to write file. Não foi possível escrever no arquivo. Save File Salvar Arquivo Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Tem certeza que deseja resetar a configuração? Show help message Mostrar mensagem de ajuda Show the help message at the beginning in the capture mode. Mostrar mensagem de ajuda no início do modo de captura. Show the side panel button Mostrar botão no painel lateral Show the side panel toggle button in the capture mode. Mostrar altenador do painel lateral. Show desktop notifications Mostrar notificações de Desktop Show tray icon Mostrar ícone de tray Show the systemtray icon Mosrar ícone na barra de aplicações Configuration File Arquivo de Configurações Export Exportar Reset Reset Launch at startup Iniciar junto com o sistema Launch Flameshot Iniciar Flameshot Close after capture Fechar após captura Close after taking a screenshot Fechar após tirar uma screenshot Copy URL after upload Copiar URL após upload Copy URL and close window after upload Copiar URL e fechar janela após upload Save image after copy Salvar imagem após copiar Save image file after copying it Salvar imagem após copiar Save Path Salvar Caminho Change... Alterar... Choose a Folder Selecione uma pasta Unable to write to directory. Não foi possível escrever no diretório. GeneralConf Import Importar Error Erro Unable to read file. Incapaz de ler o arquivo. Unable to write file. Incapaz de gravar o arquivo. Save File Salvar Arquivo Confirm Reset Confirmar redefinição Are you sure you want to reset the configuration? Tem certeza que deseja redefinir a configuração? Show help message Mostrar mensagem de ajuda Show the help message at the beginning in the capture mode. Mostrar mensagem de ajuda no início do modo de captura. Show the side panel button Mostrar botão no painel lateral Show the side panel toggle button in the capture mode. Mostra o botão de alternância do painel lateral no modo de captura. Show desktop notifications Mostrar notificações na área de trabalho Show tray icon Mostrar ícone na bandeja Show the systemtray icon Mostra o ícone na bandeja do sistema Confirmation required to delete screenshot from the latest uploads Confirmação necessária para excluir a captura de tela dos uploads mais recentes Configuration File Arquivo de configuração Export Exportar Reset Redefinir Automatic check for updates Verificação automática de atualizações Allow multiple flameshot GUI instances simultaneously Permitir várias instâncias GUI do flameshot simultaneamente Automatically close daemon when it is not needed Feche automaticamente o daemon quando ele não for necessário Launch at startup Executar junto ao sistema Launch Flameshot Executar Flameshot Show welcome message on launch Mostrar mensagem de boas-vindas na inicialização Use large predefined color palette Usar paleta de cores predefinida grande Copy URL after upload Copiar URL após upload Copy URL and close window after upload Copiar URL e fechar janela após upload Save image after copy Salvar imagem após copiar Save image file after copying it Salve o arquivo de imagem após copiá-lo Show the help message at the beginning in the capture mode Mostrar a mensagem de ajuda no início no modo de captura Use last region for GUI mode Usar a última região para modo de interface Use the last region as the default selection for the next screenshot in GUI mode Usa a última região como a seleção padrão para a próxima captura de tela na modo de interface Show the side panel toggle button in the capture mode Mostrar o botão de alternância do painel lateral no modo de captura Enable desktop notifications Habilitar notificações da área de trabalho Show abort notifications Mostrar notificações de aborto Enable abort notifications Habilitar notificações de aborto Show icon in the system tray Mostrar ícone na bandeja do sistema Use grim to capture screenshots Usar o grim para capturar a tela Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim é um utilitário exclusivo do Wayland para captura de tela com base no protocolo screencopy. Geralmente só é habilitado em gerenciadores de janelas Wayland minimalistas, como Sway, Hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Peça confirmação para excluir a captura de tela dos uploads mais recentes Check for updates automatically Verificar se há atualizações automaticamente This allows you to take screenshots of Flameshot itself for example Isso permite que você tire capturas de tela do próprio Flameshot, por exemplo Launch Flameshot daemon when computer is booted Inicie o daemon Flameshot quando o computador for inicializado Show the welcome message box in the middle of the screen while taking a screenshot Mostrar a caixa de mensagem de boas-vindas no meio da tela enquanto faz uma captura de tela Use a large predefined color palette Usar uma paleta de cores predefinida grande Copy on double click Copiar com duplo clique Enable Copy on Double Click Habilitar Copiar com Duplo Clique Copy URL and close window after uploading was successful Copiar URL e fechar janela após o upload ser bem-sucedido Automatically unload from memory when it is not needed Liberar automaticamente da memória quando não for necessário Automatically close daemon (background process) when it is not needed Fechar automaticamente o daemon (processo em segundo plano) quando não for necessário Launch in background at startup Iniciar em segundo plano na inicialização Launch Flameshot daemon (background process) when computer is booted Iniciar o daemon Flameshot (processo em segundo plano) quando o computador for inicializado Ask before quit capture Confirmar antes de sair da ferramenta de captura Show the confirmation prompt before ESC quit Mostrar uma janela de confirmação antes de sair da ferramenta de captura Enable Copy to clipboard on Double Click Habilitar cópia para a área de transferência com duplo clique Copy URL after uploading was successful Copiar URL após o upload ser bem-sucedido After copying the screenshot, save it to a file as well Depois de copiar a captura de tela, salve-a em um arquivo também Save Path Local de salvamento Change... Alterar... Use fixed path for screenshots to save Salvar automaticamente nesse local Preferred save file extension: Extensão de arquivo de salvamento preferida: Latest Uploads Max Size Tamanho máximo dos uploads mais recentes Imgur Application Client ID ID do Cliente do Aplicativo Imgur Undo limit Limite de desfazer Use JPG format for clipboard (PNG default) Use o formato JPG para a área de transferência (PNG padrão) Use lossy JPG format for clipboard (lossless PNG default) Use o formato JPG com perdas para a área de transferência (PNG sem perdas é o padrão) Copy file path after save Copiar a localização do arquivo após salvar Copy the file path to clipboard after the file is saved Copiar a localização do arquivo para a área de transferência depois que o arquivo for salvo Anti-aliasing image when zoom the pinned image Imagem sem serrilhado ao ampliar a imagem fixada After zooming the pinned image, should the image get smoothened or stay pixelated Depois de aplicar zoom na imagem fixada, a imagem deve ser suavizada ou permanecer pixelada Upload image without confirmation Enviar imagem sem confirmação Choose a Folder Escolha uma pasta Unable to write to directory. Incapaz de escrever no diretório. Show magnifier Mostrar lupa Enable a magnifier while selecting the screenshot area Habilitar uma lupa ao selecionar a área de captura de tela Square shaped magnifier Lupa de forma quadrada Make the magnifier to be square-shaped Alterar a lupa para um formato quadrado Milliseconds before geometry display hides; 0 means do not hide Milissegundos antes que a exibição da geometria seja ocultada; 0 significa não ocultar Set geometry display timeout (ms) Definir tempo limite de exibição da geometria (ms) Selection Geometry Display Exibição de Geometria de Seleção Display Location Localização de exibição None Nenhum Top Left Canto superior esquerdo Top Right Canto superior direito Bottom Left Canto inferior esquerdo Bottom Right Canto inferior direito Center Centro Quality range of 0-100; Higher number is better quality and larger file size Nível de qualidade de 0 a 100; Qualidade maior aumenta o peso do arquivo JPEG Quality Qualidade do JPEG Reverse arrow Seta reversa Draw the arrow head first Desenhar primeiro a ponta da seta Insecure Pixelate Pixelado inseguro Draw the pixelation effect in an insecure but more asethetic way. Desenhe o efeito de pixelização de uma forma insegura, mas mais asestética. HistoryWidget Latest Uploads Últimos Envios Screenshots history is empty O histórico de capturas de tela está vazio Copy URL Copiar URL URL copied to clipboard. URL copiada para a área de transferência. Open in browser Abrir no navegador Confirm to delete Confirme para deletar Are you sure you want to delete a screenshot from the latest uploads and server? Tem certeza de que deseja deletar uma captura de tela dos últimos uploads e servidor? ImgS3Uploader Uploading Image Upando Imagem URL copied to clipboard. URL copiada para a área de transferência. Error Erro ImgUploadDialog Upload Confirmation Confirmação de Envio Do you want to upload this capture? Deseja fazer o envio desta captura? Upload without confirmation Enviar sem confirmação ImgUploader Uploading Image Upando Imagem Unable to open the URL. Não foi possível abrir a URL. URL copied to clipboard. URL copiada para a área de transferência. Screenshot copied to clipboard. Screenshot copiada para a área de transferência. Copy URL Copiar URL Open URL Abrir URL Delete image Deletar imagem Image to Clipboard. Imagem na área de transferência. ImgUploaderBase Upload image Upload image Uploading Image Enviando Imagem Copy URL Copiar URL Open URL Abrir URL Delete image Deletar imagem Image to Clipboard. Imagem para a Área de Transferência. Save image Salvar imagem Unable to open the URL. Não foi possível abrir a URL. URL copied to clipboard. URL copiada para a área de transferência. Screenshot copied to clipboard. Captura de tela copiada para a área de transferência. Unable to save the screenshot to disk. Não foi possível salvar a captura de tela em disco. Screenshot saved. Captura de tela salva. ImgUploaderTool Image Uploader Carregador de Imagem Upload the selection Envie a seleção ImgurUploader Upload to Imgur Enviar para Imgur Uploading Image Enviando Imagem Copy URL Copiar URL Open URL Abrir URL Delete image Deletar imagem Image to Clipboard. Imagem na área de transferência. Unable to open the URL. Não foi possível abrir a URL. URL copied to clipboard. URL copiada para a área de transferência. Screenshot copied to clipboard. Captura de tela copiada para a área de transferência. ImgurUploaderTool Image Uploader Enviador de imagens Upload the selection to Imgur Envia a seleção ao Imgur InfoWindow About Sobre Icon Icon License Licença GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copiar Informações SPACEBAR Barra de Espaço Right Click Botão Direito Mouse Wheel Roda do mouse Move selection 1px Move a seleção em 1px Resize selection 1px Redimensiona a seleção em 1px Quit capture Sair da captura Copy to clipboard Copiar para área de transferência Save selection as a file Salvar seleção em um arquivo Undo the last modification Desfazer última modificação Toggle visibility of sidebar with options of the selected tool Alterar barra lateral com as opções da ferramenta selecionada Show color picker Mostrar seletor de cores Change the tool's thickness Mudar a grossura do pincel Available shortcuts in the screen capture mode. Atalhos disponívels na tela de captura. Key Tecla Description Descrição <u><b>License</b></u> <u><b>Licença</b></u> <u><b>Version</b></u> <u><b>Versão</b></u> <u><b>Shortcuts</b></u> <u><b>Atalhos</b></u> InvertTool Invert Inverter Set Inverter as the paint tool Defina o Inversor como a ferramenta de pintura LineTool Line Linha Set the Line as the paint tool Usar a Linha como ferramenta de desenho MarkerTool Marker Marcador Set the Marker as the paint tool Usar o marcador como ferramenta de desenho MoveTool Move Mover Move the selection area Mover a área de seleção PencilTool Pencil Pincel Set the Pencil as the paint tool Usar o Lápis como ferramenta de desenho PinTool Pin Tool Ferramenta de fixação Pin image on the desktop Fixar imagem na área de trabalho PinWidget Context menu Context menu Copy to clipboard Copiar para área de transferência Save to file Salvar em arquivo Rotate Right Girar para a direita Rotate Left Girar para a esquerda Increase Opacity Aumentar a opacidade Decrease Opacity Diminuir a opacidade Close Fechar PixelateTool Pixelate Pixelador Set Pixelate as the paint tool. Definir pixelizar como a ferramenta de pintura. Set Pixelate as the paint tool Usar Pixelador na ferramenta de pintura PrimaryInstanceWidget Primary instance Instância primária <b>Primary instance.</b> Messages received from secondaries: <b>Instância primária.</b> Mensagens recebidas de secundárias: QHotkey Failed to register %1. Error: %2 Falha ao registrar %1. Erro: %2 Failed to unregister %1. Error: %2 Falha ao cancelar o registro %1. Erro: %2 QObject Save Error Erro ao salvar Capture saved as Captura salva como Capture saved to clipboard. Captura salva na área de transferência. Capture saved to clipboard Captura salva na área de transferência Error while saving to clipboard Erro ao salvar na área de transferência Error trying to save as Erro ao tentar salvar como Save screenshot Salvar captura de tela Path copied to clipboard as Localização copiada para a área de transferência como Saving canceled Salvamento cancelado Save canceled Salvar cancelado Capture is saved and copied to the clipboard as A captura é salva e copiada para a área de transferência como Unable to connect via DBus Não foi possível conectar via DBus Powerful yet simple to use screenshot software. Software de captura de tela poderoso, mas simples de usar. See Ver Capture the entire desktop. Capture toda a área de trabalho. Open the capture launcher. Abrir a ferramente de captura. Start a manual capture in GUI mode. Iniciar uma captura manual no modo GUI. Configure Configurar Capture a single screen. Capturar uma única tela. Path where the capture will be saved Caminho onde a captura será salva Capture screenshot of all monitors at the same time. Capturar a tela de todos os monitores ao mesmo tempo. Capture a screenshot of the specified monitor. Capture a tela do monitor especificado. Existing directory or new file to save to Diretório existente ou novo arquivo para salvar Save the capture to the clipboard Salvar a captura na Área de Transferência Pin the capture to the screen Fixar a captura na tela Upload screenshot Upload screenshot Delay time in milliseconds Tempo do atraso em milissegundos Repeat screenshot with previously selected region Repetir captura de tela com a região selecionada anteriormente Screenshot region to select Região da captura de tela a ser selecionada Set the filename pattern Defina o padrão do nome do arquivo Accept capture as soon as a selection is made Aceitar captura assim que uma seleção for feita Enable or disable the trayicon Ativar ou desativar o ícone de bandeja Enable or disable run at startup Ativar ou desativar a execução na inicialização Enable or disable the notifications Habilitar ou desabilitar as notificações Check the configuration for errors Verifique se há erros na configuração Show the help message in the capture mode Mostrar a mensagem de ajuda no modo captura Define the main UI color Defina a cor principal da IU Define the contrast UI color Defina a cor de contraste da IU Print raw PNG capture Imprimir captura PNG bruta Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Imprime a geometria da seleção no formato WxH+X+Y. Não faz nada se raw for especificado Define the screen to capture (starting from 0) Definir a tela a ser capturada (a partir de 0) Invalid delay, it must be a number greater than 0 Atraso inválido, deve ser um número maior que 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Região inválida, use 'WxH+X+Y' ou 'all' ou 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Caminho inválido, deve ser um diretório existente ou um novo arquivo em um diretório existente Define the screen to capture Defina a tela a ser capturada default: screen containing the cursor padrão: tela contendo o cursor Screen number Número da tela Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Cor inválida, esta bandeira suporta os seguintes formatos: - #RGB (sendo R, G, e B simbolos hexadecimal simples) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Nome de cores como 'azul' ou 'vermelho' Você pode ter que invalidar o sinal '#', por exemplo '\#FFF' Invalid delay, it must be higher than 0 Atraso inválido, deve ser maior que 0 Invalid screen number, it must be non negative Número de tela inválido, deve ser maior que zero Invalid path, it must be a real path in the system Caminho inválido, deve ser um caminho real no sistema Invalid value, it must be defined as 'true' or 'false' Valor inválido, deve ser definido como 'verdadeiro' ou 'falso' Error Erro Unable to write in Não foi possível escrever em Options Opções Arguments Argumentos arguments argumentos Subcommands Subcomandos subcommands subcomandos Usage Uso options opções Per default runs Flameshot in the background and adds a tray icon for configuration. Por padrão, o Flameshot é executado em segundo plano e adiciona um ícone de bandeja para configuração. Per default runs Flameshot in the background and adds a tray icon for configuration. Por padrão roda Flameshot no background e adiciona um ícone na bandeija para configuração. Requested screen exceeds screen count A tela solicitada excede a contagem de telas Full screen screenshot pinned to screen Captura de tela inteira fixada na tela URL copied to clipboard. URL copiada para a área de transferência. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Ola, eu estou aqui! Clique no ícone na bandeja para fazer uma captura de tela ou clique com o botão direito para ver mais opções. Toggle side panel Alternar painel lateral Resize selection left 1px Redimensionar seleção para a esquerda 1px Resize selection right 1px Redimensionar seleção para a direita 1px Resize selection up 1px Redimensionar a seleção para cima 1px Resize selection down 1px Redimensionar seleção para baixo 1px Select entire screen Selecionar a tela inteira Move selection left 1px Mover seleção para a esquerda 1px Move selection right 1px Mover seleção para a direita 1px Move selection up 1px Mover seleção para a cima 1px Move selection down 1px Mover seleção para a baixo 1px Commit text in text area Confirmar texto na área de texto Delete current tool Excluir ferramenta atual Quit capture Sair da captura Screenshot history Histórico de captura de tela Capture screen Captura de tela Show color picker Mostrar seletor de cores Change the tool's size Alterar o tamanho da ferramenta Change the tool's thickness Alterar a espessura da ferramenta RectangleTool Rectangle Retângulo Set the Rectangle as the paint tool Usar o Retângulo como ferramenta de desenho RedoTool Redo Refazer Redo the next modification Refazer última modificação SaveTool Save Salvar Save screenshot to a file Salvar captura de tela em um arquivo Save the capture Salvar a captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Não é possível detectar o ambiente de desktop (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! O adaptador universal de captura de tela do Wayland requer o Grim como componente de captura de tela do Wayland. Se o componente de captura de tela estiver ausente, instale-o! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Se a configuração useGrimAdapter não estiver habilitada, o protocolo dbus será usado. Observe que o uso do protocolo dbus no Wayland não é recomendado. Recomenda-se habilitar a configuração useGrimAdapter no flameshot.ini para ativar o adaptador de captura de tela geral do Wayland baseado em Grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments O componente de captura de tela do grim é implementado com base no wlroots, não pode ser usado no GNOME ou em ambientes de desktop semelhantes Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Não foi possível detectar o ambiente de trabalho (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Dica: tente definir a variável de ambiente XDG_CURRENT_DESKTOP. Unable to capture screen Não foi possível capturar a tela SecondaryInstanceWidget Secondary instance Instância secundária <b>Secondary instance.</b> Send message to primary: <b>Instância secundária.</b> Enviar mensagem para a primária: Type something here... Digite algo aqui... &Send &Enviar Error sending message Erro ao enviar a mensagem The message '%1' could not be sent to the primary. A mensagem '%1' não pôde ser enviada ao primário. SelectionTool Rectangular Selection Seleção Retangular Set Selection as the paint tool Usar o Selecionador como ferramenta de desenho SetShortcutDialog Set Shortcut Definir atalho Enter new shortcut to change Insira um novo atalho para definir Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Pressione Esc para cancelar ou ⌘+Backspace para desativar o atalho de teclado. Press Esc to cancel or Backspace to disable the keyboard shortcut. Pressione Esc para cancelar ou Backspace para desabilitar o atalho de teclado. Flameshot must be restarted for changes to take effect. O Flameshot deve ser reiniciado para que as alterações entrem em vigor. ShortcutsWidget Hot Keys Teclas de atalho Available shortcuts in the screen capture mode. Atalhos disponíveis no modo de captura de tela. Description Descrição Key Tecla Left Double-click Clique Duplo com o Botão Esquerdo Toggle side panel Alternar painel lateral Grab a color from the screen Escolha uma cor da tela Resize selection left 1px Redimensionar seleção para a esquerda em 1px Resize selection right 1px Redimensionar seleção para a direita em 1px Resize selection up 1px Redimensionar a seleção para cima em 1px Resize selection down 1px Redimensionar seleção para baixo em 1px Symmetrically decrease width by 2px Diminuir simetricamente a largura em 2px Symmetrically increase width by 2px Aumentar simetricamente a largura em 2px Symmetrically increase height by 2px Aumentar simetricamente a altura em 2px Symmetrically decrease height by 2px Diminuir simetricamente a altura em 2px Select entire screen Selecionar a tela inteira Move selection left 1px Mover seleção para a esquerda em 1px Move selection right 1px Mover seleção para a direita em 1px Move selection up 1px Mover seleção para cima em 1px Move selection down 1px Mover seleção para baixo 1px Commit text in text area Confirmar texto na área de texto Delete selected drawn object Excluir o objeto desenhado selecionado Cancel current selection Cancelar seleção atual Delete current tool Excluir ferramenta atual Capture screen Tela de captura Screenshot history Histórico de captura de tela SidePanelWidget Active thickness: Espessura ativa: Active color: Cor ativa: Press ESC to cancel Pressione Esc para cancelar Active tool size: Tamanho ativo da ferramenta: Active Color: Active Color: Grab Color Pegar Cor Display grid Grade de exibição SizeDecreaseTool Decrease Tool Size Diminuir tamanho da ferramenta Decrease the size of the other tools Diminui o tamanho das outras ferramentas SizeIncreaseTool Increase Tool Size Aumentar tamanho da ferramenta Increase the size of the other tools Aumenta o tamanho das outras ferramentas SizeIndicatorTool Selection Size Indicator Indicador do Tamanho da Seleção Show X and Y dimensions of the selection Mostrar dimensões X e Y da seleção Show the dimensions of the selection (X Y) Mostra as dimensões da seleção (X Y) StrftimeChooserWidget Century (00-99) Século (00-99) Year (00-99) Ano (00-99) Year (2000) Ano (2000) Month Name (jan) Nome do mês (jan) Month Name (january) Nome do mês (janeiro) Month (01-12) Mês (01-12) Week Day (1-7) Dia da semana (1-7) Week (01-53) Semana (01-53) Day Name (mon) Nome do dia (seg) Day Name (monday) Nome do dia (segunda) Day (01-31) Dia (01-31) Day of Month (1-31) Dia do Mês (1-31) Day (001-366) Dia (001-366) Time (%H-%M-%S) Tempo (%H-%M-%S) Time (%H-%M) Tempo (%H-%M) Hour (00-23) Hora (00-23) Hour (01-12) Hora (01-12) Minute (00-59) Minuto (00-59) Second (00-59) Segundos (00-59) Full Date (%m/%d/%y) Data Completa (%m/%d/%y) Full Date (%Y-%m-%d) Data Completa (%Y-%m-%d) Full Date (%d-%m-%Y) Data completa (%d-%m-%Y) SystemNotification Flameshot Info Informações do Flameshot TextConfig StrikeOut Sobrescrito Underline Sublinhado Bold Negrito Italic Itálico Left Align Alinhamento à Esquerda Center Align Alinhamento Central Right Align Alinhamento à Direita TextTool Text Texto Add text to your capture Adicionar texto à captura TrayIcon &Take Screenshot &Tirar Captura de Tela &Open Launcher &Abrir Lançador &Configuration &Configuração &About &Sobre Check for updates Verifique se há atualizações New version %1 is available Nova versão %1 está disponível &Quit &Sair &Latest Uploads &Últimos Envios &Open Save Path &Abrir local de salvamento UIcolorEditor UI Color Editor Interface de Edição de Cores Change the color moving the selectors and see the changes in the preview buttons. Modifique a cor movendo os seletores e veja as mudanças nos botões de preview. Select a Button to modify it Selecione um botão para modificá-lo Main Color Cor Principal Click on this button to set the edition mode of the main color. Clique neste botão para setar o modo de edição da cor principal. Contrast Color Cor de Contraste Click on this button to set the edition mode of the contrast color. Clique neste botão para setar o modo de edição da cor de contraste. UndoTool Undo Desfazer Undo the last modification Desfazer a última modificação UpdateNotificationWidget New Flameshot version %1 is available Nova versão Flameshot %1 está disponível Ignore Ignorar Later Depois Update Atualizar UploadHistory Upload History Histórico de Envio Screenshots history is empty O histórico de capturas de tela está vazio UploadLineItem Form Form TextLabel TextLabel Copy URL Copiar URL Open In Browser Open In Browser Confirm to delete Confirme para deletar Are you sure you want to delete a screenshot from the latest uploads and server? Tem certeza de que deseja deletar uma captura de tela dos últimos envios e do servidor? UtilityPanel Close Fechar <Empty> <Vazio> VisualsEditor Opacity of area outside selection: Opacidade da área fora da seleção: UI Color Editor Interface de Edição de Cores Colorpicker Editor Editor do Seletor de Cores Button Selection Botão de seleção Select All Selecionar Todos color_widgets::ColorDialog Pick Escolher color_widgets::ColorPalette Unnamed Sem-nome color_widgets::ColorPaletteModel Unnamed Sem-nome %1 (%2 colors) %1 (%2 cores) color_widgets::ColorPaletteWidget Open a new palette from file Abrir uma nova paleta a partir do arquivo Create a new palette Criar uma nova paleta Duplicate the current palette Duplicar a paleta atual Delete the current palette Excluir a paleta atual Revert changes to the current palette Reverter alterações na paleta atual Save changes to the current palette Salvar alterações na paleta atual Add a color to the palette Adicionar uma cor à paleta Remove the selected color from the palette Remover a cor selecionada da paleta New Palette Nova Paleta Name Name GIMP Palettes (*.gpl) Paletas do GIMP (*.gpl) Palette Image (%1) Imagem da Paleta (%1) All Files (*) Todos os Arquivos (*) Open Palette Abrir Paleta Failed to load the palette file %1 Falha ao carregar o arquivo de paleta %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remover Cor Edit Color... Editar Cor... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 cores) color_widgets::Swatch Clear Color Limpar Cor %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_ro.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Error Unable to launch in terminal. Unable to write in No es pot escriure a ArrowTool Arrow Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second seconds Take new screenshot Area: Capture Launcher TextLabel Capture Mode Delay: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Imposible capturar la pantalla Mouse Select screenshot area Mouse Wheel Roda del ratolí Change tool size Right Click Clic dret Show color picker Mostra el selector de color Open side panel Esc Esc Exit Surt Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Precisely select color Hold Left Click Toggle magnifier Space or Right Click Cancel Esc Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Surt Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius URL copied to clipboard. L'URL s'ha copiat al porta-retalls. FlameshotDaemon New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Unable to connect via DBus No s'ha pogut connectar mitjançant DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Fitxer de Configuració Export Exportar Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Show icon in the system tray Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show abort notifications Enable abort notifications Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Save image Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Puja la imatge Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Copia al porta-retalls Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus No s'ha pogut connectar mitjançant DBus Powerful yet simple to use screenshot software. See Open the capture launcher. Start a manual capture in GUI mode. Configure Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in No es pot escriure a Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ix de la captura Screenshot history Screenshot history Capture screen Capture screen Show color picker Mostra el selector de color Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Imposible capturar la pantalla SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. Description Descripció Key Tecla Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Captura &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles New version %1 is available La nova versió %1 ja és disponible &Quit &Surt &Latest Uploads &Últimes càrregues &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification Desfés l'última modificació UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update Update UploadHistory Upload History Screenshots history is empty L'historial de captures de pantalla és buit UploadLineItem Form TextLabel Copy URL Copia l'URL Open In Browser Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Editor de color de la interfície Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_ru.ts ================================================ AbstractWidgetList Add New Добавить новый Move Up Поднять Move Down Опустить Remove Убрать AcceptTool Accept Принять Accept the capture Подтвердить захват AppLauncher App Launcher Запуск приложения Choose an app to open the capture Выбрать приложение для открытия снимка AppLauncherWidget Open With Открыть с помощью Launch in terminal Запустить в терминале Keep open after selection Оставить запущенным после выбора Error Ошибка Unable to write in Не удалось сохранить Unable to launch in terminal. Не удалось запустить в терминале. ArrowTool Arrow Стрелка Set the Arrow as the paint tool Выбрать инструмент «Стрелка» BlurTool Blur Размытие Set Blur as the paint tool Выбрать «Размытие» инструментом для рисования CaptureLauncher <b>Capture Mode</b> <b>Режим захвата</b> Rectangular Region Прямоугольная область Full Screen (Current Display) Весь экран (текущий дисплей) Full Screen (All Monitors) Весь экран (все мониторы) No Delay Без задержки second секунда seconds секунд(ы) Take new screenshot Сделать новый снимок Area: Область: Capture Launcher Запуск захвата TextLabel TextLabel Capture Mode Режим захвата Delay: Задержка: WxH+x+y Ш×В+x+y CaptureWidget Unable to capture screen Не удалось захватить экран Mouse Мышь Select screenshot area Выбрать область снимка Mouse Wheel Колесо мыши Change tool size Изменить размер инструмента Right Click Правый щелчок мыши Show color picker Показать палитру цветов Open side panel Открыть боковую панель Esc Esc Exit Выход Quit Capture Выйти из захвата Are you sure you want to quit capture? Уверены, что хотите выйти из захвата? Do not show this again Не показывать это снова Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot потерял фокус. Сочетания клавиш не будут работать, пока вы не нажмёте где-нибудь. Configuration error resolved. Launch `flameshot gui` again to apply it. Ошибка конфигурации устранена. Запустите `flameshot gui` снова, чтобы применить её. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Выберите область с помощью мыши, или нажмите Esc, чтобы выйти. Нажмите Enter, чтобы захватить экран. Нажмите правую кнопку мыши, чтобы показать выбор цвета. Используйте колесо мыши, чтобы выбрать толщину текущего инструмента. Нажмите Пробел, чтобы открыть боковую панель. Tool Settings Настройки инструмента CircleCountTool Circle Counter Нумерация Add an autoincrementing counter bubble Добавить круг-счётчик с автоприращением CircleTool Circle Окружность Set the Circle as the paint tool Выбрать инструмент «Окружность» ColorDialog Select Color Выбрать цвет Saturation Насыщенность Hue Оттенок Hex Шестнадцатеричный Blue Синий Value Значение Green Зелёный Alpha Альфа Red Красный ColorGrabWidget Accept color Применить цвет Enter or Left Click Enter или нажмите левой кнопкой мыши Precisely select color Точный выбор цвета Hold Left Click Удерживайте левую кнопку мыши Toggle magnifier Переключить лупу Space or Right Click Пробел или нажмите правой кнопкой мыши Cancel Отмена Esc Esc ColorPickerEditor Select Preset: Выберите шаблон: Select preset using the spinbox Выбрать шаблон с помощью счётчика Edit Preset: Править предустановку: Enter color to update preset Введите цвет для обновления предустановки Update Обновить Press button to update the selected preset Нажмите кнопку для обновления выбранной предустановки Delete Удалить Press button to delete the selected preset Нажмите кнопку для удаления выбранного шаблона Add Preset: Добавить шаблон: Enter color manually or select it using the color-wheel Введите цвет вручную или выберите его с помощью цветового круга Add Добавить Press button to add preset Нажмите кнопку для добавления шаблона Error Ошибка Unable to add preset. Maximum limit reached. Не удаётся добавить шаблон. Достигнут максимальный предел. Unable to remove preset. Minimum limit reached. Не удаётся удалить шаблон. Достигнут минимальный предел. ConfigErrorDetails Configuration errors Ошибки конфигурации ConfigHandler Unrecognized setting: '%1' Неизвестная настройка: «%1» Unrecognized shortcut name: '%1'. Неизвестное название сочетания клавиш: «%1». Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Конфликт сочетания клавиш: «%1» и «%2» совпадают: %3 Bad value in '%1'. Expected: %2 Неверное значение в «%1». Ожидалось: %2 You have successfully resolved the configuration error. Вы успешно устранили ошибку конфигурации. The configuration contains an error. Open configuration to resolve. Конфигурация содержит ошибку. Откройте конфигурацию для решения. The configuration contains an error. Falling back to default. Конфигурация содержит ошибку. Возврат к умолчанию. Bad config key '%1' in ConfigHandler. Please report this as a bug. Неверный ключ конфигурации '%1' в ConfigHandler. Пожалуйста, сообщите об этом как об ошибке. ConfigResolver Resolve configuration errors Устраните ошибки конфигурации <b>You must resolve all errors before continuing:</b> <b>Вы должны устранить все ошибки, прежде чем продолжить:</b> Reset Сброс Reset to the default value. Сброс к значению по умолчанию. Remove Убрать Remove this setting. Удалить эту настройку. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Некоторые сочетания клавиш конфликтуют. Это НЕ помешает запуску Flameshot. Пожалуйста, исправьте их вручную в файле конфигурации. Resolve all Устранить все Resolve all listed errors. Устранить все перечисленные ошибки. Details Подробности ConfigWindow Configuration Настройки Interface Интерфейс Filename Editor Шаблон имён файлов General Общие Shortcuts Горячие клавиши Resolve Решить <b>Configuration file has errors. Resolve them before continuing.</b> <b>Файл конфигурации содержит ошибки. Исправьте их перед продолжением.</b> Storage Хранилище Controller New version %1 is available Доступна новая версия %1 You have the latest version У вас самая последняя версия Failed to get information about the latest version. Не удалось получить информацию о последней версии. Error Ошибка Unable to close active modal widgets Невозможно закрыть активные модальные виджеты &Take Screenshot &Сделать снимок &Open Launcher &Приложение захвата &Configuration &Настройки &About &О программе Check for updates Проверить обновления &Latest Uploads &Последние загрузки URL copied to clipboard. Ссылка скопирована в буфер обмена. &Information &Информация &Quit &Выход CopyTool Copy Копировать Copy selection to clipboard Копировать выделение в буфер обмена Copy the selection into the clipboard Скопировать выделение в буфер обмена DBusUtils Unable to connect via DBus Не удалось подключиться через DBus ExitTool Exit Выход Leave the capture screen Покинуть захват экрана FileNameEditor Edit the name of your captures: Правка имени ваших снимков: Edit: Шаблон: Preview: Предпросмотр: Save Сохранить Saves the pattern Сохранить шаблон Restore Восстановить Reset Сбросить Restores the saved pattern Восстанавливает сохранённый шаблон Clear Очистить Deletes the name Удаляет имя Flameshot Error Ошибка Unable to close active modal widgets Не удаётся закрыть активные модальные виджеты URL copied to clipboard. Ссылка скопирована в буфер обмена. FlameshotDaemon New version %1 is available Доступна новая версия: %1 You have the latest version У вас самая последняя версия Failed to get information about the latest version. Не удалось получить информацию о последней версии. Unable to connect via DBus Не удалось подключиться по DBus GeneneralConf Import Импорт Error Ошибка Unable to read file. Не удалось прочитать файл. Unable to write file. Не удалось записать файл. Save File Сохранить файл Confirm Reset Подтвердить сброс Are you sure you want to reset the configuration? Вы действительно хотите сбросить настройки? Show help message Показывать справочное сообщение Show the help message at the beginning in the capture mode. Показывать справочное сообщение перед началом захвата экрана. Show the side panel button Показывать кнопку боковой панели Show the side panel toggle button in the capture mode. Показывать кнопку открытия боковой панели в режиме захвата. Show desktop notifications Показывать уведомления Show tray icon Показывать значок в трее Show the systemtray icon Показать значок в системном трее Configuration File Файл конфигурации Export Экспорт Reset Сброс Launch at startup Запускать при старте системы Launch Flameshot Запустить Flameshot Show welcome message on launch Показывать приветствие при запуске Close application after capture Закрывать приложение после захвата экрана Close after capture Закрыть после снимка Close after taking a screenshot Закрыть после снимка Copy URL after upload Копировать ссылку после загрузки Copy URL and close window after upload Копировать ссылку и закрыть окно после загрузки Save image after copy Сохранять изображение после копирования Save image file after copying it Сохранять файл изображения после копирования Save Path Путь сохранения Change... Сменить… Copy file path after save Скопировать путь к файлу после сохранения Select default path for Screenshots Выберите путь по умолчанию для снимков экрана Use fixed path for screenshots to save Использовать фиксированный путь для сохранения снимков экрана Choose a Folder Выберите папку Unable to write to directory. Не удалось записать в папку. GeneralConf Import Импорт Error Ошибка Unable to read file. Не удалось прочитать файл. Unable to write file. Не удалось записать файл. Save File Сохранить файл Confirm Reset Подтвердить сброс Are you sure you want to reset the configuration? Вы действительно хотите сбросить настройки? Show help message Показывать справочное сообщение Show the help message at the beginning in the capture mode. Показывать справочное сообщение перед началом захвата экрана. Show the side panel button Показывать кнопку боковой панели Show the side panel toggle button in the capture mode. Показывать кнопку открытия боковой панели в режиме захвата. Show desktop notifications Показывать уведомления Show tray icon Показывать значок в трее Show the systemtray icon Показать значок в системном трее Confirmation required to delete screenshot from the latest uploads Подтверждать удаление снимка из последних отправок Configuration File Файл конфигурации Export Экспорт Reset Сбросить Automatic check for updates Автоматически проверять обновления Allow multiple flameshot GUI instances simultaneously Разрешить несколько экземпляров оболочки Flameshot This allows you to take screenshots of flameshot itself for example. Это позволяет, например, делать скриншоты самой программы flameshot. Automatically close daemon when it is not needed Автоматически закрывать демона, когда он не требуется Launch at startup Запускать при старте системы Launch Flameshot Запустить Flameshot Show welcome message on launch Показывать приветствие при запуске Use large predefined color palette Использовать большую предопределённую палитру цветов Copy URL after upload Копировать ссылку после отправки Copy URL and close window after upload Копировать ссылку и закрыть окно после загрузки Save image after copy Сохранять изображение после копирования Save image file after copying it Сохранять файл изображения после копирования Show the help message at the beginning in the capture mode Показывать справочное сообщение в начале режима захвата Use last region for GUI mode Использовать последнюю область для графического режима Use the last region as the default selection for the next screenshot in GUI mode Использовать последнюю область в качестве стандартной для следующего снимка в графическом режиме Show the side panel toggle button in the capture mode Показать кнопку переключения боковой панели в режиме захвата Enable desktop notifications Включить уведомления рабочего стола Show abort notifications Показывать уведомления о прекращении Enable abort notifications Включить уведомления о прекращении Show icon in the system tray Показывать значок в системном трее Use grim to capture screenshots Использовать Grim для захвата снимков Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim — инструмент для снимков экрана исключительно в Wayland через протокол Screencopy. Предназначен для минималистичных оконных менеджеров, таких как Sway или Hyprland. Ask for confirmation to delete screenshot from the latest uploads Запрашивать подтверждение при удалении снимков экрана из последних отправок Check for updates automatically Автоматически проверять наличие обновлений This allows you to take screenshots of Flameshot itself for example Это позволяет, например, делать снимки самого Flameshot Launch Flameshot daemon when computer is booted Запускать демон Flameshot при загрузке компьютера Show the welcome message box in the middle of the screen while taking a screenshot Показывать окно приветствия в центре экрана при создании снимка Use a large predefined color palette Использовать большую предопределённую палитру цветов Copy on double click Копировать двойным щелчком кнопки мыши Enable Copy on Double Click Включить копирование по двойному нажатию кнопки мыши Copy URL and close window after uploading was successful Копировать ссылку и закрывать окно после успешной отправки Automatically unload from memory when it is not needed Автоматически выгружать из памяти, когда не используется Automatically close daemon (background process) when it is not needed Автоматически закрывать демона (фоновый процесс), когда он не нужен Launch in background at startup Запускать в фоне при старте Launch Flameshot daemon (background process) when computer is booted Запускать демона Flameshot (фоновый процесс) при старте компьютера Ask before quit capture Спрашивать при выходе из захвата Show the confirmation prompt before ESC quit Показывать запрос на подтверждение перед выходом с помощью ESC Enable Copy to clipboard on Double Click Включить копирование в буфер обмена двойным щелчком Copy URL after uploading was successful Копировать ссылку после успешной загрузки After copying the screenshot, save it to a file as well После копирования снимка экрана также сохранить его в файл Save Path Путь сохранения Change... Сменить… Use fixed path for screenshots to save Использовать постоянный путь сохранения для снимков Preferred save file extension: Базовое расширение файла сохранения: Latest Uploads Max Size Максимальное число последних отправок Imgur Application Client ID Ключ API Imgur Undo limit Число действий в очереди отмены Use JPG format for clipboard (PNG default) Использовать формат JPG для буфера обмена (вместо PNG) Use lossy JPG format for clipboard (lossless PNG default) Использовать формат с потерями JPG для буфера обмена (по умолчанию — PNG без потерь) Copy file path after save Копировать путь к файлу после сохранения Copy the file path to clipboard after the file is saved Копировать путь в буфер обмена после сохранения файла Anti-aliasing image when zoom the pinned image Сглаживать закреплённый снимок при масштабировании After zooming the pinned image, should the image get smoothened or stay pixelated Должно ли изображение после масштабирования сглаживаться или оставаться пиксельным Upload image without confirmation Отправлять изображение без подтверждения Choose a Folder Выберите папку Unable to write to directory. Не удалось записать в папку. Show magnifier Показывать лупу Enable a magnifier while selecting the screenshot area Включить лупу при выборе области снимка экрана Square shaped magnifier Квадратная лупа Make the magnifier to be square-shaped Сделать лупу квадратной формы Milliseconds before geometry display hides; 0 means do not hide Время в миллисекундах до скрытия панели геометрии; 0 — не скрывать Set geometry display timeout (ms) Время показа панели геометрии (мс) Selection Geometry Display Панель геометрии выделения Display Location Расположение панели None Нет Top Left Сверху слева Top Right Сверху справа Bottom Left Снизу слева Bottom Right Снизу справа Center В центре Quality range of 0-100; Higher number is better quality and larger file size Диапазон качества от 0 до 100; чем выше число, тем выше качество и размер файла JPEG Quality Качество JPEG Reverse arrow Обратить стрелку Draw the arrow head first Сначала рисовать наконечник стрелы Insecure Pixelate Небезопасное размытие Draw the pixelation effect in an insecure but more asethetic way. Рисовать небезопасный, но более симпатичный эффект пиксельного размытия. HistoryWidget Latest Uploads Последние загрузки Screenshots history is empty История снимков пуста Copy URL Копировать ссылку URL copied to clipboard. Ссылка скопирована в буфер обмена. Open in browser Открыть в браузере Confirm to delete Подтвердите удаление Are you sure you want to delete a screenshot from the latest uploads and server? Вы уверены, что хотите удалить снимок экрана из последних загрузок и с сервера? ImgS3Uploader Upload image to S3 Загрузка изображения в S3 Uploading Image Загрузка изображения Uploading Image... Выгрузка изображения… Delete image from S3 Удалить изображение из S3 Deleting image... Удаление изображения… URL copied to clipboard. Ссылка скопирована в буфер обмена. Unable to remove screenshot from the remote storage. Невозможно удалить снимок из удалённого хранилища. Network error Ошибка сети Possibly it doesn't exist anymore Возможно, его больше не существует Do you want to remove screenshot from local history anyway? Вы все равно хотите удалить снимок из локальной истории? Remove screenshot from history? Удалить снимок из истории? Retrieving configuration file with s3 creds... Получение конфигурационного файла с параметрами доступа к s3… S3 Creds URL is not found in your configuration file Адрес данных S3 не найден в вашем файле конфигурации Error Ошибка Unable to upload screenshot, please check your internet connection and try again Не удалось загрузить снимок экрана. Проверьте подключение к Интернету и повторите попытку Unable to get s3 credentials, please check your VPN connection and try again Не удалось получить данные S3, проверьте своё VPN-соединение и повторите попытку ImgS3UploaderTool Upload the selection to S3 bucket Загрузить выделение в корзину S3 ImgUploadDialog Upload Confirmation Подтверждение отправки Do you want to upload this capture? Хотите отправить этот снимок? Upload without confirmation Отправлять без подтверждения ImgUploader Upload image to S3 Загрузить изображение в S3 Uploading Image Загрузка изображения Upload image Загрузить изображение Unable to open the URL. Не удалось открыть ссылку. URL copied to clipboard. Ссылка скопирована в буфер обмена. Screenshot copied to clipboard. Снимок скопирован в буфер обмена. Deleting image... Удаление изображения… Uploading Image... Выгрузка изображения… Copy URL Копировать ссылку Open URL Открыть ссылку Delete image Удалить изображение Image to Clipboard. Изображение в буфер обмена. ImgUploaderBase Upload image Отправить изображение Uploading Image Изображение отправляется Copy URL Копировать ссылку Open URL Открыть ссылку Delete image Удалить изображение Image to Clipboard. Изображение в буфер Save image Сохранить изображение Unable to open the URL. Не удалось открыть ссылку. URL copied to clipboard. Ссылка скопирована в буфер обмена. Screenshot copied to clipboard. Снимок скопирован в буфер обмена. Unable to save the screenshot to disk. Не удаётся сохранить снимок экрана на диск. Screenshot saved. Снимок экрана сохранён. ImgUploaderTool Imgage uploader tool Инструмент загрузки изображений Image uploader tool Инструмент загрузки изображений Image Uploader Отправщик изображений Upload the selection Отправить выделенное ImgurUploader Upload to Imgur Загрузить в Imgur Uploading Image Загрузка изображения Copy URL Копировать ссылку Open URL Открыть ссылку Delete image Удалить изображение Image to Clipboard. Изображение в буфер обмена. Unable to open the URL. Не удалось открыть ссылку. URL copied to clipboard. Ссылка скопирована в буфер обмена. Screenshot copied to clipboard. Снимок скопирован в буфер обмена. ImgurUploaderTool Image Uploader Загрузка изображения Upload the selection to Imgur Загрузить выделение в Imgur InfoWindow About О программе Icon Значок License Лицензия GPLv3+ GPLv3+ Version Версия Flameshot v Flameshot v OS Info Сведения об ОС Copy Info Копировать сведения SPACEBAR Пробел Right Click Правый клик Mouse Wheel Колесо мыши Move selection 1px Переместить выделение на 1px Resize selection 1px Изменить размер выделения на 1px Quit capture Выйти из захвата экрана Copy to clipboard Копировать в буфер обмена Save selection as a file Сохранить выделение в файл Undo the last modification Отменить последнее изменение Toggle visibility of sidebar with options of the selected tool Показать боковую панель с настройками инструмента Show color picker Показать выбор цвета Change the tool's thickness Изменить толщину инструмента Available shortcuts in the screen capture mode. Доступные горячие клавиши в режиме захвата экрана. Key Клавиша Description Описание <u><b>License</b></u> <u><b>Лицензия</b></u> <u><b>Version</b></u> <u><b>Версия</b></u> <u><b>Shortcuts</b></u> <u><b>Горячие клавиши</b></u> InvertTool Invert Инвертор Set Inverter as the paint tool Выбрать инструмент «Инвертор» LineTool Line Линия Set the Line as the paint tool Выбрать инструмент «Линия» MarkerTool Marker Маркер Set the Marker as the paint tool Выбрать инструмент «Маркер» MoveTool Move Перемещение Move the selection area Переместить выделенную область PencilTool Pencil Карандаш Set the Pencil as the paint tool Выбрать инструмент «Карандаш» PinTool Pin Tool Булавка Pin image on the desktop Закрепить снимок на рабочем столе PinWidget Context menu Контекстное меню Copy to clipboard Копировать в буфер обмена Save to file Сохранить в файл Rotate Right Повернуть вправо Rotate Left Повернуть влево Increase Opacity Увеличить непрозрачность Decrease Opacity Уменьшить непрозрачность Close Закрыть PixelateTool Pixelate Размытие Set Pixelate as the paint tool. Сделать размытие инструментом рисования Set Pixelate as the paint tool Выбрать инструмент «Размытие» PrimaryInstanceWidget Primary instance Первичный экземпляр <b>Primary instance.</b> Messages received from secondaries: <b>Первичный экземпляр.</b> Сообщения полученные от вторичных: QHotkey Failed to register %1. Error: %2 Не удалось зарегистрировать %1. Ошибка: %2 Failed to unregister %1. Error: %2 Не удалось отменить регистрацию %1. Ошибка: %2 QObject Save Error Ошибка сохранения Capture saved as Снимок сохранён в Capture saved to clipboard. Снимок скопирован в буфер обмена. Capture saved to clipboard Снимок скопирован в буфер обмена Error while saving to clipboard Ошибка при сохранении в буфер обмена Error trying to save as Ошибка при попытке сохранить как Save screenshot Сохранить снимок Path copied to clipboard as Путь скопирован в буфер обмена как Saving canceled Сохранение отменено Save canceled Сохранение отменено Capture is saved and copied to the clipboard as Снимок сохранён на диск и скопирован в буфер обмена как Unable to connect via DBus Не удалось подключиться по DBus Powerful yet simple to use screenshot software. Продвинутый, но простой инструмент для создания снимков экрана. See Посмотреть Capture the entire desktop. Захватить весь рабочий стол. Open the capture launcher. Открыть средство запуска захвата. Start a manual capture in GUI mode. Запустить ручной захват в режиме графического интерфейса. Configure Настроить Capture a single screen. Захват одного экрана. Path where the capture will be saved Путь сохранения снимка Capture screenshot of all monitors at the same time. Захватить снимок со всех мониторов одновременно. Capture a screenshot of the specified monitor. Захватить снимок с указанного монитора. Existing directory or new file to save to Существующая директория или новый файл для сохранения Save the capture to the clipboard Сохранить снимок в буфер обмена Pin the capture to the screen Закрепить захват на экране Upload screenshot Отправить снимок экрана Delay time in milliseconds Задержка в миллисекундах Repeat screenshot with previously selected region Повторить снимок экрана с ранее выбранной областью Screenshot region to select Выбор области снимка экрана Set the filename pattern Установить шаблон имени файла Accept capture as soon as a selection is made Принять захват, как только будет сделан выбор Enable or disable the trayicon Включить или отключить значок в трее Enable or disable run at startup Включение или отключение запуска при старте Enable or disable the notifications Включить или отключить уведомления Check the configuration for errors Проверить конфигурацию на наличие ошибок Show the help message in the capture mode Показывать справочный сообщения в режиме захвата Define the main UI color Задать основной цвет пользовательского интерфейса Define the contrast UI color Определить цвет контраста пользовательского интерфейса Print raw PNG capture Необработанное изображения PNG Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Распечатать геометрию выделения в формате WxH+X+Y. Ничего не делает, если указано raw Define the screen to capture (starting from 0) Укажите экран для захвата (начиная с 0) Invalid delay, it must be a number greater than 0 Недопустимая задержка, должно быть больше 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Недопустимая область, используйте «WxH+X+Y» или «all» или «screen0/screen1/...». Invalid path, must be an existing directory or a new file in an existing directory Недопустимый путь, укажите существующий каталог или новый файл в имеющемся каталоге Define the screen to capture Выберите экран для захвата default: screen containing the cursor по умолчанию: экран, содержащий курсор мыши Screen number Номер экрана Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Неверный цвет, этот флаг поддерживает следующие форматы: - #RGB (каждый из R, G и B представляет собой одну шестнадцатеричную цифру) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Именованные цвета, такие как «синий» или «красный» Возможно, вам потребуется экранировать знак «#», как в «\#FFF» Invalid delay, it must be higher than 0 Недействительная задержка, она должна быть больше 0 Invalid screen number, it must be non negative Недействительный номер экрана, он должен быть неотрицательным Invalid path, it must be a real path in the system Неверный путь, это должен быть реальный путь в системе Invalid value, it must be defined as 'true' or 'false' Недействительное значение, оно должно быть определено как «true» или «false» Error Ошибка Unable to write in Не удалось сохранить Requested screen exceeds screen count Запрашиваемый экран превышает доступное число экранов Full screen screenshot pinned to screen Полноэкранный снимок закреплён на экране URL copied to clipboard. Ссылка скопирована в буфер обмена. Options Параметры Arguments Аргументы arguments аргументы Subcommands Подкоманды subcommands подкоманды Usage Использование options параметры Per default runs Flameshot in the background and adds a tray icon for configuration. По умолчанию запускает Flameshot в фоновом режиме и добавляет значок в трее для настройки. Hi, I'm already running! You can find me in the system tray. Привет, я уже работаю! Вы можете найти меня в системном трее. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Привет! Для создания снимка нажмите на значок в трее. Чтобы увидеть больше функций, нажмите правой кнопки мыши. Toggle side panel Показать/скрыть боковую панель Resize selection left 1px Изменить размер выделения влево на 1 пиксель Resize selection right 1px Изменить размер выделения вправо на 1 пиксель Resize selection up 1px Изменить размер выделения вверх на 1 пиксель Resize selection down 1px Изменить размер выделения вниз на 1 пиксель Select entire screen Выбрать весь экран Move selection left 1px Переместить выделение влево на 1 пиксель Move selection right 1px Переместить выделение вправо на 1 пиксель Move selection up 1px Переместить выделение вверх на 1 пиксель Move selection down 1px Переместить выделение вниз на 1 пиксель Commit text in text area Подтвердить текст в текстовой области Delete current tool Удалить текущий инструмент Quit capture Выйти из захвата экрана Screenshot history История снимков Capture screen Захватить экран Show color picker Показать выбор цвета Change the tool's size Изменить размер инструмента Change the tool's thickness Изменить толщину инструмента RectangleTool Rectangle Прямоугольник Set the Rectangle as the paint tool Выбрать инструмент «Прямоугольник» RedoTool Redo Повторить Redo the next modification Повторить последнее изменение SaveTool Save Сохранить Save screenshot to a file Сохранить снимок экрана в файл Save the capture Сохранить снимок ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Не удаётся определить среду рабочего стола (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Универсальный адаптер захвата экрана Wayland требует Grim в качестве компонента для захвата экрана Wayland. Если компонент для захвата экрана отсутствует, пожалуйста, установите его! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Если настройка useGrimAdapter не включена, будет использоваться протокол DBus. Следует отметить, что использование протокола DBus в Wayland не рекомендуется. Рекомендуется включить настройку useGrimAdapter в файле flameshot.ini, чтобы активировать общий адаптер снимков экрана Wayland на основе Grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Компонент снимков экрана Grim реализован на основе Wlroots, поэтому его нельзя использовать в GNOME или в подобных средах рабочего стола Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Не удаётся определить среду рабочего стола (GNOME? KDE? Qile? Sway?…) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Подсказка: попробуйте задать переменную среды XDG_CURRENT_DESKTOP. Unable to capture screen Не удалось захватить экран SecondaryInstanceWidget Secondary instance Вторичный экземпляр <b>Secondary instance.</b> Send message to primary: <b>Вторичный экземпляр.</b> Отправленное сообщение первичному: Type something here... Напишите что-нибудь здесь… &Send Отпра&вить Error sending message Ошибка при отправке сообщения The message '%1' could not be sent to the primary. Сообщение «%1» не удалось отправить первичному. SelectionTool Rectangular Selection Прямоугольная рамка Set Selection as the paint tool Выбрать инструмент «Прямоугольная рамка» SetShortcutDialog Set Shortcut Назначение сочетания клавиш Enter new shortcut to change Введите новое сочетание для замены Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Нажмите Esc для отмены или ⌘+Backspace для отключения сочетание клавиш. Press Esc to cancel or Backspace to disable the keyboard shortcut. Нажмите Esc для отмены или Backspace для отключения сочетание клавиш. Flameshot must be restarted for changes to take effect. Необходимо перезапустить Flameshot для применения изменений. ShortcutsWidget Hot Keys Горячие клавиши Available shortcuts in the screen capture mode. Доступные горячие клавиши в режиме захвата экрана. Description Описание Key Сочетание клавиш Left Double-click Левый двойной щелчок мыши Toggle side panel Показать/скрыть боковую панель Grab a color from the screen Взять цвет с экрана Resize selection left 1px Изменить размер выделения влево на 1 пикс Resize selection right 1px Изменить размер выделения вправо на 1 пикс Resize selection up 1px Изменить размер выделения вверх на 1 пикс Resize selection down 1px Изменить размер выделения вниз на 1 пикс Symmetrically decrease width by 2px Симметрично уменьшить ширину на 2 пикс Symmetrically increase width by 2px Симметрично увеличить ширину на 2 пикс Symmetrically increase height by 2px Симметрично увеличить высоту на 2 пикс Symmetrically decrease height by 2px Симметрично уменьшить высоту на 2 пикс Select entire screen Выбрать весь экран Move selection left 1px Сдвинуть выделение влево на 1 пикс Move selection right 1px Сдвинуть выделение вправо на 1 пикс Move selection up 1px Сдвинуть выделение вверх на 1 пикс Move selection down 1px Сдвинуть выделение вниз на 1 пикс Commit text in text area Подтвердить текст в текстовой области Delete selected drawn object Удалить выбранный нарисованный объект Cancel current selection Отменить текущее выделение Delete current tool Удалить текущий инструмент Capture screen Захватить экран Screenshot history История снимков SidePanelWidget Active thickness: Активная толщина: Active color: Активный цвет: Press ESC to cancel Нажмите Esc для отмены Active tool size: Размер активного инструмента: Active Color: Активный цвет: Grab Color Захватить цвет с экрана Display grid Сетка дисплея SizeDecreaseTool Decrease Tool Size Уменьшить размер инструмента Decrease the size of the other tools Уменьшить размер других инструментов SizeIncreaseTool Increase Tool Size Увеличить размер инструмента Increase the size of the other tools Увеличить размер других инструментов SizeIndicatorTool Selection Size Indicator Индикатор размера выделения Show X and Y dimensions of the selection Показать размеры X и Y выделения Show the dimensions of the selection (X Y) Показывает размер выделения (X Y) StrftimeChooserWidget Century (00-99) Век (00-99) Year (00-99) Год (00-99) Year (2000) Год (2000) Month Name (jan) Название месяца (янв) Month Name (january) Название месяца (январь) Month (01-12) Месяц (01-12) Week Day (1-7) День недели (1-7) Week (01-53) Неделя (01-53) Day Name (mon) День недели (пн) Day Name (monday) День недели (понедельник) Day (01-31) День (01-31) Day of Month (1-31) День месяца (1-31) Day (001-366) День (001-366) Time (%H-%M-%S) Время (%H-%M-%S) Time (%H-%M) Время (%H-%M) Hour (00-23) Час (00-23) Hour (01-12) Час (01-12) Minute (00-59) Минуты (00-59) Second (00-59) Секунды (00-59) Full Date (%m/%d/%y) Полная дата (%m/%d/%y) Full Date (%Y-%m-%d) Полная дата (%Y-%m-%d) Full Date (%d-%m-%Y) Полная дата (%d-%m-%Y) SystemNotification Flameshot Info Уведомление Flameshot TextConfig StrikeOut Зачёркнутый Underline Подчёркнутый Bold Полужирный Italic Курсив Left Align Выравнивание по левому краю Center Align Выравнивание по центру Right Align Выравнивание по правому краю TextTool Text Текст Add text to your capture Добавить текст на снимок TrayIcon &Take Screenshot &Сделать снимок &Open Launcher &Запуск захвата &Configuration &Настройки &About &О программе Check for updates Проверить обновления New version %1 is available Доступна новая версия %1 &Quit &Выход &Latest Uploads &Последние отправки &Open Save Path &Открыть путь сохранения UIcolorEditor UI Color Editor Редактор цвета интерфейса Change the color moving the selectors and see the changes in the preview buttons. Цвет меняется перемещением селекторов, изменения отображаются на кнопках предпросмотра. Select a Button to modify it Выберите кнопку, чтобы изменить её Main Color Основной цвет Click on this button to set the edition mode of the main color. Нажмите на эту кнопку, чтобы перейти в режим правки основного цвета. Contrast Color Контрастный цвет Click on this button to set the edition mode of the contrast color. Нажмите на эту кнопку, чтобы перейти в режим правки контрастного цвета. UndoTool Undo Отменить Undo the last modification Отменить последнее изменение UpdateNotificationWidget New Flameshot version %1 is available Доступна новая версия Flameshot %1 Ignore Игнорировать Later Позже Update Обновить UploadHistory Upload History История отправок Screenshots history is empty История снимков экрана пуста UploadLineItem Form Форма TextLabel TextLabel Copy URL Копировать ссылку Open In Browser Открыть в браузере Confirm to delete Подтвердите удаление Are you sure you want to delete a screenshot from the latest uploads and server? Вы уверены, что хотите удалить снимок экрана из последних загрузок и с сервера? UploadStorageConfig Upload storage Хранилище загрузок Imgur storage Хранилище Imgur S3 storage (require config.ini file with s3 credentials) Хранилище S3 (требуется файл config.ini с учётными данными s3) UtilityPanel Close Закрыть <Empty> <Пусто> Hide Скрыть VisualsEditor Opacity of area outside selection: Затенённость области вне выделения: UI Color Editor Редактор цвета интерфейса Colorpicker Editor Редактор палитры цветов Button Selection Выбор кнопок Select All Выбрать все color_widgets::ColorDialog Pick Выбрать color_widgets::ColorPalette Unnamed Безымянный color_widgets::ColorPaletteModel Unnamed Безымянный %1 (%2 colors) %1 (%2 цвета) color_widgets::ColorPaletteWidget Open a new palette from file Открыть новую палитру из файла Create a new palette Создать новую палитру Duplicate the current palette Дублировать текущую палитру Delete the current palette Удалить текущую палитру Revert changes to the current palette Вернуть изменения к текущей палитре Save changes to the current palette Сохранить изменения в текущей палитре Add a color to the palette Добавить цвет в палитру Remove the selected color from the palette Удалить выбранный цвет из палитры New Palette Новая палитра Name Имя GIMP Palettes (*.gpl) Палитры GIMP (*.gpl) Palette Image (%1) Изображение палитры (%1) All Files (*) Все файлы (*) Open Palette Открыть палитру Failed to load the palette file %1 Не удалось загрузить файл палитры %1 color_widgets::GradientEditor Add Color Добавить цвет Remove Color Удалить цвет Edit Color... Изменить цвет... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 цвета) color_widgets::Swatch Clear Color Очистить цвет %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_sk.ts ================================================ AbstractWidgetList Add New Pridať nové Move Up Posunúť hore Move Down Posunúť dole Remove Odstrániť AcceptTool Accept Prijať Accept the capture Prijať zachytenú obrazovku AppLauncher App Launcher Spúšťač aplikácií Choose an app to open the capture Vybrať aplikáciu na otvorenie snímky obrazovky AppLauncherWidget Open With Otvoriť pomocou Launch in terminal Otvoriť v termináli Keep open after selection Nechať otvorené po výbere Error Chyba Unable to write in Zlyhal zápis do Unable to launch in terminal. Nepodarilo sa spustiť v termináli. ArrowTool Arrow Šípka Set the Arrow as the paint tool Nastaviť Šípku ako nástroj na kreslenie BlurTool Blur Rozmazanie Set Blur as the paint tool Nastaviť Rozmazanie ako nástroj pre úpravy CaptureLauncher <b>Capture Mode</b> <b>Režim zachytávania</b> Rectangular Region Pravouhlá oblasť Full Screen (Current Display) Celá obrazovka (aktívny monitor) Full Screen (All Monitors) Celá obrazovka (všetky monitory) No Delay Bez oneskorenia second sekunda seconds sekundy Take new screenshot Zachytiť novú snímku Area: Oblasť: Capture Launcher Spúšťač zachytávania obrazovky TextLabel TextovýPopis Capture Mode Režim zachytávania Delay: Oneskorenie: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Nepodarilo sa zachytiť obrazovku Mouse Myš Select screenshot area Výber oblasti snímky obrazovky Mouse Wheel Koliesko myši Change tool size Zmeniť veľkosť nástroja Right Click Klik pravým tlačidlom Show color picker Zobrazenie okna na výber farby Open side panel Otvorenie bočného panela Esc Esc Exit Ukončenie Quit Capture Ukončiť snímanie Are you sure you want to quit capture? Naozaj chcete ukončiť snímanie? Do not show this again Ďalej už nezobrazovať Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot stratil pozornosť. Klávesové skratky nebudú fungovať, kým niekam nekliknete. Configuration error resolved. Launch `flameshot gui` again to apply it. Chyba konfigurácie vyriešená. Spustite znova `flameshot gui`, aby ste ju použili. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Vyberte oblasť snímania pomocou myši alebo stlačte Esc pre ukončenie. Stlačte Enter pre zachytenie obrazovky. Kliknite pravým tlačidlom pre zobrazenie nástroja pre výber farby. Použite kolečko myši pre zmenu hrúbky vybraného nástroja. Stlačte medzerník pre otvorenie postranného panelu. Tool Settings Nastavenia nástrojov CircleCountTool Circle Counter Bodové počítadlo Add an autoincrementing counter bubble Pridať bublinu s (automaticky rastúcim) číslom CircleTool Circle Kruh Set the Circle as the paint tool Nastaviť Kruh ako nástroj na kreslenie ColorDialog Select Color Vybrať farbu Saturation Nasýtenie Hue Odtieň Hex Hex Blue Blue Value Hodnota Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Akceptovať farbu Enter or Left Click Zadajte alebo kliknite na tlačidlo vľavo Precisely select color Presne vyberte farbu Hold Left Click Držte ľavé tlačidlo Toggle magnifier Prepínanie lupy Space or Right Click Priestor alebo pravý Click Cancel Zrušiť Esc Všeobecný ColorPickerEditor Select Preset: Vyberte predvoľbu: Select preset using the spinbox Použite ruletu na výber predvoľby Edit Preset: Edit Preset: Enter color to update preset Zadajte farbu aktualizovať preset Update Stiahnuť Press button to update the selected preset Stlačte tlačidlo na odstránenie vybranej predvoľby Delete Odstrániť Press button to delete the selected preset Stlačte tlačidlo na odstránenie vybranej predvoľby Add Preset: Pridať predvoľbu: Enter color manually or select it using the color-wheel Zadajte farbu ručne alebo ju vyberte na palete Add Pridať Press button to add preset Stlačte tlačidlo na výber predvoľby Error Chyba Unable to add preset. Maximum limit reached. Nedá sa pridať predvoľba. Dosiahli ste maximálny limit ich počtu. Unable to remove preset. Minimum limit reached. Nepodarilo sa odstrániť predvoľbu. Dosiahli ste minimálny limit ich počtu. ConfigErrorDetails Configuration errors Chyby konfigurácie ConfigHandler Unrecognized setting: '%1' Nerozpoznané nastavenie: '%1' Unrecognized shortcut name: '%1'. Nerozpoznaný názov skratky: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Konflikt skratiek: '%1' a '%2' majú rovnakú skratku: %3 Bad value in '%1'. Expected: %2 Zlá hodnota v '%1'. Očakávaná hodnota: %2 You have successfully resolved the configuration error. Chybu konfigurácie ste úspešne vyriešili. The configuration contains an error. Open configuration to resolve. Konfigurácia obsahuje chybu. Otvorte konfiguráciu a vyriešte ju. Bad config key '%1' in ConfigHandler. Please report this as a bug. Zlý konfiguračný kľúč '%1' v ConfigHandler. Nahláste to ako chybu. ConfigResolver Resolve configuration errors Riešenie chýb konfigurácie <b>You must resolve all errors before continuing:</b> <b>Pred pokračovaním musíte vyriešiť všetky chyby:</b> Reset Resetovať Reset to the default value. Obnovenie predvolenej hodnoty. Remove Odstrániť Remove this setting. Odstráňte toto nastavenie. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Niektoré klávesové skratky sú konfliktné. Toto NEBEZPEČÍ spustenie Flameshotu. Riešte ich ručne v konfiguračnom súbore. Resolve all Vyriešte všetky Resolve all listed errors. Riešte všetky uvedené chyby. Details Podrobnosti ConfigWindow Configuration Konfigurácia Interface Používateľské rozhranie Filename Editor Editor názvov súborov General Všeobecné Shortcuts Klávesové skratky Resolve Vyriešiť <b>Configuration file has errors. Resolve them before continuing.</b> <b>Konfiguračný súbor obsahuje chyby. Pred pokračovaním ich vyriešte.</b> Controller New version %1 is available Je dostupná nová verzia: %1 You have the latest version Používate najnovšiu verziu Failed to get information about the latest version. Nepodarilo sa získať informácie o najnovšej verzii. Error Chyba Unable to close active modal widgets Nepodarilo sa zatvoriť aktívne modálne ovládacie prvky &Take Screenshot &Vytvoriť snímku &Open Launcher &Otvoriť Spúšťač &Configuration &Konfigurácia &About O &programe Check for updates Skontrolovať aktualizácie &Latest Uploads &Posledné nahratia URL copied to clipboard. URL skopírovaná do schránky. &Information &Informácie &Quit &Ukončiť CopyTool Copy Kopírovať Copy selection to clipboard Kopírovať výber do schránky Copy the selection into the clipboard Kopírovať výber do schránky DBusUtils Unable to connect via DBus Nie je možné pripojiť sa prostredníctvom DBus ExitTool Exit Ukončiť Leave the capture screen Opustiť obrazovku so zachytávaním FileNameEditor Edit the name of your captures: Upraviť meno vašich snímok obrazovky: Edit: Upraviť: Preview: Ukážka: Save Uložiť Saves the pattern Uloží vzor Restore Obnoviť Reset Resetovať Restores the saved pattern Vráti zmeny Clear Vyčistiť Deletes the name Vymaže meno Flameshot Error Chybné Unable to close active modal widgets Nemožno uzavrieť aktívne modal widgety URL copied to clipboard. URL skopírovaná do schránky. FlameshotDaemon New version %1 is available Je dostupná nová verzia: %1 You have the latest version Máte najnovšiu verziu Failed to get information about the latest version. Zneužívanie informácií o najnovšej verzii. Unable to connect via DBus Nie je možné pripojiť sa prostredníctvom DBus GeneneralConf Import Importovať Error Chyba Unable to read file. Zlyhalo čítanie súboru. Unable to write file. Zlyhal zápis do súboru. Save File Uložiť súbor Confirm Reset Potvrdiť Reset Are you sure you want to reset the configuration? Naozaj si želáte resetovať aktuálnu konfiguráciu? Show help message Zobraziť nápovedu Show the help message at the beginning in the capture mode. Zobraziť nápovedu na začiatku počas režimu zachytávania obrazovky. Show the side panel button Zobraziť tlačidlo na postrannom paneli Show the side panel toggle button in the capture mode. V režime zachytávania zobrazovať tlačidlo na postrannom paneli. Show desktop notifications Zobraziť systémové upozornenia Show tray icon Zobraziť stavovú ikonu Show the systemtray icon Zobraziť ikonu v stavovej oblasti Configuration File Súbor s konfiguráciou Export Exportovať Reset Resetovať Launch at startup Spúšťať pri štarte Launch Flameshot Spustiť Flameshot Close after capture Zavrieť po vytvorení snímky Close after taking a screenshot Zatvoriť po vytvorení snímky obrazovky Copy URL after upload Kopírovať URL po uploade Copy URL and close window after upload Po nahratí skopírovať URL a zavrieť okno Save image after copy Uložiť obrázok po kopírovaní Save image file after copying it Uložiť obrázok so súborom po jeho skopírovaní Save Path Cesta pre ukladanie Change... Zmeniť... Choose a Folder Vyberte priečinok Unable to write to directory. Zápis do adresára nie je možný. GeneralConf Import Importovať Error Chyba Unable to read file. Zlyhalo čítanie súboru. Unable to write file. Zlyhal zápis do súboru. Save File Uložiť súbor Confirm Reset Potvrdiť Reset Are you sure you want to reset the configuration? Naozaj si želáte resetovať aktuálnu konfiguráciu? Show help message Zobraziť nápovedu Show the help message at the beginning in the capture mode. Zobraziť nápovedu na začiatku počas režimu zachytávania obrazovky. Show the side panel button Zobraziť tlačidlo na postrannom paneli Show the side panel toggle button in the capture mode. V režime zachytávania zobrazovať tlačidlo na postrannom paneli. Show desktop notifications Zobraziť systémové upozornenia Show tray icon Zobraziť stavovú ikonu Show the systemtray icon Zobraziť ikonu v stavovej oblasti Confirmation required to delete screenshot from the latest uploads Pri odstraňovaní snímky z posledných nahraní je vyžadované potvrdenie Configuration File Súbor s konfiguráciou Export Exportovať Reset Resetovať Automatic check for updates Automaticky kontrolovať aktualizácie Allow multiple flameshot GUI instances simultaneously Povoliť viacero inštancií Flameshot GUI súčasne This allows you to take screenshots of flameshot itself for example. To vám umožní robiť napríklad snímky obrazovky samotného Flameshotu. Automatically close daemon when it is not needed Automatické zatvorenie démona, keď nie je potrebný Launch at startup Spustiť pri štarte Launch Flameshot Spustiť Flameshot Show welcome message on launch Pri spustení zobraziť uvítaciu správu Use large predefined color palette Používanie veľkej preddefinovanej palety farieb Copy URL after upload Kopírovať URL po nahratí Copy URL and close window after upload Po nahratí skopírovať URL a zavrieť okno Save image after copy Uložiť obrázok po kopírovaní Save image file after copying it Uložiť obrázok so súborom po jeho skopírovaní Show the help message at the beginning in the capture mode V režime zachytávania zobraziť text pomocníka na začiatku Use last region for GUI mode Použiť poslednú oblasť v režime GUI Use the last region as the default selection for the next screenshot in GUI mode Použiť poslednú oblasť ako predvolený výber pre ďalší snímku obrazovky v režime GUI Show the side panel toggle button in the capture mode Zobraziť bočný panel prepnúť tlačidlo v režime zachytenia Enable desktop notifications Povoliť systémové upozornenia Show abort notifications Zobrazovať notifikácie o zrušení Enable abort notifications Povoliť notifikácie o zrušení Show icon in the system tray Zobraziť ikonu v systémovej lište Use grim to capture screenshots Použiť grim na zachytávanie obrazovky Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim je nástroj pre Wayland (výhradne) na vytváranie snímok obrazovky založený na protokole screencopy. Vo všeobecnosti povoľte pre minimalistických správcov okien ako je sway, hyprland, atď. Ask for confirmation to delete screenshot from the latest uploads Pred odstránením snímky z posledného nahrania sa opýtať Check for updates automatically Kontrolovať aktualizácie automaticky This allows you to take screenshots of Flameshot itself for example Toto vám umožní urobiť snímku obrazovky samotného Flameshot-u Launch Flameshot daemon when computer is booted Pri štarte počítača spúštať Flameshot démona Show the welcome message box in the middle of the screen while taking a screenshot Pri vytváraní snímky zobraziť okno s privítaním v strede obrazovky Use a large predefined color palette Použiť veľkú paletu s preddefinovanými farbami Copy on double click Kopírovať pri dvojkliku Enable Copy on Double Click Povoliť kópiu na dvojité kliknite Copy URL and close window after uploading was successful Po úspešnom nahratí skopírovať adresu URL a zavrieť okno Automatically unload from memory when it is not needed Automaticky uvoľniť z pamäte, ak nie je potrebný Automatically close daemon (background process) when it is not needed Automaticky ukončiť démona (proces na pozadí), keď nie je potrebný Launch in background at startup Spustiť na pozadí pri štarte Launch Flameshot daemon (background process) when computer is booted Spustiť démona Flameshot (proces na pozadí) pri spustení počítača Ask before quit capture Pred ukončením snímania sa spýtať Show the confirmation prompt before ESC quit Zobraziť dialógové okno s potvrdením pred ukončením pomocou ESC Enable Copy to clipboard on Double Click Povoliť Kopírovanie do schránky pri dvojitom kliknutí Copy URL after uploading was successful Kopírovať adresu URL po úspešnom nahratí After copying the screenshot, save it to a file as well Po skopírovaní snímky ho tiež uložiť do súboru Save Path Cesta pre zápisy Change... Zmeniť... Use fixed path for screenshots to save Pre ukladanie snímok obrazovky používať rovnakú cestu Preferred save file extension: Uprednostňovaná prípona uloženého súboru: Latest Uploads Max Size Maximálna Veľkosť Posledných Uploadov Imgur Application Client ID Imgur Aplikácia Klient ID Undo limit Vrátiť limit Use JPG format for clipboard (PNG default) Pre schránku používať JPG (štandardne PNG) Use lossy JPG format for clipboard (lossless PNG default) Používať stratový formát JPG pre schránku (predvolene bezstratový PNG) Copy file path after save Po uložení skopírovať cestu k súboru Copy the file path to clipboard after the file is saved Skopírovať cestu k súboru do schránky po tom, ako je súbor uložený Anti-aliasing image when zoom the pinned image Vyhladzovať obraz pri zväčšení pripnutého obrázka After zooming the pinned image, should the image get smoothened or stay pixelated Po priblížení pripnutého obrázka sa má obrázok vyhladiť alebo zostať pixelový Upload image without confirmation Nahrávanie obrázku bez potvrdenia Choose a Folder Vyberte priečinok Unable to write to directory. Zápis do adresára nie je možný. Show magnifier Zobraziť lupu Enable a magnifier while selecting the screenshot area Zapnúť lupu počas výberu oblasti na zosnímanie Square shaped magnifier Hranatá lupa Make the magnifier to be square-shaped Lupa bude v tvare štvorca Milliseconds before geometry display hides; 0 means do not hide Počet milisekúnd, kým sa zobrazenie geometrie ukryje; 0 znamená, že sa ukrývať nebude Set geometry display timeout (ms) Nastaviť časové obmedzenie zobrazenie geometrie (ms) Selection Geometry Display Zobrazenie geometrie výberu Display Location Umiestnenie displeja None Žiadne Top Left Vľavo hore Top Right Vpravo hore Bottom Left Vľavo dole Bottom Right Vpravo dole Center Stred Quality range of 0-100; Higher number is better quality and larger file size Kvalita v rozsahu 0-100; vyššie číslo znamená lepšiu kvalitu a väčšiu veľkosť súboru JPEG Quality Kvalita JPEG Reverse arrow Otočiť šípku Draw the arrow head first Najprv nakresliť hrot šípky Insecure Pixelate Nezabezpečené rozštvorčekovanie Draw the pixelation effect in an insecure but more asethetic way. Vykresliť efekt štvorčekov menej bezpečným alebo estetickejším spôsobom. HistoryWidget Latest Uploads Posledné nahratia Screenshots history is empty História snímok obrazovky je prázdna Copy URL Kopírovať URL URL copied to clipboard. URL skopírovaná do schránky. Open in browser Otvoriť v prehliadači Confirm to delete Potvrďte odstránenie Are you sure you want to delete a screenshot from the latest uploads and server? Naozaj chcete odstrániť snímku obrazovky zo zoznamu posledných nahratí a zo servera? ImgS3Uploader Uploading Image Nahrávam obrázok URL copied to clipboard. URL skopírovaná do schránky. Error Chyba ImgUploadDialog Upload Confirmation Potvrdenie o nahratí Do you want to upload this capture? Chcete nahrať toto zachytenie? Upload without confirmation Nahrávanie bez potvrdenia ImgUploader Uploading Image Nahrávam obrázok Unable to open the URL. Nepodarilo sa otvoriť URL. URL copied to clipboard. URL skopírovaná do schránky. Screenshot copied to clipboard. Snímka obrazovky bola skopírovaná do schránky. Copy URL Kopírovať URL Open URL Otvoriť URL Delete image Vymazať obrázok Image to Clipboard. Obrázok do schránky. ImgUploaderBase Upload image Upload image Uploading Image Nahrávam obrázok Copy URL Kopírovať URL Open URL Otvoriť URL Delete image Vymazať obrázok Image to Clipboard. Obrázok do schránky. Save image Uložiť obrázok Unable to open the URL. Nepodarilo sa otvoriť URL. URL copied to clipboard. URL skopírovaná do schránky. Screenshot copied to clipboard. Snímka obrazovky bola skopírovaná do schránky. Unable to save the screenshot to disk. Nepodarilo sa uložiť snímku na disk. Screenshot saved. Snímka bola uložená. ImgUploaderTool Image Uploader Uploader obrázkov Upload the selection Nahrať výber ImgurUploader Upload to Imgur Nahrať na Imgur Uploading Image Nahrávam obrázok Copy URL Kopírovať URL Open URL Otvoriť URL Delete image Vymazať obrázok Image to Clipboard. Obrázok do schránky. Unable to open the URL. Nepodarilo sa otvoriť URL. URL copied to clipboard. URL skopírovaná do schránky. Screenshot copied to clipboard. Snímka obrazovky bola skopírovaná do schránky. ImgurUploaderTool Image Uploader Uploader obrázkov Upload the selection to Imgur Nahrať výber na Imgur InfoWindow About O programe Icon Ikona License Licencia GPLv3+ GPLv3+ Version Verzia Flameshot v Flameshot v OS Info Informácie o OS Copy Info Kopírovať informácie SPACEBAR MEDZERNÍK Right Click Kliknutie pravým tlačidlom Mouse Wheel Kolečko myši Move selection 1px Presunúť výber o 1 px Resize selection 1px Zmeniť rozmery výberu o 1 px Quit capture Ukončiť zachytávanie obrazovky Copy to clipboard Kopírovať do schránky Save selection as a file Zapísať výber do súboru Undo the last modification Vrátiť poslednú úpravu Toggle visibility of sidebar with options of the selected tool Prepnúť viditeľnosť bočnej lišty s možnosťami vybraného nástroja Show color picker Zobraziť dialóg na výber farby Change the tool's thickness Zmena hrúbky nástroja Available shortcuts in the screen capture mode. Dostupné klávesové skratky v režime zachytávania obrazovky. Key Kláves Description Popis <u><b>License</b></u> <u><b>Licencia</b></u> <u><b>Version</b></u> <u><b>Verzia</b></u> <u><b>Shortcuts</b></u> <u><b>Klávesové skratky</b></u> InvertTool Invert Inverzný Set Inverter as the paint tool Nastaviť Obracač ako nástroj na kreslenie LineTool Line Čiara Set the Line as the paint tool Nastaviť Čiaru ako nástroj na úpravy MarkerTool Marker Fixka Set the Marker as the paint tool Nastaviť Fixku ako nástroj na kreslenie MoveTool Move Presun Move the selection area Presunúť oblasť výberu PencilTool Pencil Ceruzka Set the Pencil as the paint tool Nastaviť Ceruzku ako nástroj na kreslenie PinTool Pin Tool Pripínačik Pin image on the desktop Pripnúť obrázok na plochu PinWidget Context menu Context menu Copy to clipboard Kopíruje do schránky Save to file Uložiť súbor Rotate Right Otočiť doprava Rotate Left Otočiť doľava Increase Opacity Zvýšiť nepriehľadnosť Decrease Opacity Znížiť nepriehľadnosť Close Zavrieť PixelateTool Pixelate Rozštvorčekovanie Set Pixelate as the paint tool. Nastaviť Rozštvorčekovanie ako kresliaci nástroj. Set Pixelate as the paint tool Nastaviť Rozštvorčekovanie ako nástroj pre úpravy PrimaryInstanceWidget Primary instance Primárna inštancia <b>Primary instance.</b> Messages received from secondaries: <b>Primárna inštancia.</b> Správy prijaté zo sekundárnych: QHotkey Failed to register %1. Error: %2 Nepodarilo sa zaregistrovať %1. Chyba: %2 Failed to unregister %1. Error: %2 Nepodarilo sa odregistrovať %1. Chyba: %2 QObject Unable to connect via DBus Nie je možné pripojiť sa prostredníctvom DBus Powerful yet simple to use screenshot software. Mocný, no zároveň jednoduchý softvér na zachytávanie obrazovky. See Pozrite Capture the entire desktop. Zachytiť celú plochu. Open the capture launcher. Otvoriť spúšťač zachytávania. Start a manual capture in GUI mode. Spustiť manuálne zachytávanie v režime GUI. Configure Konfigurovať Capture a single screen. Zachytiť jeden monitor. Path where the capture will be saved Cesta, kam bude snímka uložená Capture screenshot of all monitors at the same time. Urobiť naraz snímku obrazovky všetkých monitorov. Capture a screenshot of the specified monitor. Urobiť snímku obrazovky konkrétneho monitora. Existing directory or new file to save to Existujúci adresár alebo nový súbor na uloženie Save the capture to the clipboard Uložiť snímku do schránky Pin the capture to the screen Pripnúť zachytenú snímku k obrazovke Upload screenshot Nahrať snímku obrazovky Delay time in milliseconds Oneskorenie času v milisekundách Repeat screenshot with previously selected region Opakovať snímku obrazovku s predtým vybranou oblasťou Screenshot region to select Oblasť obrazovky na výber Set the filename pattern Nastaviť masku pre pomenovanie súborov Accept capture as soon as a selection is made Akceptovať zachytenie hneď po výbere Enable or disable the trayicon Povoliť alebo zakázať ikonu v lište Enable or disable run at startup Povoliť alebo zakázáť spustenie pri štarte systému Enable or disable the notifications Povoliť alebo zakázať notifikácie Check the configuration for errors Kontrola konfigurácie na chyby Show the help message in the capture mode Ukazovať nápovedu v režime zachytávania Define the main UI color Nastaviť farbu hlavného používateľského rozhrania Define the contrast UI color Nastaviť kontrastnú farbu používateľského rozhrania Print raw PNG capture Zobraziť surovú PNG snímku Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Zobraziť geometriu výberu vo formáte Š D X Y. Neurobí nič pri nastavení raw Define the screen to capture (starting from 0) Definujte obrazovku, ktorú chcete zachytiť (od 0) Invalid delay, it must be a number greater than 0 Neplatné oneskorenie, musí to byť číslo väčšie ako 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Neplatná oblasť, použite 'WxH+X+Y' alebo 'all' alebo 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Nesprávna cesta, musí to byť existujúci adresár alebo nový súbor v existujúcom adresári Define the screen to capture Nastaviť monitor, ktorý bude zachytávaný default: screen containing the cursor predvolené: monitor, na ktorom je kurzor myši Screen number Číslo monitora Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Neplatná farba, tento prepínač podporuje nasledovné formáty: - #RGB (každá zo zložiek R, G a B je samostatným hexadecimálnym číslom) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - anglické mená farieb ako 'blue' alebo 'red' Možno budete musieť napísať pred '#' opačnú lomku, teda '\#FFF' Invalid delay, it must be higher than 0 Neplatné oneskorenie, musí byť vyššie ako 0 Invalid screen number, it must be non negative Neplatné číslo monitora, môže byť len kladné Invalid path, it must be a real path in the system Neplatná cesta, musí sa jednať o skutočnú cestu na systéme Invalid value, it must be defined as 'true' or 'false' Neplatná hodnota, musí byť definovaná ako 'pravda' alebo 'nepravda' Error Chyba Unable to write in Zlyhal zápis do Capture saved to clipboard. Snímka uložená do schránky. Capture saved to clipboard Snímka uložená do schránky Error while saving to clipboard Chyba pri ukladaní do schránky Capture saved as Snímka uložená ako Error trying to save as Chyba pri ukladaní do Save screenshot Uložiť snímku Path copied to clipboard as Incorrect path, must be an existing directory or a new file in an existing directory Saving canceled Ukladanie zrušené Save canceled Ukladanie zrušené Capture is saved and copied to the clipboard as Snímka je uložená a skopírovaná do schránky ako Save Error Chyba pri ukladaní Requested screen exceeds screen count Požadovaná obrazovka presahuje počet obrazov Full screen screenshot pinned to screen Snímka celej obrazovky pripnutá na obrazovku URL copied to clipboard. URL skopírovaná do schránky. Options Voľby Arguments Argumenty arguments argumenty Subcommands Podpríkazy subcommands podpríkazy Usage Použitie options voľby Per default runs Flameshot in the background and adds a tray icon for configuration. Štandardne sa spúšťa Flameshot na pozadí a nastavuje sa pomocou ikony v systémovej lište. Per default runs Flameshot in the background and adds a tray icon for configuration. Štandardne sa Flameshot spúšťa na pozadí a pridáva do lišty ikonu, ktorou je ho možné ovládať. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Ahoj, som tu! Pre vytvorenie snímky kliknite na ikonu v lište a k ďalším možnostiam sa dostanete kliknutím pravým tlačidlom. Toggle side panel Prepnúť zobrazenie postranného panelu Resize selection left 1px Zmeniť rozmery výberu o 1 pixel vľavo Resize selection right 1px Zmeniť rozmery výberu o 1 pixel vpravo Resize selection up 1px Zmeniť rozmery výberu o 1 pixel nahor Resize selection down 1px Zmeniť rozmery výberu o 1 pixel nadol Select entire screen Vybrať celú obrazovku Move selection left 1px Presunúť výber vľavo o 1 pixel Move selection right 1px Presunúť výber vpravo o 1 pixel Move selection up 1px Presunúť výber nahor o 1 pixel Move selection down 1px Presunúť výber nadol o 1 pixel Commit text in text area Potvrdiť pridanie textu Delete current tool Vymazať momentálny nástroj Quit capture Ukončiť zachytávanie Screenshot history História snímok Capture screen Zachytiť obrazovku Show color picker Zobraziť dialóg na výber farby Change the tool's size Zmena veľkosti nástroja Change the tool's thickness Zmeniť hrúbku nástroja RectangleTool Rectangle Obdĺžnik Set the Rectangle as the paint tool Nastaviť Obdĺžnik ako nástroj na kreslenie RedoTool Redo Znova Redo the next modification Zopakovať úpravu SaveTool Save Uložiť Save screenshot to a file Uložiť snímku obrazovky do súboru Save the capture Uložiť snímku obrazovky ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Nie je možné detekovať stolové prostredie (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Univerzálny adaptér Wayland na snímanie obrazovky vyžaduje Grim ako komponent Waylandu na snímanie obrazovky. Ak tento komponent chýba, nainštalujte ho! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Ak nie je nastavenie useGrimAdapter povolené, použije sa protokol dbus. Treba poznamenať, že používanie protokolu dbus pod Waylandom sa neodporúča. Odporúča sa povoliť nastavenie useGrimAdapter v súbore flameshot.ini, aby sa aktivoval všeobecný adaptér na snímanie obrazovky Wayland založený na grime grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments komponent programu Grim na tvorbu snímok je postavený na wlroots, nedá sa použiť v prostredí GNOME ani v podobných prostrediach Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Nepodarilo za zistiť pracovné prostredie (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Tip: skúste nastaviť XDG_CURRENT_DESKTOP prostredie premenné. Unable to capture screen Nepodarilo sa zachytiť obrazovku SecondaryInstanceWidget Secondary instance Sekundárna inštancia <b>Secondary instance.</b> Send message to primary: <b>Sekundárna inštancia.</b> Poslať správu primárnej: Type something here... Sem niečo napíšte… &Send O&doslať Error sending message Chyba pri odosielaní správy The message '%1' could not be sent to the primary. Správu „%1“ nebolo možné odoslať primárnej inštancii. SelectionTool Rectangular Selection Obdĺžnikový výber Set Selection as the paint tool Nastaviť Výber ako nástroj na kreslenie SetShortcutDialog Set Shortcut Nastaviť klávesovú skratku Enter new shortcut to change Pre zmenu zadajte novú klávesovú skratku Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Stlačte Esc pre zrušenie alebo ⌘+Backspace pre vypnutie klávesovej skratky. Press Esc to cancel or Backspace to disable the keyboard shortcut. Ak chcete zrušiť klávesovú skratku stlačte Esc alebo Backspace. Flameshot must be restarted for changes to take effect. Aby sa zmeny prejavili, musí sa Flameshot reštartovať. ShortcutsWidget Hot Keys Klávesové skratky Available shortcuts in the screen capture mode. Dostupné klávesové skratky v režime zachytávania obrazovky. Description Popis Key Kláves Left Double-click dvojklik ľavým Toggle side panel Prepnúť zobrazenie postranného panelu Grab a color from the screen Zachytiť farbu z obrazovky Resize selection left 1px Zmeniť rozmery výberu o 1 pixel vľavo Resize selection right 1px Zmeniť rozmery výberu o 1 pixel vpravo Resize selection up 1px Zmeniť rozmery výberu o 1 pixel nahor Resize selection down 1px Zmeniť rozmery výberu o 1 pixel nadol Symmetrically decrease width by 2px Symetricky znížiť šírku o 2 pixely Symmetrically increase width by 2px Symetricky zvýšiť šírku o 2 pixely Symmetrically increase height by 2px Symetricky zvýšiť výšku o 2 pixely Symmetrically decrease height by 2px Symetricky znížiť výšku o 2 pixely Select entire screen Vybrať celú obrazovku Move selection left 1px Presunúť výber vľavo o 1 pixel Move selection right 1px Presunúť výber vpravo o 1 pixel Move selection up 1px Presunúť výber nahor o 1 pixel Move selection down 1px Presunúť výber nadol o 1 pixel Commit text in text area Potvrdiť pridanie textu Delete selected drawn object Odstrániť vybraný nakreslený objekt Cancel current selection Zrušiť aktuálny výber Delete current tool Vymazať momentálny nástroj Capture screen Zachytiť obrazovku Screenshot history História snímok SidePanelWidget Active thickness: Aktívna hrúbka: Active color: Aktívna farba: Press ESC to cancel Stlačte ESC pre zrušenie Active tool size: Aktívna veľkosť nástroja: Active Color: Active Color: Grab Color Snímať farbu Display grid Zobraziť mriežku SizeDecreaseTool Decrease Tool Size Zmenšiť veľkosť nástroja Decrease the size of the other tools Zmenšiť veľkosť ostatných nástrojov SizeIncreaseTool Increase Tool Size Zväčšiť veľkosť nástroja Increase the size of the other tools Zväčšiť ostatné nástroje SizeIndicatorTool Selection Size Indicator Ukazovateľ veľkosti výberu Show X and Y dimensions of the selection Zobrazenie rozmerov X a Y výberu Show the dimensions of the selection (X Y) Zobraziť rozmery výberu (X Y) StrftimeChooserWidget Century (00-99) Storočie (00-99) Year (00-99) Rok (00-99) Year (2000) Rok (2000) Month Name (jan) Meno mesiaca (jan) Month Name (january) Meno mesiaca (január) Month (01-12) Mesiac (01-12) Week Day (1-7) Deň v týždni (1-7) Week (01-53) Týždeň (01-53) Day Name (mon) Meno dňa (pon) Day Name (monday) Meno dňa (pondelok) Day (01-31) Deň (01-31) Day of Month (1-31) Deň v mesiaci (1-31) Day (001-366) Deň (001-366) Time (%H-%M-%S) Čas (%H-%M-%S) Time (%H-%M) Čas (%H-%M) Hour (00-23) Hodina (00-23) Hour (01-12) Hodina (01-12) Minute (00-59) Minúta (00-59) Second (00-59) Sekunda (00-59) Full Date (%m/%d/%y) Celý dátum (%m/%d/%y) Full Date (%Y-%m-%d) Celý dátum (%Y-%m-%d) Full Date (%d-%m-%Y) Plný dátum (%d-%m-%Y) SystemNotification Flameshot Info Informácie o programe Flameshot TextConfig StrikeOut Preškrtnuté Underline Podčiarknuté Bold Tučné Italic Kurzíva Left Align Zarovnanie doľava Center Align Zarovnanie na stred Right Align Zarovnanie doprava TextTool Text Text Add text to your capture Pridať text do snímky TrayIcon &Take Screenshot &Vytvoriť snímku &Open Launcher &Otvoriť Spúšťač &Configuration &Konfigurácia &About O &programe Check for updates Kontrola aktualizácií New version %1 is available Je dostupná nová verzia: %1 &Quit Ukonči&ť &Latest Uploads &Posledné nahratia &Open Save Path &Otvoriť cestu na ukladanie UIcolorEditor UI Color Editor Editor farieb používateľského rozhrania Change the color moving the selectors and see the changes in the preview buttons. Presunom bežcov nastavte farbu a sledujte tieto zmeny v náhľade. Select a Button to modify it Kliknite na tlačidlo pre jeho úpravu Main Color Hlavná farba Click on this button to set the edition mode of the main color. Pre nastavenie hlavnej farby kliknite na toto tlačidlo. Contrast Color Kontrastná farba Click on this button to set the edition mode of the contrast color. Pre nastavenie kontrastnej farby kliknite na toto tlačidlo. UndoTool Undo Späť Undo the last modification Vrátiť poslednú úpravu UpdateNotificationWidget New Flameshot version %1 is available Je dostupná nová verzia Flameshotu: %1 Ignore Ignorovať Later Neskôr Update Aktualizovať UploadHistory Upload History História nahratí Screenshots history is empty História snímok je prázdna UploadLineItem Form Formulár TextLabel TextovýPopis Copy URL Kopírovať URL Open In Browser Otvoriť v prehliadači Confirm to delete Potvrďte odstránenie Are you sure you want to delete a screenshot from the latest uploads and server? Naozaj chcete odstrániť snímku obrazovky zo zoznamu posledných nahratí a zo servera? UtilityPanel Close Zavrieť <Empty> <Empty> VisualsEditor Opacity of area outside selection: Priehľadnosť oblasti mimo výberu: UI Color Editor Editor farieb používateľského rozhrania Colorpicker Editor Editor výberu farieb Button Selection Výber tlačidiel Select All Vybrať všetky color_widgets::ColorDialog Pick Vyberte si color_widgets::ColorPalette Unnamed Neuvedené color_widgets::ColorPaletteModel Unnamed Neuvedené %1 (%2 colors) %1 (%2 farby) color_widgets::ColorPaletteWidget Open a new palette from file Otvoriť novú paletu zo súboru Create a new palette Vytvorenie novej palety Duplicate the current palette Duplikovať aktuálnu paletu Delete the current palette Odstránenie aktuálnej palety Revert changes to the current palette Vrátenie zmien na aktuálnu paletu Save changes to the current palette Uloženie zmien na aktuálnu paletu Add a color to the palette Pridanie farby do palety Remove the selected color from the palette Odstránenie vybranej farby z palety New Palette Nová paleta Name Name GIMP Palettes (*.gpl) Palety GIMP (*.gpl) Palette Image (%1) Obrázok palety (%1) All Files (*) Všetky súbory (*) Open Palette Otvoriť paletu Failed to load the palette file %1 Nepodarilo sa načítať súbor palety %1 color_widgets::GradientEditor Add Color Add Color Remove Color Odstrániť farbu Edit Color... Upraviť farbu... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 farby) color_widgets::Swatch Clear Color Číra farba %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_sl.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Unable to launch in terminal. Unable to write in ArrowTool Arrow Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second seconds Take new screenshot Area: Capture Launcher TextLabel Capture Mode Delay: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Mouse Select screenshot area Mouse Wheel Change tool size Right Click Show color picker Open side panel Esc Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Precisely select color Hold Left Click Toggle magnifier Space or Right Click Cancel Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Unable to close active modal widgets URL copied to clipboard. FlameshotDaemon New version %1 is available You have the latest version Failed to get information about the latest version. Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Error Unable to read file. Unable to write file. Save File Confirm Reset Are you sure you want to reset the configuration? Show help message Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Show tray icon Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Export Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image Copy URL Open URL Delete image Image to Clipboard. Save image Unable to open the URL. URL copied to clipboard. Screenshot copied to clipboard. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus Powerful yet simple to use screenshot software. See Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Start a manual capture in GUI mode. Configure Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Unable to write in Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Arguments Arguments arguments arguments Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Screenshot history Capture screen Show color picker Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Description Key Left Double-click Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection right 1px Resize selection up 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Move selection left 1px Move selection right 1px Move selection up 1px Move selection down 1px Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Open Launcher &Configuration &About Check for updates New version %1 is available &Quit &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty UploadLineItem Form TextLabel Copy URL Open In Browser Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_sr_SP.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher Покретач Choose an app to open the capture Изаберите програм у ком желите да отворите снимак AppLauncherWidget Open With Отвори помоћу Launch in terminal Покрени у терминалу Keep open after selection Остави отворено након избора Error Грешка Unable to write in Нисам успео да сачувам Unable to launch in terminal. Нисам успео да покренем у терминалу. ArrowTool Arrow Стрелица Set the Arrow as the paint tool Избор цртања стрелице BlurTool Blur Замућење Set Blur as the paint tool Избор цртања замућене области CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Rectangular Region Full Screen (Current Display) Full Screen (Current Display) Full Screen (All Monitors) Full Screen (All Monitors) No Delay No Delay second second seconds seconds Take new screenshot Take new screenshot Area: Area: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: Delay: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Нисам успео да снимим екран Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel Точкић миша Change tool size Change tool size Right Click Десни клик Show color picker Прикажи избор боје Open side panel Open side panel Esc Esc Exit Излаз Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Изаберите област мишем или притисните Esc за излаз. Притисните Enter за снимак целог екрана. Десним кликом миша бирате боју. Можете користити точкић миша за избор дебљине алатки. Притисните размак на тастатури за приказ помоћног панела. Tool Settings Tool Settings CircleCountTool Circle Counter Circle Counter Add an autoincrementing counter bubble Add an autoincrementing counter bubble CircleTool Circle Круг Set the Circle as the paint tool Избор цртања круга ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Update Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error Грешка Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset Reset Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Подешавања Interface Изглед Filename Editor Избор имена датотеке General Опште Shortcuts Shortcuts Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Грешка Unable to close active modal widgets Unable to close active modal widgets &Take Screenshot &Направи снимак екрана &Open Launcher &Open Launcher &Configuration &Подешавања &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. &Information Ин&формације &Quit &Излаз CopyTool Copy Запамти Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard Копира избор у привремену оставу DBusUtils Unable to connect via DBus Нисам успео да се повежем кроз DBus ExitTool Exit Излаз Leave the capture screen Напусти екран за снимање FileNameEditor Edit the name of your captures: Уређивање имена снимака: Edit: Уређивање: Preview: Преглед: Save Сачувај Saves the pattern Сачувај шаблон Restore Restore Reset Ресетуј Restores the saved pattern Поврати сачувани шаблон Clear Очисти Deletes the name Брише име Flameshot Error Грешка Unable to close active modal widgets Unable to close active modal widgets URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. FlameshotDaemon New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Unable to connect via DBus Нисам успео да се повежем кроз DBus GeneneralConf Import Увоз Error Грешка Unable to read file. Нисам успео да прочитам датотеку. Unable to write file. Нисам успео да сачувам датотеку. Save File Сачувај датотеку Confirm Reset Потврда поништавања Are you sure you want to reset the configuration? Да ли сте сигурни да желите да поништите сва прилагођена подешавања? Show help message Приказуј поруку са упутством Show the help message at the beginning in the capture mode. Приказуј поруку са кратким упутством на почетку снимања екрана. Show desktop notifications Користи системска обавештења Show tray icon Иконица на системској полици Show the systemtray icon Приказуј иконицу на системској полици Configuration File Датотека са подешавањима Export Извоз Reset Поништи Launch at startup Покрени на почетку Launch Flameshot Покрени Flameshot GeneralConf Import Увоз Error Грешка Unable to read file. Нисам успео да прочитам датотеку. Unable to write file. Нисам успео да сачувам датотеку. Save File Сачувај датотеку Confirm Reset Потврда поништавања Are you sure you want to reset the configuration? Да ли сте сигурни да желите да поништите сва прилагођена подешавања? Show help message Приказуј поруку са упутством Show the help message at the beginning in the capture mode. Приказуј поруку са кратким упутством на почетку снимања екрана. Show the side panel button Show the side panel button Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Користи системска обавештења Show tray icon Иконица на системској полици Show the systemtray icon Приказуј иконицу на системској полици Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File Датотека са подешавањима Export Извоз Reset Reset Automatic check for updates Automatic check for updates Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Покрени на почетку Launch Flameshot Покрени Flameshot Show welcome message on launch Show welcome message on launch Use large predefined color palette Use large predefined color palette Copy URL after upload Copy URL after upload Copy URL and close window after upload Copy URL and close window after upload Save image after copy Save image after copy Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path Save Path Change... Change... Use fixed path for screenshots to save Use fixed path for screenshots to save Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy file path after save Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder Choose a Folder Unable to write to directory. Unable to write to directory. Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Запамти интернет адресу URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image Објављујем слику URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. Error Грешка ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image Објављујем слику Unable to open the URL. Нисам успео да посетим интернет адресу. URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. Screenshot copied to clipboard. Слика је сачувана у привременој меморији. Copy URL Запамти интернет адресу Open URL Посети интернет адресу Delete image Избриши слику Image to Clipboard. Сачувај у привремену меморију. ImgUploaderBase Upload image Upload image Uploading Image Објављујем слику Copy URL Запамти интернет адресу Open URL Посети интернет адресу Delete image Избриши слику Image to Clipboard. Сачувај у привремену меморију. Save image Save image Unable to open the URL. Нисам успео да посетим интернет адресу. URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. Screenshot copied to clipboard. Слика је сачувана у привременој меморији. Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader Објављивање слике Upload the selection Upload the selection ImgurUploader Upload to Imgur Објави на Imgur Uploading Image Објављујем слику Copy URL Запамти интернет адресу Open URL Посети интернет адресу Delete image Избриши слику Image to Clipboard. Сачувај у привремену меморију. Unable to open the URL. Нисам успео да посетим интернет адресу. URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. Screenshot copied to clipboard. Слика је сачувана у привременој меморији. ImgurUploaderTool Image Uploader Објављивање слике Upload the selection to Imgur Објави избор на Imgur сајту InfoWindow About О програму Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click Десни клик Mouse Wheel Точкић миша Move selection 1px Помери избор за 1px Resize selection 1px Увећај избор за 1px Quit capture Излаз из снимача екрана Copy to clipboard Запамти у привременој меморији Save selection as a file Сачувај избор у датотеку Undo the last modification Поништи последње измене Show color picker Прикажи избор боје Change the tool's thickness Измени дебљину линије алата Available shortcuts in the screen capture mode. Доступне пречице у моду снимка екрана. Key Тастер Description Опис <u><b>License</b></u> <u><b>Лиценца</b></u> <u><b>Version</b></u> <u><b>Верзија</b></u> <u><b>Shortcuts</b></u> <u><b>Пречице</b></u> InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line Линија Set the Line as the paint tool Избор цртања линије MarkerTool Marker Маркер Set the Marker as the paint tool Избор цртања маркером MoveTool Move Премештање Move the selection area Премешта изабрану област PencilTool Pencil Оловка Set the Pencil as the paint tool Избор цртања оловком PinTool Pin Tool Закачка Pin image on the desktop Закачи слику за радну површину PinWidget Context menu Context menu Copy to clipboard Запамти у привременој меморији Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Save Error Грешка приликом упусивања Capture saved as Сачувај снимак као Capture saved to clipboard. Capture saved to clipboard. Capture saved to clipboard Снимак је сачуван у привремену меморију Error while saving to clipboard Error while saving to clipboard Error trying to save as Грешка приликом уписивања као Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus Нисам успео да се повежем кроз DBus Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error Грешка Unable to write in Нисам успео са сачувам Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. Интернет адреса је сачувана у привременој меморији. Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Излаз из снимача екрана Screenshot history Screenshot history Capture screen Capture screen Show color picker Прикажи избор боје Change the tool's size Change the tool's size Change the tool's thickness Измени дебљину линије алата RectangleTool Rectangle Правоугаоник Set the Rectangle as the paint tool Избор цртања обојеног правоугаоника RedoTool Redo Понови Redo the next modification Понови поништену измену SaveTool Save Сачувај Сохранить Save screenshot to a file Save screenshot to a file Save the capture Сачувај снимак ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Нисам успео да снимим екран SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Правоугаони оквир Set Selection as the paint tool Избор цртања правоугаоног оквира SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Доступне пречице у моду снимка екрана. Description Опис Key Тастер Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Активна боја: Press ESC to cancel Притисните ESC за прекид Active tool size: Active tool size: Active Color: Active Color: Grab Color Преузмите боју Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Приказ величине избора Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Приказује величину избора (X Y) StrftimeChooserWidget Century (00-99) Век (00-99) Year (00-99) Година (00-99) Year (2000) Година (2000) Month Name (jan) Име месеца (јан) Month Name (january) Име месеца (јануар) Month (01-12) Месец (01-12) Week Day (1-7) Дани у недељи (1-7) Week (01-53) Недеља (01-53) Day Name (mon) Дан у недељи (пон) Day Name (monday) Дан у недељи (понедељак) Day (01-31) Дан (01-31) Day of Month (1-31) Дан месеца (1-31) Day (001-366) Дан (001-366) Time (%H-%M-%S) Време (%H-%M-%S) Time (%H-%M) Време (%H-%M) Hour (00-23) Сат (00-23) Hour (01-12) Сат (01-12) Minute (00-59) Минута (00-59) Second (00-59) Секунда (00-59) Full Date (%m/%d/%y) Комплетан датум (%m/%d/%y) Full Date (%Y-%m-%d) Комплетан датум (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Информације о Flameshot-у TextConfig StrikeOut Прецртано Underline Подвучено Bold Задебљано Italic Накошено Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Текст Add text to your capture Додаје текст на снимак TrayIcon &Take Screenshot &Направи снимак екрана &Open Launcher &Open Launcher &Configuration &Подешавања &About &About Check for updates Check for updates New version %1 is available New version %1 is available &Quit &Излаз &Latest Uploads &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor Уређивање боје сучеља Change the color moving the selectors and see the changes in the preview buttons. Измените боју померањем изборника и видите резултат у прегледу дугмића. Select a Button to modify it Изаберите дугме да би га изменили Main Color Основна боја Click on this button to set the edition mode of the main color. Кликните на дугме да би прешли у режим уређивања основне боје. Contrast Color Боја контраста Click on this button to set the edition mode of the contrast color. Кликните на дугме да би прешли у режим уређивања боје контраста. UndoTool Undo Поништи Undo the last modification Поништи последњу измену UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty Screenshots history is empty UploadLineItem Form Form TextLabel TextLabel Copy URL Запамти интернет адресу Open In Browser Open In Browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: Провидност подручја ван избора: UI Color Editor Уређивање боје сучеља Colorpicker Editor Colorpicker Editor Button Selection Избор дугмића Select All Изабери све color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_sv_SE.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher Programstartare Choose an app to open the capture Välj ett program för att öppna skärmklippet AppLauncherWidget Open With Öppna med Launch in terminal Öppna i terminal Keep open after selection Håll öppen efter urval Error Fel Unable to write in Kan inte skriva i Unable to launch in terminal. Kunde inte öppna i terminal. ArrowTool Arrow Pil Set the Arrow as the paint tool Välj pil som ritverktyg BlurTool Blur Oskärpa Set Blur as the paint tool Välj Oskärpa som ritverktyg CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Rectangular Region Full Screen (Current Display) Full Screen (Current Display) Full Screen (All Monitors) Full Screen (All Monitors) No Delay No Delay second second seconds seconds Take new screenshot Take new screenshot Area: Area: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: Delay: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Kunde inte avbilda skärmen Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel Mushjul Change tool size Change tool size Right Click Högerklick Show color picker Show color picker Open side panel Open side panel Esc Esc Exit Avsluta Quit Capture Avsluta inspelning Are you sure you want to quit capture? Vill du verkligen sluta spela in? Do not show this again Visa inte detta igen Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Välj ett område med muspekaren eller tryck ESC för att avbryta. Tryck Enter för att fånga skärmklipp. Högerklicka för att visa färgväljaren. Använd Scrollhjulet för att ändra tjockleken på ditt verktyg. Tryck Space för att öppna sidopanelen. Tool Settings Tool Settings CircleCountTool Circle Counter Circle Counter Add an autoincrementing counter bubble Add an autoincrementing counter bubble CircleTool Circle Cirkel Set the Circle as the paint tool Välj cirkel som ritverktyg ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Uppdatera Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error Fel Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset Återställ Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration Konfiguration Interface Gränssnitt Filename Editor Redigera filnamn General Allmänt Shortcuts Shortcuts Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Fel Unable to close active modal widgets Unable to close active modal widgets &Take Screenshot &Ta skärmdump &Open Launcher &Open Launcher &Configuration &Konfiguration &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads &Information &Information &Quit &Avsluta CopyTool Copy Kopiera Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard Kopiera urval till klippbordet DBusUtils Unable to connect via DBus Kunde inte ansluta via DBus ExitTool Exit Stäng Leave the capture screen Lämna skärmklippsvy FileNameEditor Edit the name of your captures: Redigera namnet på dina skärmklipp: Edit: Redigera: Preview: Förhandsgranska: Save Spara Saves the pattern Sparar mönstret Restore Restore Reset Återställ Restores the saved pattern Återställer det sparade mönstret Clear Rensa Deletes the name Raderar namnet Flameshot Error Fel Unable to close active modal widgets Kan stänga aktiva modalwidgetar URL copied to clipboard. URL copied to clipboard. FlameshotDaemon New version %1 is available Ny version %1 är tillgänglig You have the latest version Du har den senaste versionen Failed to get information about the latest version. Kunde inte hämta information om den senaste versionen. Unable to connect via DBus Kunde inte ansluta via DBus GeneneralConf Import Importera Error Fel Unable to read file. Kunde inte läsa filen. Unable to write file. Kunde inte skriva till filen. Save File Spara fil Confirm Reset Bekräfta återställning Are you sure you want to reset the configuration? Är du säker på att du vill återställa konfigurationen? Show help message Visa hjälpmeddelande Show the help message at the beginning in the capture mode. Visa hjälpmeddelande vid början av skärmklippsläge. Show desktop notifications Visa skrivbordsnotifieringar Show tray icon Visa ikon i systemfältet Show the systemtray icon Visa ikon i systemfältet Configuration File Konfigurationsfil Export Exportera Reset Återställ Launch at startup Starta vid uppstart Launch Flameshot Starta Flameshot GeneralConf Import Importera Error Fel Unable to read file. Kunde inte läsa filen. Unable to write file. Kunde inte skriva till fil. Save File Spara fil Confirm Reset Bekräfta återställning Are you sure you want to reset the configuration? Är du säker på att du vill återställa konfigurationen? Show help message Visa hjälpmeddelande Show the help message at the beginning in the capture mode. Visa hjälpmeddelandet i början i fildelningsläget. Show the side panel button Show the side panel button Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Visa skrivbordsnotifieringar Show tray icon Visa ikon i systemfältet Show the systemtray icon Visa ikon i systemfältet Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File Konfigurationsfil Export Exportera Reset Återställ Automatic check for updates Automatic check for updates Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Starta vid uppstart Launch Flameshot Starta Flameshot Show welcome message on launch Show welcome message on launch Use large predefined color palette Use large predefined color palette Copy URL after upload Copy URL after upload Copy URL and close window after upload Copy URL and close window after upload Save image after copy Save image after copy Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Använd senaste region för GUI-läge Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path Save Path Change... Change... Use fixed path for screenshots to save Use fixed path for screenshots to save Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy file path after save Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder Choose a Folder Unable to write to directory. Unable to write to directory. Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Kopiera URL URL copied to clipboard. URL kopierad till urklipp. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image Laddar upp bild URL copied to clipboard. URL kopierad till klippbord. Error Fel ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Uploading Image Laddar upp bild Unable to open the URL. Kunde inte öppna URL. URL copied to clipboard. URL kopierad till klippbord. Screenshot copied to clipboard. Skärmklipp kopierat till klippbord. Copy URL Kopiera URL Open URL Öppna URL Delete image Radera bild Image to Clipboard. Bild till klippbord. ImgUploaderBase Upload image Upload image Uploading Image Laddar upp bild Copy URL Kopiera URL Open URL Öppna URL Delete image Radera bild Image to Clipboard. Bild till klippbord. Save image Save image Unable to open the URL. Kunde inte öppna URL. URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. Skärmklipp kopierat till klippbord. Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader Bilduppladdare Upload the selection Upload the selection ImgurUploader Upload to Imgur Ladda upp till Imgur Uploading Image Laddar upp bild Copy URL Kopiera URL Open URL Öppna URL Delete image Radera bild Image to Clipboard. Bild till klippbord. Unable to open the URL. Kunde inte öppna URL. URL copied to clipboard. URL kopierad till klippbord. Screenshot copied to clipboard. Skärmklipp kopierat till klippbord. ImgurUploaderTool Image Uploader Bilduppladdare Upload the selection to Imgur Ladda upp skärmklipp till Imgur InfoWindow About Om Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click Högerklick Mouse Wheel Scrollhjul Move selection 1px Flytta urval 1px Resize selection 1px Ändra storlek urval 1px Quit capture Stäng skärmavbildning Copy to clipboard Kopiera till klippbord Save selection as a file Spara urval som fil Undo the last modification Ångra senaste ändringen Toggle visibility of sidebar with options of the selected tool Ändra synlighet för sidomeny med alternativ för det valda verktyget Show color picker Visa färgväljare Change the tool's thickness Ändra verktygets tjocklek Available shortcuts in the screen capture mode. Tillgängliga kortkommandon i skärmklippsläge. Key Tangent Description Beskrivning <u><b>License</b></u> <u><b>Licens</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Genvägar</b></u> InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line Linje Set the Line as the paint tool Välj linje som ritverktyg MarkerTool Marker Överstrykningspenna Set the Marker as the paint tool Välj Överstrykningspenna som ritverktyg MoveTool Move Flytta Move the selection area Flytta urvalsområde PencilTool Pencil Penna Set the Pencil as the paint tool Välj Penna som ritverktyg PinTool Pin Tool Fäst Pin image on the desktop Fäst bilden på skrivbordet PinWidget Context menu Context menu Copy to clipboard Kopiera till klippbord Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Close PixelateTool Pixelate Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Save Error Spara fel Capture saved as Urval sparad som Capture saved to clipboard. Capture saved to clipboard. Capture saved to clipboard Urval sparat till klippbord Error while saving to clipboard Error while saving to clipboard Error trying to save as Fel vid spara som Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus Kunde inte ansluta via DBus Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Open the capture launcher. Start a manual capture in GUI mode. Start a manual capture in GUI mode. Configure Configure Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error Fel Unable to write in Kunde inte skriva i Options Options Arguments Arguments arguments arguments Subcommands subcommands Usage Usage options options Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. URL kopierad till urklipp. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Sluta fånga Screenshot history Screenshot history Capture screen Capture screen Show color picker Visa färgväljaren Change the tool's size Change the tool's size Change the tool's thickness Ändra verktygets tjocklek RectangleTool Rectangle Rektangel Set the Rectangle as the paint tool Välj Rektangel som ritverktyg RedoTool Redo Upprepa Redo the next modification Upprepa nästa ändring SaveTool Save Spara Save screenshot to a file Save screenshot to a file Save the capture Spara skärmklippet ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Kunde inte avbilda skärmen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Rektangulärt urval Set Selection as the paint tool Välj Urval som ritverktyg SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. Tillgängliga genvägar i skärmklippningsläget. Description Beskrivning Key Tangent Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: Aktiv tjocklek: Active color: Aktiv färg: Press ESC to cancel Tryck ESC för att avbryta Active tool size: Active tool size: Active Color: Active Color: Grab Color Hämta färg Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Storleksindikator urval Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Visa dimensionerna av urval (X Y) StrftimeChooserWidget Century (00-99) Århundrade (00-99) Year (00-99) År (00-99) Year (2000) År (2000) Month Name (jan) Månad namn (jan) Month Name (january) Månad namn (januari) Month (01-12) Månad (01-12) Week Day (1-7) Veckodag (1-7) Week (01-53) Vecka (1-53) Day Name (mon) Dag namn (mån) Day Name (monday) Dag namn (måndag) Day (01-31) Dag (01-31) Day of Month (1-31) Dag i månad (1-31) Day (001-366) Dag (001-366) Time (%H-%M-%S) Tid (%H-%M-%S) Time (%H-%M) Tid (%H-%M) Hour (00-23) Timme (00-23) Hour (01-12) Timme (01-12) Minute (00-59) Minut (00-59) Second (00-59) Sekund (00-59) Full Date (%m/%d/%y) Fullständingt datum (%m/%d/%y) Full Date (%Y-%m-%d) Fullständigt datum (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot information TextConfig StrikeOut Överstruken Underline Understruken Bold Fet Italic Kursiv Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text Text Add text to your capture Lägg till text på ditt skärmklipp TrayIcon &Take Screenshot &Ta skärmdump &Open Launcher &Open Launcher &Configuration &Konfiguration &About &About Check for updates Check for updates New version %1 is available New version %1 is available &Quit &Avsluta &Latest Uploads &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor UI färgeditor Change the color moving the selectors and see the changes in the preview buttons. Ändra färgen genom att röra reglagen och se ändringarna på förhandsgranskningsknapparna. Select a Button to modify it Välj en knapp för att redigera den Main Color Huvudfärg Click on this button to set the edition mode of the main color. Klicka här för att redigera huvudfärg. Contrast Color Kontrastfärg Click on this button to set the edition mode of the contrast color. Klicka här för att redigera kontrastfärg. UndoTool Undo Ångra Undo the last modification Ångra senaste ändringen UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty Screenshots history is empty UploadLineItem Form Form TextLabel TextLabel Copy URL Kopiera URL Open In Browser Open In Browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close Close <Empty> <Empty> VisualsEditor Opacity of area outside selection: Opacitet för område utanför urval: UI Color Editor UI färgeditor Colorpicker Editor Colorpicker Editor Button Selection Knappval Select All Välj alla color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_sw.ts ================================================ AbstractWidgetList Add New Ongeza Mpya Move Up Songa juu Move Down Songa chini Remove Ondoa AcceptTool Accept Kubali Accept the capture Kubali picha ya skrini AppLauncher App Launcher Uzinduzi wa Programmu Choose an app to open the capture Chagua programu ya kufungua picha ya skrini AppLauncherWidget Open With Fungua na Launch in terminal Zindua kwa terminal Keep open after selection Wacha wazi baada ya uteuzi Error Hitilafu Unable to launch in terminal. Unable to write in ArrowTool Arrow Mshale Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Sehemu Mstatili Full Screen (Current Display) Full Screen (All Monitors) No Delay Hakuna Kuchelewa second sekunde seconds sekunde Take new screenshot Chukua picha mpya ya skrini Area: Sehemu: Capture Launcher TextLabel NakalaLebo Capture Mode Hali ya Kunasa Delay: Chelewesha: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Kunasa skrini haiwezekani Mouse Kipanya Select screenshot area Chagua sehemu ya picha ya skrini Mouse Wheel Gurudumu la kipanya Change tool size Badili ukubwa wa chombo Right Click Bonyeza Kulia Show color picker Onyesha kichagua rangi Open side panel Fungua paneli ya upande Esc Esc Exit Toka Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Enter or Left Click Precisely select color Hold Left Click Hold Left Click Toggle magnifier Space or Right Click Space or Right Click Cancel Esc Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Ondoa Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Toka Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius URL copied to clipboard. L'URL s'ha copiat al porta-retalls. FlameshotDaemon New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Unable to connect via DBus No s'ha pogut connectar mitjançant DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importar Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Fitxer de Configuració Export Exportar Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Save image Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Puja la imatge Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Copia al porta-retalls Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus No s'ha pogut connectar mitjançant DBus Powerful yet simple to use screenshot software. See Open the capture launcher. Start a manual capture in GUI mode. Configure Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Unable to write in Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ix de la captura Screenshot history Capture screen Show color picker Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen Kunasa skrini haiwezekani SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. Description Descripció Key Tecla Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Capture screen Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Captura &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles New version %1 is available La nova versió %1 ja és disponible &Quit &Surt &Latest Uploads &Últimes càrregues &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification Desfés l'última modificació UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty L'historial de captures de pantalla és buit UploadLineItem Form TextLabel NakalaLebo Copy URL Copia l'URL Open In Browser Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Editor de color de la interfície Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_ta.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Error Unable to launch in terminal. Unable to write in ArrowTool Arrow Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second seconds Take new screenshot Area: Capture Launcher TextLabel Capture Mode Delay: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Mouse Select screenshot area Mouse Wheel Roda del ratolí Change tool size Right Click Clic dret Show color picker Mostra el selector de color Open side panel Esc Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Enter or Left Click Precisely select color Hold Left Click Hold Left Click Toggle magnifier Space or Right Click Space or Right Click Cancel Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius URL copied to clipboard. L'URL s'ha copiat al porta-retalls. FlameshotDaemon New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Unable to connect via DBus No s'ha pogut connectar mitjançant DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Fitxer de Configuració Export Exportar Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Save image Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Puja la imatge Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Copia al porta-retalls Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus No s'ha pogut connectar mitjançant DBus Powerful yet simple to use screenshot software. See Open the capture launcher. Start a manual capture in GUI mode. Configure Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Error Unable to write in Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Ix de la captura Screenshot history Capture screen Show color picker Mostra el selector de color Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. Description Descripció Key Tecla Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Capture screen Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Captura &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles New version %1 is available La nova versió %1 ja és disponible &Quit &Surt &Latest Uploads &Últimes càrregues &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification Desfés l'última modificació UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty L'historial de captures de pantalla és buit UploadLineItem Form TextLabel Copy URL Copia l'URL Open In Browser Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Editor de color de la interfície Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_th.ts ================================================ AbstractWidgetList Add New เพิ่มใหม่ Move Up ย้ายขึ้น Move Down ย้ายลง Remove ลบ AcceptTool Accept ยอมรับ Accept the capture ยอมรับการจับภาพ AppLauncher App Launcher ตัวเปิดแอป Choose an app to open the capture เลือกแอปเพื่อเปิดการจับภาพ AppLauncherWidget Open With เปิดด้วย Launch in terminal เปิดในเทอร์มินัล Keep open after selection เปิดต่อไปหลังจากเลือกแล้ว Error ผิดพลาด Unable to launch in terminal. ไม่สามารถเปิดในเทอร์มินัลได้ Unable to write in ไม่สามารถเขียนได้ ArrowTool Arrow ลูกศร Set the Arrow as the paint tool ตั้งค่าลูกศรเป็นเครื่องมือระบายสี BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region บริเวณสี่เหลี่ยมผืนผ้า Full Screen (Current Display) เต็มจอ (จอแสดงผลปัจจุบัน) Full Screen (All Monitors) เต็มจอ (ทุกจอ) No Delay หน่วงเวลา second วินาที seconds วินาที Take new screenshot ถ่ายภาพหน้าจอใหม่ Area: พื้นที่: Capture Launcher เรียกใช้ตัวจับภาพ TextLabel ป้ายข้อความ Capture Mode โหมดจับภาพ Delay: หน่วงเวลา: WxH+x+y กว้าง×สูง×ลึก×ยาว CaptureWidget Unable to capture screen Impossible capturar la pantalla ไม่สามารถจับภาพหน้าจอได้ Mouse เม้าส์ Select screenshot area เลือกพื้นที่จับภาพหน้าจอ Mouse Wheel ล้อเลื่อนของเมาส์ Change tool size เปลี่ยนขนาดเครื่องมือ Right Click คลิกขวา Show color picker แสดงตัวเลือกสี Open side panel เปิดแผงด้านข้าง Esc Esc Exit ออก Quit Capture ออกจากการจับภาพ Are you sure you want to quit capture? คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการบันทึกภาพ? Do not show this again ไม่ต้องแสดงอีก Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot เสียโฟกัส แป้นพิมพ์ลัดจะไม่ทำงานจนกว่าคุณจะคลิกที่ใดที่หนึ่ง Configuration error resolved. Launch `flameshot gui` again to apply it. ผิดพลาดในการกำหนดค่าที่แก้ไขแล้ว เปิด `flameshot gui` อีกครั้งเพื่อใช้งาน Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings ตั้งค่าเครื่องมือ CircleCountTool Circle Counter วงกลม Add an autoincrementing counter bubble เพิ่มตัวนับฟองแบบเพิ่มอัตโนมัติ CircleTool Circle วงกลม Set the Circle as the paint tool ตั้งวงกลมเป็นเครื่องมือระบายสี ColorDialog Select Color เลือกสี Saturation ความอิ่มตัว Hue สีสัน Hex Hex Blue สีฟ้า Value ค่า Green สีเขียว Alpha อัลฟ่า Red สีแดง ColorGrabWidget Accept color ยอมรับสี Enter or Left Click เข้าหรือคลิกซ้าย Precisely select color เลือกสีได้อย่างแม่นยำ Hold Left Click คลิกซ้ายค้างไว้ Toggle magnifier สลับการขยาย Space or Right Click วรรคหรือคลิกขวา Cancel ยกเลิก Esc Esc ColorPickerEditor Edit Preset: แก้ไขตั้งค่าล่วงหน้า: Enter color to update preset ป้อนสีเพื่ออัปเดตค่าไว้ล่วงหน้า Update อัปเดต Press button to update the selected preset กดปุ่มเพื่ออัพเดตค่าที่เลือกไว้ล่วงหน้า Delete ลบ Press button to delete the selected preset กดปุ่มเพื่อเลือกลบค่าที่ตั้งไว้ล่วงหน้า Add Preset: เพิ่มค่าที่ตั้งไว้ล่วงหน้า: Enter color manually or select it using the color-wheel ป้อนสีด้วยตนเองหรือเลือกโดยใช้วงล้อสี Add เพิ่ม Press button to add preset กดปุ่มเพื่อเพิ่มค่าที่ตั้งไว้ล่วงหน้า Error ผิดพลาด Unable to add preset. Maximum limit reached. ไม่สามารถเพิ่มค่าที่ตั้งล่วงหน้าได้ เนื่องจากถึงขีดจำกัดสูงสุดแล้ว Unable to remove preset. Minimum limit reached. ไม่สามารถลบค่าที่ตั้งล่วงหน้าได้ ถึงขีดจำกัดขั้นต่ำแล้ว ConfigErrorDetails Configuration errors การกำหนดค่าผิดพลาด ConfigHandler Unrecognized setting: '%1' ตั้งค่าที่ไม่รู้จัก: '%1' Unrecognized shortcut name: '%1'. ชื่อทางลัดที่ไม่รู้จัก: '%1' Shortcut conflict: '%1' and '%2' have the same shortcut: %3 ทางลัด: '%1' และ '%2' มีทางลัดเดียวกัน: %3 Bad value in '%1'. Expected: %2 ค่าไม่ถูกต้องใน '%1' คาดว่า: %2 You have successfully resolved the configuration error. คุณได้แก้ไขข้อผิดพลาดในการกำหนดค่าสำเร็จแล้ว The configuration contains an error. Open configuration to resolve. กำหนดค่ามีข้อผิดพลาด เปิดกำหนดค่าเพื่อแก้ไข Bad config key '%1' in ConfigHandler. Please report this as a bug. คีย์การกำหนดค่า '%1' ใน ConfigHandler ไม่ถูกต้อง โปรดรายงานข้อผิดพลาด ConfigResolver Resolve configuration errors แก้ไขข้อผิดพลาดในการกำหนดค่า <b>You must resolve all errors before continuing:</b> <b>คุณต้องแก้ไขข้อผิดพลาดทั้งหมดก่อนดำเนินการต่อ:</b> Reset รีเซ็ต Reset to the default value. รีเซ็ตเป็นค่าเริ่มต้น Remove ลบ Remove this setting. ลบการตั้งค่านี้ Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. แป้นลัดบางปุ่มอาจมีปัญหาขัดแย้งกัน การดำเนินการนี้จะไม่ป้องกันไม่ให้ Flameshot เริ่มทำงาน แก้ไขปัญหาในไฟล์กำหนดค่า Resolve all แก้ไขทั้งหมด Resolve all listed errors. แก้ไขข้อผิดพลาดทั้งหมดที่ระบุไว้ Details รายละเอียด ConfigWindow Configuration การกำหนดค่า Interface อินเทอร์เฟซ Filename Editor แก้ไขชื่อไฟล์ General ทั่วไป Shortcuts ทางลัด Resolve แก้ปัญหา <b>Configuration file has errors. Resolve them before continuing.</b> <b>ไฟล์การกำหนดค่ามีข้อผิดพลาด โปรดแก้ไขก่อนดำเนินการต่อ</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy คัดลอก Copy selection to clipboard คัดลอกที่เลือกไปยังคลิปบอร์ด Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit ออก Leave the capture screen ออกจากหน้าจอจับภาพ FileNameEditor Edit the name of your captures: แก้ไขชื่อการจับภาพของคุณ: Edit: แก้ไข: Preview: ตัวอย่าง: Save บันทึก Saves the pattern บันทึกรูปแบบ Restore คืนค่า Reset Reinicialitza Restores the saved pattern คืนค่ารูปแบบที่บันทึกไว้ Clear ล้าง Deletes the name ลบชื่อ Flameshot Error ผิดพลาด Unable to close active modal widgets ไม่สามารถปิดวิดเจ็ตโมดอลที่ใช้งานได้ URL copied to clipboard. คัดลอก URL ไปยังคลิปบอร์ด FlameshotDaemon New version %1 is available เวอร์ชันใหม่ %1 พร้อมให้บริการแล้ว You have the latest version คุณมีเวอร์ชั่นล่าสุด Failed to get information about the latest version. ไม่สามารถรับข้อมูลเกี่ยวกับเวอร์ชั่นล่าสุดได้ Unable to connect via DBus ไม่สามารถเชื่อมต่อผ่าน DBus ได้ GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import นำเข้า Error ผิดพลาด Unable to read file. ไม่สามารถอ่านไฟล์ได้ Unable to write file. ไม่สามารถเขียนไฟล์ได้ Save File บันทึกไฟล์ Confirm Reset ยืนยันการรีเซ็ต Are you sure you want to reset the configuration? คุณแน่ใจว่าต้องการรีเซ็ตการกำหนดค่าหรือไม่? Show help message แสดงข้อความช่วยเหลือ Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button แสดงแผงปุ่มด้านข้าง Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications แสดงแจ้งเตือนบนเดสก์ท็อป Show tray icon แสดงถาดไอคอน Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads จำเป็นต้องมีการยืนยันลบภาพหน้าจอจากการอัพโหลดล่าสุด Configuration File ไฟล์การกำหนดค่า Export ส่งออก Reset รีเซ็ต Automatic check for updates ตรวจสอบการอัปเดตอัตโนมัติ Allow multiple flameshot GUI instances simultaneously อนุญาตให้มีอินสแตนซ์ GUI ของ Flameshot หลายรายการพร้อมกัน This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed ปิด Daemon โดยอัตโนมัติเมื่อไม่จำเป็น Launch at startup เปิดเมื่อเริ่มต้น Launch Flameshot Inicia el Flameshot Show welcome message on launch แสดงข้อความต้อนรับเมื่อเปิดโปรแกรม Use large predefined color palette ใช้จานสีที่กำหนดไว้ล่วงหน้าขนาดใหญ่ Copy URL after upload คัดลอก URL หลังจากอัพโหลด Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy บันทึกภาพหลังการคัดลอก Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode แสดงข้อความช่วยเหลือในตอนเริ่มโปรแกรมในโหมดจับภาพ Use last region for GUI mode ใช้ภูมิภาคสุดท้ายสำหรับโหมด GUI Use the last region as the default selection for the next screenshot in GUI mode ใช้ภูมิภาคสุดท้ายเป็นตัวเลือกเริ่มต้นสำหรับภาพหน้าจอถัดไปในโหมด GUI Show the side panel toggle button in the capture mode แสดงปุ่มสลับแผงด้านข้างในโหมดถ่ายภาพ Enable desktop notifications เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป Show abort notifications แสดงการแจ้งเตือนการยกเลิก Enable abort notifications เปิดใช้งานการแจ้งเตือนยกเลิก Show icon in the system tray แสดงไอคอนในถาดระบบ Use grim to capture screenshots ใช้ Grim เพื่อจับภาพหน้าจอ Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim เป็นยูทิลิตี้สำหรับ Wayland เท่านั้น ที่ใช้ในการจับภาพหน้าจอโดยใช้โปรโตคอล screencopy โดยทั่วไปจะเปิดใช้งานเฉพาะบนตัวจัดการหน้าต่าง Wayland ขั้นต่ำ เช่น Sway, Hyprland เป็นต้น Ask for confirmation to delete screenshot from the latest uploads ขอคำยืนยันการลบภาพหน้าจอจากการอัพโหลดล่าสุด Check for updates automatically ตรวจสอบการอัปเดตโดยอัตโนมัติ This allows you to take screenshots of Flameshot itself for example สิ่งนี้ทำให้คุณสามารถจับภาพหน้าจอของ Flameshot ได้ ตัวอย่างเช่น Launch Flameshot daemon when computer is booted เปิดใช้งาน Daemon Flameshot เมื่อบูตคอมพิวเตอร์แล้ว Show the welcome message box in the middle of the screen while taking a screenshot แสดงกล่องข้อความต้อนรับตรงกลางหน้าจอขณะทำการจับภาพหน้าจอ Use a large predefined color palette ใช้สีที่กำหนดไว้ล่วงหน้าขนาดใหญ่ Copy on double click คัดลอกเมื่อดับเบิลคลิก Enable Copy on Double Click เปิดใช้งานการคัดลอกเมื่อดับเบิลคลิก Copy URL and close window after uploading was successful คัดลอก URL และปิดหน้าต่างหลังจากการอัพโหลดสำเร็จ Automatically unload from memory when it is not needed ลบออกจากหน่วยความจำโดยอัตโนมัติเมื่อไม่จำเป็นต้องใช้งาน Automatically close daemon (background process) when it is not needed ปิดโปรแกรมพื้นหลัง (daemon) โดยอัตโนมัติเมื่อไม่จำเป็นต้องใช้งาน Launch in background at startup เปิดใช้งานในพื้นหลังเมื่อเริ่มต้นระบบ Launch Flameshot daemon (background process) when computer is booted เรียกใช้โปรแกรม Flameshot daemon (กระบวนการทำงานเบื้องหลัง) เมื่อคอมพิวเตอร์เปิดเครื่อง Ask before quit capture ถามก่อนออกจากโหมดบันทึกภาพ Show the confirmation prompt before ESC quit แสดงข้อความยืนยันก่อนกด ESC เพื่อออก Enable Copy to clipboard on Double Click เปิดใช้งานการคัดลอกไปยังคลิปบอร์ดเมื่อดับเบิ้ลคลิก Copy URL after uploading was successful คัดลอก URL หลังจากอัปโหลดสำเร็จแล้ว After copying the screenshot, save it to a file as well หลังจากคัดลอกภาพหน้าจอแล้ว ให้บันทึกลงในไฟล์ด้วย Save Path เส้นทางบันทึก Change... เปลี่ยน... Use fixed path for screenshots to save ใช้เส้นทางคงที่สำหรับบันทึกภาพหน้าจอ Preferred save file extension: นามสกุลไฟล์ที่ต้องการบันทึก: Latest Uploads Max Size ขนาดสูงสุดของการอัพโหลดล่าสุด Imgur Application Client ID รหัสไคลเอนต์แอปพลิเคชัน Imgur Undo limit ยกเลิกการจำกัด Use JPG format for clipboard (PNG default) ใช้รูปแบบ JPG สำหรับคลิปบอร์ด (ค่าเริ่มต้นคือ PNG) Use lossy JPG format for clipboard (lossless PNG default) ใช้ไฟล์ JPG ที่มีการบีบอัดข้อมูลบางส่วนสำหรับการคัดลอกลงคลิปบอร์ด (ค่าเริ่มต้นคือไฟล์ PNG ที่ไม่มีการบีบอัดข้อมูล) Copy file path after save คัดลอกเส้นทางไฟล์หลังจากบันทึก Copy the file path to clipboard after the file is saved คัดลอกเส้นทางไฟล์ไปยังคลิปบอร์ดหลังจากบันทึกไฟล์แล้ว Anti-aliasing image when zoom the pinned image ลดรอยหยักของภาพเมื่อซูมภาพที่ปักหมุดไว้ After zooming the pinned image, should the image get smoothened or stay pixelated หลังจากซูมภาพที่ปักหมุดแล้ว ภาพควรจะเรียบเนียนขึ้นหรือยังคงเป็นแบบพิกเซล Upload image without confirmation อัพโหลดรูปภาพโดยไม่ต้องยืนยัน Choose a Folder เลือกโฟลเดอร์ Unable to write to directory. ไม่สามารถเขียนลงไดเร็กทอรีได้ Show magnifier แสดงแว่นขยาย Enable a magnifier while selecting the screenshot area เปิดใช้งานแว่นขยายขณะเลือกพื้นที่ถ่ายภาพหน้าจอ Square shaped magnifier แว่นขยายทรงสี่เหลี่ยม Make the magnifier to be square-shaped ทำแว่นขยายให้เป็นรูปสี่เหลี่ยมจัตุรัส Milliseconds before geometry display hides; 0 means do not hide มิลลิวินาทีก่อนที่การแสดงผลรูปทรงเรขาคณิตจะซ่อนลง; 0 หมายถึงไม่ซ่อน Set geometry display timeout (ms) ตั้งค่าระยะเวลาหมดเวลาการแสดงผลรูปทรงเรขาคณิต (มิลลิวินาที) Selection Geometry Display เลือกการแสดงผลเรขาคณิต Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation ยืนยันการอัพโหลด Do you want to upload this capture? คุณต้องการอัพโหลดการถ่ายภาพนี้หรือไม่? Upload without confirmation อัพโหลดโดยไม่ต้องยืนยัน ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image อัพโหลดรูปภาพ Uploading Image กำลังอัพโหลดรูปภาพ Copy URL คัดลอก URL Open URL เปิด URL Delete image ลบรูปภาพ Image to Clipboard. รูปภาพไปยังคลิปบอร์ด Save image บันทึกภาพ Unable to open the URL. ไม่สามารถเปิด URL ได้ URL copied to clipboard. คัดลอก URL ไปยังคลิปบอร์ดแล้ว Screenshot copied to clipboard. คัดลอกภาพหน้าจอไปยังคลิปบอร์ดแล้ว Unable to save the screenshot to disk. ไม่สามารถบันทึกภาพหน้าจอลงดิสก์ได้ Screenshot saved. บันทึกภาพหน้าจอแล้ว ImgUploaderTool Image Uploader อัพโหลดรูปภาพ Upload the selection อัพโหลดที่เลือก ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. ไม่สามารถเปิด URL ได้ URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About เกี่ยวกับ Icon ไอคอน License ใบอนุญาต GPLv3+ GPLv3+ Version เวอร์ชัน Flameshot v Flameshot v OS Info ข้อมูลระบบปฏิบัติการ Copy Info คัดลอกข้อมูล Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert พลิกกลับ Set Inverter as the paint tool ตั้งค่าอินเวอร์เตอร์เป็นเครื่องมือทาสี LineTool Line เส้น Set the Line as the paint tool ตั้งค่าเส้นเป็นเครื่องมือระบายสี MarkerTool Marker เครื่องหมาย Set the Marker as the paint tool ตั้งค่ามาร์กเกอร์เป็นเครื่องมือทาสี MoveTool Move ย้าย Move the selection area ย้ายพื้นที่ที่เลือก PencilTool Pencil ดินสอ Set the Pencil as the paint tool ตั้งดินสอเป็นเครื่องมือระบายสี PinTool Pin Tool ปักหมุด Pin image on the desktop ปักหมุดภาพบนเดสก์ท็อป PinWidget Context menu เมนูบริบท Copy to clipboard คัดลอกไปยังคลิปบอร์ด Save to file บันทึกลงในไฟล์ Rotate Right Rotate Left Increase Opacity Decrease Opacity Close ปิด PixelateTool Pixelate พิกเซล Set Pixelate as the paint tool. Set Pixelate as the paint tool ตั้งค่า Pixelate เป็นเครื่องมือระบายสี PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 ไม่สามารถลงทะเบียน %1 ได้ ผิดพลาด: %2 Failed to unregister %1. Error: %2 ไม่สามารถยกเลิกการลงทะเบียน %1 ได้ ผิดพลาด: %2 QObject Capture saved to clipboard. บันทึกการจับภาพลงในคลิปบอร์ดแล้ว Error while saving to clipboard เกิดข้อผิดพลาดขณะบันทึกลงในคลิปบอร์ด Save screenshot บันทึกภาพหน้าจอ Path copied to clipboard as เส้นทางที่คัดลอกไปยังคลิปบอร์ดเป็น Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error ผิดพลาดในการบันทึก Capture saved as จับภาพบันทึกไว้เป็น Error trying to save as เกิดข้อผิดพลาดขณะพยายามบันทึกเป็น Unable to connect via DBus ไม่สามารถเชื่อมต่อผ่าน DBus ได Powerful yet simple to use screenshot software. ซอฟต์แวร์จับภาพหน้าจออันทรงพลังและใช้งานง่าย See ดู Capture the entire desktop. จับภาพเดสก์ท็อปทั้งหมด Open the capture launcher. เปิดตัวเรียกใช้งานการจับภาพ Start a manual capture in GUI mode. เริ่มการจับภาพด้วยตนเองในโหมด GUI Configure กำหนดค่า Capture a single screen. จับภาพหน้าจอเดียว Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to มีไดเร็กทอรีที่มีอยู่หรือไฟล์ใหม่ที่จะบันทึก Save the capture to the clipboard บันทึกภาพที่จับภาพไปยังคลิปบอร์ด Pin the capture to the screen ปักหมุดจับภาพลงบนหน้าจอ Upload screenshot อัพโหลดภาพหน้าจอ Delay time in milliseconds หน่วงเวลาเป็นมิลลิวินาที Repeat screenshot with previously selected region ทำซ้ำภาพหน้าจอด้วยพื้นที่ที่เลือกไว้ก่อนหน้านี้ Screenshot region to select ถ่ายภาพหน้าจอที่เลือก Set the filename pattern ตั้งค่ารูปแบบชื่อไฟล์ Accept capture as soon as a selection is made จับภาพทันทีเมื่อมีการเลือก Enable or disable the trayicon เปิดใช้งานหรือปิดใช้งานไอคอนถาด Enable or disable run at startup เปิดใช้งานหรือปิดใช้งานอัตโนมัติเมื่อเริ่มต้นระบบ Enable or disable the notifications Check the configuration for errors ตรวจสอบการกำหนดค่าเพื่อหาข้อผิดพลาด Show the help message in the capture mode แสดงข้อความช่วยเหลือในโหมดจับภาพ Define the main UI color กำหนดสี UI หลัก Define the contrast UI color กำหนดสี UI คอนทราสต์ Print raw PNG capture พิมพ์ภาพ PNG แบบ RAW Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format W H X Y. Does nothing if raw is specified พิมพ์รูปทรงเรขาคณิตของการเลือกในรูปแบบ W H X Y ไม่ดำเนินการใด ๆ หากระบุข้อมูลแบบ RAW Define the screen to capture (starting from 0) กำหนดหน้าจอที่จะจับภาพ (เริ่มจาก 0) Invalid delay, it must be a number greater than 0 การหน่วงเวลาไม่ถูกต้อง ควรเป็นตัวเลขที่มากกว่า 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. บริเวณไม่ถูกต้อง ใช้ 'WxH+X+Y' หรือ 'all' หรือ 'screen0/screen1/...' Invalid path, must be an existing directory or a new file in an existing directory เส้นทางไม่ถูกต้อง ต้องเป็นไดเร็กทอรีที่มีอยู่หรือไฟล์ใหม่ในไดเร็กทอรีที่มีอยู่ Define the screen to capture Define the screen to capture default: screen containing the cursor ค่าเริ่มต้น: หน้าจอที่มีเคอร์เซอร์ Screen number หมายเลขหน้าจอ Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' สีไม่ถูกต้อง แฟล็กรองรับรูปแบบต่อไปนี้: - #RGB (R, G และ B แต่ละตัวเป็นเลขฐานสิบหกตัวเดียว) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - สีที่มีชื่อ เช่น 'สีน้ำเงิน' หรือ 'สีแดง' คุณอาจต้องใช้เครื่องหมาย escape '#' เช่น '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative หมายเลขหน้าจอไม่ถูกต้อง จะต้องไม่เป็นลบ Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' ค่าไม่ถูกต้อง จะต้องกำหนดเป็น 'true' หรือ 'false' Error ผิดพลาด Unable to write in ไม่สามารถเขียนได้ Requested screen exceeds screen count เกินจำนวนหน้าจอที่ร้องขอ Full screen screenshot pinned to screen ภาพหน้าจอแบบเต็มจอถูกปักหมุดไว้บนหน้าจอ URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options ตัวเลือก Arguments ข้อโต้แย้ง arguments ข้อโต้แย้ง Subcommands subcommands Usage ใช้ไป options ตัวเลือก Per default runs Flameshot in the background and adds a tray icon for configuration. ตามค่าเริ่มต้น Flameshot จะรันในพื้นหลังและเพิ่มไอคอนถาดสำหรับการกำหนดค่า Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. สวัสดี ฉันอยู่ที่นี่! คลิกไอคอนในถาดเพื่อจับภาพหน้าจอหรือคลิกปุ่มขวาเพื่อดูตัวเลือกเพิ่มเติม Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture ออกจากการจับภาพ Screenshot history ประวัติการจับภาพหน้าจอ Capture screen จับภาพหน้าจอ Show color picker แสดงตัวเลือกสี Change the tool's size เปลี่ยนขนาดเครื่องมือ Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle สี่เหลี่ยมผืนผ้า Set the Rectangle as the paint tool ตั้งค่าสี่เหลี่ยมผืนผ้าเป็นเครื่องมือระบายสี RedoTool Redo ทำซ้ำ Redo the next modification ทำการแก้ไขครั้งต่อไปใหม่ SaveTool Save บันทึก Save screenshot to a file บันทึกภาพหน้าจอลงในไฟล์ Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) ไม่สามารถตรวจจับสภาพแวดล้อมเดสก์ท็อปได้ (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. คำแนะนำ: ลองตั้งค่าตัวแปรสภาพแวดล้อม XDG_CURRENT_DESKTOP Unable to capture screen ไม่สามารถจับภาพหน้าจอได้ SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection เลือกรูปสี่เหลี่ยมผืนผ้า Set Selection as the paint tool ตั้งค่าเป็นเครื่องมือระบายสี SetShortcutDialog Set Shortcut ตั้งค่าทางลัด Enter new shortcut to change ป้อนทางลัดใหม่เพื่อเปลี่ยนแปลง Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. กด Esc เพื่อยกเลิกหรือ ⌘+Backspace เพื่อปิดใช้งานแป้นพิมพ์ลัด Press Esc to cancel or Backspace to disable the keyboard shortcut. กด Esc เพื่อยกเลิกหรือ ⌘+Backspace เพื่อปิดใช้งานแป้นพิมพ์ลัด Flameshot must be restarted for changes to take effect. ต้องรีสตาร์ท Flameshot เพื่อให้มีผลการเปลี่ยนแปลง ShortcutsWidget Hot Keys คีย์ลัด Available shortcuts in the screen capture mode. ปุ่มลัดที่สามารถใช้งานได้ในโหมดจับภาพหน้าจอ Description คำอธิบาย Key คีย์ Left Double-click ดับเบิลคลิกซ้ายสองครั้ง Toggle side panel สลับแผงด้านข้าง Grab a color from the screen Resize selection left 1px ปรับขนาดที่เลือกด้านซ้าย 1px Resize selection right 1px ปรับขนาดการที่เลือกด้านขวา 1px Resize selection up 1px ปรับขนาดการที่เลือกขึ้น 1px Resize selection down 1px ปรับขนาดการที่เลือกลง 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen เลือกหน้าจอทั้งหมด Move selection left 1px เลื่อนที่เลือกไปทางซ้าย 1 พิกเซล Move selection right 1px เลื่อนที่เลือกไปทางขวา 1 พิกเซล Move selection up 1px เลื่อนที่เลือกขึ้น 1 พิกเซล Move selection down 1px เลื่อนที่เลือกลง 1 พิกเซล Commit text in text area ยืนยันข้อความในพื้นที่ข้อความ Delete selected drawn object Cancel current selection Delete current tool ลบเครื่องมือปัจจุบัน Capture screen จับภาพหน้าจอ Screenshot history ประวัติการจับภาพหน้าจอ SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: ขนาดเครื่องมือที่ใช้งาน: Active Color: สีที่ใช้งาน: Grab Color จับสีต่าง ๆ Display grid SizeDecreaseTool Decrease Tool Size ลดขนาดเครื่องมือ Decrease the size of the other tools ลดขนาดของเครื่องมืออื่น ๆ SizeIncreaseTool Increase Tool Size เพิ่มขนาดเครื่องมือ Increase the size of the other tools เพิ่มขนาดของเครื่องมืออื่น ๆ SizeIndicatorTool Selection Size Indicator ตัวระบุขนาดการเลือก Show X and Y dimensions of the selection แสดงมิติ X และ Y ที่เลือก Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) ศตวรรษ (00-99) Year (00-99) ปี (00-99) Year (2000) ปี (2000) Month Name (jan) ชื่อเดือน (ม.ค.) Month Name (january) ชื่อเดือน (มกราคม) Month (01-12) เดือน (01-12) Week Day (1-7) วันธรรมดา (1-7) Week (01-53) สัปดาห์ (01-53) Day Name (mon) ชื่อวัน (จันทร์) Day Name (monday) ชื่อวัน (วันจันทร์) Day (01-31) วันที่ (01-31) Day of Month (1-31) วันที่ (1-31) Day (001-366) วัน (001-366) Hour (00-23) ชั่วโมง (00-23) Hour (01-12) ชั่วโมง (01-12) Minute (00-59) นาที (00-59) Second (00-59) วินาที (00-59) Full Date (%m/%d/%y) วันที่แบบเต็ม (%m/%d/%y) Full Date (%Y-%m-%d) วันที่แบบเต็ม (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) เวลา (%H-%M-%S) Time (%H-%M) เวลา (%H-%M) SystemNotification Flameshot Info ข้อมูล Flameshot TextConfig StrikeOut สไตรค์เอาท์ Underline ขีดเส้นใต้ Bold ตัวหนา Italic ตัวเอียง Left Align ชิดซ้าย Center Align จัดตำแหน่งให้ตรงกลาง Right Align ชิดขวา TextTool Text ข้อความ Add text to your capture เพิ่มข้อความลงในภาพของคุณ TrayIcon &Take Screenshot &ถ่ายภาพหน้าจอ &Open Launcher &เปิดตัวเรียกใช้งาน &Configuration &กำหนดค่า &About &เกี่ยวกับ Check for updates ตรวจสอบการอัปเดต New version %1 is available เวอร์ชันใหม่ %1 พร้อมให้บริการแล้ว &Quit &ออก &Latest Uploads &อัพโหลดล่าสุด &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. เปลี่ยนสีโดยการย้ายตัวเลือกและดูการเปลี่ยนแปลงในปุ่มแสดงตัวอย่าง Select a Button to modify it เลือกปุ่มเพื่อแก้ไข Main Color สีหลัก Click on this button to set the edition mode of the main color. คลิกที่ปุ่มนี้เพื่อตั้งค่าสีหลัก Contrast Color ความแตกต่างของสี Click on this button to set the edition mode of the contrast color. คลิกที่ปุ่มนี้เพื่อแก้ไขสีคอนทราสต์ UndoTool Undo เลิกทำ Undo the last modification ย้อนกลับการแก้ไขครั้งล่าสุด UpdateNotificationWidget New Flameshot version %1 is available Flameshot เวอร์ชันใหม่ %1 พร้อมให้บริการแล้ว Ignore ข้าม Later ภายหลัง Update อัปเดต UploadHistory Upload History ประวัติการอัพโหลด Screenshots history is empty ประวัติการจับภาพหน้าจอว่างเปล่า UploadLineItem Form ฟอร์ม TextLabel ป้ายข้อความ Copy URL คัดลอก URL Open In Browser เปิดในเบราว์เซอร์ Confirm to delete ยืนยันการลบ Are you sure you want to delete a screenshot from the latest uploads and server? คุณแน่ใจหรือไม่ว่าต้องการลบภาพหน้าจอจากการอัพโหลดล่าสุด? UtilityPanel Close ปิด <Empty> <ว่าง> VisualsEditor Opacity of area outside selection: ความทึบของพื้นที่นอกส่วนที่เลือก: UI Color Editor ตัวแก้ไขสี UI Colorpicker Editor โปรแกรมแก้ไขตัวเลือกสี Button Selection เลือกปุ่ม Select All เลือกทั้งหมด color_widgets::ColorDialog Pick เลือก color_widgets::ColorPalette Unnamed ไม่มีชื่อ color_widgets::ColorPaletteModel Unnamed ไม่มีชื่อ %1 (%2 colors) %1 (สี %2) color_widgets::ColorPaletteWidget Open a new palette from file เปิดจานสีใหม่จากไฟล์ Create a new palette สร้างจานสีใหม่ Duplicate the current palette ทำซ้ำจานสีปัจจุบัน Delete the current palette ลบจานสีปัจจุบัน Revert changes to the current palette ย้อนกลับการเปลี่ยนแปลงไปยังจานสีปัจจุบัน Save changes to the current palette บันทึกการเปลี่ยนแปลงไปยังจานสีปัจจุบัน Add a color to the palette เพิ่มสีให้กับจานสี Remove the selected color from the palette ลบสีที่เลือกออกจากจานสี New Palette จานสีใหม่ Name ชื่อ GIMP Palettes (*.gpl) จานสี GIMP (*.gpl) Palette Image (%1) ภาพพาเลท (%1) All Files (*) ไฟล์ทั้งหมด (*) Open Palette เปิดจานสี Failed to load the palette file %1 ไม่สามารถโหลดไฟล์จานสีได้ %1 color_widgets::GradientEditor Add Color เพิ่มสี Remove Color ลบสี Edit Color... แก้ไขสี... color_widgets::GradientListModel %1 (%2 colors) %1 (สี %2) color_widgets::Swatch Clear Color เคลียร์สี %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_tk.ts ================================================ AbstractWidgetList Add New Move Up Move Down Remove AcceptTool Accept Accept the capture AppLauncher App Launcher Choose an app to open the capture AppLauncherWidget Open With Launch in terminal Keep open after selection Error Unable to launch in terminal. Unable to write in ArrowTool Arrow Set the Arrow as the paint tool BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Mode de captura</b> Rectangular Region Full Screen (Current Display) Full Screen (All Monitors) No Delay second seconds Take new screenshot Area: Capture Launcher TextLabel Capture Mode Delay: WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Mouse Select screenshot area Mouse Wheel Change tool size Right Click Show color picker Open side panel Esc Exit Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Escolliu una àrea amb el ratolí, o premeu Esc per sortir. Premeu Entrar per capturar la pantalla. Premeu clic dret per mostrar l'eina de selecció de color. Gireu la rodeta del ratolí per canviar el gruix de l'eina de dibuix. Premeu Espai per obrir el calaix lateral. Tool Settings CircleCountTool Circle Counter Add an autoincrementing counter bubble CircleTool Circle Set the Circle as the paint tool ColorDialog Select Color Saturation Hue Hex Blue Value Green Alpha Red ColorGrabWidget Accept color Enter or Left Click Precisely select color Hold Left Click Toggle magnifier Space or Right Click Cancel Esc ColorPickerEditor Edit Preset: Enter color to update preset Update Press button to update the selected preset Delete Press button to delete the selected preset Add Preset: Enter color manually or select it using the color-wheel Add Press button to add preset Error Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors <b>You must resolve all errors before continuing:</b> Reset Reset to the default value. Remove Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all listed errors. Details ConfigWindow Configuration Interface Filename Editor General Shortcuts Resolve <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available La nova versió %1 ja és disponible You have the latest version Teniu la versió més recent Failed to get information about the latest version. Error a l'intentar obtenir informació sobre actualitzacions. Error Error Unable to close active modal widgets No s'han pogut tancar els widgets modals actius &Open Launcher &Obre el llançador d'aplicacions &Configuration &Ajustaments &About &Quant a Check for updates Comprova si hi ha actualitzacions disponibles &Latest Uploads &Últimes càrregues URL copied to clipboard. L'URL s'ha copiat al porta-retalls. &Information &Informació &Quit &Surt &Take Screenshot &Captura CopyTool Copy Copy selection to clipboard Copy the selection into the clipboard Copia la selecció al porta-retalls DBusUtils Unable to connect via DBus No s'ha pogut connectar mitjançant DBus ExitTool Exit Leave the capture screen FileNameEditor Edit the name of your captures: Edit: Preview: Save Saves the pattern Restore Reset Reinicialitza Restores the saved pattern Clear Deletes the name Flameshot Error Unable to close active modal widgets URL copied to clipboard. FlameshotDaemon New version %1 is available You have the latest version Failed to get information about the latest version. Unable to connect via DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Error Unable to read file. Unable to write file. Save File Confirm Reset Are you sure you want to reset the configuration? Show help message Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show the side panel button Show the side panel toggle button in the capture mode. Mostra el botó del calaix lateral en el mode de captura. Show desktop notifications Show tray icon Show the systemtray icon Mostra la icona a la barra de tasques del sistema Confirmation required to delete screenshot from the latest uploads Configuration File Export Reset Automatic check for updates Allow multiple flameshot GUI instances simultaneously This allows you to take screenshots of flameshot itself for example. This allows you to take screenshots of flameshot itself for example. Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Llança a l'inici Launch Flameshot Inicia el Flameshot Show welcome message on launch Use large predefined color palette Copy URL after upload Copy URL and close window after upload Copia la URL i tanca la finestra després de la càrrega Save image after copy Save image file after copying it Desa el fitxer d'imatge després d'haver-lo copiat Show the help message at the beginning in the capture mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Save Path Change... Use fixed path for screenshots to save Preferred save file extension: Latest Uploads Max Size Imgur Application Client ID Undo limit Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Choose a Folder Unable to write to directory. Show magnifier Enable a magnifier while selecting the screenshot area Square shaped magnifier Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Últimes càrregues Screenshots history is empty L'historial de captures de pantalla és buit Copy URL Copia l'URL URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Open in browser Obre al navegador Confirm to delete Confirmeu per esborrar Are you sure you want to delete a screenshot from the latest uploads and server? Esteu segur de voler esborrar la captura de les últimes càrregues i del servidor? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Do you want to upload this capture? Upload without confirmation ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Uploading Image Copy URL Open URL Delete image Image to Clipboard. Save image Unable to open the URL. URL copied to clipboard. Screenshot copied to clipboard. Unable to save the screenshot to disk. Screenshot saved. ImgUploaderTool Image Uploader Upload the selection ImgurUploader Upload to Imgur Puja a Imgur Uploading Image S'està pujant la imatge Copy URL Copia l'URL Open URL Obre l'URL Delete image Esborra la imatge Image to Clipboard. Imatge al porta-retalls. Unable to open the URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. ImgurUploaderTool Image Uploader Puja la imatge Upload the selection to Imgur Puja la selecció a Imgur InfoWindow About Icon License GPLv3+ Version Flameshot v OS Info Copy Info Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>Llicència</b></u> <u><b>Version</b></u> <u><b>Versió</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Set Inverter as the paint tool LineTool Line Set the Line as the paint tool MarkerTool Marker Set the Marker as the paint tool MoveTool Move Move the selection area PencilTool Pencil Set the Pencil as the paint tool PinTool Pin Tool Pin image on the desktop PinWidget Context menu Copy to clipboard Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close PixelateTool Pixelate Set Pixelate as the paint tool. Set Pixelate as the paint tool Estableix l'eina de pixel·lament com a eina de dibuix PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 No s'ha pogut registrar %1. Error: %2 Failed to unregister %1. Error: %2 No s'ha pogut desregistrar %1. Error: %2 QObject Capture saved to clipboard. Error while saving to clipboard Save screenshot Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as La captura serà desada i copiada al porta-retalls com a Save Error Capture saved as Error trying to save as Unable to connect via DBus Powerful yet simple to use screenshot software. See Capture the entire desktop. Captureu l'escriptori sencer. Open the capture launcher. Start a manual capture in GUI mode. Configure Capture a single screen. Captura una sola pantalla. Path where the capture will be saved Camí on es desarà la captura Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Save the capture to the clipboard Pin the capture to the screen Upload screenshot Delay time in milliseconds Repeat screenshot with previously selected region Screenshot region to select Set the filename pattern Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Show the help message in the capture mode Define the main UI color Define the contrast UI color Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Error Unable to write in Requested screen exceeds screen count Full screen screenshot pinned to screen URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Options Arguments Arguments arguments arguments Subcommands subcommands Usage options Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Screenshot history Capture screen Show color picker Change the tool's size Change the tool's thickness Canvia el gruix de l'eina RectangleTool Rectangle Set the Rectangle as the paint tool RedoTool Redo Redo the next modification SaveTool Save Save screenshot to a file Save the capture Guarda la captura ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Set Selection as the paint tool SetShortcutDialog Set Shortcut Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Available shortcuts in the screen capture mode. Description Key Left Double-click Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection right 1px Resize selection up 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Move selection left 1px Move selection right 1px Move selection up 1px Move selection down 1px Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Screenshot history SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Active Color: Grab Color Display grid SizeDecreaseTool Decrease Tool Size Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase the size of the other tools SizeIndicatorTool Selection Size Indicator Indicador de mida de selecció Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Mostra les mides de la selecció (X Y) StrftimeChooserWidget Century (00-99) Year (00-99) Year (2000) Month Name (jan) Month Name (january) Month (01-12) Week Day (1-7) Week (01-53) Day Name (mon) Day Name (monday) Day (01-31) Day of Month (1-31) Day (001-366) Hour (00-23) Hour (01-12) Minute (00-59) Second (00-59) Full Date (%m/%d/%y) Full Date (%Y-%m-%d) Full Date (%d-%m-%Y) Time (%H-%M-%S) Time (%H-%M) SystemNotification Flameshot Info TextConfig StrikeOut Underline Bold Italic Left Align Center Align Right Align TextTool Text Add text to your capture TrayIcon &Take Screenshot &Open Launcher &Configuration &About Check for updates New version %1 is available &Quit &Latest Uploads &Open Save Path UIcolorEditor UI Color Editor Editor de color de la interfície Change the color moving the selectors and see the changes in the preview buttons. Select a Button to modify it Main Color Click on this button to set the edition mode of the main color. Contrast Color Click on this button to set the edition mode of the contrast color. UndoTool Undo Undo the last modification UpdateNotificationWidget New Flameshot version %1 is available Ignore Later Update UploadHistory Upload History Screenshots history is empty UploadLineItem Form TextLabel Copy URL Open In Browser Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close <Empty> VisualsEditor Opacity of area outside selection: UI Color Editor Colorpicker Editor Button Selection Select All color_widgets::ColorDialog Pick color_widgets::ColorPalette Unnamed color_widgets::ColorPaletteModel Unnamed %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Create a new palette Duplicate the current palette Delete the current palette Revert changes to the current palette Save changes to the current palette Add a color to the palette Remove the selected color from the palette New Palette Name GIMP Palettes (*.gpl) Palette Image (%1) All Files (*) Open Palette Failed to load the palette file %1 color_widgets::GradientEditor Add Color Remove Color Edit Color... color_widgets::GradientListModel %1 (%2 colors) color_widgets::Swatch Clear Color %1 (%2) ================================================ FILE: data/translations/Internationalization_tr.ts ================================================ AbstractWidgetList Add New Yeni Ekle Move Up Yukarı Taşı Move Down Aşağı Taşı Remove Kaldır AcceptTool Accept Kabul Et Accept the capture Yakalamayı kabul et AppLauncher App Launcher Uygulama Başlatıcı Choose an app to open the capture Yakalamayı açmak için bir uygulama seçin AppLauncherWidget Open With Birlikte aç Launch in terminal Terminalde aç Keep open after selection Seçimden sonra açık tut Error Hata Unable to write in Yazılamadı Unable to launch in terminal. Terminalde başlatılamadı. ArrowTool Arrow Ok Set the Arrow as the paint tool Oku boyama aracı olarak ayarla BlurTool Blur Bulanıklık Set Blur as the paint tool Bulnıklığı boyama aracı olarak ayarlar CaptureLauncher <b>Capture Mode</b> <b>Yakalama Modu</b> Rectangular Region Dikdörtgen Bölge Full Screen (Current Display) Tam Ekran (Geçerli Ekran) Full Screen (All Monitors) Tam Ekran (Tüm Monitörler) No Delay Gecikme yok second saniye seconds saniye Take new screenshot Yeni ekran görüntüsü al Area: Alan: Capture Launcher Yakalama Başlatıcı TextLabel TextLabel Capture Mode Yakalama Modu Delay: Gecikme: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Ekran resmi alınamadı Mouse Fare Select screenshot area Ekran görüntüsü alanı seç Mouse Wheel Fare Tekerleği Change tool size Araç boyutunu değiştir Right Click Sağ Tık Show color picker Renk seçici göster Open side panel Yan paneli aç Esc Esc Exit Çıkış Quit Capture Yakalamayı bırak Are you sure you want to quit capture? Yakalamayı bırakmak istediğinden emin misin? Do not show this again Bir daha gösterme Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot odağı kaybetti. Klavye kısayolları, siz bir yere tıklayana kadar çalışmayacaktır. Configuration error resolved. Launch `flameshot gui` again to apply it. Yapılandırma hatası çözüldü. Uygulamak için `flameshot gui` yeniden başlatın. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Fareyle bir alan seçin veya çıkmak için Esc tuşuna basın. Ekranı yakalamak için Enter tuşuna basın. Renk seçiciyi göstermek için farenin sağ tuşuna tıklayın. Aracınızın kalınlığını değiştirmek için Fare Tekerleğini kullanın. Yan paneli açmak için Boşluk tuşuna basın. Tool Settings Araç Ayarları CircleCountTool Circle Counter Daire Sayacı Add an autoincrementing counter bubble Otomatik artan bir sayaç balonu ekleyin CircleTool Circle Çember Set the Circle as the paint tool Çemberi boyama aracı olarak ayarla ColorDialog Select Color Renk Seç Saturation Doygunluk Hue Ton Hex Hex Blue Mavi Value Değer Green Yeşil Alpha Alpha Red Kırmızı ColorGrabWidget Accept color Rengi kabul et Enter or Left Click Enter veya Sol Tık Precisely select color Rengi tam olarak seç Hold Left Click Sol Tık Basılı Tut Toggle magnifier Büyüteci aç/kapat Space or Right Click Boşluk Tuşu veya Sağ Tık Cancel İptal Esc Esc ColorPickerEditor Select Preset: ÖnAyar Seçin: Select preset using the spinbox Döndürme kutusunu kullanarak ön ayarı seçin Edit Preset: Ön Ayarı Düzenle: Enter color to update preset Ön ayarı güncellemek için renk girin Update Güncelle Press button to update the selected preset Seçilen ön ayarı güncellemek için düğmeye basın Delete Sil Press button to delete the selected preset Seçilen ön ayarı silmek için butona basın Add Preset: Ön Ayar Ekle: Enter color manually or select it using the color-wheel Rengi elle girin veya renk tekerleğini kullanarak seçin Add Ekle Press button to add preset Ön ayar eklemek için düğmeye basın Error Hata Unable to add preset. Maximum limit reached. Ön ayar eklenemiyor. Azami sınıra ulaşıldı. Unable to remove preset. Minimum limit reached. Ön ayar kaldırılamıyor. Asgari sınıra ulaşıldı. ConfigErrorDetails Configuration errors Yapılandırma hataları ConfigHandler Unrecognized setting: '%1' Tanınmayan ayar: '%1' Unrecognized shortcut name: '%1'. Tanınmayan kısayol adı: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Kısayol çakışması: '%1' ve '%2' aynı kısayola sahip: %3 Bad value in '%1'. Expected: %2 '%1' içinde hatalı değer. Beklenen: %2 You have successfully resolved the configuration error. Yapılandırma hatasını başarıyla çözdünüz. The configuration contains an error. Open configuration to resolve. Yapılandırma bir hata içeriyor. Çözümlemek için yapılandırmayı açın. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigHandler'da hatalı yapılandırma anahtarı '%1'. Lütfen bunu bir hata olarak bildirin. ConfigResolver Resolve configuration errors Yapılandırma hatalarını çöz <b>You must resolve all errors before continuing:</b> <b>Devam etmeden önce tüm hataları çözmelisiniz:</b> Reset Sıfırla Reset to the default value. Öntanımlı değere sıfırla. Remove Kaldır Remove this setting. Bu ayarı kaldır. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Bazı klavye kısayollarında çakışmalar var. Bu, flameshot'ın başlamasını ENGELLEMEYECEKTİR. Lütfen bunları yapılandırma dosyasında elle çözün. Resolve all Tümünü çöz Resolve all listed errors. Listelenen tüm hataları çöz. Details Ayrıntılar ConfigWindow Configuration Ayarlar Interface Arayüz Filename Editor Dosya Adı Düzenleyici General Genel Shortcuts Kısayollar Resolve Çöz <b>Configuration file has errors. Resolve them before continuing.</b> <b>Yapılandırma dosyasında hatalar var. Devam etmeden önce bunları çözün.</b> Controller New version %1 is available Yeni %1 sürümü mevcut You have the latest version En son sürüme sahipsiniz Failed to get information about the latest version. En son sürüm hakkında bilgi alınamadı. Error Hata Unable to close active modal widgets Etkin modal widget'lar kapatılamıyor &Take Screenshot &Ekran Resmi Al &Open Launcher &Başlatıcı Aç &Configuration &Ayarlar &About &Hakkında Check for updates Güncellemeleri denetle &Latest Uploads &Son Yüklenenler URL copied to clipboard. URL panoya kopyalandı. &Information &Bilgi &Quit &Çıkış CopyTool Copy Kopyala Copy selection to clipboard Seçimi panoya kopyala Copy the selection into the clipboard Seçimi panoya kopyala DBusUtils Unable to connect via DBus DBus ile bağlanılamadı ExitTool Exit Çıkış Leave the capture screen Yakalama ekranından ayrıl FileNameEditor Edit the name of your captures: Çekimlerinizin adını düzenleyin: Edit: Düzenle: Preview: Ön izleme: Save Kaydet Saves the pattern Desenini kaydeder Restore Geri yükle Reset Sıfırla Restores the saved pattern Kaydedilen deseni geri yükler Clear Temizle Deletes the name İsmi siler Flameshot Error Hata Unable to close active modal widgets Etkin modal widget'lar kapatılamıyor URL copied to clipboard. URL panoya kopyalandı. FlameshotDaemon New version %1 is available Yeni %1 sürümü var You have the latest version En son sürümü kullanıyorsunuz Failed to get information about the latest version. En son sürüm hakkında bilgi alınamadı. Unable to connect via DBus DBus ile bağlanılamıyor GeneneralConf Import Dışa aktar Error Hata Unable to read file. Dosya okunamıyor. Unable to write file. Dosya yazılamıyor. Save File Dosyayı Kaydet Confirm Reset Sıfırlamayı Onayla Are you sure you want to reset the configuration? Ayarları sıfırlamak istediğinizden emin misiniz? Show help message Yardım mesajını göster Show the help message at the beginning in the capture mode. Yakalama modunda başında yardım mesajını gösterin. Show desktop notifications Masaüstü bildirimlerini göster Show tray icon Tepsi simgesini göster Show the systemtray icon Sistem tepsisi simgesini göster Configuration File Yapılandırma Dosyası Export Dışa aktar Reset Sıfırla Launch at startup Başlangıçta başlatın Launch Flameshot Flameshot'ı başlat GeneralConf Import İçe aktar Error Hata Unable to read file. Dosya okunamıyor. Unable to write file. Dosya yazılamıyor. Save File Dosyayı Kaydet Confirm Reset Sıfırlamayı Onayla Are you sure you want to reset the configuration? Ayarları sıfırlamak istediğinizden emin misiniz? Show help message Yardım mesajını göster Show the help message at the beginning in the capture mode. Yakalama modunda başlangıçta yardım mesajını göster. Show the side panel button Yan panel düğmesini göster Show the side panel toggle button in the capture mode. Çekim modunda yan panel geçiş düğmesini göster. Show desktop notifications Masaüstü bildirimlerini göster Show tray icon Tepsi simgesini göster Show the systemtray icon Sistem tepsisi simgesini göster Confirmation required to delete screenshot from the latest uploads Son yüklenenlerden ekran görüntüsünü silmek için onay gerekli Configuration File Yapılandırma Dosyası Export Dışa aktar Reset Sıfırla Automatic check for updates Güncellemeleri otomatik denetle Allow multiple flameshot GUI instances simultaneously Aynı anda birden fazla flameshot grafiksel arayüz örneğine izin ver This allows you to take screenshots of flameshot itself for example. Bu, örneğin flameshot'ın kendisinin ekran görüntülerini almanıza olanak tanır. Automatically close daemon when it is not needed Gerekli olmadığında arka plan programını otomatik olarak kapat Launch at startup Başlangıçta başlat Launch Flameshot Flameshot'ı başlat Show welcome message on launch Açılışta karşılama mesajını göster Use large predefined color palette Önceden tanımlanmış büyük renk paleti kullan Copy URL after upload Yüklemeden sonra URL'yi kopyala Copy URL and close window after upload URL'yi kopyalayın ve yüklemeden sonra pencereyi kapatın Save image after copy Kopyaladıktan sonra resmi kaydet Save image file after copying it Resim dosyasını kopyaladıktan sonra kaydedin Show the help message at the beginning in the capture mode Yakalama modu başlangıcında ipucu göster Use last region for GUI mode Son bölgeyi kullan Use the last region as the default selection for the next screenshot in GUI mode Bir sonraki ekran görüntüsü için öntanımlı seçim olarak son bölgeyi kullanır Show the side panel toggle button in the capture mode Yakalama modunda yan panelde geçiş düğmesi göster Enable desktop notifications Masaüstü bildirimlerini etkinleştir Show abort notifications Enable abort notifications Show icon in the system tray Simgeyi sistem tepsisinde göster Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads En son yüklemelerdeki ekran görüntüsünü silmek için onay iste Check for updates automatically Güncellemeleri otomatik olarak kontrol et This allows you to take screenshots of Flameshot itself for example Bu, Flameshot'ın kendi ekran görüntülerini almanıza olanak tanır Launch Flameshot daemon when computer is booted Bilgisayar başlatıldığında Flameshot arka plan uygulamasını başlat Show the welcome message box in the middle of the screen while taking a screenshot Ekran görüntüsü alırken ekranın ortasında karşılama mesajı kutusunu göster Use a large predefined color palette Ön tanımlı geniş renk paletini kullan Copy on double click Çift tıklandığında kopyala Enable Copy on Double Click Çift Tıklamada Kopyalamayı Etkinleştir Copy URL and close window after uploading was successful Yükleme başarılı olduktan sonra URL'yi kopyala ve pencereyi kapat Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well Ekran görüntüsünü kopyaladıktan sonra ayrıca bir resim olarak kaydedilsin Save Path Kaydetme Yolu Change... Değiştir... Use fixed path for screenshots to save Kaydedilecek ekran görüntüleri için sabit yol kullan Preferred save file extension: Tercih edilen kaydetme dosyası uzantısı: Latest Uploads Max Size Son Yüklenenler Azami Boyutu Imgur Application Client ID Imgur API Anahtarı Undo limit Geri alma sınırı Use JPG format for clipboard (PNG default) Pano için JPG biçimini kullan (öntanımlı: PNG) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Kaydettikten sonra dosya yolunu kopyala Copy the file path to clipboard after the file is saved Dosya kaydedildikten sonra dosya yolunu panoya kopyala Anti-aliasing image when zoom the pinned image Sabitlenmiş görüntüye yakınlaştırırken kenar yumuşatma After zooming the pinned image, should the image get smoothened or stay pixelated Sabitlenmiş görüntüye yakınlaştırdıktan sonra, görüntü düzleştirilmeli veya pikselli kalmalı mı? Upload image without confirmation Onay almadan resimleri yükle Choose a Folder Bir Klasör Seçin Unable to write to directory. Dizine yazılamıyor. Show magnifier Büyüteci göster Enable a magnifier while selecting the screenshot area Ekran görüntüsü alanını seçerken büyüteci etkinleştir Square shaped magnifier Kare şekilli büyüteç Make the magnifier to be square-shaped Büyüteç kare şeklinde olsun Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Son Yüklenenler Screenshots history is empty Ekran görüntüsü geçmişi boş Copy URL URL Kopyala URL copied to clipboard. URL panoya kopyalandı. Open in browser Tarayıcıda aç Confirm to delete Silmeyi onayla Are you sure you want to delete a screenshot from the latest uploads and server? En son yüklemelerden ve sunucudan bir ekran görüntüsünü silmek istediğinizden emin misiniz? ImgS3Uploader Uploading Image Resim Yükleniyor URL copied to clipboard. URL panoya kopyalandı. Error Hata ImgUploadDialog Upload Confirmation Yükleme Onayı Do you want to upload this capture? Bu yakalamayı yüklemek istiyor musunuz? Upload without confirmation Onay almadan yükle ImgUploader Uploading Image Resim Yükleniyor Unable to open the URL. URL açılamıyor. URL copied to clipboard. URL panoya kopyalandı. Screenshot copied to clipboard. Ekran görüntüsü panoya kopyalandı. Copy URL URL Kopyala Open URL URL Aç Delete image Resmi sil Image to Clipboard. Resim Pano'ya. ImgUploaderBase Upload image Upload image Uploading Image Resim Karşıya Yükleniyor Copy URL URL Kopyala Open URL URL Aç Delete image Resmi sil Image to Clipboard. Resim Pano'ya. Save image Resmi Kaydet Unable to open the URL. URL açılamıyor. URL copied to clipboard. URL panoya kopyalandı. Screenshot copied to clipboard. Ekran görüntüsü panoya kopyalandı. Unable to save the screenshot to disk. Ekran görüntüsü diske kaydedilemiyor. Screenshot saved. Ekran görüntüsü kaydedildi. ImgUploaderTool Image Uploader Resim Karşıya Yükleme Aracı Upload the selection Seçimi yükle ImgurUploader Upload to Imgur Imgur'a yükle Uploading Image Resim Yükleniyor Copy URL URL Kopyala Open URL URL Aç Delete image Resmi sil Image to Clipboard. Resim Pano'ya. Unable to open the URL. URL açılamıyor. URL copied to clipboard. URL panoya kopyalandı. Screenshot copied to clipboard. Ekran görüntüsü panoya kopyalandı. ImgurUploaderTool Image Uploader Resim Yükleme Aracı Upload the selection to Imgur Seçimi Imgur'a yükle InfoWindow About Hakkında Icon Simge License Lisans GPLv3+ GPLv3+ Version Sürüm Flameshot v Flameshot v OS Info İşletim Sistemi Copy Info Bilgileri Kopyala Right Click Sağ Tık Mouse Wheel Fare Tekerleği Move selection 1px 1px seçimini hareket ettir Resize selection 1px 1px seçimini yeniden boyutlandır Quit capture Çıkış Copy to clipboard Panoya kopyala Save selection as a file Seçimi dosya olarak kaydet Undo the last modification Son değişikliği geri al Show color picker Renk seçici göster Change the tool's thickness Araç kalınlığını değiştirin Available shortcuts in the screen capture mode. Ekran yakalama modunda kullanılabilir kısayollar. Key Anahtar Description Tanım <u><b>License</b></u> <u><b>Lisans</b></u> <u><b>Version</b></u> <u><b>Sürüm</b></u> <u><b>Shortcuts</b></u> <u><b>Kısayollar</b></u> InvertTool Invert Ters çevir Set Inverter as the paint tool Boya aracı olarak Inverter'ı ayarla LineTool Line Çizgi Set the Line as the paint tool Çizgiyi boyama aracı olarak ayarla MarkerTool Marker İşaretleyici Set the Marker as the paint tool İşaretleyiciyi boyama aracı olarak ayarla MoveTool Move Oynat Move the selection area Seçim alanını hareket ettir PencilTool Pencil Kurşun Kalem Set the Pencil as the paint tool Kurşun Kalemi çizim aracı olarak ayarla PinTool Pin Tool Sabitleme Aracı Pin image on the desktop Resmi masaüstüne sabitle PinWidget Context menu Context menu Copy to clipboard Panoya kopyala Save to file Dosyaya kaydet Rotate Right Rotate Left Increase Opacity Decrease Opacity Close Kapat PixelateTool Pixelate Pikselleştir Set Pixelate as the paint tool. Set Pixelate as the paint tool Piksellleştirmeyi boyama aracı olarak ayarla PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 %1 kaydedilemedi. Hata:%2 Failed to unregister %1. Error: %2 %1 kaydı silinemedi. Hata:%2 QObject Save Error Kaydetme Hatası Capture saved as Yakalama farklı kaydedildi Capture saved to clipboard. Yakalama, panoya kaydedildi. Capture saved to clipboard Yakalama panoya kaydedildi Error while saving to clipboard Panoya kaydederken hata oluştu Error trying to save as Farklı kaydetmeye çalışılırken hata oluştu Save screenshot Ekran görüntüsünü kaydet Path copied to clipboard as Dosya yolu, panoya şu şekilde kopyalandı: Saving canceled Kaydetme iptal edildi Save canceled Kaydetme iptal edildi Capture is saved and copied to the clipboard as Yakalama kaydedilir ve panoya şu adla kopyalanır Unable to connect via DBus DBus ile bağlanılamıyor Powerful yet simple to use screenshot software. Güçlü ve kullanımı kolay ekran görüntüsü yazılımı. See Bak Capture the entire desktop. Masaüstünün tamamını yakalayın. Open the capture launcher. Yakalama başlatıcısını açın. Start a manual capture in GUI mode. GUI modunda elle yakalama başlatın. Configure Yapılandır Capture a single screen. Tek bir ekran yakalayın. Path where the capture will be saved Yakalamanın kaydedileceği yol Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Kaydedilecek mevcut dizin veya yeni dosya Save the capture to the clipboard Yakalamayı panoya kaydedin Pin the capture to the screen Yakalamayı ekrana sabitleyin Upload screenshot Upload screenshot Delay time in milliseconds Milisaniye cinsinden gecikme süresi Repeat screenshot with previously selected region Ekran görüntüsünü önceden seçilen bölge ile tekrarlayın Screenshot region to select Seçilecek ekran görüntüsü bölgesi Set the filename pattern Dosya adı desenini ayarlayın Accept capture as soon as a selection is made Seçim yapılır yapılmaz yakalamayı kabul et Enable or disable the trayicon Tepsi simgesini etkinleştirin veya devre dışı bırakın Enable or disable run at startup Başlangıçta çalışmayı etkinleştirin veya devre dışı bırakın Enable or disable the notifications Check the configuration for errors Yapılandırma hatalarını kontrol et Show the help message in the capture mode Çekim modunda yardım mesajını göster Define the main UI color Ana kullanıcı arayüzü rengini tanımlayın Define the contrast UI color Kontrast kullanıcı arayüzü rengini tanımlayın Print raw PNG capture Ham PNG yakalamayı yazdırın Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Seçimin geometrisini WxH+X+Y biçiminde yazdırır. Raw belirtilirse hiçbir şey yapmaz Define the screen to capture (starting from 0) Yakalanacak ekranı tanımla (0'dan başlayarak) Invalid delay, it must be a number greater than 0 Geçersiz gecikme, 0'dan büyük bir sayı olmalıdır Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Geçersiz bölge, 'WxH+X+Y' veya 'tümü' veya 'screen0/screen1/...' kullanın. Invalid path, must be an existing directory or a new file in an existing directory Geçersiz yol, mevcut bir dizin veya mevcut bir dizinde yeni bir dosya olmalıdır Define the screen to capture Yakalanacak ekranı tanımlayın default: screen containing the cursor öntanımlı: imleci içeren ekran Screen number Ekran numarası Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Geçersiz renk, bu seçenek aşağıdaki biçimleri destekler: - #RGB (R, G, ve B onaltılık tabanda rakamlardır) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - 'blue' veya 'red' gibi adlandırılmış renkler '#' işaretini '\#FFF' şeklinde kaçırmanız gerekebilir Invalid delay, it must be higher than 0 Geçersiz gecikme, 0'dan yüksek olmalıdır Invalid screen number, it must be non negative Geçersiz ekran numarası, negatif olmamalıdır Invalid path, it must be a real path in the system Geçersiz yol, sistemde gerçek bir yol olmalıdır Invalid value, it must be defined as 'true' or 'false' Geçersiz değer, 'true' veya 'false' olarak tanımlanmalıdır Error Hata Unable to write in Yazılamadı Requested screen exceeds screen count İstenen ekran, ekran sayısını aşıyor Full screen screenshot pinned to screen Ekrana sabitlenmiş tam ekran ekran görüntüsü URL copied to clipboard. URL panoya kopyalandı. Options Seçenekler Arguments Argümanlar arguments argümanlar Subcommands subcommands Usage Kullanım options seçenekler Per default runs Flameshot in the background and adds a tray icon for configuration. Öntanımlı olarak arka planda Flameshot çalıştırır ve yapılandırma için bir tepsi simgesi ekler. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Merhaba ben burdayım! Ekran görüntüsü almak için tepsideki simgeye tıklayın veya daha fazla seçenek görmek için sağ düğmeyle tıklayın. Toggle side panel Yan paneli aç / kapat Resize selection left 1px Seçimi sola 1 piksel yeniden boyutlandır Resize selection right 1px Seçimi sağa 1 piksel yeniden boyutlandır Resize selection up 1px Seçimi yukarı 1 piksel yeniden boyutlandır Resize selection down 1px Seçimi aşağı 1 piksel yeniden boyutlandır Select entire screen Tüm ekranı seçin Move selection left 1px Seçimi 1 piksel sola taşı Move selection right 1px Seçimi 1 piksel sağa taşı Move selection up 1px Seçimi 1 piksel yukarı taşı Move selection down 1px Seçimi 1 piksel aşağı taşı Commit text in text area Metin alanındaki metni kaydet Delete current tool Geçerli aracı sil Quit capture Çıkış Screenshot history Ekran görüntüsü geçmişi Capture screen Ekran görüntüsü al Show color picker Renk seçici göster Change the tool's size Aracın boyutunu değiştir Change the tool's thickness Araç kalınlığını değiştir RectangleTool Rectangle Dikdörtgen Set the Rectangle as the paint tool Dikdörtgeni boyama aracı olarak ayarla RedoTool Redo Tekrarla Redo the next modification Sonraki değişikliği tekrarla SaveTool Save Kaydet Save screenshot to a file Ekran görüntüsünü bir dosyaya kaydet Save the capture Yakalamayı kaydet ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Masaüstü ortamı algılanamıyor (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. İpucu: XDG_CURRENT_DESKTOP ortam değişkenini ayarlamayı deneyin. Unable to capture screen Ekran resmi alınamadı SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Dikdörtgen Seçim Set Selection as the paint tool Seçimi boyama aracı olarak ayarla SetShortcutDialog Set Shortcut Kısayol Ayarla Enter new shortcut to change Değiştirmek için yeni kısayolu girin Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. İptal etmek için Esc tuşuna veya klavye kısayolunu devre dışı bırakmak için ⌘+Backspace tuşuna basın. Press Esc to cancel or Backspace to disable the keyboard shortcut. İptal etmek için Esc tuşuna veya klavye kısayolunu devre dışı bırakmak için Geri tuşuna basın. Flameshot must be restarted for changes to take effect. Değişikliklerin etkili olması için Flameshot yeniden başlatılmalıdır. ShortcutsWidget Hot Keys Kısayol Tuşları Available shortcuts in the screen capture mode. Ekran yakalama modunda kullanılabilir kısayollar. Description Açıklama Key Tuş Left Double-click Sol çift tıklama Toggle side panel Yan paneli aç/kapat Grab a color from the screen Resize selection left 1px Seçimi sola 1 piksel yeniden boyutlandır Resize selection right 1px Seçimi sağa 1 piksel yeniden boyutlandır Resize selection up 1px Seçimi yukarı 1 piksel yeniden boyutlandır Resize selection down 1px Seçimi aşağı 1 piksel yeniden boyutlandır Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Tüm ekranı seç Move selection left 1px Seçimi 1 piksel sola taşı Move selection right 1px Seçimi 1 piksel sağa taşı Move selection up 1px Seçimi 1 piksel yukarı taşı Move selection down 1px Seçimi 1 piksel aşağı taşı Commit text in text area Metin alanındaki metni kaydet Delete selected drawn object Cancel current selection Delete current tool Geçerli aracı sil Capture screen Ekran görüntüsü al Screenshot history Ekran görüntüsü geçmişi SidePanelWidget Active thickness: Etkin kalınlık: Active color: Etkin renk: Press ESC to cancel İptal etmek için ESC'ye basın Active tool size: Etkin araç boyutu: Active Color: Active Color: Grab Color Rengi Yakala Display grid SizeDecreaseTool Decrease Tool Size Araç Boyutunu Küçült Decrease the size of the other tools Diğer araçların boyutunu küçült SizeIncreaseTool Increase Tool Size Araç Boyutunu Büyüt Increase the size of the other tools Diğer araçların boyutunu büyüt SizeIndicatorTool Selection Size Indicator Seçim Boyutu Göstergesi Show X and Y dimensions of the selection Seçimin X ve Y boyutlarını göster Show the dimensions of the selection (X Y) Seçimin boyutlarını gösterir (X Y) StrftimeChooserWidget Century (00-99) Yüzyıl (00-99) Year (00-99) Yıl (00-99) Year (2000) Yıl (2000) Month Name (jan) Ay Adı (oca) Month Name (january) Ay Adı (ocak) Month (01-12) Ay (01-12) Week Day (1-7) Haftanın Günü (1-7) Week (01-53) Hafta (01-53) Day Name (mon) Gün Adı (pzt) Day Name (monday) Gün Adı (pazartesi) Day (01-31) Gün (01-31) Day of Month (1-31) Ayın Günü (1-31) Day (001-366) Gün (001-366) Time (%H-%M-%S) Zaman (%H-%M-%S) Time (%H-%M) Zaman (%H-%M) Hour (00-23) Saat (00-23) Hour (01-12) Saat (01-12) Minute (00-59) Dakika (00-59) Second (00-59) Saniye (00-59) Full Date (%m/%d/%y) Tam Tarih (%d/%m/%y) Full Date (%Y-%m-%d) Tam Tarih (%d-%m-%Y) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot Hakkında TextConfig StrikeOut Üstçizgi Underline Altçizgi Bold Kalın Italic Eğik Left Align Sola Hizala Center Align Ortaya Hizala Right Align Sağa Hizala TextTool Text Metin Add text to your capture Bilgisayardan yazı ekle TrayIcon &Take Screenshot &Ekran Görüntüsü Al &Open Launcher &Başlatıcıyı Aç &Configuration &Ayarlar &About &Hakkında Check for updates Güncellemeleri denetle New version %1 is available Yeni %1 sürümü var &Quit &Çıkış &Latest Uploads &Son Yüklenenler &Open Save Path UIcolorEditor UI Color Editor Kullanıcı Arayüzü Renk Düzenleyicisi Change the color moving the selectors and see the changes in the preview buttons. Seçicileri hareket ettiren rengi değiştirin ve ön izleme düğmelerindeki değişiklikleri görün. Select a Button to modify it Değiştirmek için bir düğme seçin Main Color Ana Renk Click on this button to set the edition mode of the main color. Ana rengin düzenleme modunu ayarlamak için bu düğmeye tıklayın. Contrast Color Kontrast Renk Click on this button to set the edition mode of the contrast color. Kontrast renginin düzenleme modunu ayarlamak için bu düğmeye tıklayın. UndoTool Undo Geri al Undo the last modification Son değişikliği geri al UpdateNotificationWidget New Flameshot version %1 is available Yeni Flameshot %1 sürümü mevcut Ignore Yok say Later Sonra Update Güncelle UploadHistory Upload History Yükleme Geçmişi Screenshots history is empty Ekran görüntüsü geçmişi boş UploadLineItem Form Form TextLabel TextLabel Copy URL URL Kopyala Open In Browser Tarayıcıda aç Confirm to delete Silmeyi onayla Are you sure you want to delete a screenshot from the latest uploads and server? En son yüklemelerden ve sunucudan bir ekran görüntüsünü silmek istediğinizden emin misiniz? UtilityPanel Close Kapat <Empty> <Boş> VisualsEditor Opacity of area outside selection: Seçimin dışındaki alanın opaklığı: UI Color Editor Kullanıcı Arayüzü Renk Düzenleyicisi Colorpicker Editor Renk Seçici Düzenleyici Button Selection Düğme Seçimi Select All Tümünü Seç color_widgets::ColorDialog Pick Seç color_widgets::ColorPalette Unnamed Adsız color_widgets::ColorPaletteModel Unnamed Adsız %1 (%2 colors) %1 (%2 renk) color_widgets::ColorPaletteWidget Open a new palette from file Dosyadan yeni bir palet aç Create a new palette Yeni bir palet oluştur Duplicate the current palette Geçerli paleti kopyala Delete the current palette Geçerli paleti sil Revert changes to the current palette Geçerli palete yapılan değişiklikleri geri al Save changes to the current palette Değişiklikleri geçerli palete kaydet Add a color to the palette Palete bir renk ekle Remove the selected color from the palette Seçilen rengi paletten kaldır New Palette Yeni Palet Name Name GIMP Palettes (*.gpl) GIMP Paletleri (*.gpl) Palette Image (%1) Palet Resmi (%1) All Files (*) Tüm Dosyalar (*) Open Palette Paleti Aç Failed to load the palette file %1 Palet dosyası yüklenemedi %1 color_widgets::GradientEditor Add Color Renk Ekle Remove Color Renk Kaldır Edit Color... Rengi Düzenle... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 renk) color_widgets::Swatch Clear Color Rengi Temizle %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_uk.ts ================================================ AbstractWidgetList Add New Додати новий Move Up Підняти Move Down Опустити Remove Вилучити AcceptTool Accept Застосувати Accept the capture Застосувати вибір ділянки AppLauncher App Launcher Запуск застосунку Choose an app to open the capture Виберіть застосунок, щоб відкрити знімок AppLauncherWidget Open With Відкрити в Launch in terminal Запустити в терміналі Keep open after selection Не закривати після вибору Error Помилка Unable to write in Не вдалось записати Unable to launch in terminal. Не вдалося запустити в терміналі. ArrowTool Arrow Стрілка Set the Arrow as the paint tool Вибрати стрілку інструментом малювання BlurTool Blur Розмиття Set Blur as the paint tool Вибрати розмиття інструментом малювання CaptureLauncher <b>Capture Mode</b> <b>Режим захоплення</b> Rectangular Region Прямокутна область Full Screen (Current Display) Не весь екран (поточний дисплей) Full Screen (All Monitors) На весь екран (усі монітори) No Delay Без затримки second секунда seconds секунд Take new screenshot Зробити новий знімок Area: Область: Capture Launcher Запуск захоплення TextLabel TextLabel Capture Mode Режим захоплення Delay: Затримка: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Не вдалось захопити екран Mouse Миша Select screenshot area Виберіть ділянку знімання Mouse Wheel Колесо миші Change tool size Змінити розмір інструменту Right Click Права кнопка миші Show color picker Показати обирач кольору Open side panel Відкрити бічну панель Esc Esc Exit Вийти Quit Capture Вийти з режиму захоплення Are you sure you want to quit capture? Ви впевнені, що хочете припинити захоплення? Do not show this again Не показувати це знову Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot втратив фокус. Комбінації клавіш не працюватимуть, поки ви не клацнете десь. Configuration error resolved. Launch `flameshot gui` again to apply it. Помилку конфігурації усунуто. Повторно запустіть `flameshot gui`, щоб застосувати їх. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Виберіть область мишкою або натисніть Esc для виходу. Натисніть Enter, щоб захопити екран. Натисніть праву кнопку миші, щоб показати вибір кольору. Використовуйте колесо миші для зміни товщини вибраного інструменту. Натисніть Пробіл, щоб відкрити бічну панель. Tool Settings Налаштування інструменту CircleCountTool Circle Counter Нумерація Add an autoincrementing counter bubble Додати коло з автоінкрементованим лічильником CircleTool Circle Коло Set the Circle as the paint tool Вибрати коло інструментом малювання ColorDialog Select Color Вибрати колір Saturation Насиченість Hue Відтінок Hex Шістнадцятковий Blue Синій Value Значення Green Зелений Alpha Альфа Red Червоний ColorGrabWidget Accept color Застосувати колір Enter or Left Click Натисніть Enter або клацніть лівою кнопкою миші Precisely select color Точний підбір кольору Hold Left Click Утримуйте ліву кнопку миші Toggle magnifier Увімкнути лупу Space or Right Click Натисніть Пробіл або клацніть правою кнопкою миші Cancel Скасувати Esc Esc ColorPickerEditor Select Preset: Вибрати шаблон: Select preset using the spinbox Виберіть шаблон за допомогою обертача Edit Preset: Змінити стиль: Enter color to update preset Введіть колір для оновлення стилю Update Оновити Press button to update the selected preset Натисніть кнопку, щоб оновити вибраний стиль Delete Видалити Press button to delete the selected preset Натисніть кнопку, щоб видалити вибраний шаблон Add Preset: Додати шаблон: Enter color manually or select it using the color-wheel Введіть колір вручну або виберіть його за допомогою кола кольорів Add Додати Press button to add preset Натисніть кнопку, щоб додати шаблон Error Помилка Unable to add preset. Maximum limit reached. Не вдалося додати шаблон. Досягнуто максимальної межі. Unable to remove preset. Minimum limit reached. Не вдалося вилучити шаблон. Досягнуто мінімальної межі. ConfigErrorDetails Configuration errors Помилки конфігурації ConfigHandler Unrecognized setting: '%1' Нерозпізнане налаштування: «%1» Unrecognized shortcut name: '%1'. Нерозпізнана назва комбінації клавіш: «%1». Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Конфлікт комбінацій клавіш: «%1» і «%2» мають однакову комбінацію клавіш: %3 Bad value in '%1'. Expected: %2 Неправильне значення в «%1». Очікувалося: %2 You have successfully resolved the configuration error. Ви успішно усунули помилку конфігурації. The configuration contains an error. Open configuration to resolve. Конфігурація містить помилку. Відкрийте конфігурацію для розвʼязання. The configuration contains an error. Falling back to default. Конфігурація містить помилку. Відновлення типової. Bad config key '%1' in ConfigHandler. Please report this as a bug. Неправильний ключ конфігурації «%1» у ConfigHandler. Повідомте про це як про помилку. ConfigResolver Resolve configuration errors Усуньте помилки конфігурації <b>You must resolve all errors before continuing:</b> <b>Ви повинні усунути всі помилки, перш ніж продовжити:</b> Reset Скинути Reset to the default value. Відновити типові значення. Remove Вилучити Remove this setting. Вилучити це налаштування. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Деякі комбінації клавіш конфліктують. Це НЕ заважатиме запуску flameshot. Виправте їх вручну у файлі конфігурації. Resolve all Виправити всі Resolve all listed errors. Виправити всі перераховані помилки. Details Подробиці ConfigWindow Configuration Налаштування Interface Інтерфейс Filename Editor Редактор назв файлів General Загальне Shortcuts Комбінації клавіш Resolve Виправити <b>Configuration file has errors. Resolve them before continuing.</b> <b>У файлі конфігурації є помилки. Розвʼяжіть їх, перш ніж продовжити.</b> Storage Сховище Controller New version %1 is available Доступна нова версія %1 You have the latest version У вас найпізніша версія Failed to get information about the latest version. Не вдалося отримати інформацію про останню версію. Error Помилка Unable to close active modal widgets Не вдається закрити активні модальні віджети &Take Screenshot &Зробити знімок &Open Launcher &Відкрити запускач &Configuration &Налаштування &About &Про програму Check for updates Перевірити оновлення &Latest Uploads &Останні відвантаження URL copied to clipboard. URL-адресу скопійовано у буфер обміну. &Information &Інформація &Quit Ви&йти CopyTool Copy Копіювати Copy selection to clipboard Копіювати вибране до буфера обміну Copy the selection into the clipboard Копіювати вибране до буфера обміну DBusUtils Unable to connect via DBus Не вдалося підключитися через DBus ExitTool Exit Вийти Leave the capture screen Вийти із захоплення екрану FileNameEditor Edit the name of your captures: Змініть назву ваших знімків: Edit: Шаблон: Preview: Перегляд: Save Зберегти Saves the pattern Зберегти шаблон Restore Відновити Reset Скинути Restores the saved pattern Відновлює збережений шаблон Clear Очистити Deletes the name Видаляє назву Flameshot Error Помилка Unable to close active modal widgets Не вдалося закрити активні модальні віджети URL copied to clipboard. URL-адресу скопійовано до буфера обміну. FlameshotDaemon New version %1 is available Доступна нова версія %1 You have the latest version У вас найновіша версія Failed to get information about the latest version. Не вдалося отримати відомості про останню версію. Unable to connect via DBus Не вдалося підʼєднатися через DBus GeneneralConf Import Імпорт Error Помилка Unable to read file. Не вдалось прочитати файл. Unable to write file. Не вдалось записати файл. Save File Зберегти файл Confirm Reset Підтвердити скидання Are you sure you want to reset the configuration? Ви дійсно хочете скинути налаштування? Show help message Показувати повідомлення довідки Show the help message at the beginning in the capture mode. Показувати повідомлення довідки на початку режиму захоплення. Show the side panel button Показувати кнопку бічній панелі Show the side panel toggle button in the capture mode. Показувати кнопку відкриття бічної панелі в режимі захоплення. Show desktop notifications Показувати повідомлення Show tray icon Показувати значок на панелі Show the systemtray icon Показувати значок на панелі повідомленнь Configuration File Файл налаштувань Export Експорт Reset Скинути Launch at startup Запускати при старті системи Launch Flameshot Запускати Flameshot Show welcome message on launch Показувати вітання під час запуску Close application after capture Закривати програму після захоплення екрану Close after capture Закрити після знімка Close after taking a screenshot Закрити після знімка Copy URL after upload Копіювати URL після завантаження Copy URL and close window after upload Копіювати URL і закрити вікно після завантаження Save image after copy Зберігати зображення після копіювання Save image file after copying it Зберігати файл зображення після копіювання Save Path Шлях збереження Change... Змінити... Copy file path after save Скопіювати шлях до файлу після збереження Select default path for Screenshots Виберіть шлях за замовчуванням для скріншотів Use fixed path for screenshots to save Використовувати фіксований шлях для знімків екрана для збереження Choose a Folder Обрати папку Unable to write to directory. Не вдалося записати в папку. GeneralConf Import Імпорт Error Помилка Unable to read file. Не вдалося прочитати файл. Unable to write file. Не вдалося записати файл. Save File Зберегти файл Confirm Reset Підтвердити скидання Are you sure you want to reset the configuration? Ви дійсно хочете скинути налаштування? Show help message Показувати повідомлення довідки Show the help message at the beginning in the capture mode. Показувати повідомлення довідки на початку режиму захоплення. Show the side panel button Показувати кнопку бічної панелі Show the side panel toggle button in the capture mode. Показувати кнопку відкриття бічної панелі в режимі захоплення. Show desktop notifications Показувати сповіщення Show tray icon Показувати значок у лотку Show the systemtray icon Показувати значок у системному лотку Confirmation required to delete screenshot from the latest uploads Потрібне підтвердження, щоб видалити знімок екрана з останніх завантажень Configuration File Файл налаштувань Export Експорт Reset Скинути Automatic check for updates Автоматична перевірка наявності оновлень Allow multiple flameshot GUI instances simultaneously Дозволити відкривати кілька екземплярів графічного інтерфейсу flameshot одночасно This allows you to take screenshots of flameshot itself for example. Це дає змогу робити знімки екрана, наприклад, самого flameshot. Automatically close daemon when it is not needed Автоматично закривати фонову службу, коли вона не потрібна Launch at startup Запускати при старті системи Launch Flameshot Запускати Flameshot Show welcome message on launch Показувати вітання під час запуску Use large predefined color palette Використовувати велику попередньо визначену кольорову палітру Copy URL after upload Копіювати URL після завантаження Copy URL and close window after upload Копіювати URL і закрити вікно після завантаження Save image after copy Зберігати зображення після копіювання Save image file after copying it Зберігати файл зображення після копіювання Show the help message at the beginning in the capture mode Показувати повідомлення довідки на початку режиму захоплення Use last region for GUI mode Використовувати останню ділянку для графічного режиму Use the last region as the default selection for the next screenshot in GUI mode Використовувати останню ділянку у якості стандартної для наступного знімка екрана у графічному режимі Show the side panel toggle button in the capture mode Показати перемикач бічної панелі в режимі захоплення Enable desktop notifications Увімкнути стільничні сповіщення Show abort notifications Показувати сповіщення про переривання Enable abort notifications Увімкнути сповіщення про переривання Show icon in the system tray Показати піктограму в системному лотку Use grim to capture screenshots Використовувати Grim для захоплення знімків Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim — це утиліта, доступна лише в Wayland для захоплення скріншотів на основі протоколу screencopy. Зазвичай її вмикають лише на мінімальних віконних менеджерах Wayland, таких як Sway, Hyprland тощо. Ask for confirmation to delete screenshot from the latest uploads Запитувати підтвердження, щоб видалити знімок екрана з останніх вивантажень Check for updates automatically Автоматично перевіряти наявність оновлень This allows you to take screenshots of Flameshot itself for example Це дозволяє робити знімки екрана самого Flameshot, наприклад Launch Flameshot daemon when computer is booted Запускати фонову службу Flameshot під час завантаження комп’ютера Show the welcome message box in the middle of the screen while taking a screenshot Показ вікна вітального повідомлення у центрі екрана під час створення знімка екрана Use a large predefined color palette Використовувати велику заздалегідь визначену палітру кольорів Copy on double click Копіювати подвійним клацанням миші Enable Copy on Double Click Увімкнути копіювання подвійним клацанням миші Copy URL and close window after uploading was successful Копіювання URL-адреси та закриття вікна після завантаження було успішним Automatically unload from memory when it is not needed Автоматично вивантажувати із пам'яті, коли не потрібне Automatically close daemon (background process) when it is not needed Автоматично закривати демон (фоновий процес), коли він не потрібен Launch in background at startup Запуск у фоновому режимі при старті Launch Flameshot daemon (background process) when computer is booted Запуск демона Flameshot (фонового процесу) при старті комп'ютера Ask before quit capture Запитувати при виході із захоплення Show the confirmation prompt before ESC quit Показувати запит на підтвердження перед виходом за допомогою ESC Enable Copy to clipboard on Double Click Увімкнути копіювання в буфер обміну подвійним клацанням Copy URL after uploading was successful Копіювати URL-адресу після успішного завантаження After copying the screenshot, save it to a file as well Після копіювання знімка екрана зберігати його до файлу Save Path Шлях збереження Change... Змінити... Use fixed path for screenshots to save Використовувати фіксований шлях знімків екрана для збереження Preferred save file extension: Бажане розширення файлу збереження: Latest Uploads Max Size Максимальний розмір останніх завантажень Imgur Application Client ID Ключ API Imgur Undo limit Скасувати обмеження Use JPG format for clipboard (PNG default) Використовуйте формат JPG для буфера обміну (типово PNG) Use lossy JPG format for clipboard (lossless PNG default) Використовувати формат JPG з втратами для буфера обміну (за замовчуванням - PNG без втрат) Copy file path after save Скопіювати шлях до файлу після збереження Copy the file path to clipboard after the file is saved Копіювати шлях до буфера обміну після збереження файлу Anti-aliasing image when zoom the pinned image Згладжування зображення під час масштабування закріпленого зображення After zooming the pinned image, should the image get smoothened or stay pixelated Після масштабування закріпленого зображення, якщо зображення згладжується або залишиться пікселізованим Upload image without confirmation Вивантажувати зображення без підтвердження Choose a Folder Обрати теку Unable to write to directory. Не вдалося записати в каталог. Show magnifier Показати лупу Enable a magnifier while selecting the screenshot area Увімкнути лупу, якщо вибрано ділянку знімка екрана Square shaped magnifier Лупа квадратної форми Make the magnifier to be square-shaped Зробити лупу квадратною Milliseconds before geometry display hides; 0 means do not hide Мілісекунд до приховування відображення геометрії; 0 означає не приховувати Set geometry display timeout (ms) Встановити час очікування відображення геометрії (мс) Selection Geometry Display Відображення геометрії вибору Display Location Розташування відображення None Ні Top Left Зверху ліворуч Top Right Зверху праворуч Bottom Left Внизу ліворуч Bottom Right Внизу праворуч Center У центрі Quality range of 0-100; Higher number is better quality and larger file size Діапазон якості від 0 до 100; вище число означає кращу якість і більший розмір файлу JPEG Quality Якість JPEG Reverse arrow Зворотна стрілка Draw the arrow head first Спочатку малювати головку стрілки Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Останні відвантаження Screenshots history is empty Історія знімків екрана порожня Copy URL Копіювати URL URL copied to clipboard. URL скопійовано до буфера обміну. Open in browser Відкрити у вебоглядачі Confirm to delete Підтвердьте видалення Are you sure you want to delete a screenshot from the latest uploads and server? Ви впевнені, що хочете видалити знімок екрана з останніх завантажень та сервера? ImgS3Uploader Upload image to S3 Вивантаження зображення на S3 Uploading Image Вивантаження зображення Uploading Image... Вивантаження зображення... Delete image from S3 Видаліть зображення з S3 Deleting image... Видалення зображення... URL copied to clipboard. URL скопійовано до буферу обміну. Unable to remove screenshot from the remote storage. Не вдалося видалити знімок екрана з віддаленого сховища. Network error Помилка мережі Possibly it doesn't exist anymore Можливо, його вже не існує Do you want to remove screenshot from local history anyway? Ви все одно хочете видалити знімок екрана з місцевої історії? Remove screenshot from history? Видалити знімок екрана з історії? Retrieving configuration file with s3 creds... Отримання конфігураційного файлу з параметрами доступу до s3 ... S3 Creds URL is not found in your configuration file S3 Creds URL не знайдено у вашому файлі конфігурації Error Помилка Unable to upload screenshot, please check your internet connection and try again Не вдається завантажити знімок екрана, перевірте підключення до Інтернету та повторіть спробу Unable to get s3 credentials, please check your VPN connection and try again Не вдалося отримати конфігурацію для s3, перевірити своє з'єднання VPN і повторити спробу ImgS3UploaderTool Upload the selection to S3 bucket Вивантажити виділення до S3 ImgUploadDialog Upload Confirmation Підтвердження вивантаження Do you want to upload this capture? Вивантажити цей знімок? Upload without confirmation Вивантажити без підтвердження ImgUploader Upload image to S3 Вивантажити зображення на S3 Uploading Image Вивантаження зображення Upload image Вивантажити зображення Unable to open the URL. Не вдалось відкрити URL. URL copied to clipboard. URL скопійовано до буферу обміну. Screenshot copied to clipboard. Знімок скопійовано до буферу обміну. Deleting image... Видалення зображення... Uploading Image... Вивантаження зображення... Copy URL Скопіювати URL Open URL Відкрити URL Delete image Видалити зображення Image to Clipboard. Зображення до буферу обміну. ImgUploaderBase Upload image Вивантажити зображення Uploading Image Вивантаження зображення Copy URL Копіювати URL-адресу Open URL Відкрити URL-адресу Delete image Видалити зображення Image to Clipboard. Зображення до буфера обміну. Save image Зберегти зображення Unable to open the URL. Не вдалося відкрити URL-адресу. URL copied to clipboard. URL-адресу скопійовано в буфер обміну. Screenshot copied to clipboard. Знімок екрана скопійовано до буфера обміну. Unable to save the screenshot to disk. Не вдалося зберегти знімок екрана на диск. Screenshot saved. Знімок екрана збережено. ImgUploaderTool Imgage uploader tool Інструмент вивантаження зображень Image uploader tool Інструмент вивантаження зображень Image Uploader Вивантажувач зображень Upload the selection Вивантажити виділений фрагмент ImgurUploader Upload to Imgur Відвантажити на Imgur Uploading Image Відвантаження зображення Copy URL Копіювати URL Open URL Відкрити URL Delete image Видалити зображення Image to Clipboard. Зображення до буфера обміну. Unable to open the URL. Не вдалось відкрити URL. URL copied to clipboard. URL скопійовано до буфера обміну. Screenshot copied to clipboard. Знімок скопійовано до буфера обміну. ImgurUploaderTool Image Uploader Відвантаження зображень Upload the selection to Imgur Відвантажити вибране на Imgur InfoWindow About Про програму Icon Піктограма License Ліцензія GPLv3+ GPLv3+ Version Версія Flameshot v Flameshot v OS Info Інформація про ОС Copy Info Копіювати інформацію SPACEBAR Пробіл Right Click Права кнопка миші Mouse Wheel Колесо миші Move selection 1px Перемістити виділення на 1px Resize selection 1px Змінити розмір виділення на 1px Quit capture Вийти із захоплення екрану Copy to clipboard Копіювати до буферу обміну Save selection as a file Зберегти вибране до файлу Undo the last modification Скасувати останню зміну Toggle visibility of sidebar with options of the selected tool Переключити видимість бічної панелі Show color picker Показати вибір кольору Change the tool's thickness Змінити товщину інструменту Available shortcuts in the screen capture mode. Доступні комбінації клавіш у режимі захоплення екрану. Key Клавіша Description Опис <u><b>License</b></u> <u><b>Ліцензія</b></u> <u><b>Version</b></u> <u><b>Версія</b></u> <u><b>Shortcuts</b></u> <u><b>Комбінації клавіш</b></u> InvertTool Invert Інвертувати Set Inverter as the paint tool Установити Інвертор інструментом малювання LineTool Line Лінія Set the Line as the paint tool Вибрати лінію інструментом малювання MarkerTool Marker Маркер Set the Marker as the paint tool Вибрати маркер інструментом малювання MoveTool Move Переміщення Move the selection area Перемістити вибір PencilTool Pencil Олівець Set the Pencil as the paint tool Вибрати олівець інструментом малювання PinTool Pin Tool Прикріплення Pin image on the desktop Прикріпити зображення до стільниці PinWidget Context menu Контекстне меню Copy to clipboard Копіювати до буфера обміну Save to file Зберегти у файл Rotate Right Повернути вправо Rotate Left Повернути вліво Increase Opacity Збільшити непрозорість Decrease Opacity Зменшити непрозорість Close Закрити PixelateTool Pixelate Розмиття Set Pixelate as the paint tool. Встановити розмивання як інструмент малювання. Set Pixelate as the paint tool Обрати Pixelate інструментом для малювання PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Не вдалося зареєструвати %1. Помилка: %2 Failed to unregister %1. Error: %2 Не вдалося скасувати реєстрацію %1. Помилка: %2 QObject Save Error Помилка збереження Capture saved as Знімок збережено як Capture saved to clipboard. Знімок збережено в буфер обміну. Capture saved to clipboard Знімок збережено до буфера обміну Error while saving to clipboard Помилка під час збереження в буфер обміну Error trying to save as Помилка під час збереження як Save screenshot Зберегти знімок екрана Path copied to clipboard as Шлях скопійовано до буфера обміну як Saving canceled Збереження скасовано Save canceled Збереження скасовано Capture is saved and copied to the clipboard as Захоплення збережено і скопійовано в буфер обміну як Unable to connect via DBus Не вдалось підключитися через DBus Powerful yet simple to use screenshot software. Потужне, але просте у використанні програмне забезпечення для знімків екрана. See Подивитись Capture the entire desktop. Захоплення всієї стільниці. Open the capture launcher. Відкрити панель захоплення. Start a manual capture in GUI mode. Запустити ручне захоплення в графічному режимі. Configure Налаштувати Capture a single screen. Захоплення одного екрана. Path where the capture will be saved Шлях, куди збережеться знімок Capture screenshot of all monitors at the same time. Зробити знімок екрана зі всіх моніторів одночасно. Capture a screenshot of the specified monitor. Зробити знімок екрана зазначеного монітора. Existing directory or new file to save to Наявний каталог або новий файл для збереження Save the capture to the clipboard Зберегти знімок у буфер обміну Pin the capture to the screen Закріпити вибрану ділянку на екрані Upload screenshot Вивантажити знімок екрана Delay time in milliseconds Час затримки в мілісекундах Repeat screenshot with previously selected region Повторити знімок екрана з раніше вибраною ділянкою Screenshot region to select Вибір ділянки знімка екрана Set the filename pattern Задати шаблон назви файлу Accept capture as soon as a selection is made Застосувати вибір ділянки, коли її обрано Enable or disable the trayicon Увімкніть або вимкніть значок у лотку Enable or disable run at startup Дозволити або заборонити запуск при завантаженні Enable or disable the notifications Увімкнути або вимкнути сповіщення Check the configuration for errors Перевірити налаштування для помилок Show the help message in the capture mode Показувати довідкові повідомлення в режимі захоплення Define the main UI color Визначте основний колір інтерфейсу користувача Define the contrast UI color Визначте контрастний колір інтерфейсу Print raw PNG capture Необроблене зображення PNG Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Геометрія друку виділеного файлу у форматі WxH+X+Y. Якщо нічого не вказано, нічого не робиться Define the screen to capture (starting from 0) Визначте екран для вибору ділянки (починаючи з 0) Invalid delay, it must be a number greater than 0 Неприпустима затримка, вона має бути числом більшим за 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Неприпустима ділянка, використовуйте «WxH+X+Y» або «all» або «screen0/screen1/...». Invalid path, must be an existing directory or a new file in an existing directory Неприпустимий шлях. Укажіть наявний каталог або новий файл у наявному каталозі Define the screen to capture Визначте екран для захоплення default: screen containing the cursor типово: екран, що містить курсор миші Screen number Номер екрана Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Недійсний колір, цей прапорець підтримує такі формати: - #RGB (кожне з R, G і B — це одна шістнадцяткова цифра) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Такі кольори, як «синій» або «червоний» Можливо, вам доведеться екранувати знак «#» отак «\ #FFF» Invalid delay, it must be higher than 0 Недійсна затримка, вона повинна бути вищою за 0 Invalid screen number, it must be non negative Недійсний номер екрана, він має бути додатним Invalid path, it must be a real path in the system Недійсний шлях, він має бути наявним шляхом у системі Invalid value, it must be defined as 'true' or 'false' Недійсне значення, воно має визначатися як «true» або «false» Error Помилка Unable to write in Не вдалось зберегти Requested screen exceeds screen count Запитаний екран перевищує кількість екранів Full screen screenshot pinned to screen Знімок усього екрана прикріплено на екран URL copied to clipboard. URL скопійовано до буфера обміну. Options Параметри Arguments Аргументи arguments аргументи Subcommands Підкоманди subcommands підкоманди Usage Використання options параметри Per default runs Flameshot in the background and adds a tray icon for configuration. Flameshot типово запускається у фоновому режимі та додається піктограма лотка для конфігурації. Hi, I'm already running! You can find me in the system tray. Привіт, я вже працюю! Ви можете знайти мене в системному треї. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Привіт, я тут! Клацніть по значку в лотку, щоб зробити знімок екрана, або клацніть правою кнопкою, щоб побачити більше параметрів. Toggle side panel Показати/сховати бічну панель Resize selection left 1px Змінити розмір виділення ліворуч на 1 піксель Resize selection right 1px Змінити розмір виділення праворуч на 1 піксель Resize selection up 1px Змінити розмір виділення вгору на 1 піксель Resize selection down 1px Змінити розмір виділення вниз на 1 піксель Select entire screen Виберіть весь екран Move selection left 1px Перемістити виділення вліво на 1 піксель Move selection right 1px Перемістити виділення вправо на 1 піксель Move selection up 1px Перемістити виділення вгору на 1 піксель Move selection down 1px Перемістити виділення вниз на 1 піксель Commit text in text area Фіксувати текст у текстовій області Delete current tool Видалити поточний інструмент Quit capture Вийти із захоплення екрана Screenshot history Історія знімків екрана Capture screen Захоплення екрана Show color picker Показати вибір кольору Change the tool's size Змінення розміру інструмента Change the tool's thickness Змінити товщину інструмента RectangleTool Rectangle Прямокутник Set the Rectangle as the paint tool Вибрати прямокутник інструментом малювання RedoTool Redo Повторити Redo the next modification Повторити наступну зміну SaveTool Save Зберегти Save screenshot to a file Зберегти знімок екрана у файл Save the capture Зберегти знімок ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Не вдалося визначити стільничне середовище (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Універсальний адаптер захоплення екрана Wayland вимагає Grim як компонент захоплення екрана Wayland. Якщо компонент захоплення екрана відсутній, будь ласка, встановіть його! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Якщо параметр useGrimAdapter не ввімкнено, буде використано протокол DBus. Слід зазначити, що використання протоколу DBus під керуванням Wayland не рекомендується. Рекомендується ввімкнути параметр useGrimAdapter у flameshot.ini, щоб активувати загальний адаптер скріншотів Wayland на основі Grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Компонент скріншотів Grim реалізовано на основі Wlroots, його не можна використовувати в GNOME або подібних середовищах робочого столу Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Не вдається визначити середовище робочого столу (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Підказка: спробуйте встановити змінну середовища XDG_CURRENT_DESKTOP. Unable to capture screen Не вдалося захопити екран SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection Прямокутне виділення Set Selection as the paint tool Вибрати прямокутне виділення інструментом малювання SetShortcutDialog Set Shortcut Встановити комбінацію клавіш Enter new shortcut to change Введіть нову комбінацію Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Натисніть Esc, щоб скасувати, або ⌘+Backspace, щоб вимкнути комбінацію клавіш. Press Esc to cancel or Backspace to disable the keyboard shortcut. Натисніть Esc, щоб скасувати, або Backspace, щоб вимкнути комбінацію клавіш. Flameshot must be restarted for changes to take effect. Flameshot потрібно перезапустити, щоб застосувати зміни. ShortcutsWidget Hot Keys Гарячі клавіші Available shortcuts in the screen capture mode. Доступні комбінації клавіш у режимі захоплення екрана. Description Опис Key Клавіша Left Double-click Подвійне клацання лівою кнопкою миші Toggle side panel Перемикання бічної панелі Grab a color from the screen Resize selection left 1px Змінити розмір виділення вліво на 1px Resize selection right 1px Змінити розмір виділення праворуч на 1px Resize selection up 1px Змінити розмір виділення вгору на 1px Resize selection down 1px Змінити розмір виділення вниз на 1px Symmetrically decrease width by 2px Симетрично зменшити ширину на 2 пікселі Symmetrically increase width by 2px Симетрично збільшити ширину на 2 пікселі Symmetrically increase height by 2px Симетрично збільшити висоту на 2 пікселі Symmetrically decrease height by 2px Симетрично зменшити висоту на 2 пікселі Select entire screen Вибрати весь екран Move selection left 1px Перемістити виділення вліво на 1px Move selection right 1px Перемістити виділення вправо на 1px Move selection up 1px Перемістити виділення вгору на 1px Move selection down 1px Перемістити виділення вниз на 1px Commit text in text area Зафіксувати текст у текстовій області Delete selected drawn object Видалити вибраний намальований об'єкт Cancel current selection Скасувати поточний вибір Delete current tool Видалити поточний інструмент Capture screen Захоплення екрана Screenshot history Журнал знімків екрана SidePanelWidget Active thickness: Активна товщина: Active color: Активний колір: Press ESC to cancel Натисніть Esc для скасування Active tool size: Розмір активного інструмента: Active Color: Активний колір: Grab Color Визначити колір з екрана Display grid Сітка відображення SizeDecreaseTool Decrease Tool Size Зменшити розмір інструменту Decrease the size of the other tools Зменште розмір інших інструментів SizeIncreaseTool Increase Tool Size Збільшити розмір інструменту Increase the size of the other tools Збільшити розмір інших інструментів SizeIndicatorTool Selection Size Indicator Індикатор розміру виділення Show X and Y dimensions of the selection Показати розміри X і Y вибраного Show the dimensions of the selection (X Y) Показує розмір виділення (X Y) StrftimeChooserWidget Century (00-99) Століття (00-99) Year (00-99) Рік (00-99) Year (2000) Рік (2000) Month Name (jan) Назва місяця (січ) Month Name (january) Назва місяця (січень) Month (01-12) Місяць (01-12) Week Day (1-7) День тижня (1-7) Week (01-53) Тиждень (01-53) Day Name (mon) Назва дня тижня (пн) Day Name (monday) Назва дня тижня (понеділок) Day (01-31) День (01-31) Day of Month (1-31) День місяця (1-31) Day (001-366) День (001-366) Time (%H-%M-%S) Час (%H-%M-%S) Time (%H-%M) Час (%H-%M) Hour (00-23) Година (00-23) Hour (01-12) Година (01-12) Minute (00-59) Хвилина (00-59) Second (00-59) Секунда (00-59) Full Date (%m/%d/%y) Повна дата (%m/%d/%y) Full Date (%Y-%m-%d) Повна дата (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Довідка Flameshot TextConfig StrikeOut Перекреслення Underline Підкреслення Bold Грубий Italic Курсив Left Align Вирівнювання за лівим краєм Center Align Вирівнювання по центру Right Align Вирівнювання за правим краєм TextTool Text Текст Add text to your capture Додати текст на знімок TrayIcon &Take Screenshot &Зробити знімок &Open Launcher &Відкрити панель запуску &Configuration &Конфігурація &About &Про застосунок Check for updates Перевірити наявність оновлень New version %1 is available Доступна нова версія %1 &Quit Ви&йти &Latest Uploads &Останні вивантаження &Open Save Path &Відкрити шлях для збереження UIcolorEditor UI Color Editor Редактор кольору інтерфейсу Change the color moving the selectors and see the changes in the preview buttons. Змініть колір пересуваючи виділення та перегляньте зміни в кнопках перегляду. Select a Button to modify it Виберіть кнопку, щоб змінити її Main Color Основний колір Click on this button to set the edition mode of the main color. Натисніть на цю кнопку, щоб включити режим редагування основного кольору. Contrast Color Контрасний колір Click on this button to set the edition mode of the contrast color. Натисніть на цю кнопку, щоб включити режим редагування контрасного кольору. UndoTool Undo Скасувати Undo the last modification Скасувати останню зміну UpdateNotificationWidget New Flameshot version %1 is available Доступна нова версія Flameshot %1 Ignore Нехтувати Later Пізніше Update Оновити UploadHistory Upload History Історія вивантажень Screenshots history is empty Історія знімків екрана порожня UploadLineItem Form Форма TextLabel TextLabel Copy URL Копіювати URL-адресу Open In Browser Відкрити у переглядачі Confirm to delete Підтвердьте видалення Are you sure you want to delete a screenshot from the latest uploads and server? Ви впевнені, що хочете видалити знімок екрана з останніх вивантажень та сервера? UploadStorageConfig Upload storage Сховище завантажень Imgur storage Сховище Imgur S3 storage (require config.ini file with s3 credentials) Сховище S3 (потрібен файл config.ini з обліковими даними s3) UtilityPanel Close Закрити <Empty> <Порожньо> Hide Сховати VisualsEditor Opacity of area outside selection: Непрозорість області за межами вибору: UI Color Editor Редактор кольору інтерфейсу Colorpicker Editor Редактор вибору кольорів Button Selection Вибір кнопок Select All Вибрати все color_widgets::ColorDialog Pick Вибрати color_widgets::ColorPalette Unnamed Без назви color_widgets::ColorPaletteModel Unnamed Без назви %1 (%2 colors) %1 (%2 кольори) color_widgets::ColorPaletteWidget Open a new palette from file Відкрити нову палітру з файлу Create a new palette Створити нову палітру Duplicate the current palette Дублювати поточну палітру Delete the current palette Видалити поточну палітру Revert changes to the current palette Скасувати зміни поточної палітри Save changes to the current palette Зберегти зміни в поточну палітру Add a color to the palette Додати колір до палітри Remove the selected color from the palette Вилучити обраний колір з палітри New Palette Нова палітра Name Назва GIMP Palettes (*.gpl) Палітри GIMP (*.gpl) Palette Image (%1) Зображення палітри (%1) All Files (*) Усі файли (*) Open Palette Відкрити палітру Failed to load the palette file %1 Не вдалося завантажити файл палітри %1 color_widgets::GradientEditor Add Color Додати колір Remove Color Вилучити колір Edit Color... Змінити колір... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 кольорів) color_widgets::Swatch Clear Color Очистити колір %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_vi.ts ================================================ AbstractWidgetList Add New Thêm mới Move Up Di chuyển lên Move Down Di chuyển xuống Remove Gỡ bỏ AcceptTool Accept Chấp nhận Accept the capture Chấp nhận ảnh chụp AppLauncher App Launcher Trình khởi chạy ứng dụng Choose an app to open the capture Chọn ứng dụng để mở ảnh chụp AppLauncherWidget Open With Mở bằng Launch in terminal Chạy trong terminal Keep open after selection Giữ mở sau khi lựa chọn Error Lỗi Unable to launch in terminal. Không mở khởi chạy trong terminal. Unable to write in Không thể viết vào ArrowTool Arrow Mũi tên Set the Arrow as the paint tool Chọn công cụ này để vẽ mũi tên BlurTool Blur Desenfocament Set Blur as the paint tool Estableix el desenfocament com a eina de dibuix CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region Vùng hình chữ nhật Full Screen (Current Display) Toàn màn hình (màn hình hiện tại) Full Screen (All Monitors) Toàn màn hình (tất cả các màn hình) No Delay Không độ trễ second giây seconds giây Take new screenshot Chụp ảnh màn hình mới Area: Khu vực: Capture Launcher Trình khởi chạy chụp màn hình TextLabel Nhãn văn bản Capture Mode Chế độ chụp Delay: Độ trễ: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen Impossible capturar la pantalla Không thể chụp màn hình Mouse Chuột Select screenshot area Chọn khu vực chụp màn hình Mouse Wheel Con lăn chuột Change tool size Thay đổi kích cỡ công cụ Right Click Nhấp chuột phải Show color picker Hiện trình chọn màu Open side panel Mở bảng điều khiển bên Esc Esc Exit Thoát Quit Capture Thoát trình chụp Are you sure you want to quit capture? Bạn có chắc chắn muốn hủy chụp không? Do not show this again Không bao giờ hiển thị nữa Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot đã mất tiêu điểm. Các phím tắt sẽ không hoạt động cho đến khi bạn nhấp vào đâu đó. Configuration error resolved. Launch `flameshot gui` again to apply it. Đã giải quyết lỗi cấu hình. Khởi chạy lại `flameshot gui` để áp dụng. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. Tool Settings Cài đặt công cụ CircleCountTool Circle Counter Bộ đếm vòng tròn Add an autoincrementing counter bubble Thêm các vòng tròn có ghi số theo thứ tự nhấp chuột CircleTool Circle Hình tròn Set the Circle as the paint tool Chọn công cụ này để vẽ hình tròn ColorDialog Select Color Chọn màu Saturation Độ bão hòa Hue Sắc độ màu Hex Hex Blue Xanh dương Value Giá trị Green Xanh lá Alpha Độ trong suốt Red Đỏ ColorGrabWidget Accept color Chấp nhận màu Enter or Left Click Nhấn Enter hoặc nhấp chuột trái Precisely select color Trình chọn màu chuẩn Hold Left Click Nhấn giữ chuột trái Toggle magnifier Bật/tắt kính lúp Space or Right Click Nhấn phím cách hoặc nhấp chuột phải Cancel Hủy Esc Esc ColorPickerEditor Edit Preset: Chỉnh sửa mẫu thiết lập: Enter color to update preset Nhập màu để cập nhật mẫu thiết lập Update Cập nhật Press button to update the selected preset Nhấn nút này để cập nhật mẫu thiết lập đã chọn Delete Xóa Press button to delete the selected preset Nhấn nút để xóa cài mẫu thiết lập đã chọn Add Preset: Thêm mẫu thiết lập: Enter color manually or select it using the color-wheel Nhập mẫu thiết lập theo cách thủ công hoặc điều chỉnh vòng màu Add Thêm Press button to add preset Nhấn nút này để thêm mẫu thiết lập Error Lỗi Unable to add preset. Maximum limit reached. Không thể thêm mẫu thiết lập vì đã đạt đến giới hạn tối đa. Unable to remove preset. Minimum limit reached. Không thể xóa bỏ mẫu thiết lập vì đã đạt đến giới hạn tối thiếu. ConfigErrorDetails Configuration errors Lỗi cấu hình ConfigHandler Unrecognized setting: '%1' Cài đặt không dược nhận dạng: '%1' Unrecognized shortcut name: '%1'. Tên phím tắt không được nhận dạng: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Xung đột phím tắt: '%1' vè '%2' có cùng phím tắt: %3 Bad value in '%1'. Expected: %2 Giá trị không hợp lệ ở '%1'. Dự định: %2 You have successfully resolved the configuration error. Bạn đã giải quyết thành công được lỗi cấu hình. The configuration contains an error. Open configuration to resolve. Cấu hình có lỗi. Mở cấu hình để giải quyết. Bad config key '%1' in ConfigHandler. Please report this as a bug. Khóa cấu hình không hợp lệ '%1' trong ConfigHandler. Vui lòng báo cáo lỗi này. ConfigResolver Resolve configuration errors Giải quyết lỗi cấu hình <b>You must resolve all errors before continuing:</b> <b>Bạn phải giải quyết tất cả lỗi trước khi tiếp tục:</b> Reset Đặt lại Reset to the default value. Đặt lại thành giá trị mặc định. Remove Gỡ bỏ Remove this setting. Gỡ bỏ cài đặt này. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Một vài phím tắt đã xảy ra xung đột. Điều này KHÔNG ngăn Flameshot khởi động. Vui lòng xử lí chúng thủ công trong tệp cấu hình. Resolve all Giải quyết tất cả Resolve all listed errors. Giải quyết tất cả các lỗi đã được liệt kê. Details Chi tiết ConfigWindow Configuration Cấu hình Interface Giao diện Filename Editor Chỉnh sửa tên tệp General Chung Shortcuts Phím tắt Resolve Giải quyết <b>Configuration file has errors. Resolve them before continuing.</b> <b>Tệp cấu hình có lỗi. Vui lòng giải quyết chúng trước khi tiếp tục</b> Controller New version %1 is available New version %1 is available You have the latest version You have the latest version Failed to get information about the latest version. Failed to get information about the latest version. Error Error Unable to close active modal widgets Unable to close active modal widgets &Open Launcher &Open Launcher &Configuration &Configuration &About &About Check for updates Check for updates &Latest Uploads &Latest Uploads &Information &Informació &Quit &Quit &Take Screenshot &Take Screenshot CopyTool Copy Sao chép Copy selection to clipboard Sao chép vùng đã chọn vào bộ nhớ tạm Copy the selection into the clipboard Copy the selection into the clipboard DBusUtils Unable to connect via DBus Unable to connect via DBus ExitTool Exit Thoát Leave the capture screen Thoát khỏi màn hình trình chụp FileNameEditor Edit the name of your captures: Chỉnh sửa tên ảnh chụp của bạn: Edit: Chỉnh sửa: Preview: Xem trước: Save Lưu Saves the pattern Lưu lại mẫu Restore Khôi phục lại Reset Reinicialitza Restores the saved pattern Khôi phục lại mẫu đã lưu Clear Làm trống Deletes the name Xóa tên Flameshot Error Lỗi Unable to close active modal widgets Không thể đóng các tiện ích dạng hộp thoại đang hoạt động URL copied to clipboard. Đã sao chép URL vào bộ nhớ tạm. FlameshotDaemon New version %1 is available Đã có phiên bản mới %1 You have the latest version Bạn đã dùng phiên bản mới nhất Failed to get information about the latest version. Không thể lấy được thông tin về phiên bản mới. Unable to connect via DBus Không thể kết nối thông qua DBus GeneneralConf Show help message Mostra el missatge d'ajuda Show the help message at the beginning in the capture mode. Mostra el missatge d'ajuda en iniciar el mode de captura. Show desktop notifications Mostra les notificacions d'escriptori Show tray icon Mostra la icona en la barra de tasques Show the systemtray icon Mostra la icona en la barra de tasques Import Importar Error Error Unable to read file. Impossible llegir el fitxer. Unable to write file. Impossible escriure al fitxer. Save File Guardar Arxiu Confirm Reset Confirmar Reset Are you sure you want to reset the configuration? Esteu segur que voleu reiniciar la configuració? Configuration File Fitxer de Configuració Export Exportar Reset Reset Launch at startup Llançament a l'inici GeneralConf Import Nhập Error Lỗi Unable to read file. Không thể đọc tệp. Unable to write file. Không thể ghi tệp. Save File Lưu tệp Confirm Reset Xác nhận đặt lại Are you sure you want to reset the configuration? Bạn có chắc chắn muốn đặt lại cấu hình không? Show help message Hiển thị bảng trợ giúp Show the help message at the beginning in the capture mode. Show the help message at the beginning in the capture mode. Show the side panel button Hiển thị nút bảng điều khiển bên Show the side panel toggle button in the capture mode. Show the side panel toggle button in the capture mode. Show desktop notifications Hiển thị thông báo máy tính Show tray icon Hiển thị biểu tượng trong khay Show the systemtray icon Show the systemtray icon Confirmation required to delete screenshot from the latest uploads Cần xác nhận để xóa ảnh chụp màn hình khỏi các lần tải lên gần đây Configuration File Tệp cấu hình Export Xuất ra Reset Đặt lại Automatic check for updates Tự động kiểm tra cập nhật mới Allow multiple flameshot GUI instances simultaneously Cho phép nhiều phiên bản giao diện đồ họa Flameshot chạy đồng thời Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup Launch at startup Launch Flameshot Launch Flameshot Show welcome message on launch Hiện thông báo chào mừng khi khởi chạy Use large predefined color palette Sử dụng bảng màu với nhiều màu hơn Copy URL after upload Sao chép URL sau khi đăng tải Copy URL and close window after upload Copy URL and close window after upload Save image after copy Lưu lại ảnh sau khi sao chép Save image file after copying it Save image file after copying it Show the help message at the beginning in the capture mode Hiển thị ô hỗ trợ khi bắt đầu chế độ chụp Use last region for GUI mode Giữ định dạng của trước đó khi chụp Use the last region as the default selection for the next screenshot in GUI mode Sử dụng định dạng giao diện trước thành mặc định cho lần chụp tiếp theo Show the side panel toggle button in the capture mode Hiển thị nút mở bảng điều khiển bên trong chế độ chụp Enable desktop notifications Bật thông báo trên màn hình Show abort notifications Hiện thông báo hủy Enable abort notifications Hiện thông báo hủy Show icon in the system tray Hiển thị biểu tượng trong khay Use grim to capture screenshots Sử dụng grim để chụp ảnh màn hình Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim là tiện ích chỉ dành cho Wayland để chụp màn hình dựa trên giao thức screencopy. Nhìn chung, chỉ bật trên các trình quản lý cửa sổ Wayland tối thiểu như sway, hyprland, v. Ask for confirmation to delete screenshot from the latest uploads Yêu cầu xác nhận để xóa ảnh chụp màn hình khỏi các lần tải lên gần đây nhất Check for updates automatically Kiểm tra cập nhật mới một cách tự động This allows you to take screenshots of Flameshot itself for example Cái này cho phép bạn chụp ảnh màn hình của Flameshot chẳng hạn Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Hiển thị thông báo chào mừng ở giữa màn hình trong khi chụp ảnh Use a large predefined color palette Sử dụng một bảng màu gồm nhiều màu sắc hơn Copy on double click Sao chép khi nháy đúp chuột Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Giải phóng bộ nhớ tự động khi không cần thiết Automatically close daemon (background process) when it is not needed Tự động đóng daemon (tác vụ nền) khi không cần thiết Launch in background at startup Tự động chạy trong nền khi khởi động Launch Flameshot daemon (background process) when computer is booted Khởi chạy Flameshot daemon (tác vụ nền) khi máy tính đang khởi động Ask before quit capture Hỏi trước khi thoát trình chụp Show the confirmation prompt before ESC quit Hiện thị lời nhắc xác nhận trước khi thoát bằng nút Esc Enable Copy to clipboard on Double Click Cho phép sao chép vào bảng tạm bằng cách nháy đúp chuột Copy URL after uploading was successful Sao chép URL sau khi đăng tải thành công After copying the screenshot, save it to a file as well Sau khi sao chép ảnh chụp màn hình, ứng dụng sẽ tự động lưu nó thành tệp Save Path Đường dẫn để lưu Change... Thay đổi... Use fixed path for screenshots to save Sử dụng đường dẫn cố định để lưu ảnh chụp màn hình Preferred save file extension: Đuôi tệp cần ưu tiên: Latest Uploads Max Size Giới hạn kích thước tối đa cho các tệp vừa tải lên Imgur Application Client ID ID ứng dụng Imgur Undo limit Giới hạn lần hoàn tác Use JPG format for clipboard (PNG default) Sử dụng định dạng JPG cho bảng tạm (mặc định là PNG) Use lossy JPG format for clipboard (lossless PNG default) Sử dụng định dạng JPG "chất lượng tệ hơn" cho bảng tạm (mặc định là định dạng PNG "chất lượng tốt hơn") Copy file path after save Sao chép đường dẫn tệp sau khi lưu Copy the file path to clipboard after the file is saved Sao chép đường dẫn tệp vào bảng tạm khi tệp đã được lưu Anti-aliasing image when zoom the pinned image Làm mịn ảnh khi phóng to ảnh đang ghim After zooming the pinned image, should the image get smoothened or stay pixelated Sau khi phóng to ảnh đã ghim, ảnh sẽ trở nên mượt mà hơn thay vì nguyên dạng pixel Upload image without confirmation Đăng tải hình ảnh mà không cần xác nhận Choose a Folder Chọn thư mục Unable to write to directory. Không thể ghi vào thư mục. Show magnifier Hiển thị kính lúp Enable a magnifier while selecting the screenshot area Cho phép kính lúp khi chọn khu vực để chụp ảnh Square shaped magnifier Kính lúp hình vuông Make the magnifier to be square-shaped Làm cho kính lúp có hình vuông Milliseconds before geometry display hides; 0 means do not hide Mili giây trước khi trình kích thước ẩn đi; giá trị 0 sẽ không ẩn Set geometry display timeout (ms) Điều chỉnh thời gian chờ của trình kích thước (ms) Selection Geometry Display Lựa chọn của Trình kích thước Display Location Vị trí hiển thị None Không có Top Left Ở trên bên trái Top Right Ở trên bên phải Bottom Left Ở dưới bên trái Bottom Right Ở dưới bên phải Center Trung tâm Quality range of 0-100; Higher number is better quality and larger file size Tùy chỉnh chất lượng với phạm vi từ 0 -100; Số càng cao thì chất lượng và dung lượng càng cao JPEG Quality Chất lượng ảnh JPEG Reverse arrow Mũi tên ngược Draw the arrow head first Khi vẽ sẽ vẽ đầu của mũi tên trước Insecure Pixelate Pixelate không an toàn Draw the pixelation effect in an insecure but more asethetic way. Vẽ hiệu ứng pixel theo cách không an toàn nhưng thẩm mỹ hơn. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL Copy URL URL copied to clipboard. URL copied to clipboard. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image S'està pujant la imatge URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Error Error ImgUploadDialog Upload Confirmation Xác nhận đăng tải Do you want to upload this capture? Bạn có chắc chắn muốn đăng tấm ảnh chụp này không? Upload without confirmation Đăng tải mà không cần xác nhận ImgUploader Uploading Image S'està pujant la imatge Delete image Esborra la imatge Unable to open the URL. No es pot obrir l'URL. URL copied to clipboard. L'URL s'ha copiat al porta-retalls. Screenshot copied to clipboard. La captura s'ha copiat al porta-retalls. Copy URL Copia l'URL Open URL Obri l'URL Image to Clipboard. Imatge al porta-retalls. ImgUploaderBase Upload image Đăng tải hình ảnh Uploading Image Đang đăng tải hình ảnh Copy URL Sao chép URL Open URL Mở URL Delete image Xóa hình ảnh Image to Clipboard. Hình ảnh vào bộ nhớ tạm. Save image Lưu hình ảnh Unable to open the URL. Không thể mở URL. URL copied to clipboard. Đã sao chép URL vào bộ nhớ tạm. Screenshot copied to clipboard. Đã sao chép ảnh chụp màn hình vào bộ nhớ tạm. Unable to save the screenshot to disk. Không thể lưu ảnh chụp màn hình vào ổ đĩa. Screenshot saved. Đã lưu ảnh chụp màn hình. ImgUploaderTool Image Uploader Trình tải ảnh Upload the selection Đăng tải lựa chọn ImgurUploader Upload to Imgur Upload to Imgur Uploading Image Uploading Image Copy URL Copy URL Open URL Open URL Delete image Delete image Image to Clipboard. Image to Clipboard. Unable to open the URL. Không thể mở URL. URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. Screenshot copied to clipboard. ImgurUploaderTool Image Uploader Image Uploader Upload the selection to Imgur Upload the selection to Imgur InfoWindow About Giới thiệu về Icon Biểu tượng License Giấy phép GPLv3+ GPLv3+ Version Phiên bản Flameshot v Flameshot v OS Info Thông tin OS Copy Info Sao chép thông tin Right Click Clic dret Mouse Wheel Roda del ratolí Move selection 1px Mou la selecció 1 px Resize selection 1px Redimensiona la selecció 1 px Quit capture Ix de la captura Copy to clipboard Copia al porta-retalls Save selection as a file Guarda la selecció com a fitxer Undo the last modification Desfés l'última modificació Show color picker Mostra el selector de color Change the tool's thickness Canvia el gruix de l'eina Key Tecla Description Descripció <u><b>License</b></u> <u><b>License</b></u> <u><b>Version</b></u> <u><b>Version</b></u> <u><b>Shortcuts</b></u> <u><b>Dreceres</b></u> Available shortcuts in the screen capture mode. Dreceres disponibles en el mode de captura de pantalla. InvertTool Invert Đảo màu Set Inverter as the paint tool Sử dụng công cụ này để đảo màu ảnh LineTool Line Đường kẻ Set the Line as the paint tool Sử dụng công cụ này để vẽ đường thẳng MarkerTool Marker Đánh dấu Set the Marker as the paint tool Sử dụng công cụ này để đánh dấu (giống bút dạ quang) MoveTool Move Di chuyển Move the selection area Để di chuyển khu vực đã chọn PencilTool Pencil Bút chì Set the Pencil as the paint tool Sử dụng bút chì để vẽ PinTool Pin Tool Ghim Pin image on the desktop Ghim ảnh lên màn hình PinWidget Context menu Menu ngữ cảnh Copy to clipboard Sao chép vào bộ nhớ tạm Save to file Lưu thành tệp tin Rotate Right Xoay phải Rotate Left Xoay trái Increase Opacity Tăng độ mờ nhạt Decrease Opacity Giảm độ mờ nhạt Close Đóng PixelateTool Pixelate Làm mờ Set Pixelate as the paint tool. Chọn công cụ này để làm mờ ảnh. Set Pixelate as the paint tool Set Pixelate as the paint tool PrimaryInstanceWidget Primary instance Ví dụ chính <b>Primary instance.</b> Messages received from secondaries: <b>Phiên bản chính.</b> Tin nhắn nhận được từ phiên bản phụ: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Capture saved to clipboard. Đã lưu ảnh chụp vào bảng tạm. Error while saving to clipboard Xảy ra lỗi khi lưu vào bảng tạm Save screenshot Lưu ảnh chụp màn hình Path copied to clipboard as Đường dẫn đã được sao chép vào bảng tạm dưới dạng Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Save Error Lưu lỗi Capture saved as Đã lưu ảnh chụp dưới dạng Error trying to save as Lỗi khi thử lưu ảnh dưới dạng Unable to connect via DBus Không thể kết nối thông qua DBus Powerful yet simple to use screenshot software. Phần mềm chụp ảnh màn hình mạnh mẽ nhưng dễ sử dụng. See Thấy Capture the entire desktop. Capture the entire desktop. Open the capture launcher. Mở trình chụp. Start a manual capture in GUI mode. Bắt đầu chụp thủ công ở chế độ giao diện. Configure Cấu hình Capture a single screen. Capture a single screen. Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Chụp màn hình tất cả màn hình cùng lúc. Capture a screenshot of the specified monitor. Chụp ảnh màn hình của màn hình được chỉ định. Existing directory or new file to save to Thư mục hiện có hoặc tệp mới để lưu vào Save the capture to the clipboard Lưu ảnh chụp vào bộ nhớ tạm Pin the capture to the screen Ghim ảnh chụp trên màn hình Upload screenshot Đăng tải ảnh chụp màn hình Delay time in milliseconds Thời gian trễ tính bằng mili giây Repeat screenshot with previously selected region Lặp lại ảnh chụp màn hình với vùng đã chọn trước đó Screenshot region to select Vùng ảnh chụp để chọn Set the filename pattern Đặt mẫu tên tệp Accept capture as soon as a selection is made Chấp nhận chụp ngay khi lựa chọn được thực hiện Enable or disable the trayicon Bật hoặc tắt biểu tượng trong khay Enable or disable run at startup Bật hoặc tắt chạy khi khởi động Enable or disable the notifications Bật hoặc tắt thông báo Check the configuration for errors Kiểm tra cấu hình để tim lỗi Show the help message in the capture mode Hiển thị ô trợ giúp khi ở chế độ chụp Define the main UI color Chọn màu chính cho giao diện Define the contrast UI color Chọn màu sắc tương phản cho giao diện Print raw PNG capture In ảnh chụp PNG gốc Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified In thông số của vùng chọn theo định dạng WxH+X+Y. Không thực hiện gì nếu đã chọn chế độ raw Define the screen to capture (starting from 0) Chọn màn hình cần chụp (bắt đầu từ 0) Invalid delay, it must be a number greater than 0 Độ trễ không hợp lệ, nó cần phải là một con số lớn hơn 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Vùng không hợp lệ, sử dụng 'WxH+X+Y' hoặc 'all' hoặc 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Đường dẫn không hợp lệ, phải là một thư mục hiện có hoặc một tệp mới trong một thư mục hiện có Define the screen to capture Define the screen to capture default: screen containing the cursor mặc định: màn hình chứa con trỏ chuột Screen number Số màn hình Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Màu không hợp lệ, cờ này hỗ trợ các định dạng sau: - #RGB (mỗi R, G và B là một chữ số hex đơn) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Tên màu sắc như 'blue' (xanh dương) hay 'red' (đỏ) Bạn có thể cần phải thoát khỏi dấu '#' như trong '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Số màn hình không hợp lệ, nó cần phải là một số không âm Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Giá trị không hợp lệ, phải được định nghĩa là 'true' (đúng) hoặc 'false' (sai) Error Lỗi Unable to write in Không thể viết vào URL copied to clipboard. URL copied to clipboard. Options Tùy chọn Arguments Arguments arguments arguments Subcommands Các lệnh phụ subcommands các lệnh phụ Usage Sử dụng options tùy chọn Per default runs Flameshot in the background and adds a tray icon for configuration. Mặc định, Flameshot sẽ chạy ngầm và hiển thị biểu tượng ở khay hệ thống để cấu hình. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Chào bạn, tôi ở đây nè! Nhấp vào biểu tượng trong khay để chụp ảnh màn hình hoặc nhấp bằng nút phải để xem thêm tùy chọn. Requested screen exceeds screen count Yêu cầu màn hình vượt quá số lượng hiện có Full screen screenshot pinned to screen Ảnh chụp toàn màn hình đã ghim vào màn hình Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture Thoát chụp Screenshot history Lịch sử chụp màn hình Capture screen Chụp màn hình Show color picker Hiện trình chọn màu Change the tool's size Thay đổi kích cỡ công cụ Change the tool's thickness Change the tool's thickness RectangleTool Rectangle Hình chữ nhật Set the Rectangle as the paint tool Chọn công cụ này để vẽ hình chữ nhật RedoTool Redo Làm lại Redo the next modification Làm lại sửa đổi tiếp theo SaveTool Save Lưu Save screenshot to a file Lưu ảnh chụp màn hình thành một tập tin Save the capture Save the capture ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! Bộ điều hợp chụp màn hình phổ thông của Wayland yêu cầu Grim làm thành phần chụp màn hình. Nếu thiếu thành phần này, vui lòng cài đặt! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter Nếu tùy chọn useGrimAdapter chưa được bật, giao thức dbus sẽ được sử dụng. Tuy nhiên, việc dùng dbus trên Wayland không được khuyến nghị. Bạn nên bật useGrimAdapter trong tập tin flameshot.ini để kích hoạt bộ điều hợp chụp màn hình Wayland dựa trên Grim grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Thành phần chụp màn hình Grim được xây dựng dựa trên wlroots, nên có thể không sử dụng được trong GNOME hoặc các môi trường desktop tương tự Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Không thể xác định được môi trường desktop (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Gợi ý: hãy thử thiết lập biến môi trường XDG_CURRENT_DESKTOP. Unable to capture screen Không thể chụp màn hình SecondaryInstanceWidget Secondary instance Phiên bản phụ <b>Secondary instance.</b> Send message to primary: <b>Phiên bản phụ.</b> Gửi tin nhắn tới phiên bản chính: Type something here... Nhập nội dung nào đó vào đây... &Send &Gửi Error sending message Lỗi gửi tin nhắn The message '%1' could not be sent to the primary. Không thể gửi tin nhắn '%1' tới địa chỉ chính. SelectionTool Rectangular Selection Lựa chọn hình chữ nhật Set Selection as the paint tool Đặt lựa chọn làm công cụ vẽ SetShortcutDialog Set Shortcut Đặt phím tắt Enter new shortcut to change Hãy nhập phím tắt mới để đổi Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Nhấn Esc để hủy hoặc ⌘ + Phím cách để vô hiệu hóa phím tắt. Press Esc to cancel or Backspace to disable the keyboard shortcut. Nhấn Esc để hủy hoặc Phím cách để vô hiệu hóa phím tắt. Flameshot must be restarted for changes to take effect. Cần khởi động lại Flameshot để những thay đổi có hiệu lực. ShortcutsWidget Hot Keys Phím nóng Available shortcuts in the screen capture mode. Các phím tắt có sẵn trong chế độ chụp màn hình. Description Miêu tả Key Phím Left Double-click Nháy đúp chuột trái Toggle side panel Bật/Tắt bảng điều khiển bên Grab a color from the screen Lấy một màu từ màn hình Resize selection left 1px Kéo kích thước cạnh trái thêm 1px Resize selection right 1px Kéo kích thước cạnh phải thêm 1px Resize selection up 1px Kéo kích thước cạnh trên thêm 1px Resize selection down 1px Kéo kích thước cạnh dưới thêm 1px Symmetrically decrease width by 2px Giảm chiều rộng 2px Symmetrically increase width by 2px Tăng chiều rộng 2px Symmetrically increase height by 2px Tăng chiều cao 2px Symmetrically decrease height by 2px Giảm chiều cao 2px Select entire screen Chọn bao phủ toàn bộ màn hình Move selection left 1px Di chuyển khu vực đã chọn sang trái 1px Move selection right 1px Di chuyển khu vực đã chọn sang phải 1px Move selection up 1px Di chuyển khu vực đã chọn lên trên 1px Move selection down 1px Di chuyển khu vực đã chọn xuống dưới 1px Commit text in text area Xác nhận nội dung văn bản đã nhập Delete selected drawn object Xóa đối tượng đã chọn Cancel current selection Hủy lựa chọn hiện tại Delete current tool Delete current tool Capture screen Chụp màn hình Screenshot history Lịch sử chụp màn hình SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel Press ESC to cancel Active tool size: Kích thước công cụ hiện tại: Active Color: Màu đang dùng hiện tại: Grab Color Lấy màu Display grid Hiển thị lưới SizeDecreaseTool Decrease Tool Size Giảm kích thước công cụ Decrease the size of the other tools Giảm kích thước của các công cụ SizeIncreaseTool Increase Tool Size Tăng kích thước công cụ Increase the size of the other tools Tăng kích thước của các công cụ SizeIndicatorTool Selection Size Indicator Selection Size Indicator Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) Show the dimensions of the selection (X Y) StrftimeChooserWidget Century (00-99) Thế kỉ (00-99) Year (00-99) Năm - ngắn gọn (00-99) Year (2000) Năm - đầy đủ (2000) Month Name (jan) Tên tháng - ngắn gọn (jan) Month Name (january) Tên tháng - đầy đủ (january) Month (01-12) Tháng (01-12) Week Day (1-7) Ngày trong tuần (1-7) Week (01-53) Tuần (01-53) Day Name (mon) Thứ - ngắn gọn (mon) Day Name (monday) Thứ - đầy đủ (monday) Day (01-31) Ngày (01-31) Day of Month (1-31) Day trong tháng (1-31) Day (001-366) Ngày trong năm (001-366) Hour (00-23) Giờ - định dạng 24h (00-23) Hour (01-12) Giờ - định dạng 12h (01-12) Minute (00-59) Phút (00-59) Second (00-59) Giây (00-59) Full Date (%m/%d/%y) Tháng/ngày/năm (%m/%d/%y) Full Date (%Y-%m-%d) Năm-tháng-ngày (%Y-%m-%d) Full Date (%d-%m-%Y) Ngày đầy đủ (%d-%m-%Y) Time (%H-%M-%S) Giờ-phút-giây (%H-%M-%S) Time (%H-%M) Giờ-phút (%H-%M) SystemNotification Flameshot Info Thông tin Flameshot TextConfig StrikeOut Đường gạch xóa Underline Gạch chân Bold Bôi đen Italic In nghiêng Left Align Căn trái Center Align Căn giữa Right Align Căn phải TextTool Text Văn Bản Add text to your capture Thêm kí tự vào ảnh chụp của bạn TrayIcon &Take Screenshot &Chụp ảnh màn hình &Open Launcher &Mở trình khởi chạy &Configuration &Cấu hình &About &Về chúng tôi Check for updates Kiểm tra các bản cập nhật New version %1 is available Đã có phiên bản mới %1 &Quit &Thoát &Latest Uploads &Tải lên mới nhất &Open Save Path &Mở đường dẫn lưu UIcolorEditor UI Color Editor UI Color Editor Change the color moving the selectors and see the changes in the preview buttons. Thay đổi màu sắc bằng cách di chuyển các thanh chọn và xem sự thay đổi trong các nút xem trước. Select a Button to modify it Chọn nút cần sửa đổi Main Color Màu chính Click on this button to set the edition mode of the main color. Nhấn vào nút này để chỉnh sửa màu chính của giao diện. Contrast Color Màu tương phản Click on this button to set the edition mode of the contrast color. Nhấn vào nút này để thay đổi màu tương phản. UndoTool Undo Hoàn Tác Undo the last modification Hoàn tác sửa đổi cuối cùng UpdateNotificationWidget New Flameshot version %1 is available Đã có phiên bản Flameshot mới %1 Ignore Không quan tâm Later Sau Update Cập Nhật UploadHistory Upload History Đăng tải lịch sử Screenshots history is empty Lịch sử chụp màn hình trống UploadLineItem Form Hình thức TextLabel Nhãn văn bản Copy URL Sao chép URL Open In Browser Mở bằng trình duyệt Confirm to delete Xác nhận để xóa Are you sure you want to delete a screenshot from the latest uploads and server? Bạn có chắc muốn xóa ảnh chụp màn hình khỏi mục tải lên gần đây và khỏi máy chủ không? UtilityPanel Close Đóng <Empty> <Trống> VisualsEditor Opacity of area outside selection: Độ mờ của vùng bên ngoài vùng chọn: UI Color Editor Trình chỉnh sửa màu giao diện Colorpicker Editor Trình chọn màu Button Selection Lựa chọn nút Select All Chọn tất cả color_widgets::ColorDialog Pick Chọn color_widgets::ColorPalette Unnamed Không tên color_widgets::ColorPaletteModel Unnamed Không tên %1 (%2 colors) %1 (%2 màu) color_widgets::ColorPaletteWidget Open a new palette from file Mở một bảng màu mới từ tệp Create a new palette Tạo một bảng màu mới Duplicate the current palette Nhân đôi bảng màu hiện tại Delete the current palette Xóa bảng màu hiện tại Revert changes to the current palette Đặt lại các thay đổi của bảng màu hiện tại Save changes to the current palette Lưu lại thay đối của bảng màu hiện tại Add a color to the palette Thêm màu vào bảng màu Remove the selected color from the palette Gỡ bỏ màu đang chọn trong bảng màu New Palette Bảng màu mới Name Tên GIMP Palettes (*.gpl) Bảng màu GIMP (*.gpl) Palette Image (%1) Ảnh bảng màu (%1) All Files (*) Mọi tập tin (*) Open Palette Mở bảng màu Failed to load the palette file %1 Không thể tải được tệp bảng màu %1 color_widgets::GradientEditor Add Color Thêm màu Remove Color Loại bỏ màu Edit Color... Chỉnh sửa màu... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 màu) color_widgets::Swatch Clear Color Xóa màu %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_zh_CN.ts ================================================ AbstractWidgetList Add New 新增 Move Up 上移 Move Down 下移 Remove 移除 AcceptTool Accept 接受 Accept the capture 接受捕获的截图 AppLauncher App Launcher 应用启动器 Choose an app to open the capture 选择一个应用打开此截图 AppLauncherWidget Open With 用...打开 Launch in terminal 在终端中启动 Keep open after selection 选择后保持此窗口打开 Error 错误 Unable to launch in terminal. 无法在终端中启动。 Unable to write in 无法写入 ArrowTool Arrow 箭头 Set the Arrow as the paint tool 选择箭头作为绘画工具 BlurTool Blur 模糊 Set Blur as the paint tool 选择模糊作为绘画工具 CaptureLauncher <b>Capture Mode</b> <b>捕获模式</b> Rectangular Region 方形区域 Full Screen (Current Display) 全屏(当前屏幕) Full Screen (All Monitors) 全屏(所有显示器) No Delay 无延迟 second seconds Take new screenshot 获取新屏幕截图 Area: 区域: Capture Launcher 捕获启动器 TextLabel 文本标签 Capture Mode 捕获模式 Delay: 延迟: WxH+x+y 宽x高+x+y CaptureWidget Unable to capture screen 无法捕获屏幕 无法捕获屏幕 Mouse 鼠标 Select screenshot area 选择截屏区域 Mouse Wheel 鼠标滚轮 Change tool size 改变工具大小 Right Click 右键单击 Show color picker 显示颜色选择器 Open side panel 打开侧边栏 Esc Esc Exit 退出 Quit Capture 退出截图 Are you sure you want to quit capture? 确定要退出截屏吗? Do not show this again 不再显示 Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. 火焰截图丢失了屏幕焦点。您需要点击一次屏幕才能正常使用键盘快捷键。 Configuration error resolved. Launch `flameshot gui` again to apply it. 已解决配置文件错误。请再次运行 `flameshot gui` 命令以应用更改。 Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. 用鼠标选择一个区域,或按 Esc 退出。 按 Enter 键捕捉屏幕。 按住鼠标右键显示颜色选择器。 使用鼠标滚轮来改变绘画工具的宽度。 按下空格键以打开侧边面板。 Tool Settings 工具设置 CircleCountTool Circle Counter 圆圈计数 Add an autoincrementing counter bubble 添加数字自动递增的计数圆圈 CircleTool Circle 圆环 Set the Circle as the paint tool 选择圆环作为绘画工具 ColorDialog Select Color 选择颜色 Saturation 饱和度 Hue 色相 Hex Hex Blue Value Green 绿 Alpha 透明 Red ColorGrabWidget Accept color 接受颜色 Enter or Left Click 回车或左键单击 Precisely select color 精确选择颜色 Hold Left Click 按住左键 Toggle magnifier 切换放大镜 Space or Right Click 空格键或右键单击 Cancel 取消 Esc Esc ColorPickerEditor Select Preset: 选择预设: Select preset using the spinbox 使用spinbox选择预设 Edit Preset: 编辑预设: Enter color to update preset 输入颜色以更新预设 Update 更新 Press button to update the selected preset 点击按钮以更新选中的预设 Delete 刪除 Press button to delete the selected preset 按下按钮删除选定的预设 Add Preset: 添加预设: Enter color manually or select it using the color-wheel 手动输入颜色或使用色轮选择颜色 Add 添加 Press button to add preset 按下按钮添加预设 Error 错误 Unable to add preset. Maximum limit reached. 无法添加预设。达到最大限度。 Unable to remove preset. Minimum limit reached. 无法删除预设。已达到最低限制。 ConfigErrorDetails Configuration errors 配置错误 ConfigHandler Unrecognized setting: '%1' 无法识别的设置:“%1” Unrecognized shortcut name: '%1'. 无法识别的快捷键名称:“%1” Shortcut conflict: '%1' and '%2' have the same shortcut: %3 快捷键冲突:“%1”和“%2”有同样的快捷键:%3 Bad value in '%1'. Expected: %2 “%1”使用了不正确的值,期望为:%2 You have successfully resolved the configuration error. 您已成功解决配置文件错误。 The configuration contains an error. Open configuration to resolve. 配置文件存在错误。请打开配置界面进行处理。 The configuration contains an error. Falling back to default. 配置文件存在错误。已回退到使用默认配置。 Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigHandler 中存在错误的配置键“%1”。请向我们报告这个问题。 ConfigResolver Resolve configuration errors 处理配置文件错误 <b>You must resolve all errors before continuing:</b> <b>您必须解决所有错误才能继续:</b> Reset 重置 Reset to the default value. 重置为默认值。 Remove 移除 Remove this setting. 移除此项设置。 Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. 一些键盘快捷键存在冲突。 这不会阻碍火焰截图程序的启动。 请在配置文件中手动解决这些问题。 Resolve all 处理全部 Resolve all listed errors. 处理全部列出的错误。 Details 细节 ConfigWindow Configuration 配置 Interface 界面 Filename Editor 文件名编辑器 General 常规 Shortcuts 快捷键 Resolve 处理 <b>Configuration file has errors. Resolve them before continuing.</b> <b>配置文件存在错误。请在继续操作前进行处理。</b> Controller New version %1 is available 新版本 %1 已经可用 You have the latest version 您正在运行最新版本 Failed to get information about the latest version. 获取最新版本信息时失败。 Error 错误 Unable to close active modal widgets 无法关闭活动模态组件 &Take Screenshot 进行截图(&T) &Open Launcher 打开启动器(&O) &Configuration 配置(&C) &About 关于(&A) Check for updates 检查更新 &Latest Uploads 最近的上传(&L) URL copied to clipboard. 链接已复制到剪贴板。 &Information 信息(&I) &Quit 退出(&Q) CopyTool Copy 复制 Copy selection to clipboard 将选区复制到剪贴板 Copy the selection into the clipboard 复制选择到剪贴板 DBusUtils Unable to connect via DBus 无法通过 DBus 进行连接 ExitTool Exit 退出 Leave the capture screen 离开屏幕捕获 FileNameEditor Edit the name of your captures: 编辑您的截图名称: Edit: 编辑器: Preview: 预览: Save 保存 Saves the pattern 保存样式 Restore 恢复 Reset 恢复 Restores the saved pattern 恢复保存的样式 Clear 清空 Deletes the name 删除这个名字 Flameshot Error 错误 Unable to close active modal widgets 无法关闭活动模态微件 URL copied to clipboard. 链接已复制至剪贴板。 FlameshotDaemon New version %1 is available 新版本 %1 可用 You have the latest version 你正在运行最新版本 Failed to get information about the latest version. 未能获取最新版本信息。 Unable to connect via DBus 无法使用 DBus 连接 GeneneralConf Show help message 显示帮助文档 Show the help message at the beginning in the capture mode. 在捕获之前显示帮助信息。 Show desktop notifications 显示桌面通知 Show tray icon 显示托盘图标 Show the systemtray icon 显示任务栏图标 Import 导入 Error 错误 Unable to read file. 无法读取文件。 Unable to write file. 无法写入文件。 Save File 保存到文件 Confirm Reset 确定重置 Are you sure you want to reset the configuration? 你确定你想要重置配置? Show the side panel button 显示侧边栏按钮 Show the side panel toggle button in the capture mode. 在捕获模式下显示侧边栏切换按钮。 Configuration File 配置文件 Export 导出 Reset 重置 Launch at startup 开机时启动 Launch Flameshot 启动 Flameshot Close after capture 捕获后关闭 Close after taking a screenshot 获取屏幕截图后关闭 Copy URL after upload 上传后复制 URL Copy URL and close window after upload 上传后复制 URL 并关闭窗口 Save image after copy 复制后保存图像 Save image file after copying it 复制到剪贴板后保存图像文件 Save Path 保存路径 Change... 变更… Choose a Folder 选择文件夹 Unable to write to directory. 无法写入目录。 GeneralConf Import 导入 Error 错误 Unable to read file. 无法读取文件。 Unable to write file. 无法写入文件。 Save File 保存到文件 Confirm Reset 确定重置 Are you sure you want to reset the configuration? 你确定你想要重置配置? Show help message 显示帮助信息 Show the help message at the beginning in the capture mode. 在捕获之前显示帮助信息。 Show the side panel button 显示侧边栏按钮 Show the side panel toggle button in the capture mode. 在捕获模式下显示侧边栏切换按钮。 Show desktop notifications 显示桌面通知 Show tray icon 显示托盘图标 Show the systemtray icon 显示任务栏图标 Confirmation required to delete screenshot from the latest uploads 从最近的上传历史中删除屏幕截图需要进行确认 Configuration File 配置文件 Export 导出 Reset 重置 Automatic check for updates 自动检查更新 Allow multiple flameshot GUI instances simultaneously 允许同时运行多个 flameshot GUI 实例 This allows you to take screenshots of flameshot itself for example. 这样能允许您获取火焰截图自身的截图。 Automatically close daemon when it is not needed 不需要时自动关闭守护程序 Launch at startup 开机时启动 Launch Flameshot 启动火焰截图 Show welcome message on launch 启动时显示欢迎消息 Use large predefined color palette 使用大型预定义调色盘 Copy URL after upload 上传后复制 URL Copy URL and close window after upload 上传后复制 URL 并关闭窗口 Save image after copy 复制后保存图像 Save image file after copying it 复制到剪贴板后保存图像文件 Show the help message at the beginning in the capture mode 在捕获之前显示帮助信息 Use last region for GUI mode 在图形用户界面模式下使用最后一个区域 Use the last region as the default selection for the next screenshot in GUI mode 在图形界面模式下,将最后一个区域作为下次截图的默认选择 Show the side panel toggle button in the capture mode 在捕获模式下显示侧边栏切换按钮 Enable desktop notifications 启用桌面通知 Show abort notifications 显示中断提示 Enable abort notifications 启用中断通知 Show icon in the system tray 在系统托盘中显示图标 Use grim to capture screenshots 用grim 截图 Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Grim是一个只用于wayland的截图工具,基于screencopy protocol, 通常仅在最小化的wayland合成器中启用,如sway,hyprland等. Ask for confirmation to delete screenshot from the latest uploads 从最近的上传历史中删除屏幕截图需要进行确认 Check for updates automatically 自动检查更新 This allows you to take screenshots of Flameshot itself for example 例如,这允许您截取 Flameshot 本身作为屏幕截图 Launch Flameshot daemon when computer is booted 开机自启动 Show the welcome message box in the middle of the screen while taking a screenshot 在截取屏幕截图时在屏幕中间显示欢迎消息框 Use a large predefined color palette 使用一个大的预定义调色板 Copy on double click 双击以复制 Enable Copy on Double Click 启用双击时复制 Copy URL and close window after uploading was successful 上传成功后复制 URL 并关闭窗口 Automatically unload from memory when it is not needed 在不需要时自动从内存中卸载 Automatically close daemon (background process) when it is not needed 在不需要时自动关闭守护程序(后台进程) Launch in background at startup 在启动时在后台启动 Launch Flameshot daemon (background process) when computer is booted 当计算机启动时启动 Flameshot 守护进程(后台进程) Ask before quit capture 退出截图前请询问 Show the confirmation prompt before ESC quit 在退出时显示确认提示 Enable Copy to clipboard on Double Click 在双击时启用复制到剪贴板 Copy URL after uploading was successful 上传成功后复制网址 After copying the screenshot, save it to a file as well 复制屏幕截图后,也将其保存到文件中 Save Path 保存路径 Change... 变更… Use fixed path for screenshots to save 使用固定的屏幕截图保存路径 Preferred save file extension: 偏好的保存文件扩展名: Latest Uploads Max Size 之前的上传最大数量 Imgur Application Client ID Imgur 应用程序客户端 ID Undo limit 撤销次数限制 Use JPG format for clipboard (PNG default) 剪贴板使用 JPG 格式(默认为 PNG) Use lossy JPG format for clipboard (lossless PNG default) 对剪贴板使用有损JPG格式(默认无损PNG) Copy file path after save 保存文件后复制文件路径 Copy the file path to clipboard after the file is saved 文件保存后将文件路径复制到剪贴板上 Anti-aliasing image when zoom the pinned image 缩放贴图时应用反锯齿 After zooming the pinned image, should the image get smoothened or stay pixelated 对贴图进行缩放后,对图像进行平滑处理还是维持像素化状态 Upload image without confirmation 上传图像无需确认 Choose a Folder 选择文件夹 Unable to write to directory. 无法写入目录。 Show magnifier 显示放大镜 Enable a magnifier while selecting the screenshot area 选择屏幕截图区域时启用放大镜 Square shaped magnifier 方形放大镜 Make the magnifier to be square-shaped 使放大镜呈方形 Milliseconds before geometry display hides; 0 means do not hide 几何显示隐藏前的毫秒数;设为0则不隐藏 Set geometry display timeout (ms) 设置几何显示时间(毫秒) Selection Geometry Display 选取几何显示 Display Location 显示位置 None Top Left 左上 Top Right 右上 Bottom Left 左下 Bottom Right 右下 Center 中心 Quality range of 0-100; Higher number is better quality and larger file size 质量范围为0-100;数字越大,质量越好,文件大小也越大 JPEG Quality JPEG质量 Reverse arrow 反向箭头 Draw the arrow head first 先画箭头 Insecure Pixelate 不安全Pixelate Draw the pixelation effect in an insecure but more asethetic way. 用一种不安全但更美观的方式画出像素效果。 HistoryWidget Latest Uploads 最近的上传 Screenshots history is empty 屏幕截图历史为空 Copy URL 复制链接 URL copied to clipboard. 链接已复制到剪贴板。 Open in browser 在浏览器中打开 Confirm to delete 确认进行删除 Are you sure you want to delete a screenshot from the latest uploads and server? 您确认要从最近的上传历史和服务器上删除该屏幕截图吗? ImgS3Uploader Uploading Image 正在上传 Error 错误 ImgUploadDialog Upload Confirmation 上传确认 Do you want to upload this capture? 您是否想要上传该捕获图像? Upload without confirmation 上传无需确认 ImgUploader Uploading Image 正在上传 Unable to open the URL. 无法打开此链接。 Screenshot copied to clipboard. 截图复制到剪贴板。 Copy URL 复制链接 Open URL 打开链接 Delete image 删除图像 Image to Clipboard. 保存文件到剪贴板。 ImgUploaderBase Upload image 上传图像 Uploading Image 正在上传图像 Copy URL 复制链接 Open URL 打开链接 Delete image 删除图像 Image to Clipboard. 图像到剪贴板。 Save image 保存图片 Unable to open the URL. 无法打开链接。 URL copied to clipboard. 链接已复制到剪贴板。 Screenshot copied to clipboard. 截图已复制到剪贴板。 Unable to save the screenshot to disk. 无法将屏幕截图保存到磁盘。 Screenshot saved. 截图已保存。 ImgUploaderTool Image Uploader 图像上传工具 Upload the selection 上传选中区域 ImgurUploader Upload to Imgur 上传到Imgur Uploading Image 正在上传 Copy URL 复制链接 Open URL 打开链接 Delete image 删除图像 Image to Clipboard. 保存文件到剪贴板。 Unable to open the URL. 无法打开此链接。 URL copied to clipboard. 复制链接到剪贴板。 Screenshot copied to clipboard. 截图复制到剪贴板。 ImgurUploaderTool Image Uploader 上传图片 Upload the selection to Imgur 上传选择到 Imgur InfoWindow About 关于 Icon 图标 License 许可证 GPLv3+ GPLv3+ Version 版本 Flameshot v Flameshot v OS Info 操作系统信息 Copy Info 复制信息 SPACEBAR 空格 Right Click 右键 Mouse Wheel 鼠标滑轮 Move selection 1px 移动选择 1 px Resize selection 1px 调整选择大小 1 px Quit capture 退出捕获 Copy to clipboard 复制到剪贴板 Save selection as a file 将选择保存为文件 Undo the last modification 撤消上次修改 Toggle visibility of sidebar with options of the selected tool 切换侧边栏可见性 Show color picker 显示颜色选择器 Change the tool's thickness 改变工具的厚度 Key Description 描述 <u><b>License</b></u> <u><b>许可证</b></u> <u><b>Version</b></u> <u><b>版本</b></u> <u><b>Shortcuts</b></u> <u><b>快捷键</b></u> Available shortcuts in the screen capture mode. 屏幕捕捉模式中的可用快捷键。 InvertTool Invert 反色 Set Inverter as the paint tool 将反色设置为绘画工具 LineTool Line 直线 Set the Line as the paint tool 将直线设置为绘画工具 MarkerTool Marker 标记 Set the Marker as the paint tool 将标记设置为绘画工具 MoveTool Move 移动 Move the selection area 移动选择区域 PencilTool Pencil 铅笔 Set the Pencil as the paint tool 将铅笔设置为绘画工具 PinTool Pin Tool 贴图工具 Pin image on the desktop 在桌面上固定图像 PinWidget Context menu 上下文菜单 Copy to clipboard 复制到剪贴板 Save to file 保存到文件 Rotate Right 向右旋转 Rotate Left 向左旋转 Increase Opacity 增加不透明度 Decrease Opacity 降低不透明度 Close 关闭 PixelateTool Pixelate 像素化 Set Pixelate as the paint tool. 将像素化设置为绘画工具。 Set Pixelate as the paint tool 将像素化设置为绘画工具 PrimaryInstanceWidget Primary instance 主实例 <b>Primary instance.</b> Messages received from secondaries: <b>主要实例。</b>从secondary收到的消息: QHotkey Failed to register %1. Error: %2 注册 %1 失败。错误:%2 Failed to unregister %1. Error: %2 取消注册 %1 失败。错误:%2 QObject Save Error 保存错误 Capture saved as 捕获已保存为 Capture saved to clipboard. 捕获已保存至剪贴板。 Capture saved to clipboard 捕获已保存至剪贴板 Error while saving to clipboard 保存到剪贴板时出错 Error trying to save as 尝试另存为时出错 Save screenshot 保存屏幕截图 Path copied to clipboard as 路径已复制到剪贴板 Saving canceled 已取消保存 Save canceled 已取消保存 Capture is saved and copied to the clipboard as 捕获已保存并复制到剪贴板,作为 Unable to connect via DBus 无法通过DBus进行连接 Powerful yet simple to use screenshot software. 强大又易用的屏幕截图软件。 See 参见 Capture the entire desktop. 捕获整个桌面。 Open the capture launcher. 打开截图启动器。 Start a manual capture in GUI mode. 以图形界面模式进行手动截图。 Configure 配置 Capture a single screen. 捕获单个屏幕。 Path where the capture will be saved 截图保存路径 Capture screenshot of all monitors at the same time. 同时截取所有显示器的屏幕截图。 Capture a screenshot of the specified monitor. 截取指定显示器的屏幕截图。 Existing directory or new file to save to 要保存的目标目录路径或新文件 Save the capture to the clipboard 将截图保存至剪贴板 Pin the capture to the screen 将捕获图像作为贴图放置在屏幕上 Upload screenshot 上传截图 Delay time in milliseconds 延迟时间,以毫秒计 Repeat screenshot with previously selected region 使用之前的选区重复截图 Screenshot region to select 要选择的屏幕区域 Set the filename pattern 设置文件名模式 Accept capture as soon as a selection is made 在选中选区后立刻接受捕获图像 Enable or disable the trayicon 启用或禁用托盘图标 Enable or disable run at startup 启用或禁用开机启动 Enable or disable the notifications 启用或禁用通知 Check the configuration for errors 检查配置文件错误 Show the help message in the capture mode 在捕获模式中显示帮助信息 Define the main UI color 定义用户界面主颜色 Define the contrast UI color 定义用户界面对比色 Print raw PNG capture 输出原始 PNG 图像 Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified 使用 WxH+X+Y 的格式输出选区几何参数。如果指定了 raw 参数则什么也不做 Define the screen to capture (starting from 0) 定义要捕获的屏幕(从 0 开始) Invalid delay, it must be a number greater than 0 无效的延时,必须提供大于零的数值 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. 无效的区域,请使用“WxH+X+Y”或“all”或“screen0/screen1/...”。 Invalid path, must be an existing directory or a new file in an existing directory 无效的路径,必须为已有目录或者已有目录中的一个新文件 Define the screen to capture 定义要捕获的屏幕 default: screen containing the cursor 默认:包含鼠标指针的屏幕 Screen number 屏幕编号 Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' 颜色无效,该选项支持以下格式: - #RGB(R、G、B 每项均为单个十六进制数字) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - 常用英文颜色名称,如“blue”或“red” 您可能需要对 # 字符进行转义,如“\#FFF” Invalid delay, it must be higher than 0 无效的延迟时间,数字必须大于0 Invalid screen number, it must be non negative 无效的屏幕编号,编号不能为负数 Invalid path, it must be a real path in the system 无效的路径,必须为系统中真实存在的路径 Invalid value, it must be defined as 'true' or 'false' 无效的值,必须指定“true”或“false” Error 错误 Unable to write in 无法写入 Requested screen exceeds screen count 请求的屏幕超出了屏幕编号 Full screen screenshot pinned to screen 已将全屏截图作为贴图固定到屏幕 URL copied to clipboard. URL 已复制到剪贴板。 Options 选项 Arguments 参数 arguments 参数 Subcommands 子命令 subcommands 子命令 Usage 用法 options 选项 Per default runs Flameshot in the background and adds a tray icon for configuration. 默认情况下火焰截图将在后台持续运行并显示一个托盘图标以方便用户控制。 Per default runs Flameshot in the background and adds a tray icon for configuration. 默认情况下,火焰截图启动后将在后台运行,并在托盘显示一个图标。 Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. 我已启动并在后台运行!点击托盘图标即可进行屏幕截图,右键点击托盘图标可查看更多选项。 Toggle side panel 切换侧面板 Resize selection left 1px 向左改变选区大小1像素 Resize selection right 1px 向右改变选区大小1像素 Resize selection up 1px 向上改变选区大小1像素 Resize selection down 1px 向下改变选区大小1像素 Select entire screen 选择整个屏幕 Move selection left 1px 向左移动选区1像素 Move selection right 1px 向右移动选区1像素 Move selection up 1px 向上移动选区1像素 Move selection down 1px 向下移动选区1像素 Commit text in text area 在文本区域提交文本 Delete current tool 删除当前工具 Quit capture 退出捕获 Screenshot history 屏幕截图历史 Capture screen 捕获屏幕 Show color picker 显示颜色选择器 Change the tool's size 更改工具大小 Change the tool's thickness 改变工具的厚度 RectangleTool Rectangle 实心矩形 Set the Rectangle as the paint tool 将实心矩形设置为绘画工具 RedoTool Redo 重做 Redo the next modification 重做上次修改 SaveTool Save 保存 Save screenshot to a file 保存屏幕截图到文件 Save the capture 保存捕获 ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) 无法探测当前桌面环境(GNOME?KDE?Sway?……) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! 通用的 Wayland 屏幕捕获适配器需要 Grim 作为 Wayland 的屏幕捕获组件。如果缺少屏幕捕获组件,请安装它! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter 如果未启用 useGrimAdapter 设置,将使用 dbus 协议。需要注意的是,在 wayland 下使用 dbus 协议并不推荐。建议在 flameshot.ini 中启用 useGrimAdapter 设置,以激活基于 grim 的通用 wayland 屏幕截图适配器 grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments grim 的截图组件是基于 wlroots 实现的,可能无法在 GNOME 或类似的桌面环境中使用 Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) 无法检测桌面环境(GNOME? KDE? Qile? Sway? …) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. 提示:请尝试设置 XDG_CURRENT_DESKTOP 环境变量。 Unable to capture screen 无法捕获屏幕 SecondaryInstanceWidget Secondary instance 次级实例 <b>Secondary instance.</b> Send message to primary: <b>第二个例子。</b>发送消息到主服务器: Type something here... 在这里输入一些东西… &Send 发送(& S) Error sending message 发送消息时出错 The message '%1' could not be sent to the primary. 无法将邮件'%1'发送到主服务器。 SelectionTool Rectangular Selection 矩形选择 Set Selection as the paint tool 将矩形选择设置为绘画工具 SetShortcutDialog Set Shortcut 设置快捷键 Enter new shortcut to change 键入新的快捷键以进行修改 Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. 按下 Esc 键以取消,或使用 ⌘+Backspace 来禁用键盘快捷键。 Press Esc to cancel or Backspace to disable the keyboard shortcut. 按下 Esc 键以取消或按下退格键以禁用键盘快捷键。 Flameshot must be restarted for changes to take effect. 火焰截图必须重新启动以使修改生效。 ShortcutsWidget Hot Keys 热键 Available shortcuts in the screen capture mode. 屏幕捕捉模式中的可用快捷键。 Description 描述 Key Left Double-click 左键双击 Toggle side panel 切换侧面板 Grab a color from the screen 从屏幕上抓取颜色 Resize selection left 1px 将选区大小向左调整 1px Resize selection right 1px 将选区大小向右调整 1px Resize selection up 1px 将选区大小向上调整 1px Resize selection down 1px 将选区大小向下调整 1px Symmetrically decrease width by 2px 对称地将宽度减少2px Symmetrically increase width by 2px 对称地增加宽度 2 px Symmetrically increase height by 2px 对称地增加高度 2 px Symmetrically decrease height by 2px 对称地减少高度 2 px Select entire screen 选择整个屏幕 Move selection left 1px 将选区向左调整 1px Move selection right 1px 将选区向右移动 1px Move selection up 1px 将选区向上移动 1px Move selection down 1px 将选区向下移动 1px Commit text in text area 在文本区域提交文本 Delete selected drawn object 删除选定的绘制对象 Cancel current selection 取消当前选择 Delete current tool 删除当前工具 Capture screen 捕获屏幕 Screenshot history 屏幕截图历史 SidePanelWidget Active thickness: 当前宽度: Active color: 活动颜色: Press ESC to cancel 按下 ESC 键以取消 Active tool size: 当前工具大小: Active Color: 当前颜色: Grab Color 获取颜色 Display grid 显示网格 SizeDecreaseTool Decrease Tool Size 减小工具尺寸 Decrease the size of the other tools 减小其它工具的尺寸 SizeIncreaseTool Increase Tool Size 增大工具尺寸 Increase the size of the other tools 增大其它工具的尺寸 SizeIndicatorTool Selection Size Indicator 选择尺寸指示 Show X and Y dimensions of the selection 显示选区的横纵尺寸 Show the dimensions of the selection (X Y) 显示选择的尺寸 (X Y) StrftimeChooserWidget Century (00-99) 世纪(00-99) Year (00-99) 年(00-99) Year (2000) 年(2000) Month Name (jan) 月(1月 - 12月) Month Name (january) 月(一月 - 十二月) Month (01-12) 月 (01-12) Week Day (1-7) 周内的日(1-7) Week (01-53) 周(01-53) Day Name (mon) 星期(一 - 七) Day Name (monday) 星期(星期一 - 星期日) Day (01-31) 天(01-31) Day of Month (1-31) 一月中的某天(1-31) Day (001-366) 天(001-366) Time (%H-%M-%S) 时间(%H-%M-%S) Time (%H-%M) 时间(%H-%M) Hour (00-23) 小时(00-23) Hour (01-12) 小时(01-12) Minute (00-59) 分钟(00-59) Second (00-59) 秒(00-59) Full Date (%m/%d/%y) 完整日期(%m/%d/%y) Full Date (%Y-%m-%d) 完整日期(%Y-%m-%d) Full Date (%d-%m-%Y) 完整日期(% d—% m—%Y) SystemNotification Flameshot Info 火焰截图消息 TextConfig StrikeOut 删除线 Underline 下划线 Bold 粗体 Italic 斜体 Left Align 左对齐 Center Align 中心对齐 Right Align 右对齐 TextTool Text 文本 Add text to your capture 在您的捕获中添加文本 TrayIcon &Take Screenshot 进行截图(&T) &Open Launcher 打开启动器(&O) &Configuration 配置(&C) &About 关于(&A) Check for updates 检查更新 New version %1 is available 新版本 %1 可用 &Quit 退出(&Q) &Latest Uploads 最近的上传(&L) &Open Save Path 打开保存路径(&O) UIcolorEditor UI Color Editor 用户界面颜色编辑器 Change the color moving the selectors and see the changes in the preview buttons. 移动颜色选择并在预览按钮查看。 Select a Button to modify it 选择一个按钮以进行修改 Main Color 主色 Click on this button to set the edition mode of the main color. 点击按钮设置主色。 Contrast Color 对比色 Click on this button to set the edition mode of the contrast color. 点击按钮设置对比色。 UndoTool Undo 撤消 Undo the last modification 撤消上次修改 UpdateNotificationWidget New Flameshot version %1 is available 新的 Flameshot %1 版已经可用 Ignore 忽略 Later 稍后 Update 更新 UploadHistory Upload History 上传历史记录 Screenshots history is empty 屏幕截图历史为空 UploadLineItem Form 表单 TextLabel 文本标签 Copy URL 复制链接 Open In Browser 在浏览器中打开 Confirm to delete 确认进行删除 Are you sure you want to delete a screenshot from the latest uploads and server? 您确认要从最近的上传和服务器上删除该屏幕截图吗? UtilityPanel Close 关闭 <Empty> <空> VisualsEditor Opacity of area outside selection: 选中区域之外的不透明度: UI Color Editor 用户界面颜色编辑器 Colorpicker Editor 拾色器编辑器 Button Selection 按钮选择 Select All 全选 color_widgets::ColorDialog Pick 选取 color_widgets::ColorPalette Unnamed 未命名 color_widgets::ColorPaletteModel Unnamed 未命名 %1 (%2 colors) %1(%2 个颜色) color_widgets::ColorPaletteWidget Open a new palette from file 从文件打开新调色板 Create a new palette 创建新调色板 Duplicate the current palette 制作当前调色板的副本 Delete the current palette 删除当前调色板 Revert changes to the current palette 将修改回退到当前调色板 Save changes to the current palette 将修改保存到当前调色板 Add a color to the palette 向调色板添加颜色 Remove the selected color from the palette 从调色板移除选中的颜色 New Palette 新建调色板 Name 名称 GIMP Palettes (*.gpl) GIMP 调色板 (*.gpl) Palette Image (%1) 调色板图像 (%1) All Files (*) 所有文件 (*) Open Palette 打开调色盘 Failed to load the palette file %1 加载调色板文件失败 %1 color_widgets::GradientEditor Add Color 添加颜色 Remove Color 移除颜色 Edit Color... 编辑颜色…… color_widgets::GradientListModel %1 (%2 colors) %1(%2 个颜色) color_widgets::Swatch Clear Color 清除颜色 %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_zh_HK.ts ================================================ AbstractWidgetList Add New Add New Move Up Move Up Move Down Move Down Remove Remove AcceptTool Accept Accept Accept the capture Accept the capture AppLauncher App Launcher 應用程式啟動器 Choose an app to open the capture 選擇一個程式打開此截圖 AppLauncherWidget Open With 打開方式 Launch in terminal 從終端啟動 Keep open after selection 選擇後保持開啟 Error 錯誤 Unable to launch in terminal. 無法從終端啟動。 Unable to write in 無法寫入 ArrowTool Arrow 指針 Set the Arrow as the paint tool 選取指針作為繪製工具 BlurTool Blur 模糊 Set Blur as the paint tool 選擇模糊作為繪製工具 CaptureLauncher <b>Capture Mode</b> <b>Capture Mode</b> Rectangular Region 矩形區域 Full Screen (Current Display) Full Screen (Current Display) Full Screen (All Monitors) 滿屏(所有顯示器) No Delay 無時延 second second seconds seconds Take new screenshot 捕獲新截圖 Area: Area: Capture Launcher Capture Launcher TextLabel TextLabel Capture Mode Capture Mode Delay: Delay: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen 無法捕獲屏幕 Mouse Mouse Select screenshot area Select screenshot area Mouse Wheel 滑鼠滑輪 Change tool size Change tool size Right Click 右鍵 Show color picker 顯示顏色選擇器 Open side panel Open side panel Esc Esc Exit 離開 Quit Capture Are you sure you want to quit capture? Do not show this again Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Configuration error resolved. Launch `flameshot gui` again to apply it. Configuration error resolved. Launch `flameshot gui` again to apply it. Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. 使用鼠標選擇一片區域,或按Esc退出。 按Enter以捕獲屏幕。 點擊右鍵顯示拾色器。 使用鼠標滾輪以較工具寬度。 按Space以打開側方面板。 Tool Settings 工具選項 CircleCountTool Circle Counter 環狀計數器 Add an autoincrementing counter bubble 添加自增計數器 CircleTool Circle 環形 Set the Circle as the paint tool 選取環形作為繪畫工具 ColorDialog Select Color Select Color Saturation Saturation Hue Hue Hex Hex Blue Blue Value Value Green Green Alpha Alpha Red Red ColorGrabWidget Accept color Accept color Enter or Left Click Enter or Left Click Precisely select color Precisely select color Hold Left Click Hold Left Click Toggle magnifier Toggle magnifier Space or Right Click Space or Right Click Cancel Cancel Esc Esc ColorPickerEditor Edit Preset: Edit Preset: Enter color to update preset Enter color to update preset Update Update Press button to update the selected preset Press button to update the selected preset Delete Delete Press button to delete the selected preset Press button to delete the selected preset Add Preset: Add Preset: Enter color manually or select it using the color-wheel Enter color manually or select it using the color-wheel Add Add Press button to add preset Press button to add preset Error 錯誤 Unable to add preset. Maximum limit reached. Unable to add preset. Maximum limit reached. Unable to remove preset. Minimum limit reached. Unable to remove preset. Minimum limit reached. ConfigErrorDetails Configuration errors Configuration errors ConfigHandler Unrecognized setting: '%1' Unrecognized setting: '%1' Unrecognized shortcut name: '%1'. Unrecognized shortcut name: '%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Shortcut conflict: '%1' and '%2' have the same shortcut: %3 Bad value in '%1'. Expected: %2 Bad value in '%1'. Expected: %2 You have successfully resolved the configuration error. You have successfully resolved the configuration error. The configuration contains an error. Open configuration to resolve. The configuration contains an error. Open configuration to resolve. Bad config key '%1' in ConfigHandler. Please report this as a bug. Bad config key '%1' in ConfigHandler. Please report this as a bug. ConfigResolver Resolve configuration errors Resolve configuration errors <b>You must resolve all errors before continuing:</b> <b>You must resolve all errors before continuing:</b> Reset 重設 Reset to the default value. Reset to the default value. Remove Remove Remove this setting. Remove this setting. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. Resolve all Resolve all Resolve all listed errors. Resolve all listed errors. Details Details ConfigWindow Configuration 設定 Interface 接口 Filename Editor 文檔名稱編輯器 General 一般 Shortcuts 捷徑 Resolve Resolve <b>Configuration file has errors. Resolve them before continuing.</b> <b>Configuration file has errors. Resolve them before continuing.</b> Controller New version %1 is available 新版本 %1 現在可用 You have the latest version 你已有最新版本 Failed to get information about the latest version. 無法獲取最新版本的資訊 Error 錯誤 Unable to close active modal widgets Unable to close active modal widgets &Take Screenshot &捕獲截圖 &Open Launcher &開啓啓動器 &Configuration &設定 &About &關於 Check for updates 更新檢查 &Latest Uploads &最新上載 &Information &資訊 &Quit &結束 CopyTool Copy 複製 Copy selection to clipboard Copy selection to clipboard Copy the selection into the clipboard 複製選項到剪貼板 DBusUtils Unable to connect via DBus 無法通過 DBus 連接 ExitTool Exit 離開 Leave the capture screen 離開螢幕擷取 FileNameEditor Edit the name of your captures: 編輯您的截圖名稱: Edit: 編輯器: Preview: 預覽: Save 存檔 Saves the pattern 儲存樣式 Restore 復原 Reset 重設 Restores the saved pattern 恢復儲存的樣式 Clear 清除 Deletes the name 刪除這個名稱 Flameshot Error 錯誤 Unable to close active modal widgets Unable to close active modal widgets URL copied to clipboard. URL copied to clipboard. FlameshotDaemon New version %1 is available 新版本 %1 現在可用 You have the latest version 你已有最新版本 Failed to get information about the latest version. 無法獲取最新版本的資訊 Unable to connect via DBus Unable to connect via DBus GeneneralConf Show help message 顯示説明資訊 Show the help message at the beginning in the capture mode. 在擷取之前顯示説明資訊。 Show desktop notifications 顯示桌面通知 Show tray icon 顯示託盤圖標 Show the systemtray icon 顯示工作列圖標 Import 導入 Error 錯誤 Unable to read file. 無法讀取檔案。 Unable to write file. 無法寫入檔案。 Save File 存檔 Confirm Reset 確認重設 Are you sure you want to reset the configuration? 你確定想要重設? Show the side panel button 顯示側邊欄按鈕 Show the side panel toggle button in the capture mode. 在截圖模式下顯示側邊欄切換按鈕。 Configuration File 設定文檔 Export 導出 Reset 重設 Launch at startup 自動啟動 Launch Flameshot 啓動Flameshot Close after capture 捕獲截圖后關閉 Close after taking a screenshot 進行截屏后關閉 Copy URL after upload 上載后複製URL Copy URL and close window after upload 上載后複製URL並關閉窗口 Save image after copy 複製後保存圖像 Save image file after copying it 複製圖像檔案后保存 Save Path 保存路徑 Change... 變更... Choose a Folder 選取檔案集 Unable to write to directory. 無法寫入目錄。 GeneralConf Import 導入 Error 錯誤 Unable to read file. 無法讀取檔案。 Unable to write file. 無法寫入檔案。 Save File 存檔 Confirm Reset 確認重設 Are you sure you want to reset the configuration? 你確定想要重設? Show help message 顯示説明資訊 Show the help message at the beginning in the capture mode. 在擷取之前顯示説明資訊。 Show the side panel button 顯示側邊欄按鈕 Show the side panel toggle button in the capture mode. 在截圖模式下顯示側邊欄切換按鈕。 Show desktop notifications 顯示桌面通知 Show tray icon 顯示託盤圖標 Show the systemtray icon 顯示工作列圖標 Confirmation required to delete screenshot from the latest uploads Confirmation required to delete screenshot from the latest uploads Configuration File 設定文檔 Export 導出 Reset 重設 Automatic check for updates Automatic check for updates Allow multiple flameshot GUI instances simultaneously Allow multiple flameshot GUI instances simultaneously Automatically close daemon when it is not needed Automatically close daemon when it is not needed Launch at startup 自動啟動 Launch Flameshot 啓動Flameshot Show welcome message on launch Show welcome message on launch Use large predefined color palette Use large predefined color palette Copy URL after upload 上載后複製URL Copy URL and close window after upload 上載后複製URL並關閉窗口 Save image after copy 複製後保存圖像 Save image file after copying it 複製圖像檔案后保存 Show the help message at the beginning in the capture mode Show the help message at the beginning in the capture mode Use last region for GUI mode Use last region for GUI mode Use the last region as the default selection for the next screenshot in GUI mode Use the last region as the default selection for the next screenshot in GUI mode Show the side panel toggle button in the capture mode Show the side panel toggle button in the capture mode Enable desktop notifications Enable desktop notifications Show abort notifications Enable abort notifications Show icon in the system tray Show icon in the system tray Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads Ask for confirmation to delete screenshot from the latest uploads Check for updates automatically Check for updates automatically This allows you to take screenshots of Flameshot itself for example This allows you to take screenshots of Flameshot itself for example Launch Flameshot daemon when computer is booted Launch Flameshot daemon when computer is booted Show the welcome message box in the middle of the screen while taking a screenshot Show the welcome message box in the middle of the screen while taking a screenshot Use a large predefined color palette Use a large predefined color palette Copy on double click Copy on double click Enable Copy on Double Click Enable Copy on Double Click Copy URL and close window after uploading was successful Copy URL and close window after uploading was successful Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well After copying the screenshot, save it to a file as well Save Path 保存路徑 Change... 變更... Use fixed path for screenshots to save Use fixed path for screenshots to save Preferred save file extension: Preferred save file extension: Latest Uploads Max Size Latest Uploads Max Size Imgur Application Client ID Imgur Application Client ID Undo limit Undo limit Use JPG format for clipboard (PNG default) Use JPG format for clipboard (PNG default) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save Copy file path after save Copy the file path to clipboard after the file is saved Copy the file path to clipboard after the file is saved Anti-aliasing image when zoom the pinned image Anti-aliasing image when zoom the pinned image After zooming the pinned image, should the image get smoothened or stay pixelated After zooming the pinned image, should the image get smoothened or stay pixelated Upload image without confirmation Upload image without confirmation Choose a Folder 選取檔案集 Unable to write to directory. 無法寫入目錄。 Show magnifier Show magnifier Enable a magnifier while selecting the screenshot area Enable a magnifier while selecting the screenshot area Square shaped magnifier Square shaped magnifier Make the magnifier to be square-shaped Make the magnifier to be square-shaped Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads Latest Uploads Screenshots history is empty Screenshots history is empty Copy URL 複製連結 URL copied to clipboard. URL copied to clipboard. Open in browser Open in browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Error 錯誤 ImgUploadDialog Upload Confirmation Upload Confirmation Do you want to upload this capture? Do you want to upload this capture? Upload without confirmation Upload without confirmation ImgUploader Delete image 刪除圖像 Unable to open the URL. 無法打開該URL。 Screenshot copied to clipboard. 截圖已複製到剪貼板。 Copy URL 複製連結 Open URL 打開連結 Image to Clipboard. 將檔案複製到剪貼簿。 ImgUploaderBase Upload image Upload image Uploading Image 正在上傳 Copy URL 複製連結 Open URL 打開連結 Delete image 刪除圖像 Image to Clipboard. 將檔案複製到剪貼簿。 Save image Save image Unable to open the URL. 無法打開該URL。 URL copied to clipboard. URL copied to clipboard. Screenshot copied to clipboard. 截圖已複製到剪貼板。 Unable to save the screenshot to disk. Unable to save the screenshot to disk. Screenshot saved. Screenshot saved. ImgUploaderTool Image Uploader 上傳圖片 Upload the selection Upload the selection ImgurUploader Upload to Imgur 上傳到 Imgur Uploading Image 正在上傳 Copy URL 複製連結 Open URL 打開連結 Delete image 刪除圖像 Image to Clipboard. 將檔案複製到剪貼簿。 Unable to open the URL. 無法打開該URL。 URL copied to clipboard. URL已複製到剪貼板。 Screenshot copied to clipboard. 截圖已複製到剪貼板。 ImgurUploaderTool Image Uploader 上傳圖片 Upload the selection to Imgur 上載到 Imgur InfoWindow About 關於 Icon Icon License License GPLv3+ GPLv3+ Version Version Flameshot v Flameshot v OS Info OS Info Copy Info Copy Info Right Click 右鍵 Mouse Wheel 滑鼠滑輪 Move selection 1px 移動 1px Resize selection 1px 調整大小 1px Quit capture 結束擷取 Copy to clipboard 複製到剪貼簿 Save selection as a file 將選擇範圍另存新檔 Undo the last modification 復原上次修改 Toggle visibility of sidebar with options of the selected tool 使用所選工具選項切換側邊欄可見性 Show color picker 顯示顏色選擇器 Change the tool's thickness 改變工具的寬度 Key Description 描述 <u><b>License</b></u> <u><b>授權條款</b></u> <u><b>Version</b></u> <u><b>版本</b></u> <u><b>Shortcuts</b></u> <u><b>快速鍵</b></u> Available shortcuts in the screen capture mode. 螢幕捕獲模式中的可用快捷鍵。 InvertTool Invert Invert Set Inverter as the paint tool Set Inverter as the paint tool LineTool Line 直綫 Set the Line as the paint tool 將直綫設定為繪畫工具 MarkerTool Marker 標記 Set the Marker as the paint tool 將標記設定為繪畫工具 MoveTool Move 移動 Move the selection area 移動選擇區域 PencilTool Pencil 鉛筆 Set the Pencil as the paint tool 將鉛筆設定為繪畫工具 PinTool Pin Tool 固定工具 Pin image on the desktop 將圖像固定到桌面 PinWidget Context menu Context menu Copy to clipboard 複製到剪貼簿 Save to file Save to file Rotate Right Rotate Left Increase Opacity Decrease Opacity Close 關閉 PixelateTool Pixelate 馬賽克工具 Set Pixelate as the paint tool. Set Pixelate as the paint tool 將馬賽克工具設定為繪畫工具 PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 Failed to register %1. Error: %2 Failed to unregister %1. Error: %2 Failed to unregister %1. Error: %2 QObject Save Error 存檔錯誤 Capture saved as 截圖已另存為 Capture saved to clipboard. 熒幕捕獲已存儲到剪貼板。 Capture saved to clipboard 螢幕捕獲已存儲到剪貼板 Error while saving to clipboard Error while saving to clipboard Error trying to save as 嘗試另存新檔時發生錯誤 Save screenshot Save screenshot Path copied to clipboard as Path copied to clipboard as Saving canceled Saving canceled Save canceled Save canceled Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus 無法透過 DBus 進行連接 Powerful yet simple to use screenshot software. Powerful yet simple to use screenshot software. See See Capture the entire desktop. 捕獲整個桌面。 Open the capture launcher. 開啓捕獲啓動器。 Start a manual capture in GUI mode. 在GUi模式下開啓手動捕獲。 Configure Configure Capture a single screen. 捕獲單一熒幕。 Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to Existing directory or new file to save to Save the capture to the clipboard Save the capture to the clipboard Pin the capture to the screen Pin the capture to the screen Upload screenshot Upload screenshot Delay time in milliseconds Delay time in milliseconds Repeat screenshot with previously selected region Repeat screenshot with previously selected region Screenshot region to select Screenshot region to select Set the filename pattern Set the filename pattern Accept capture as soon as a selection is made Accept capture as soon as a selection is made Enable or disable the trayicon Enable or disable the trayicon Enable or disable run at startup Enable or disable run at startup Enable or disable the notifications Check the configuration for errors Check the configuration for errors Show the help message in the capture mode Show the help message in the capture mode Define the main UI color Define the main UI color Define the contrast UI color Define the contrast UI color Print raw PNG capture Print raw PNG capture Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified Define the screen to capture (starting from 0) Define the screen to capture (starting from 0) Invalid delay, it must be a number greater than 0 Invalid delay, it must be a number greater than 0 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. Invalid path, must be an existing directory or a new file in an existing directory Invalid path, must be an existing directory or a new file in an existing directory Define the screen to capture Define the screen to capture default: screen containing the cursor default: screen containing the cursor Screen number Screen number Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' Invalid delay, it must be higher than 0 Invalid delay, it must be higher than 0 Invalid screen number, it must be non negative Invalid screen number, it must be non negative Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' Invalid value, it must be defined as 'true' or 'false' Error 錯誤 Unable to write in 無法寫入 Requested screen exceeds screen count Requested screen exceeds screen count Full screen screenshot pinned to screen Full screen screenshot pinned to screen URL copied to clipboard. 連結已複製到剪貼板。 Options 選項 Arguments Arguments arguments arguments Subcommands subcommands Usage 使用 options 選項 Per default runs Flameshot in the background and adds a tray icon for configuration. Per default runs Flameshot in the background and adds a tray icon for configuration. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. Toggle side panel Toggle side panel Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool Delete current tool Quit capture 結束擷取 Screenshot history Screenshot history Capture screen Capture screen Show color picker 顯示顏色選擇器 Change the tool's size Change the tool's size Change the tool's thickness 改變工具的寬度 RectangleTool Rectangle 矩形 Set the Rectangle as the paint tool 將矩形設定為繪畫工具 RedoTool Redo 重做 Redo the next modification 重做下一次修改 SaveTool Save 儲存 Save screenshot to a file Save screenshot to a file Save the capture 儲存螢幕捕獲 ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) Unable to detect desktop environment (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Hint: try setting the XDG_CURRENT_DESKTOP environment variable. Unable to capture screen 無法捕獲螢幕 SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection 矩形選擇 Set Selection as the paint tool 將矩形選擇設定為繪畫工具 SetShortcutDialog Set Shortcut Set Shortcut Enter new shortcut to change Enter new shortcut to change Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Press Esc to cancel or Backspace to disable the keyboard shortcut. Flameshot must be restarted for changes to take effect. Flameshot must be restarted for changes to take effect. ShortcutsWidget Hot Keys Hot Keys Available shortcuts in the screen capture mode. 螢幕捕獲模式中的可用快捷鍵。 Description 描述 Key Left Double-click Left Double-click Toggle side panel Toggle side panel Grab a color from the screen Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen Select entire screen Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete selected drawn object Cancel current selection Delete current tool Delete current tool Capture screen Capture screen Screenshot history Screenshot history SidePanelWidget Active thickness: 動態寬度: Active color: 動態顔色: Press ESC to cancel 按ESC以取消 Active tool size: Active tool size: Active Color: Active Color: Grab Color 選取顔色 Display grid SizeDecreaseTool Decrease Tool Size Decrease Tool Size Decrease the size of the other tools Decrease the size of the other tools SizeIncreaseTool Increase Tool Size Increase Tool Size Increase the size of the other tools Increase the size of the other tools SizeIndicatorTool Selection Size Indicator 選擇尺寸指示 Show X and Y dimensions of the selection Show X and Y dimensions of the selection Show the dimensions of the selection (X Y) 顯示選擇的尺寸 (X Y) StrftimeChooserWidget Century (00-99) 世紀(00-99) Year (00-99) 年(00-99) Year (2000) 年(2000) Month Name (jan) 月(jan) Month Name (january) 月(january) Month (01-12) 月(01-12) Week Day (1-7) 工作日(1-7) Week (01-53) 周(01-53) Day Name (mon) 星期(mon) Day Name (monday) 星期(diumenge) Day (01-31) 日(01-31) Day of Month (1-31) 一月中的某日(1-31) Day (001-366) 日(001-366) Time (%H-%M-%S) 時間(%H-%M-%S) Time (%H-%M) 時間(%H-%M) Hour (00-23) 小時(00-23) Hour (01-12) 小時(01-12) Minute (00-59) 分(00-59) Second (00-59) 秒(00-59) Full Date (%m/%d/%y) 日期(%m/%d/%y) Full Date (%Y-%m-%d) 日期(%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot相關資訊 TextConfig StrikeOut 劃去 Underline 下劃綫 Bold 加粗 Italic 斜體 Left Align Left Align Center Align Center Align Right Align Right Align TextTool Text 文本工具 Add text to your capture 往您捕獲的截圖中添加文本 TrayIcon &Take Screenshot &捕獲截圖 &Open Launcher &開啓啓動器 &Configuration &設定 &About &關於 Check for updates 更新檢查 New version %1 is available 新版本 %1 現在可用 &Quit &結束 &Latest Uploads &最新上載 &Open Save Path UIcolorEditor UI Color Editor UI 顏色編輯器 Change the color moving the selectors and see the changes in the preview buttons. 移動顏色選擇並在預覽按鈕檢視。 Select a Button to modify it 選擇一個按鈕以修改 Main Color 主色 Click on this button to set the edition mode of the main color. 點選按鈕設定主色。 Contrast Color 對比色 Click on this button to set the edition mode of the contrast color. 點選按鈕設定對比色。 UndoTool Undo 撤銷 Undo the last modification 撤銷上次修改 UpdateNotificationWidget New Flameshot version %1 is available New Flameshot version %1 is available Ignore Ignore Later Later Update Update UploadHistory Upload History Upload History Screenshots history is empty Screenshots history is empty UploadLineItem Form Form TextLabel TextLabel Copy URL 複製連結 Open In Browser Open In Browser Confirm to delete Confirm to delete Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? UtilityPanel Close 關閉 <Empty> <Empty> VisualsEditor Opacity of area outside selection: 選取區域以外的不透明度: UI Color Editor UI 顏色編輯器 Colorpicker Editor Colorpicker Editor Button Selection 按鈕選取 Select All 全選 color_widgets::ColorDialog Pick Pick color_widgets::ColorPalette Unnamed Unnamed color_widgets::ColorPaletteModel Unnamed Unnamed %1 (%2 colors) %1 (%2 colors) color_widgets::ColorPaletteWidget Open a new palette from file Open a new palette from file Create a new palette Create a new palette Duplicate the current palette Duplicate the current palette Delete the current palette Delete the current palette Revert changes to the current palette Revert changes to the current palette Save changes to the current palette Save changes to the current palette Add a color to the palette Add a color to the palette Remove the selected color from the palette Remove the selected color from the palette New Palette New Palette Name Name GIMP Palettes (*.gpl) GIMP Palettes (*.gpl) Palette Image (%1) Palette Image (%1) All Files (*) All Files (*) Open Palette Open Palette Failed to load the palette file %1 Failed to load the palette file %1 color_widgets::GradientEditor Add Color Add Color Remove Color Remove Color Edit Color... Edit Color... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 colors) color_widgets::Swatch Clear Color Clear Color %1 (%2) %1 (%2) ================================================ FILE: data/translations/Internationalization_zh_TW.ts ================================================ AbstractWidgetList Add New 新增 Move Up 上移 Move Down 下移 Remove 移除 AcceptTool Accept 接受 Accept the capture 接受截圖 AppLauncher App Launcher 應用程式啟動器 Choose an app to open the capture 選擇一個程式打開此截圖 AppLauncherWidget Open With 開啟方式 Launch in terminal 在終端機中啟動 Keep open after selection 選擇後維持此視窗開啟 Error 錯誤 Unable to launch in terminal. 無法在終端機中啟動。 Unable to write in 無法寫入 ArrowTool Arrow 箭頭 Set the Arrow as the paint tool 選擇箭頭作為繪製工具 BlurTool Blur 模糊 Set Blur as the paint tool 選擇模糊作為繪製工具 CaptureLauncher <b>Capture Mode</b> <b>擷取模式</b> Rectangular Region 矩形區域 Full Screen (Current Display) 全螢幕(目前螢幕) Full Screen (All Monitors) 全螢幕(所有螢幕) No Delay 無延遲 second seconds Take new screenshot 擷取新的螢幕截圖 Area: 區域: Capture Launcher 截圖啟動器 TextLabel 文字標籤 Capture Mode 截圖模式 Delay: 延遲: WxH+x+y WxH+x+y CaptureWidget Unable to capture screen 無法擷取螢幕 Mouse 滑鼠 Select screenshot area 選擇截圖區域 Mouse Wheel 滑鼠滾輪 Change tool size 變更工具大小 Right Click 右鍵點選 Show color picker 顯示顏色選擇器 Open side panel 開啟側邊欄 Esc Esc Exit 離開 Quit Capture Are you sure you want to quit capture? Do not show this again 不要再顯示此訊息 Flameshot has lost focus. Keyboard shortcuts won't work until you click somewhere. Flameshot 已失去焦點。鍵盤快捷鍵將不會起作用,除非你點選某處。 Configuration error resolved. Launch `flameshot gui` again to apply it. 設定錯誤已排除。再次啟動 `flameshot gui` 以套用。 Select an area with the mouse, or press Esc to exit. Press Enter to capture the screen. Press Right Click to show the color picker. Use the Mouse Wheel to change the thickness of your tool. Press Space to open the side panel. 使用滑鼠選擇一片區域,或按Esc退出。 按Enter以擷取螢幕。 點擊滑鼠右鍵顯示拾色器。 使用滑鼠滾輪來調整工具寬度。 按Space打開側面板。 Tool Settings 工具設定 CircleCountTool Circle Counter 圓形計數器 Add an autoincrementing counter bubble 新增一個自動遞增的計數氣泡 CircleTool Circle 圓形 Set the Circle as the paint tool 選擇圓形為繪圖工具 ColorDialog Select Color 選擇顏色 Saturation 飽和度 Hue 色調 Hex Hex Blue 藍色 Value 數值 Green 綠色 Alpha 透明度 Red 紅色 ColorGrabWidget Accept color 接受顏色 Enter or Left Click Enter 或 左鍵點選 Precisely select color 精確選擇顏色 Hold Left Click 按住左鍵 Toggle magnifier 切換放大鏡 Space or Right Click 空白鍵或右鍵點選 Cancel 取消 Esc Esc ColorPickerEditor Edit Preset: 編輯預設: Enter color to update preset 輸入顏色以更新預設 Update 更新 Press button to update the selected preset 按下按鈕以更新選擇的預設 Delete 刪除 Press button to delete the selected preset 按下按鈕以刪除選擇的預設 Add Preset: 新增預設: Enter color manually or select it using the color-wheel 手動輸入顏色或使用色輪選擇 Add 新增 Press button to add preset 按下按鈕以新增預設 Error 錯誤 Unable to add preset. Maximum limit reached. 無法新增預設。已達到最大限制。 Unable to remove preset. Minimum limit reached. 無法移除預設。已達到最小限制。 ConfigErrorDetails Configuration errors 設定錯誤 ConfigHandler Unrecognized setting: '%1' 無法識別的設定:'%1' Unrecognized shortcut name: '%1'. 無法識別的快捷鍵名稱:'%1'. Shortcut conflict: '%1' and '%2' have the same shortcut: %3 快捷鍵衝突:'%1' 和 '%2' 有相同的快捷鍵:%3 Bad value in '%1'. Expected: %2 '%1' 中的數值不正確。預期應為:%2 You have successfully resolved the configuration error. 您已成功排除設定錯誤。 The configuration contains an error. Open configuration to resolve. 設定中包含錯誤。開啟設定以排除。 Bad config key '%1' in ConfigHandler. Please report this as a bug. 在 ConfigHandler 中的錯誤設定鍵 '%1'。請將此報告為錯誤。 ConfigResolver Resolve configuration errors 排除設定錯誤 <b>You must resolve all errors before continuing:</b> <b>您必須在繼續之前排除所有錯誤:</b> Reset 重設 Reset to the default value. 重設為預設值。 Remove 移除 Remove this setting. 移除此設定。 Some keyboard shortcuts have conflicts. This will NOT prevent flameshot from starting. Please solve them manually in the configuration file. 部份鍵盤快捷鍵有衝突。 這不會妨礙 flameshot 啟動。 請在設定檔中手動排除它們。 Resolve all 全部排除 Resolve all listed errors. 排除所有列出的錯誤。 Details 詳細資訊 ConfigWindow Configuration 設定 Interface 介面 Filename Editor 檔名編輯器 General 一般 Shortcuts 捷徑 Resolve 排除 <b>Configuration file has errors. Resolve them before continuing.</b> <b>設定檔有錯誤。在繼續之前排除它們。</b> Controller New version %1 is available 已有新版本 %1 可取得 You have the latest version 您已安裝最新版本 Failed to get information about the latest version. 無法取得最新版本的資訊。 Error 錯誤 Unable to close active modal widgets Unable to close active modal widgets &Take Screenshot &進行截圖 &Open Launcher &打開啟動器 &Configuration &設定 &About &關於 Check for updates 檢查更新 &Latest Uploads &最近上傳 &Information &資訊 &Quit &結束 CopyTool Copy 複製 Copy selection to clipboard 將選擇的部分複製到剪貼簿 Copy the selection into the clipboard 把截圖複製到剪貼簿 DBusUtils Unable to connect via DBus 無法透過 DBus 進行連接 ExitTool Exit 離開 Leave the capture screen 離開截圖畫面 FileNameEditor Edit the name of your captures: 編輯您的截圖名稱: Edit: 編輯: Preview: 預覽: Save 存檔 Saves the pattern 儲存模式 Restore 還原 Reset 重設 Restores the saved pattern 還原儲存的模式 Clear 清除 Deletes the name 刪除這個名稱 Flameshot Error 錯誤 Unable to close active modal widgets 無法關閉正在使用中的小工具 URL copied to clipboard. 網址已複製到剪貼簿。 FlameshotDaemon New version %1 is available 已有新版本 %1 可使用 You have the latest version 您已安裝最新版本 Failed to get information about the latest version. 無法取得最新版本的資訊。 Unable to connect via DBus 無法透過 DBus 進行連接 GeneneralConf Show help message 顯示説明資訊 Show the help message at the beginning in the capture mode. 在擷取之前顯示説明資訊 Show desktop notifications 顯示桌面通知 Show tray icon 顯示託盤圖示 Show the systemtray icon 顯示工作列圖示 Import 匯入 Error 錯誤 Unable to read file. 無法讀取檔案 Unable to write file. 無法寫入檔案 Save File 存檔 Confirm Reset 確認重設 Are you sure you want to reset the configuration? 你確定你想要重設? Configuration File 設定檔 Export 匯出 Reset 重設 Launch at startup 自動啟動 GeneralConf Import 匯入 Error 錯誤 Unable to read file. 無法讀取檔案。 Unable to write file. 無法寫入檔案。 Save File 儲存檔案 Confirm Reset 確認重設 Are you sure you want to reset the configuration? 您確定要重設設定嗎? Show help message 顯示説明顯示説明 Show the help message at the beginning in the capture mode. 在擷取之前顯示説明資訊。 Show the side panel button 顯示側邊欄按鈕 Show the side panel toggle button in the capture mode. 在擷取模式下顯示側面板按鈕。 Show desktop notifications 顯示桌面通知 Show tray icon 顯示工具列圖示 Show the systemtray icon 顯示工作列圖示 Confirmation required to delete screenshot from the latest uploads 從最近上傳刪除截圖時需要確認 Configuration File 設定檔 Export 匯出 Reset 重設 Automatic check for updates 自動檢查更新 Allow multiple flameshot GUI instances simultaneously 允許同時執行多個 flameshot GUI 程式 Automatically close daemon when it is not needed 當不需要常駐程式時自動關閉 Launch at startup 開機自動啟動 Launch Flameshot 啟動 Flameshot Show welcome message on launch 啟動時顯示歡迎訊息 Use large predefined color palette 使用大型預定義的顏色調色盤 Copy URL after upload 上傳後自動複製網址 Copy URL and close window after upload 上傳後自動複製網址並關閉視窗 Save image after copy 複製圖片後自動儲存 Save image file after copying it 複製圖片後自動儲存 Show the help message at the beginning in the capture mode 在擷取模式開始時顯示説明訊息 Use last region for GUI mode 使用上次的區域 Use the last region as the default selection for the next screenshot in GUI mode 將上次的區域作為下一次截圖的預設選擇 Show the side panel toggle button in the capture mode 在擷取模式中顯示側邊欄切換按鈕 Enable desktop notifications 啟用桌面通知 Show abort notifications Enable abort notifications Show icon in the system tray 在系統工具列中顯示圖示 Use grim to capture screenshots Grim is a wayland only utility to capture screens based on the screencopy protocol. Generally only enable on minimal wayland window managers like sway, hyprland, etc. Ask for confirmation to delete screenshot from the latest uploads 從最近上傳刪除截圖時詢問確認 Check for updates automatically 自動檢查更新 This allows you to take screenshots of Flameshot itself for example 例如,這允許您對 Flameshot 本身進行截圖 Launch Flameshot daemon when computer is booted 電腦開機時啟動 Flameshot 常駐程式 Show the welcome message box in the middle of the screen while taking a screenshot 擷取截圖時在螢幕中間顯示歡迎訊息框 Use a large predefined color palette 使用大型預定義的顏色調色盤 Copy on double click 點選兩下複製 Enable Copy on Double Click 啟用點選兩下複製 Copy URL and close window after uploading was successful 上傳成功後複製網址並關閉視窗 Automatically unload from memory when it is not needed Automatically close daemon (background process) when it is not needed Launch in background at startup Launch Flameshot daemon (background process) when computer is booted Ask before quit capture Show the confirmation prompt before ESC quit Enable Copy to clipboard on Double Click Copy URL after uploading was successful After copying the screenshot, save it to a file as well 複製截圖後,也將其儲存為檔案 Save Path 儲存路徑 Change... 變更... Use fixed path for screenshots to save 使用固定的路徑來儲存螢幕截圖 Preferred save file extension: 偏好的副檔名: Latest Uploads Max Size 最近上傳的最大大小 Imgur Application Client ID Imgur 應用程式客戶端 ID Undo limit 復原限制 Use JPG format for clipboard (PNG default) 複製到剪貼簿時使用 JPG 格式(預設為 PNG) Use lossy JPG format for clipboard (lossless PNG default) Copy file path after save 儲存後複製檔案路徑 Copy the file path to clipboard after the file is saved 檔案儲存後將檔案路徑複製到剪貼簿 Anti-aliasing image when zoom the pinned image 放大釘選的圖片時進行反鋸齒處理 After zooming the pinned image, should the image get smoothened or stay pixelated 放大釘選的圖片後,圖片應該進行平滑處理還是保持像素化 Upload image without confirmation 上傳圖片無需確認 Choose a Folder 選擇一個資料夾 Unable to write to directory. 無法寫入資料夾。 Show magnifier 顯示放大鏡 Enable a magnifier while selecting the screenshot area 選擇截圖區域時啟用放大鏡 Square shaped magnifier 方形放大鏡 Make the magnifier to be square-shaped 將放大鏡變成方形 Milliseconds before geometry display hides; 0 means do not hide Set geometry display timeout (ms) Selection Geometry Display Display Location None Top Left Top Right Bottom Left Bottom Right Center Quality range of 0-100; Higher number is better quality and larger file size JPEG Quality Reverse arrow 反向箭頭 Draw the arrow head first Insecure Pixelate Draw the pixelation effect in an insecure but more asethetic way. HistoryWidget Latest Uploads 最近上傳 Screenshots history is empty 無螢幕截圖歷史紀錄 Copy URL 複製網址 URL copied to clipboard. 網址已複製到剪貼簿。 Open in browser 在瀏覽器開啟 Confirm to delete 確認刪除 Are you sure you want to delete a screenshot from the latest uploads and server? Are you sure you want to delete a screenshot from the latest uploads and server? ImgS3Uploader Uploading Image 正在上傳 URL copied to clipboard. 連結已複製到剪貼簿 Error 錯誤 ImgUploadDialog Upload Confirmation 上傳確認 Do you want to upload this capture? 您要上傳這個截圖嗎? Upload without confirmation 上傳無需確認 ImgUploader Uploading Image 正在上傳 Unable to open the URL. 無法打開此連結 URL copied to clipboard. 連結已複製到剪貼簿 Screenshot copied to clipboard. 截圖已複製到剪貼簿 Copy URL 複製連結 Open URL 打開連結 Image to Clipboard. 將檔案複製到剪貼簿 ImgUploaderBase Upload image 上傳圖片 Uploading Image 正在上傳圖片 Copy URL 複製網址 Open URL 開啟連結 Delete image 刪除圖片 Image to Clipboard. 圖片到剪貼簿。 Save image 儲存圖片 Unable to open the URL. 無法打開此連結。 URL copied to clipboard. 網址已複製到剪貼簿。 Screenshot copied to clipboard. 截圖已複製到剪貼簿。 Unable to save the screenshot to disk. 無法將截圖儲存到磁碟。 Screenshot saved. 截圖已儲存。 ImgUploaderTool Image Uploader 圖片上傳器 Upload the selection 上傳選擇的部分 ImgurUploader Upload to Imgur 上傳到 Imgur Uploading Image 正在上傳 Copy URL 複製連結 Open URL 打開連結 Delete image 刪除圖片 Image to Clipboard. 將檔案複製到剪貼簿。 Unable to open the URL. 無法打開此連結。 URL copied to clipboard. 連結已複製到剪貼簿。 Screenshot copied to clipboard. 截圖已複製到剪貼簿。 ImgurUploaderTool Image Uploader 上傳圖片 Upload the selection to Imgur 上傳到 Imgur InfoWindow About 關於 Icon 圖示 License 授權 GPLv3+ GPLv3+ Version 版本 Flameshot v Flameshot v OS Info 作業系統資訊 Copy Info 複製資訊 Right Click 右鍵 Mouse Wheel 滑鼠滑輪 Move selection 1px 移動 1px Resize selection 1px 調整大小 1px Quit capture 結束擷取 Copy to clipboard 複製到剪貼簿 Save selection as a file 將選擇範圍另存新檔 Undo the last modification 復原上次修改 Show color picker 顯示顏色選擇器 Change the tool's thickness 改變工具的寬度 Key Description 描述 <u><b>License</b></u> <u><b>授權條款</b></u> <u><b>Version</b></u> <u><b>版本</b></u> <u><b>Shortcuts</b></u> <u><b>快速鍵</b></u> Available shortcuts in the screen capture mode. 螢幕擷取模式中的可用快速鍵 InvertTool Invert 反轉 Set Inverter as the paint tool 選擇反轉為繪圖工具 LineTool Line 直線 Set the Line as the paint tool 選擇直線為繪圖工具 MarkerTool Marker 標記 Set the Marker as the paint tool 選擇標記為繪圖工具 MoveTool Move 移動 Move the selection area 移動選擇區域 PencilTool Pencil 鉛筆 Set the Pencil as the paint tool 選擇鉛筆為繪圖工具 PinTool Pin Tool 釘選工具 Pin image on the desktop 將圖片釘選在桌面上 PinWidget Context menu 內文選單 Copy to clipboard 複製到剪貼簿 Save to file 儲存到檔案 Rotate Right 向右旋轉 Rotate Left 向左旋轉 Increase Opacity Decrease Opacity Close 關閉 PixelateTool Pixelate 馬賽克 Set Pixelate as the paint tool. Set Pixelate as the paint tool 選擇馬賽克為繪圖工具 PrimaryInstanceWidget Primary instance <b>Primary instance.</b> Messages received from secondaries: QHotkey Failed to register %1. Error: %2 無法註冊 %1。錯誤:%2 Failed to unregister %1. Error: %2 無法取消註冊 %1。錯誤:%2 QObject Save Error 存檔錯誤 Capture saved as 截圖已另存為 Capture saved to clipboard. 截圖已複製到剪貼簿。 Capture saved to clipboard 已將截圖複製到剪貼簿 Error while saving to clipboard 複製到剪貼簿時發生錯誤 Error trying to save as 嘗試另存發生錯誤 Save screenshot 儲存截圖 Path copied to clipboard as 路徑已複製到剪貼簿為 Saving canceled 已取消儲存 Save canceled 已取消儲存 Capture is saved and copied to the clipboard as Capture is saved and copied to the clipboard as Unable to connect via DBus 無法透過 DBus 進行連接 Powerful yet simple to use screenshot software. 強大且易於使用的截圖軟體。 See 查看 Capture the entire desktop. 擷取整個桌面。 Open the capture launcher. 開啟截圖啟動器。 Start a manual capture in GUI mode. 在 GUI 模式下開始手動截圖。 Configure 設定 Capture a single screen. 擷取單一螢幕。 Path where the capture will be saved Path where the capture will be saved Capture screenshot of all monitors at the same time. Capture a screenshot of the specified monitor. Existing directory or new file to save to 儲存到的現有目錄或另存新檔 Save the capture to the clipboard 將截圖複製到剪貼簿 Pin the capture to the screen 將截圖釘選到螢幕上 Upload screenshot 上傳截圖 Delay time in milliseconds 延遲時間(毫秒) Repeat screenshot with previously selected region 使用先前選擇的區域重複截圖 Screenshot region to select 要選擇的截圖區域 Set the filename pattern 設定檔名格式 Accept capture as soon as a selection is made 一選擇就接受截圖 Enable or disable the trayicon 啟用或停用工具列圖示 Enable or disable run at startup 啟用或停用開機啟動 Enable or disable the notifications Check the configuration for errors 檢查設定是否有錯誤 Show the help message in the capture mode 在擷取模式中顯示説明資訊 Define the main UI color 定義主要 UI 顏色 Define the contrast UI color 定義對比 UI 顏色 Print raw PNG capture 列印原始 PNG 截圖 Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified 以 WxH+X+Y 格式列印選擇的幾何形狀。若指定了「原始」模式,則不進行任何動作 Define the screen to capture (starting from 0) 定義要擷取的螢幕(從 0 開始) Invalid delay, it must be a number greater than 0 無效的延遲時間,它必須是大於 0 的數字 Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'. 無效的區域,使用 'WxH+X+Y' 或 'all' 或 'screen0/screen1/...' 等格式。 Invalid path, must be an existing directory or a new file in an existing directory 無效的路徑,必須是現有的目錄或現有目錄中的新檔案 Define the screen to capture Define the screen to capture default: screen containing the cursor 預設:包含游標的螢幕 Screen number 螢幕編號 Invalid color, this flag supports the following formats: - #RGB (each of R, G, and B is a single hex digit) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - Named colors like 'blue' or 'red' You may need to escape the '#' sign as in '\#FFF' 無效的顏色,此標誌支援以下格式: - #RGB (R、G 和 B 的每一個都是單個十六進位制數字) - #RRGGBB - #RRRGGGBBB - #RRRRGGGGBBBB - 像 'blue' 或 'red' 這樣的命名顏色 您可能需要像 '\#FFF' 這樣跳脫 '#' 符號 Invalid delay, it must be higher than 0 延遲秒數無效,必須大於 0 Invalid screen number, it must be non negative 無效的螢幕編號,它必須是一個正整數 Invalid path, it must be a real path in the system Invalid path, it must be a real path in the system Invalid value, it must be defined as 'true' or 'false' 無效的值,它必須被定義為 'true' 或 'false' Error 錯誤 Unable to write in 無法寫入 Requested screen exceeds screen count 請求的螢幕超過螢幕數量 Full screen screenshot pinned to screen 全螢幕截圖已釘選到螢幕上 URL copied to clipboard. 連結已複製到剪貼簿。 Options 選項 Arguments 參數 arguments 參數 Subcommands subcommands Usage 使用方法 options 選項 Per default runs Flameshot in the background and adds a tray icon for configuration. 預設情況下,Flameshot 在背景中執行並新增一個工具列圖示以進行設定。 Hello, I'm here! Click icon in the tray to take a screenshot or click with a right button to see more options. 嗨,我在這裡!左鍵點選工具列的圖示來進行截圖,或者右鍵點選以檢視更多選項。 Toggle side panel 開關側邊欄 Resize selection left 1px Resize selection left 1px Resize selection right 1px Resize selection right 1px Resize selection up 1px Resize selection up 1px Resize selection down 1px Resize selection down 1px Select entire screen 選取整個畫面 Move selection left 1px Move selection left 1px Move selection right 1px Move selection right 1px Move selection up 1px Move selection up 1px Move selection down 1px Move selection down 1px Commit text in text area Commit text in text area Delete current tool 刪除目前工具 Quit capture 結束擷取 Screenshot history 截圖紀錄 Capture screen 擷取螢幕 Show color picker 顯示顏色選擇器 Change the tool's size 變更工具的大小 Change the tool's thickness 改變工具的寬度 RectangleTool Rectangle 實心矩形 Set the Rectangle as the paint tool 選擇實心矩形為繪圖工具 RedoTool Redo 重做 Redo the next modification 重做下一個修改 SaveTool Save 儲存 Save screenshot to a file 將截圖儲存到檔案 Save the capture 儲存擷取 ScreenGrabber Unable to detect desktop environment (GNOME? KDE? Sway? ...) 無法偵測桌面環境 (GNOME? KDE? Sway? ...) The universal wayland screen capture adapter requires Grim as the screen capture component of wayland. If the screen capture component is missing, please install it! If the useGrimAdapter setting is not enabled, the dbus protocol will be used. It should be noted that using the dbus protocol under wayland is not recommended. It is recommended to enable the useGrimAdapter setting in flameshot.ini to activate the grim-based general wayland screenshot adapter grim's screenshot component is implemented based on wlroots, it may not be used in GNOME or similar desktop environments Unable to detect desktop environment (GNOME? KDE? Qile? Sway? ...) 無法偵測桌面環境(GNOME?KDE?Qile?Sway?……) Hint: try setting the XDG_CURRENT_DESKTOP environment variable. 提示:嘗試設定 XDG_CURRENT_DESKTOP 環境變數。 Unable to capture screen 無法擷取螢幕 SecondaryInstanceWidget Secondary instance <b>Secondary instance.</b> Send message to primary: Type something here... &Send Error sending message The message '%1' could not be sent to the primary. SelectionTool Rectangular Selection 矩形選擇 Set Selection as the paint tool 選擇選取為繪圖工具 SetShortcutDialog Set Shortcut 設定快捷鍵 Enter new shortcut to change 輸入新的快捷鍵以進行變更 Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut. 按下 Esc 以取消或按下 ⌘+Backspace 來停用鍵盤快捷鍵。 Press Esc to cancel or Backspace to disable the keyboard shortcut. 按下 Esc 以取消或按下 Backspace 來停用鍵盤快捷鍵。 Flameshot must be restarted for changes to take effect. 必須重新啟動 Flameshot 以使變更生效。 ShortcutsWidget Hot Keys 熱鍵 Available shortcuts in the screen capture mode. 螢幕擷取模式中的可用快捷鍵。 Description 描述 Key Left Double-click 左鍵點選兩下 Toggle side panel 切換側邊欄 Grab a color from the screen Resize selection left 1px 將選擇區域向左調整 1px Resize selection right 1px 將選擇區域向右調整 1px Resize selection up 1px 將選擇區域向上調整 1px Resize selection down 1px 將選擇區域向下調整 1px Symmetrically decrease width by 2px Symmetrically increase width by 2px Symmetrically increase height by 2px Symmetrically decrease height by 2px Select entire screen 選取整個螢幕 Move selection left 1px 將選擇區域向左移動 1px Move selection right 1px 將選擇區域向右移動 1px Move selection up 1px 將選擇區域向上移動 1px Move selection down 1px 將選擇區域向下移動 1px Commit text in text area 在文字區域提交文字 Delete selected drawn object Cancel current selection Delete current tool 刪除目前工具 Capture screen 擷取畫面 Screenshot history 截圖記錄 SidePanelWidget Active thickness: Active thickness: Active color: Active color: Press ESC to cancel 按下 Esc 以取消 Active tool size: 使用中的工具大小: Active Color: 使用中的顏色: Grab Color 取得顏色 Display grid 顯示格線 SizeDecreaseTool Decrease Tool Size 縮小工具大小 Decrease the size of the other tools 縮小其他工具的大小 SizeIncreaseTool Increase Tool Size 增加工具大小 Increase the size of the other tools 增加其他工具的大小 SizeIndicatorTool Selection Size Indicator 選擇尺寸指示器 Show X and Y dimensions of the selection 顯示選擇的 X 和 Y 尺寸 Show the dimensions of the selection (X Y) 顯示選擇的尺寸 (X Y) StrftimeChooserWidget Century (00-99) 世紀 (00-99) Year (00-99) 年 (00-99) Year (2000) 年 (2000) Month Name (jan) 月 (一) Month Name (january) 月 (一月) Month (01-12) 月 (01-12) Week Day (1-7) 星期 (1-7) Week (01-53) 週 (01-53) Day Name (mon) 星期 (一) Day Name (monday) 星期 (星期一) Day (01-31) 天 (01-31) Day of Month (1-31) 一月中的某天 (1-31) Day (001-366) 天 (001-366) Time (%H-%M-%S) 時間 (%H-%M-%S) Time (%H-%M) 時間 (%H-%M) Hour (00-23) 小時 (00-23) Hour (01-12) 小時 (01-12) Minute (00-59) 分鐘 (00-59) Second (00-59) 秒 (00-59) Full Date (%m/%d/%y) 完整日期 (%m/%d/%y) Full Date (%Y-%m-%d) 完整日期 (%Y-%m-%d) Full Date (%d-%m-%Y) SystemNotification Flameshot Info Flameshot 資訊 TextConfig StrikeOut 刪除線 Underline 底線 Bold 粗體 Italic 斜體 Left Align 靠左對齊 Center Align 置中對齊 Right Align 靠右對齊 TextTool Text 文字 Add text to your capture 在你的截圖中新增文字 TrayIcon &Take Screenshot &進行截圖 &Open Launcher &開啟啟動器 &Configuration &設定 &About &關於 Check for updates 檢查更新 New version %1 is available 已有新版本 %1 可用 &Quit &結束 &Latest Uploads &最近上傳 &Open Save Path UIcolorEditor UI Color Editor UI 顏色編輯器 Change the color moving the selectors and see the changes in the preview buttons. 移動選擇器來變更顏色,並在預覽按鈕中檢視變更。 Select a Button to modify it 選擇一個按鈕來修改它 Main Color 主色 Click on this button to set the edition mode of the main color. 點選此按鈕以設定主色的編輯模式。 Contrast Color 對比色 Click on this button to set the edition mode of the contrast color. 點選此按鈕以設定對比色的編輯模式。 UndoTool Undo 復原 Undo the last modification 復原上次的修改 UpdateNotificationWidget New Flameshot version %1 is available Flameshot 有新版本 %1 可供使用 Ignore 忽略 Later 之後再說 Update 更新 UploadHistory Upload History 上傳歷史紀錄 Screenshots history is empty 無螢幕截圖歷史紀錄 UploadLineItem Form 表單 TextLabel 文字標籤 Copy URL 複製網址 Open In Browser 在瀏覽器中開啟 Confirm to delete 確認刪除 Are you sure you want to delete a screenshot from the latest uploads and server? 您確定要從最近的上傳和伺服器中刪除截圖嗎? UtilityPanel Close 關閉 <Empty> <空> VisualsEditor Opacity of area outside selection: 選擇區域以外的不透明度: UI Color Editor UI 顏色編輯器 Colorpicker Editor 顏色挑選編輯器 Button Selection 按鈕選擇 Select All 全選 color_widgets::ColorDialog Pick 選擇 color_widgets::ColorPalette Unnamed 未命名 color_widgets::ColorPaletteModel Unnamed 未命名 %1 (%2 colors) %1 (%2 顏色) color_widgets::ColorPaletteWidget Open a new palette from file 從檔案開啟新的調色盤 Create a new palette 建立新的調色盤 Duplicate the current palette 複製目前的調色盤 Delete the current palette 刪除目前的調色盤 Revert changes to the current palette 還原目前調色盤的變更 Save changes to the current palette 儲存目前調色盤的變更 Add a color to the palette 新增顏色到調色盤 Remove the selected color from the palette 從調色盤移除選擇的顏色 New Palette 新調色盤 Name 名稱 GIMP Palettes (*.gpl) GIMP 調色盤 (*.gpl) Palette Image (%1) 調色盤圖片 (%1) All Files (*) 所有檔案 (*) Open Palette 開啟調色盤 Failed to load the palette file %1 無法載入調色盤檔案 %1 color_widgets::GradientEditor Add Color 新增顏色 Remove Color 移除顏色 Edit Color... 編輯顏色... color_widgets::GradientListModel %1 (%2 colors) %1 (%2 顏色) color_widgets::Swatch Clear Color 清除顏色 %1 (%2) %1 (%2) ================================================ FILE: default.nix ================================================ (import ( let lock = builtins.fromJSON (builtins.readFile ./flake.lock); nodeName = lock.nodes.root.inputs.flake-compat; in fetchTarball { url = lock.nodes.${nodeName}.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz"; sha256 = lock.nodes.${nodeName}.locked.narHash; } ) { src = ./.; }).defaultNix ================================================ FILE: docs/0000-template.md ================================================ ================================================ FILE: docs/CONTRIBUTING.md ================================================ # Contributing Contributions are welcome! Here's how you can help: - [Translating](#translations) - [Contributing code](#code) - [Reporting issues](#issues) - [Donating](#donations) ## Translations See [translation instructions](https://github.com/flameshot-org/translation-instruction). ## Code For small fixes or incremental improvements simply fork the repo and follow the process below. For larger changes submit an [RFC:](RFC.md) 1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository and [clone](https://help.github.com/articles/cloning-a-repository/) your fork. 2. Start coding! - Implement your feature. - Check your code works as expected. - Run the code formatter: `clang-format -i $(git ls-files "*.cpp" "*.h")` 3. Commit your changes to a new branch (not `master`, one change per branch) and push it: - Commit messages should: - Header line: explain the commit in one line (use the imperative) - Be descriptive. - Have a first line with less than *80 characters* and have a second line that is *empty* if you want to add a description. 4. Once you are happy with your changes, submit a pull request. - Open the pull-request. - Add a short description explaining briefly what you've done (or if it's a work-in-progress - what you need to do) ## Issues 1. Do a quick search on GitHub to check if the issue has already been reported. 2. [Open an issue](https://github.com/flameshot-org/flameshot/issues/new) and describe the issue you are having - you could include: - Screenshots - Ways to reproduce the issue. - Your Flameshot version. - Your platform (e.g. Windows 10 or Ubuntu 15.04 x64) After reporting you should aim to answer questions or clarifications as this helps pinpoint the cause of the issue. ## Donations The best way to fund Flameshot is to create a bounty here: https://rysolv.com/issues ================================================ FILE: docs/RFC/0000-Add-Opacity-slider.md ================================================ # Add an opacity slider to the Tool Settings ### To be Reviewed By * borgmanJeremy * mmahmoudian * Flameshot developers
### Authors * Pr. Sunflower
### Status: Draft ~~| Discussion | Active | Dropped | Superseded~~ [Pr. Sunflower] This is the first time the authors are redacting a document of this sort and they kindly request to double-check their writings and to assist them in missing parts.
### Superseded by N/A
### Related * Issue #249 * Issue #1085
## Problem Currently the drawing and marking tools in Flameshot only have one, non-customisable opacity setting. This current setting is bad for highlighting text because the Marker tool looks very pale. To compensate the user often has to highlight multiple times which is not convenient and time-consuming. Here is a comparison of Flameshot's Marker tool with Microsoft's **Snip & Sketch** Highlighter tool: ### Black text on light background **Flameshot:** ![Flameshot_WHITE](https://user-images.githubusercontent.com/59576952/96623357-8c0a8600-130b-11eb-82e9-05ebbd95a7d9.png) **Snip & Sketch:** ![Snip_and_Sketch_WHITE](https://user-images.githubusercontent.com/59576952/96623397-9a58a200-130b-11eb-9d27-9a85f4fad504.png)
### White text on dark background **Flameshot:** ![Flameshot_BLACK](https://user-images.githubusercontent.com/59576952/96623470-b8260700-130b-11eb-88ff-ff34ea69294c.png) **Snip & Sketch:** ![Snip_and_Sketch_BLACK](https://user-images.githubusercontent.com/59576952/96623478-bbb98e00-130b-11eb-9e26-59f72cc936a4.png)

## Anti-Goals Flameshot's Marker tool does a very good job at keeping the text readable so this is not linked to this request. ![image](https://user-images.githubusercontent.com/59576952/96624043-806b8f00-130c-11eb-9eb3-ce01d19234df.png) ![image](https://user-images.githubusercontent.com/59576952/96624227-bf99e000-130c-11eb-92e7-d9c6087f110c.png)

## Solution **Add a way to control opacity, like an opacity slider in the Tool Settings.** Add an opacity slider under "Active thickness". ![Screenshot from 2021-04-25 17-22-06](https://user-images.githubusercontent.com/59576952/115998533-ba3d8b00-a5f8-11eb-8464-da15b42ce9b1.png)

## Performance Impact [Pr. Sunflower:] *I need help for this part.* Do you anticipate the proposed changes to impact performance in any way? Are there plans to measure and/or mitigate the impact?
## Backwards Compatibility and Upgrade Path [Pr. Sunflower:] *I need help for this part.* Will the regular rolling upgrade process work with these changes? How do the proposed changes impact backwards-compatibility? Are message or file formats changing? Is there a need for a deprecation process to provide an upgrade path to users who will need to adjust their applications?
## Prior Art [Pr. Sunflower:] *I don't think this part is useful.* What would be the alternatives to the proposed solution? What would happen if we don’t solve the problem? Why should this proposal be preferred?
## FAQ [Pr. Sunflower:] *I need help for this part.* Answers to questions you’ve commonly been asked after requesting comments for this proposal.
## Errata [Pr. Sunflower:] *I need help for this part.* What are minor adjustments that had to be made to the proposal since it was approved? ================================================ FILE: docs/RFC.md ================================================ # Flameshot RFCs [Flameshot RFCs]: #flameshot-rfcs Many changes, including bug fixes and documentation improvements can be implemented and reviewed via the normal GitHub pull request workflow. Some changes though are "substantial", and we ask that these be put through a bit of a design process and produce a consensus among the Flameshot community and development team. The "RFC" (request for comments) process is intended to provide a consistent and controlled path for new features to enter the language and standard libraries, so that all stakeholders can be confident about the direction the project is evolving in. ## Table of Contents [Table of Contents]: #table-of-contents + [Opening](#flameshot-rfcs) + [Table of Contents] + [When you need to follow this process] + [Before creating an RFC] + [What the process is] + [The RFC life-cycle] + [Reviewing RFCs] + [Implementing an RFC] + [RFC Postponement] + [Help this is all too informal!] ## When you need to follow this process [When you need to follow this process]: #when-you-need-to-follow-this-process You need to follow this process if you intend to make "substantial" changes to Flameshot or the RFC process itself. What constitutes a "substantial" change is evolving based on community norms and varies depending on what part of the ecosystem you are proposing to change, but may include the following. + Any changes breaking compatibility to command line flags or config files. + Any major changes to the UI + Substantial new features like new tools. Some changes do not require an RFC: + Rephrasing, reorganizing, refactoring, or otherwise "changing shape does not change meaning". + Improving translations. + Additions that strictly improve objective, numerical quality criteria (warning removal, speedup, better platform coverage, etc.) + Additions only likely to be _noticed by_ other developers-of-flameshot, invisible to users-of-flameshot. If you submit a pull request to implement a new feature without going through the RFC process, it may be closed with a polite request to submit an RFC first. ## Before creating an RFC [Before creating an RFC]: #before-creating-an-rfc A hastily-proposed RFC can hurt its chances of acceptance. Low quality proposals, proposals for previously-rejected features, or those that don't fit into the near-term roadmap, may be quickly rejected, which can be demotivating for the unprepared contributor. Laying some groundwork ahead of the RFC can make the process smoother. Although there is no single way to prepare for submitting an RFC, it is generally a good idea to pursue feedback from other project developers beforehand, to ascertain that the RFC may be desirable; having a consistent impact on the project requires concerted effort toward consensus-building. The most common preparations for writing and submitting an RFC include talking the idea over on our [official Matrix Space](https://matrix.to/#/#flameshot-org:matrix.org) in the [Developers](https://matrix.to/#/!AYbNXDGTDwApLwzkNg:feneas.org?via=kde.org&via=matrix.org&via=ryan77627.xyz), or opening an issue on [Github Discussions](https://github.com/flameshot-org/flameshot/discussions). ## What the process is [What the process is]: #what-the-process-is In short, to get a major feature added to Flameshot, one must first get the RFC merged into the RFC repository as a markdown file. At that point the RFC is "active" and may be implemented with the goal of eventual inclusion into Flameshot. + Fork the Flameshot repo + Copy `docs/0000-template.md` to `docs/RFC/0000-my-feature.md` (where "my-feature" is descriptive). Don't assign an RFC number yet; This is going to be the PR number and we'll rename the file accordingly if the RFC is accepted. + Fill in the RFC. Put care into the details: RFCs that do not present convincing motivation, demonstrate lack of understanding of the design's impact, or are disingenuous about the drawbacks or alternatives tend to be poorly-received. + Submit a pull request. As a pull request the RFC will receive design feedback from the larger community, and the author should be prepared to revise it in response. + Build consensus and integrate feedback. RFCs that have broad support are much more likely to make progress than those that don't receive any comments. Feel free to reach out to the RFC assignee in particular to get help identifying stakeholders and obstacles. + The team will discuss the RFC pull request, as much as possible in the comment thread of the pull request itself. Offline discussion will be summarized on the pull request comment thread. + RFCs rarely go through this process unchanged, especially as alternatives and drawbacks are shown. You can make edits, big and small, to the RFC to clarify or change the design, but make changes as new commits to the pull request, and leave a comment on the pull request explaining your changes. Specifically, do not squash or rebase commits after they are visible on the pull request. + At some point, a member of the development team will propose a "motion for final comment period" (FCP), along with a *disposition* for the RFC (merge, close, or postpone). - This step is taken when enough of the tradeoffs have been discussed that the development is in a position to make a decision. That does not require consensus amongst all participants in the RFC thread (which is usually impossible). However, the argument supporting the disposition on the RFC needs to have already been clearly articulated, and there should not be a strong consensus *against* that position outside of the development team. Team members use their best judgment in taking this step, and the FCP itself ensures there is ample time and notification for stakeholders to push back if it is made prematurely. + In most cases, the FCP period is quiet, and the RFC is either merged or closed. However, sometimes substantial new arguments or ideas are raised, the FCP is canceled, and the RFC goes back into development mode. ## The RFC life-cycle [The RFC life-cycle]: #the-rfc-life-cycle Once an RFC becomes "active" then authors may implement it and submit the feature as a pull request to the Flameshot repo. Being "active" is not a rubber stamp, and in particular still does not mean the feature will ultimately be merged; it does mean that in principle all the major stakeholders have agreed to the feature and are amenable to merging it. Furthermore, the fact that a given RFC has been accepted and is "active" implies nothing about what priority is assigned to its implementation, nor does it imply anything about whether a developer has been assigned the task of implementing the feature. While it is not *necessary* that the author of the RFC also write the implementation, it is by far the most effective way to see an RFC through to completion: authors should not expect that other project developers will take on responsibility for implementing their accepted feature. Modifications to "active" RFCs can be done in follow-up pull requests. We strive to write each RFC in a manner that it will reflect the final design of the feature; but the nature of the process means that we cannot expect every merged RFC to actually reflect what the end result will be at the time of the next major release. In general, once accepted, RFCs should not be substantially changed. Only very minor changes should be submitted as amendments. More substantial changes should be new RFCs, with a note added to the original RFC. Exactly what counts as a "very minor change" is up to the development team. ## Reviewing RFCs [Reviewing RFCs]: #reviewing-rfcs The preferred method of discussing RFC's is the Github issue. However, the development team may schedule meetings with the author and/or relevant stakeholders to discuss the issues in greater detail. In either case a summary from the meeting will be posted back to the RFC pull request. The development team makes final decisions about RFCs after the benefits and drawbacks are well understood. These decisions can be made at any time, but the sub-team will regularly issue decisions. When a decision is made, the RFC pull request will either be merged or closed. In either case, if the reasoning is not clear from the discussion in thread, the sub-team will add a comment describing the rationale for the decision. ## Implementing an RFC [Implementing an RFC]: #implementing-an-rfc Some accepted RFCs represent vital features that need to be implemented right away. Other accepted RFCs can represent features that can wait until some arbitrary developer feels like doing the work. Every accepted RFC has an associated issue tracking its implementation in the Flameshot repository; thus that associated issue can be assigned a priority via the triage process that the team uses for all issues in the Flameshot repository. The author of an RFC is not obligated to implement it. Of course, the RFC author (like any other developer) is welcome to post an implementation for review after the RFC has been accepted. If you are interested in working on the implementation for an "active" RFC, but cannot determine if someone else is already working on it, feel free to ask (e.g. by leaving a comment on the associated issue). ## RFC Postponement [RFC Postponement]: #rfc-postponement Some RFC pull requests are tagged with the "postponed" label when they are closed (as part of the rejection process). An RFC closed with "postponed" is marked as such because we want neither to think about evaluating the proposal nor about implementing the described feature until some time in the future, and we believe that we can afford to wait until then to do so. Usually an RFC pull request marked as "postponed" has already passed an informal first round of evaluation, namely the round of "do we think we would ever possibly consider making this change, as outlined in the RFC pull request, or some semi-obvious variation of it." (When the answer to the latter question is "no", then the appropriate response is to close the RFC, not postpone it.) ### Help this is all too informal! [Help this is all too informal!]: #help-this-is-all-too-informal The process is intended to be as lightweight as reasonable for the present circumstances. As usual, we are trying to let the process be driven by consensus and community norms, not impose more structure than necessary. ================================================ FILE: docs/ReleaseNote_12.1.md ================================================ ## V12.1.0 This is a minor release that fixed some bugs introduced in the v12 release. ## What's Changed * Fix typos by @luzpaz in https://github.com/flameshot-org/flameshot/pull/2705 * rename Imgur API Key to Imgur Application Client ID by @thehunmonkgroup in https://github.com/flameshot-org/flameshot/pull/2719 * fix issue about externalWidget launchapp by @Alaskra in https://github.com/flameshot-org/flameshot/pull/2698 * Fix size not appearing on size tool when started from launcher by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2734 * Added option to pin menu to close pin by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2736 * disable option to launch on start by default by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2735 * Fix magnify windows by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2746 * DesktopFileParser only reads .desktop files @wd5gnr https://github.com/flameshot-org/flameshot/pull/2742 ## New Contributors * @cliffcoffee made their first contribution in https://github.com/flameshot-org/flameshot/pull/2726 * @thehunmonkgroup made their first contribution in https://github.com/flameshot-org/flameshot/pull/2719 * @wd5gnr made their first contribution in https://github.com/flameshot-org/flameshot/pull/2742 **Full Changelog**: https://github.com/flameshot-org/flameshot/compare/v12.0.0...v12.1.0 ================================================ FILE: docs/ReleaseNotes_0.8.md ================================================ # 0.8 Release Notes Thanks to all the testers and contributors that helped make version 0.8! We are very excited to have improved many bugs and added new features in version 0.8. ## Known Issues * Wayland support is experimental. In generic packages (Snap, Flatpak, AppImage) there may be extra issues with Wayland. * In generic packages(Snap, Flatpak, AppImage) due to confinement "Open With External Application" does not work. * If "close after capture" is enabled, and a user copies the image to clipboard, the image may not actually be in the clipboard. We recommend using the "Save" feature with close after capture. ## New Features * Fix capture after pressing ctrl + S during textarea input (#311) * Add translation: - Japanese (#361) - Brazilian Portuguese (#364) - Serbian (#376) - Dutch (#440) - Ukrainian (#464) - German (#467) - Slovak (#525) - Basque - Czech - Swedish - Italian - Korean - Dutch * Allow enter key to copy image to clipboard (#362) * side panel: Add thickness slider (#374) * Add support for saving as JPG and BMP files. (#436) * Allow 45 degree adjustment for some tools (#439) * Add option to close after capture (WARNING: this function is buggy! It may not work well if you are going to copy the image to clipboard! If you encounter problems related to clipboard, please disable this feature in the configuration and try again. This is a known bug, see #557 and #569 .) * Add a basic launcher panel. * Add option to auto copy URL after upload (#553) * Add a circle counter tool. * Replace the blur tool with pixelate tool. * Convert buildsystem from QMake to CMake. * Add launcher action into .desktop file. * Added Generic Packages (Snap, Flatpak, AppImage) * Improved Windows support ## Preview of New Features ### Pixelate The behavior of the blur tool has been modified so if the "thickness" is 0 or 1, the old blur behavior is preserved. If the thickness is increased past 1 the image will pixelate by the thickness: ![](images/pixelate.gif) ### Countertool A popular request has been to add a tool that counts upward. This can be helpful when creating directions. ![](images/counter.gif) ### Sidebar A button has been added to open the sidebar. This tool was previously only accessible by hitting "Spacebar" which made usage on tablets difficult. This sidebar allows advanced modifications for many tools. ![](images/sidebar.gif) ## Fixes * Exit non-zero when aborting with --raw. (#424) * Enable Pin and Text tool by default. (#443) * Fix the problem that moving or resizing does not affect screenshot. (#459) * Fix problem with re-enabling disabled tray icon (#495) * Fix compilation problem against Qt 5.15. ================================================ FILE: docs/ReleaseNotes_0.9.md ================================================ # 0.9 Release Notes Thanks to all the testers and contributors that helped make version 0.9! We are very excited to have improved many bugs and added new features in version 0.9. ## Known Issues - Fractional scaling issues are not resolved. We are working with Qt upstream on this issue. ## New Features - Improved MacOS support. MacOS is now officially supported and we will resolve any reported issues on this platform. - Thanks to SignPath we are able to offer digitally signed windows releases. - Improved Wayland support - Behind the scenes we configure flameshot to automatically run on xcb. This significantly improves the wayland experience. This resolves issues with multimonitor setups and copying to the clipboard - New option to allow the clipboard image to be a jpeg instead of a png. This may reduce bandwidth when pasting the image into chat or email clients - New global shortcut menu. All actions hotkeys are fully customizable. - Ability to take "symmetric" selections by holding down the Shift key while resizing the selection. - The rectangle tool will now round the corners of the rectangles based on the current thickness - All imgur uploads are now tracked in the "Upload History" menu. This makes it much easier to delete of images off imgur or find the upload link later. - Added "check for new release" feature. This allows users on MacOS / Windows / and AppImages to easily check for updated versions. - New option for setting a "fixed save path". When this is enabled a user will no longer need to set the path for images that are saved. ## Fixes - Under certain circumstance the circle count could get set to the wrong number with large numbers of undo / redo. This has been fixed. - Close after capture has been removed. This feature was not well implemented and lead to numerous bugs. ================================================ FILE: docs/ReleaseNotes_11.0.md ================================================ # V11.0 Beta This is the BETA release for version 11. As you will see below there were major refactorings to the internals of Flameshot. We did our best internal testing, but this particular beta is more likely to have issues than most. We will be in beta for 1-2 weeks depending on what kind of issues are found and then do the official release. ## New Features - The on-screen help menu has been clarified and dynamically updates the hotkeys based on user defined hotkeys.

- DBus is no longer required for CLI options. - Flameshot can now be run in "one off" mode which means the background systray component is now optional. See the CLI details below. - The CLI has been completely refactored. With the new architecture we added the following: - The man page has been rewritten to reflect all the new options. The best place to learn about these new features is the man page or flameshot --help, but some notable new features will be outlined here. - CLI is now callable from MacOS. - CLI options are unified wherever possible. This means if an argument is added to "flameshot gui" it is also likely to be supported in "flameshot full". - `--region` is a new flag that allows users to specify the exact region to screenshot. It uses the same syntax as xrandr: `WxH+x+y`. - This is likely to be added to the launcher in the next release. - `--accept-on-select` This flag will save the image as soon as the mouse is released when selecting a region. - The CLI now supports pinning (`--pin`), uploading (`--upload`), and copying to clipboard (`--clipboard`). Note that in case one of these options (or `--path`, `--raw` also) is used, an *Accept* button is shown and the *Save*, *Copy*, *Upload*, *Pin*, *Open With* buttons are hidden. - MacOS now uses monochrome icon to match the system theme better.

- The sidebar now shows the hexadecimal color value when the color picker is used:

- The about screen lists system information and allows you to copy this for easy access in bug submission forms. - Every file format supported by your underlying system is now an option for file format when saving. - New tool added to invert a region:

- Thickness of tools can now be set with the keyboard. Simply type a numerical value like "15" and you will see the indicator in the upper left. - New zoom capability has been added to the color picker to more precisely select a color.

- Text alignment can now be set in the side bar.

- File names can now contain '.' - Even if a button is hidden from the toolbar, it can still be activated via hotkey. - The uploader now gives users a confirmation box before uploading. This can be disabled. **If you disable this and accidentally upload sensitive information, there is nothing we can do. It's recommended to leave the confirmation enabled.** Also, a keyboard shortcut for upload has been enabled (`Ctrl+U` by default) - MacOS users can now bind a custom hotkey for taking a screenshot. - The config file parser has been reworked. It will now alert users if there is an error in their config. If a repair is possible, Flameshot attempts to repair the file. - We do our best not to break existing configs, but sometimes adding new features or removing old ones force this to change. - Double clicking can be used to copy the screenshot to the clipboard. - Added an option to enable anti-aliasing when zooming in on a pinned image. - Added completions for the fish shell ## Bug Fixes - The border that indicates an object is moveable is no longer saved or copied with the underlying image. - The edit buttons no longer fall in the editable region when there are strange multi monitor geometries. - Optimizations to reduce lag on 8k and 4k screens. - All Qt5 deprecations are fixed in preparation for Qt6. - Many small UI improvements (ie oversized scrollbars fixed, checkboxes occluded, etc). - Path handling has been improved. - Fixed an issue where running Flameshot for the first time on NixOS would fail to create the config file. - Fixed a problem with some window managers where Flameshot would lose focus and shortcuts would stop working. ## Known Issues - Fractional scaling on linux is still not resolved. (But we have identified a workaround finally. Hope to merge soon.) ## Contributors I want to give special shout outs to some team members that made this release possible. - @veracioux for doing most of the refactoring that made this release possible - @mmahmoudian for tirelessly doing triage and community management - @Correct-Syntax for the [redesigned website](https://flameshot.org) We are very excited by the many first time contributors that helped with this release. We are always looking for more people to contribute to Flameshot and are happy to provide mentorship if needed: * @johnjago made their first contribution in https://github.com/flameshot-org/flameshot/pull/1779 * @veracioux made their first contribution in https://github.com/flameshot-org/flameshot/pull/1782 * @etircopyh made their first contribution in https://github.com/flameshot-org/flameshot/pull/1799 * @uncomfyhalomacro made their first contribution in https://github.com/flameshot-org/flameshot/pull/1832 * @karlhorky made their first contribution in https://github.com/flameshot-org/flameshot/pull/1845 * @Cr4ckC4t made their first contribution in https://github.com/flameshot-org/flameshot/pull/1849 * @j-tai made their first contribution in https://github.com/flameshot-org/flameshot/pull/1856 * @CrystalSage made their first contribution in https://github.com/flameshot-org/flameshot/pull/1926 * @a1346054 made their first contribution in https://github.com/flameshot-org/flameshot/pull/1918 * @PrSunflower made their first contribution in https://github.com/flameshot-org/flameshot/pull/1582 * @mgalgs made their first contribution in https://github.com/flameshot-org/flameshot/pull/1940 * @GongHeng2017 made their first contribution in https://github.com/flameshot-org/flameshot/pull/1812 * @gVirtu made their first contribution in https://github.com/flameshot-org/flameshot/pull/1981 * @YizhePKU made their first contribution in https://github.com/flameshot-org/flameshot/pull/1979 * @Lyqst made their first contribution in https://github.com/flameshot-org/flameshot/pull/1995 * @AdavisSnakes made their first contribution in https://github.com/flameshot-org/flameshot/pull/1992 * @deo002 made their first contribution in https://github.com/flameshot-org/flameshot/pull/2008 * @Michael-F-Bryan made their first contribution in https://github.com/flameshot-org/flameshot/pull/2012 * @sryze made their first contribution in https://github.com/flameshot-org/flameshot/pull/2026 * @meesha7 made their first contribution in https://github.com/flameshot-org/flameshot/pull/2042 * @majkinetor made their first contribution in https://github.com/flameshot-org/flameshot/pull/2056 * @claytron5000 made their first contribution in https://github.com/flameshot-org/flameshot/pull/2068 * @LHBosssss made their first contribution in https://github.com/flameshot-org/flameshot/pull/2098 * @ffabss made their first contribution in https://github.com/flameshot-org/flameshot/pull/2140 * @reggermont made their first contribution in https://github.com/flameshot-org/flameshot/pull/2150 * @RiedleroD made their first contribution in https://github.com/flameshot-org/flameshot/pull/2130 ================================================ FILE: docs/ReleaseNotes_12.0.md ================================================ # Version 12.0.rc1 Beta This is the beta for the version 12.0 release. We will be in beta for about a week unless major issues are discovered. ## New Features - Created basic layer movement functionality (up, down) by @affirVega in https://github.com/flameshot-org/flameshot/pull/2108

- Added a new widget to allow the colorwheel to be more easily customized by https://github.com/flameshot-org/flameshot/pull/2202

- Added magnifier for more precise selections by @SilasDo in https://github.com/flameshot-org/flameshot/pull/2219 - The new magnifier can be enabled in ```Configuration > General > Show Magnifier``` - There is an option to make the magnifier a square or circle

- Incremental markers can now have a point if you drag when placing them. @vozdeckyl in https://github.com/flameshot-org/flameshot/pull/2638

- Added the ability to cache the last region by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2615 - The launcher tool will automatically populate the coordinates for the last selection region - If ```Configuration > General > Use last region``` is selected, Flameshot will always initialize with the last successfully captured region

- Pinned screenshots can now be copied to the clipboard or saved to a file if a user right clicks on the pinned image by @zhangfuwen in https://github.com/flameshot-org/flameshot/pull/2519 - Users can now specify their own Imgur API Key from ```Configuration > General > Imgur API Key```. This is encouraged because as Flameshot has gotten more popular we have started exceeding the upload limit of the default API key by@borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2503 - Added 'Save to disk' button when uploading to imgur by @AndreaMarangoni in https://github.com/flameshot-org/flameshot/pull/2237 - Pinned screenshots can now be zoomed with a pinch gesture by @AndreaMarangoni in https://github.com/flameshot-org/flameshot/pull/2447 - The SVG's have been optimized by @RiedleroD in https://github.com/flameshot-org/flameshot/pull/2318 - Make KDE use Freedesktop portal by @greenfoo in https://github.com/flameshot-org/flameshot/pull/2495 - Allow final actions when printing geometry when invoke by CLI by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2444 - Many Flameshot widgets have been reworked to use .ui XML files and Qt Designer. This has been done to allow non C++ developers to more easily contribute to the graphical side of Flameshot.

- Updated Translations # Bug Fixes - Pinned images can now be moved partially offscreen on linux by @zhangfuwen in https://github.com/flameshot-org/flameshot/pull/2520 - Wayland builds now use KF Gui (KDE Framework tools) to fix some issues by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2305 - Fix Flameshot crashes with GB locale by @AndreaMarangoni in https://github.com/flameshot-org/flameshot/pull/2304 - Add alternative shortcuts file for KDE Flatpak installs by @Proton-459 in https://github.com/flameshot-org/flameshot/pull/2357 - fixed freeze with copy URL to clipboard by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2348 - Fixed crash selecting texttool by @AndreaMarangoni in https://github.com/flameshot-org/flameshot/pull/2369 - Improve tooltips texts by @mmahmoudian in https://github.com/flameshot-org/flameshot/pull/2377 - better zsh code completion by @mmahmoudian in https://github.com/flameshot-org/flameshot/pull/2382 - Print info messages to stdout instead of stderr by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2639 - Fix CloseOnLastWindow caused by tool change by @veracioux in https://github.com/flameshot-org/flameshot/pull/2645 - fix unexpected close when launch external app by @Alaskra in https://github.com/flameshot-org/flameshot/pull/2617 - Fix sidebar slider not resizing by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2530 - fixed segfault when screen number exceeds screen count by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2534 - Remove extra timer shots when moving selection with keyboard by @veracioux in https://github.com/flameshot-org/flameshot/pull/2545 - Fix pinwidget save by @Alaskra in https://github.com/flameshot-org/flameshot/pull/2549 - Config error fix by @vozdeckyl in https://github.com/flameshot-org/flameshot/pull/2552 - Fix missing icon on snap by @vozdeckyl in https://github.com/flameshot-org/flameshot/pull/2616 - Fix selection offset by @veracioux in https://github.com/flameshot-org/flameshot/pull/2630 - Suggest setting XDG_CURRENT_DESKTOP if DE cannot be detected by @greenfoo in https://github.com/flameshot-org/flameshot/pull/2634 - Fix saveAsFileExtension in example config by @veracioux in https://github.com/flameshot-org/flameshot/pull/2414 - fixed high CPU usage on pin by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2502 - Fix alignment bug and applied many clang format warnings by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2448 - fix the --print-geometry for zsh by @mmahmoudian in https://github.com/flameshot-org/flameshot/pull/2437 - fix bug on macos with save dialog by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2379 - allow numpad numbers to resize and fix text artifacting on large resize by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2386 - Zooming in/out happens at different speed by @AndreaMarangoni in https://github.com/flameshot-org/flameshot/pull/2378 - fix: arrow tool glitches by @UnkwUsr in https://github.com/flameshot-org/flameshot/pull/2395 - Fix double click by @borgmanJeremy in https://github.com/flameshot-org/flameshot/pull/2432 - Improve Colorpicker by @deo002 in https://github.com/flameshot-org/flameshot/pull/2403 ## New Contributors * @AndreaMarangoni made their first contribution in https://github.com/flameshot-org/flameshot/pull/2304 * @samrocketman made their first contribution in https://github.com/flameshot-org/flameshot/pull/2311 * @affirVega made their first contribution in https://github.com/flameshot-org/flameshot/pull/2108 * @Proton-459 made their first contribution in https://github.com/flameshot-org/flameshot/pull/2357 * @SilasDo made their first contribution in https://github.com/flameshot-org/flameshot/pull/2219 * @UnkwUsr made their first contribution in https://github.com/flameshot-org/flameshot/pull/2395 * @ricardovsilva made their first contribution in https://github.com/flameshot-org/flameshot/pull/2518 * @greenfoo made their first contribution in https://github.com/flameshot-org/flameshot/pull/2495 * @zhangfuwen made their first contribution in https://github.com/flameshot-org/flameshot/pull/2520 * @dzg made their first contribution in https://github.com/flameshot-org/flameshot/pull/2566 * @Alaskra made their first contribution in https://github.com/flameshot-org/flameshot/pull/2549 * @vozdeckyl made their first contribution in https://github.com/flameshot-org/flameshot/pull/2552 * @henetiriki made their first contribution in https://github.com/flameshot-org/flameshot/pull/2609 **Full Changelog**: https://github.com/flameshot-org/flameshot/compare/v11.0.0...v12.0.rc1 ================================================ FILE: docs/Releasing.md ================================================ # Checklist for making a new release These are the code changes that need to take place: - [ ] Update version in `CMakeLists.txt` - [ ] Update version and changelog at `packaging/debian/changelog` - [ ] Update version and changelog at `packaging/rpm/flameshot.spec` - [ ] Update `data/appdata/flameshot.metainfo.xml` - [ ] Update macOS version in `cmake/modules/MacOSXBundleInfo.plist.in` - [ ] Commit and push to a PR - [ ] Merge PR to main - [ ] Create and push git tag on main - [ ] Manually retrigger the Github actions so it uses the latest git tag These are the steps for actually making the release: - [ ] Download all binaries from CI run started from PR related to code changes shown above - [ ] Create sha256 for each binary and compare against sha256 shown in the CI to verify there was no corruption or inserted malware - [ ] Create a new "New Release" in Github and explain changes in release notes - [ ] Upload all binaries and sha's - [ ] Update flatpak manifest for Flathub: https://github.com/flathub/org.flameshot.Flameshot - [ ] Push snapcraft edge release to stable - [ ] If this is a major release coordinate with sign path on signed windows binaries - [ ] Update change log on [website](https://github.com/flameshot-org/flameshot-org.github.io/) `data/changelog.md` - [ ] Update version on [website](https://github.com/flameshot-org/flameshot-org.github.io/blob/master/_coverpage.md) ================================================ FILE: docs/Sway and wlroots support.md ================================================ # Sway and wlroots support Flameshot currently supports Sway and other wlroots based Wayland compositors through [xdg-desktop-portal-wlr](https://github.com/emersion/xdg-desktop-portal-wlr). However, due to the way dbus works, there may be some extra steps required for the integration to work properly. ## Basic steps The following packages need to be installed: `xdg-desktop-portal xdg-desktop-portal-wlr`. Please ensure your distro packages these, or install them manually. Ensure that environment variables are set properly. If your distro does not set them automatically, use a launch script to export `XDG_CURRENT_DESKTOP=sway` or `XDG_CURRENT_DESKTOP=river` **before** Sway or River is launched. ```sh #!/bin/bash export SDL_VIDEODRIVER=wayland export _JAVA_AWT_WM_NONREPARENTING=1 export QT_QPA_PLATFORM=wayland export XDG_CURRENT_DESKTOP=sway export XDG_SESSION_DESKTOP=sway exec sway ``` or ```sh #!/bin/bash export SDL_VIDEODRIVER=wayland export _JAVA_AWT_WM_NONREPARENTING=1 export QT_QPA_PLATFORM=wayland export XDG_CURRENT_DESKTOP=river export XDG_SESSION_DESKTOP=river exec river ``` You will also need to ensure that systemd/dbus is aware of these environment variables; this should be done **in your sway or river config** so that the DISPLAY and WAYLAND_DISPLAY variables are defined. (taken from [Sway wiki](https://github.com/swaywm/sway/wiki#gtk-applications-take-20-seconds-to-start)): ```sh exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK exec hash dbus-update-activation-environment 2>/dev/null && \ dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK ``` To ensure that Flameshot is correctly positioned on multiple outputs (monitors) add this rule to your Sway config: ``` for_window [app_id="flameshot"] border pixel 0, floating enable, fullscreen disable, move absolute position 0 0 ``` and add the following on your River config: ``` riverctl rule-add -app-id "flameshot" float ``` Otherwise, flameshot will not take all of the screen and tiles its window instead like a normal application. Note however, that some clipboard stuff is broken so it might be good to save your screenshot as a file while having it copied to a clipboard in case if clipboard does some weird stuff like not pasting the overall screenshot. Starting from 0.17.0 xdg-desktop-portal requires a configuration file (e.g. in ~/.config/xdg-desktop-portal/sway-portals.conf): (take from [issues#3363](https://github.com/flameshot-org/flameshot/issues/3363)) ```sh [preferred] # use xdg-desktop-portal-gtk for every portal interface default=gtk # except for the xdg-desktop-portal-wlr supplied interfaces org.freedesktop.impl.portal.Screencast=wlr org.freedesktop.impl.portal.Screenshot=wlr ``` ## Troubleshooting Q) Flameshot doesn't take a screenshot, it just hangs! A) Please ensure that the packages are installed, and that the variables are exported. This is usually caused by Flameshot receiving no response from the desktop portal. This can be verified by running `dbus-monitor --session sender=org.freedesktop.portal.Desktop destination=org.freedesktop.portal.Desktop`. Q) Flameshot takes one screenshot, then won't take anymore! A) There is a bug in xdg-desktop-portal-wlr and Flameshot causing calls with the same token to fail. If you see a sdbus vtable error in the xdpw logs, either used the [patched version](https://github.com/nullobsi/xdg-desktop-portal-wlr/tree/improve-screenshot) or update Flameshot to the latest master. # River wlroots support Like mentioned above, Flameshot now works on wlroots based Wayland compositors, however, there is a weird problem with river and that is when setting `XDG_CURRENT_DESKTOP=river`, Flameshot won't work. The fix is you need to trick Flameshot that you are on `sway`. Hence, you need to run river like so: ```sh XDG_CURRENT_DESKTOP=sway dbus-run-session river ``` and add the following on your config such as in `$HOME/.config/river/init` ``` riverctl float-filter-add "flameshot" ``` Otherwise, Flameshot will not take all of the screen and tiles its window instead like a normal application. #### For more information, please refer to https://github.com/emersion/xdg-desktop-portal-wlr/wiki/%22It-doesn't-work%22-Troubleshooting-Checklist ================================================ FILE: docs/dev/.gitignore ================================================ output mkdoxy-generated ================================================ FILE: docs/dev/Makefile ================================================ serve: mkdocs serve --dev-addr localhost:8080 --watch ../../src build: mkdocs build @echo "Post-processing..." @bash post-process.sh @echo "DONE." clean: rm -rf mkdoxy-generated output ================================================ FILE: docs/dev/mkdocs.yml ================================================ site_name: Flameshot Developer Docs site_url: https://flameshot.org/docs/dev/ repo_url: https://github.com/flameshot-org/flameshot/ edit_uri: tree/master/docs/dev/src docs_dir: src site_dir: output markdown_extensions: - admonition - attr_list - toc: permalink: "#" - pymdownx.emoji: emoji_index: !!python/name:materialx.emoji.twemoji emoji_generator: !!python/name:materialx.emoji.to_svg plugins: - search - mkdoxy: projects: flameshot: src-dirs: ../../src/ full-doc: True doxy-cfg: FILE_PATTERNS: "*.cpp *.h" # #TODO for some reason this causes an exception EXCLUDE_PATTERNS: "*/capturetool.h" FULL_PATH_NAMES: "NO" SHOW_USED_FILES: "NO" RECURSIVE: True save-api: mkdoxy-generated debug: True ignore-errors: False theme: name: material logo: https://flameshot.org/flameshot-icon.svg nav: - Overview: index.md - Debugging: debugging.md - FAQ: faq.md - 'Maintaining the documentation': docs.md - API: - Classes: flameshot/classes.md - 'Class Hierarchy': flameshot/hierarchy.md - Files: flameshot/files.md ================================================ FILE: docs/dev/post-process.sh ================================================ # Only run this script from the Makefile shopt -s globstar cd output # Classes backlink to the ClassList in their breadcrumbs. We use the ClassIndex # instead. rm -rf flameshot/annotated ln -sf classes flameshot/annotated # Hide 'Edit this page button' from the auto-generated docs pages # It would be better to change the button to link to the file on github, but # it seems like too much work right now. sed -i 's|title="Edit this page"|& style="display: none !important"|' flameshot/*/*.html # MkDoxy adds Qt classes into the class hierarchy. We don't want that. sed -i 's|
  • class Q[^<]*
  • ||' flameshot/*/*.html # vim: filetype=bash ================================================ FILE: docs/dev/src/debugging.md ================================================ # Debugging ## `FLAMESHOT_DEBUG_CAPTURE` With this cmake variable set to `ON`, the flameshot capture GUI window won't bypass the window manager. This allows you to manipulate the capture GUI window like any other window while debugging. This can be useful if a debugging breakpoint is triggered while flameshot is in full screen mode. Without this variable, you might have trouble inspecting the code due to a frozen full-screen window. Usage: ```shell cmake -DFLAMESHOT_DEBUG_CAPTURE=ON ... ``` ================================================ FILE: docs/dev/src/docs.md ================================================ # Maintaining the documentation The narrative documentation is written in markdown and built into HTML using [MkDocs][mkdocs], particularly the [MkDocs material theme][mkdocs-material]. The source code documentation is generated using Doxygen and adapted for MkDocs using [MkDoxy][mkdoxy] (a tweaked custom fork of the original). The source code of this documentation can be found [here][doc-source]. !!! tip In order to edit a page from the documentation, click the :material-pencil: button in the top right corner of the page. Please note that this button won't work within the API section of the documentation - the button is removed from there during [post-processing][], but it will still be visible when [serving the website locally][serving-locally]. ## Serving locally To serve the documentation locally, run the `make serve` target in the `docs/dev` directory. The server is available at the port designated in the output of the command. ## Notes and conventions - When you add new files or rename existing files or section names, be sure to edit the `nav` property of [mkdocs.yml][mkdocs.yml]. - Always insert links as [reference style links][markdown:reference-style-links]. This will make the docs source code more readable and make broken links more easily detectable and replaceable. ### Post-processing There are some tweaks we make to the generated HTML documentation. We do that in the `make build` target, by running the [post-process.sh][post-process.sh] script. To see what post-processing we do, see that file. For this reason, the version of the documentation served locally using `make serve` will not match the generated HTML documentation 100%. But those inconsistencies are few and minor. ## Dependencies ```shell pip install \ mkdocs \ mkdocs-material \ git+https://github.com/veracioux/mkdoxy@v1.0.0 ``` !!! note We use a forked version of [mkdoxy][mkdoxy-original] that can be found [here][mkdoxy], that fixes some annoying things from the original. ## Deployment The developer documentation is served from the official Flameshot website [flameshot.org][website]. Here's how. The official website itself is served from this [repo][website-repo]. That repo contains the user documentation. It's deployed using GitHub pages -- the served files can be found on the [gh-pages][] branch of that repo. This branch is automatically created by the [build][website-build] workflow on master. To make the developer docs available on the official site, we use a custom GitHub action called [deploy-dev-docs][] in the [flameshot][] repo. This action will build and deploy this documentation into the `docs/dev` subdirectory of the [gh-pages][] branch. ### The deploy-dev-docs GitHub workflow This workflow checks out the flameshot website [repo][website-repo] and does the following: - Creates a clean [dev-docs-staging][] branch (we'll explain why, below). - Generates the developer docs under `docs/dev` there and makes a commit - Checks out the [gh-pages][] branch and makes the same commit there - Force-pushes the dev-docs-staging branch to the website repo - Pushes the gh-pages branch to the website repo Since the [gh-pages][] branch is re-created from scratch by the [website deployment workflow][website-build], the commit that added the developer documentation will be lost. That's why we have to re-apply the commit during the [website deployment workflow][website-build] as well. **That is the reason why we created the** [**dev-docs-staging**][dev-docs-staging] **branch in the first place.** !!! note The deploy-dev-docs workflow is set to run on the `docs` branch as well as `master`. This branch is used for debugging the developer docs and its associated workflows, without polluting the `master` branch with unnecessary commits. #### Access tokens In order to make changes to the [website repo][website-repo] from within a workflow in the [flameshot repo][flameshot], the workflow needs to use an access token, which it obtains from the `TOKEN_PUSH_TO_WEBSITE_REPO` secret. The following process was used to set it up: 1. A flameshot organization member with write access must create a personal access token (PAT) [here][PAT] with write access to the [website repo][website-repo]. 2. A secret named `TOKEN_PUSH_TO_WEBSITE_REPO` must be added to the [flameshot][] repo and its value must be set to the PAT. This can be done [here][action-secrets]. For best security practice, the token should be set to expire after some time (currently ~6 months). The token can be regenerated without the need to recreate it. After regeneration you will need to update the `TOKEN_PUSH_TO_WEBSITE_REPO` secret, which can be done [here][edit-secret]. !!! tip The currently active PAT is owned by [veracioux][] and is set to expire on July 31 2024. If you notice the token has expired, ask him to re-generate it. [post-processing]: #post-processing [serving-locally]: #serving-locally [flameshot]: https://github.com/flameshot-org/flameshot [website]: https://flameshot.org [doc-source]: https://github.com/flameshot-org/flameshot/tree/master/docs/dev [website-repo]: https://github.com/flameshot-org/flameshot-org.github.io [gh-pages]: https://github.com/flameshot-org/flameshot-org.github.io/tree/gh-pages [dev-docs-staging]: https://github.com/flameshot-org/flameshot-org.github.io/tree/dev-docs-staging [action-secrets]: https://github.com/flameshot-org/flameshot/settings/secrets/actions [edit-secret]: https://github.com/flameshot-org/flameshot/settings/secrets/actions/TOKEN_PUSH_TO_WEBSITE_REPO [mkdocs.yml]: https://github.com/flameshot-org/flameshot/blob/master/docs/dev/mkdocs.yml [post-process.sh]: https://github.com/flameshot-org/flameshot/blob/master/docs/dev/post-process.sh [deploy-dev-docs]: https://github.com/flameshot-org/flameshot/blob/master/.github/workflows/deploy-dev-docs.yml [website-build]: https://github.com/flameshot-org/flameshot-org.github.io/blob/master/.github/workflows/build.yml [markdown:reference-style-links]: https://www.markdownguide.org/basic-syntax/#reference-style-links [mkdocs]: https://www.mkdocs.org/ [mkdocs-material]: https://squidfunk.github.io/mkdocs-material [mkdoxy-original]: https://github.com/JakubAndrysek/mkdoxy [mkdoxy]: https://github.com/veracioux/mkdoxy [PAT]: https://github.com/settings/tokens?type=beta [veracioux]: https://github.com/veracioux ================================================ FILE: docs/dev/src/faq.md ================================================ # FAQ !!! todo Incomplete page. ### How do I create a new subcommand? ### How do I add a new tool? ### How do I add a new config setting? There are currently two groups of settings: `General` and `Shortcuts`. The necessary steps are usually the following: - Determine a name for the setting - for a general setting, it must be a valid C++ identifier, for a shortcut it must be the name of a tool type from TODO. - Add a getter and a setter for the setting in [`ConfigHandler`][ConfigHandler]. For most settings you should use the [`CONFIG_GETTER_SETTER`][CONFIG_GETTER_SETTER] macro. If your setting is unusual enough you may need to use [`CONFIG_GETTER`][CONFIG_GETTER] or [`CONFIG_SETTER`][CONFIG_SETTER] individually, or even need to create the methods manually. - If you need custom validation or conversion for the value, you must create a subclass of [`ValueHandler`][ValueHandler]. Otherwise you can use one of the existing ones in [valuehandler.h][]. - If you want to make your setting available in the configuration GUI (usually you do), you should add the appropriate widgets into one of the tabs of [`ConfigWindow`][ConfigWindow]. If your setting doesn't fit into any of the existing tabs, you can add a new one, but please discuss it with us first. To get a deeper understanding of how the configuration works, please see [Configuration][config]. ### How do I add a new export action? (@borgmanJeremy @mehrad This is my preferred terminology over final action, need consensus) [config]: index.md#configuration [confighandler.h]: flameshot/confighandler_8h [confighandler.cpp]: flameshot/confighandler_8cpp [valuehandler.h]: flameshot/valuehandler_8h [ValueHandler]: flameshot/classValueHandler [ConfigHandler]: flameshot/classConfigHandler [ConfigWindow]: flameshot/classConfigWindow [CONFIG_GETTER_SETTER]: flameshot/confighandler_8h/#define-config_getter_setter [CONFIG_GETTER]: flameshot/confighandler_8h/#define-config_getter [CONFIG_SETTER]: flameshot/confighandler_8h/#define-config_setter ================================================ FILE: docs/dev/src/index.md ================================================ # Flameshot developer docs Thank you for your interest in developing flameshot. This developer documentation (hopefully) has an intuitive structure. It tries to describe what code is run when a user performs an action in Flameshot. !!! important **Please read this entire page. It will make your life a whole lot easier when contributing to Flameshot. If you know exactly what you want to work on, you should look at [FAQ](./faq) ** ## Project structure Flameshot is built on C++/Qt5 with CMake as its build system. The source code is located under `src/`. The entrypoint is `src/main.cpp`. ### `main.cpp` Flameshot provides both a GUI and a CLI (the latter currently works only on Linux and macOS). ### Build system The main cmake file is `CMakeLists.txt` in the project root. It `include`s some files from the `cmake/` directory as well. These files together control some more general aspects of the build process, like project information, packaging, caching etc. There is also the file `src/CMakeLists.txt`. It mostly defines how the source files are compiled into targets and how the external libraries are linked. It does some other stuff too. Currently, there isn't a clear separation of concerns between `CMakeLists.txt` and `src/CMakeLists.txt`. In the future we should refactor these files to make it more clear why each of them exists. ## What happens when I launch flameshot? There are two ways to launch flameshot: daemon mode and single-action mode. In both modes, an instance of [`Flameshot`][Flameshot] is created via [`Flameshot::start()`][Flameshot::start]. [`Flameshot`][Flameshot] provides the high level API for interacting with flameshot; and its methods mimic the CLI subcommands a great deal. This object is a singleton, so it can only be created once. It is accessed as [`Flameshot::instance()`][Flameshot::instance]. !!! note On Windows, only daemon mode is currently supported. ### Single-action mode (via command line interface) Single-action mode (also called one-off mode) is triggered when flameshot is launched with a command line argument - for example as `flameshot gui`. As its name implies, it performs a single action, such as "take a screenshot interactively by opening a GUI" or "take a screenshot of the entire screen", etc. Afterwards, Flameshot quits. ### Daemon mode This mode is triggered when the `flameshot` command is launched. In this mode, a flameshot process is started in the background. A system tray is displayed if the user hasn't disabled it in the config. In addition to [`Flameshot::start()`][Flameshot::start], if the current process is the daemon, it also calls [`FlameshotDaemon::start()`][FlameshotDaemon::start] during initialization. The daemon has the following purposes: - Run in the background, wait for the user to press a hotkey, and perform corresponding action. This is true for **Windows** and **macOS**, but not for **Linux**. On Linux, hotkeys are meant to be handled by the desktop environment or equivalent. - Provide a system tray that the user can click to initiate actions via context menu - Periodically check for updates and notify the user - Act as a host for persistent phenomena. Example: On X11 (linux), when a program inserts content into the clipboard, it must keep running so the content persists in the clipboard. !!! note All of the above are user-configurable. #### `FlameshotDaemon` The class [`FlameshotDaemon`][FlameshotDaemon] handles all communication with the daemon. The class provides public static methods that are designed so that the caller does not need to know if the current process is a flameshot daemon or a single-action invocation of Flameshot. If the current process is the daemon, then the static methods of [`FlameshotDaemon`][FlameshotDaemon] will call the corresponding instance methods of the singleton. If not, the current process will communicate with the daemon process via D-Bus. Then, within the daemon process, those D-Bus calls will be translated into [`FlameshotDaemon`][FlameshotDaemon] instance method calls. ## Configuration The configuration is handled by [`ConfigHandler`][ConfigHandler]. It is decoupled from any user interface, so it serves the configuration for both the GUI and CLI. All configuration settings recognized by the config files are defined as getters in this class. There are also setters for each setting, named as per the usual convention. For example, the setting `savePath` has a getter named `savePath` and a setter named `setSavePath`. Before working on a new config setting for flameshot, please read [this FAQ entry][faq:add-config-setting]. ### Interesting notes - [`ConfigHandler`][ConfigHandler] is based on `QSettings` - The configuration uses the `ini` format - The configuration is automatically reloaded when the config file changes ## Conventions - Always use `&Class::signal` and `&Class::slot` instead of `SIGNAL(signal())` and `SLOT(slot())`. This usually provides better code introspection and makes refactoring easier and less error-prone. [Flameshot]: flameshot/classFlameshot [Flameshot::instance]: flameshot/classFlameshot#function-instance [Flameshot::start]: flameshot/classFlameshot#function-start [ConfigHandler]: flameshot/classConfigHandler [FlameshotDaemon]: flameshot/classFlameshotDaemon [FlameshotDaemon::start]: flameshot/classFlameshotDaemon#function-start [confighandler.h]: flameshot/confighandler_8h [confighandler.cpp]: flameshot/confighandler_8cpp [faq:add-config-setting]: faq/#how-do-i-add-a-new-config-setting [matrix-room]: https://matrix.to/#/#flameshot-org:matrix.org ================================================ FILE: docs/shortcuts-config/flameshot-shortcuts-kde.khotkeys ================================================ [Data] DataCount=1 [Data_1] Comment=Shortcuts for taking screenshots with Flameshot DataCount=5 Enabled=true Name=Flameshot SystemGroup=0 Type=ACTION_DATA_GROUP [Data_1Conditions] Comment= ConditionsCount=0 [Data_1_1] Comment=Start the Flameshot screenshot tool and take a screenshot Enabled=true Name=Take screenshot Type=SIMPLE_ACTION_DATA [Data_1_1Actions] ActionsCount=1 [Data_1_1Actions0] CommandURL=flameshot gui Type=COMMAND_URL [Data_1_1Conditions] Comment= ConditionsCount=0 [Data_1_1Triggers] Comment=Simple_action TriggersCount=1 [Data_1_1Triggers0] Key=Print Type=SHORTCUT Uuid={550679a7-6038-4d71-9d70-045dee9e7ad0} [Data_1_2] Comment=Wait for 3 seconds, then start the Flameshot screenshot tool and take a screenshot Enabled=true Name=Take screenshot with delay Type=SIMPLE_ACTION_DATA [Data_1_2Actions] ActionsCount=1 [Data_1_2Actions0] CommandURL=flameshot gui --delay 3000 Type=COMMAND_URL [Data_1_2Conditions] Comment= ConditionsCount=0 [Data_1_2Triggers] Comment=Simple_action TriggersCount=1 [Data_1_2Triggers0] Key=Ctrl+Print Type=SHORTCUT Uuid={13cf7a93-9bae-4864-b6f6-dbe09e1b548a} [Data_1_3] Comment=Take a full-screen (all monitors) screenshot and save it Enabled=true Name=Take full-screen screenshot and save Type=SIMPLE_ACTION_DATA [Data_1_3Actions] ActionsCount=1 [Data_1_3Actions0] CommandURL=flameshot full Type=COMMAND_URL [Data_1_3Conditions] Comment= ConditionsCount=0 [Data_1_3Triggers] Comment=Simple_action TriggersCount=1 [Data_1_3Triggers0] Key=Shift+Print Type=SHORTCUT Uuid={32eeef66-9df9-4ff0-8bca-9c80941d74b2} [Data_1_4] Comment=Take a full-screen (all monitors) screenshot and copy it to the clipboard and ask where to save Enabled=true Name=Take full-screen screenshot and copy it to clipboard Type=SIMPLE_ACTION_DATA [Data_1_4Actions] ActionsCount=1 [Data_1_4Actions0] CommandURL=flameshot full --clipboard Type=COMMAND_URL [Data_1_4Conditions] Comment= ConditionsCount=0 [Data_1_4Triggers] Comment=Simple_action TriggersCount=1 [Data_1_4Triggers0] Key=Ctrl+Shift+Print Type=SHORTCUT Uuid={7a4033b1-f641-4dab-9c4e-78bf3fa0ea8c} [Data_1_5] Comment=Open the Flameshot Launcher Enabled=false Name=Open Flameshot Launcher Type=SIMPLE_ACTION_DATA [Data_1_5Actions] ActionsCount=1 [Data_1_5Actions0] CommandURL=flameshot launcher Type=COMMAND_URL [Data_1_5Conditions] Comment= ConditionsCount=0 [Data_1_5Triggers] Comment=Simple_action TriggersCount=1 [Data_1_5Triggers0] Key= Type=SHORTCUT Uuid={b0f9c859-bf84-42c6-8ae0-94da1a616cf1} [Main] AllowMerge=false ImportId=Flameshot Version=2 ================================================ FILE: flake.nix ================================================ { description = "Powerful yet simple to use screenshot software"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; systems.url = "github:nix-systems/default"; flake-parts.url = "github:hercules-ci/flake-parts"; flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"; treefmt-nix.url = "github:numtide/treefmt-nix"; }; outputs = inputs@{ flake-parts, systems, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = import systems; imports = [ inputs.treefmt-nix.flakeModule ]; perSystem = { pkgs, lib, ... }: let qtcolorwidgets = pkgs.fetchFromGitLab { owner = "mattbas"; repo = "Qt-Color-Widgets"; rev = "3.0.0"; hash = "sha256-77G1NU7079pvqhQnSTmMdkd2g1R2hoJxn183WcsWq8c="; }; kdsingleapplication = pkgs.fetchFromGitHub { owner = "KDAB"; repo = "KDSingleApplication"; rev = "v1.2.0"; hash = "sha256-rglt89Gw6OHXXVOEwf0TxezDzyHEvWepeGeup7fBlLs="; }; enableWlrSupport = true; # Build time nativeBuildInputs = with pkgs; [ cmake qt6.qttools qt6.wrapQtAppsHook makeBinaryWrapper ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ imagemagick libicns ]; # Run time buildInputs = with pkgs; [ qt6.qtbase qt6.qtsvg qt6.qtwayland kdePackages.kguiaddons ]; flameshot = pkgs.stdenv.mkDerivation { pname = "flameshot"; version = "dev"; src = ./.; inherit nativeBuildInputs; inherit buildInputs; preConfigure = '' mkdir -p build/_deps cp -r ${qtcolorwidgets} build/_deps/qtcolorwidgets-src cp -r ${kdsingleapplication} build/_deps/kdsingleapplication-src chmod -R +w build/_deps ''; cmakeFlags = [ (lib.cmakeBool "DISABLE_UPDATE_CHECKER" true) (lib.cmakeBool "USE_WAYLAND_CLIPBOARD" true) (lib.cmakeBool "USE_WAYLAND_GRIM" enableWlrSupport) "-DFETCHCONTENT_FULLY_DISCONNECTED=ON" "-DFETCHCONTENT_SOURCE_DIR_QTCOLORWIDGETS=${qtcolorwidgets}" "-DFETCHCONTENT_SOURCE_DIR_KDSINGLEAPPLICATION=${kdsingleapplication}" ]; dontWrapQtApps = true; postFixup = '' wrapProgram $out/bin/flameshot \ ${lib.optionalString enableWlrSupport "--prefix PATH : ${lib.makeBinPath [ pkgs.grim ]}"} \ ''${qtWrapperArgs[@]} ''; meta = { description = "Powerful yet simple to use screenshot software"; homepage = "https://github.com/flameshot-org/flameshot"; license = pkgs.lib.licenses.gpl3Only; maintainers = [ "flameshot-org" ]; platforms = pkgs.lib.platforms.unix ++ pkgs.lib.platforms.darwin; mainProgram = "flameshot"; }; }; in { packages = { default = flameshot; inherit flameshot; }; devShells.default = pkgs.mkShell { name = "flameshot-dev"; inputsFrom = [ flameshot ]; buildInputs = with pkgs; [ gdb ]; }; treefmt = { programs.nixfmt.enable = pkgs.lib.meta.availableOn pkgs.stdenv.buildPlatform pkgs.nixfmt-rfc-style.compiler; programs.nixfmt.package = pkgs.nixfmt-rfc-style; }; }; }; } ================================================ FILE: flameshot.example.ini ================================================ ;[General] ;; Configure which buttons to show after drawing a selection ;; Not easy to set by hand ;buttons=@Variant(\0\0\0\x7f\0\0\0\vQList\0\0\0\0\x14\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\x3\0\0\0\x4\0\0\0\x5\0\0\0\x6\0\0\0\x12\0\0\0\xf\0\0\0\x13\0\0\0\a\0\0\0\b\0\0\0\t\0\0\0\x10\0\0\0\n\0\0\0\v\0\0\0\f\0\0\0\r\0\0\0\xe\0\0\0\x11) ; ;; List of colors for color picker ;; The colors are arranged counter-clockwise with the first being set to the right of the cursor ;; Colors are any valid hex code or W3C color name ;; "picker" adds a custom color picker ;userColors=picker, #800000, #ff0000, #ffff00, #00ff00, #008000, #00ffff, #0000ff, #ff00ff, #800080 ; ;; Image Save Path ;savePath=/tmp ; ;; Whether the savePath is a fixed path (bool) ;savePathFixed=false ; ;; Default file extension for screenshots ;saveAsFileExtension=.png ; ;; UI language (auto = detected system language) ;uiLanguage=auto ; ;; Main UI color ;; Color is any valid hex code or W3C color name ;uiColor=#740096 ; ;; Contrast UI color ;; Color is any valid hex code or W3C color name ;contrastUiColor=#270032 ; ;; Last used color ;; Color is any valid hex code or W3C color name ;drawColor=#ff0000 ; ;; Show the help screen on startup (bool) ;showHelp=true ; ;; Show the side panel button (bool) ;showSidePanelButton=true ; ;; Ignore updates to versions less than this value ;ignoreUpdateToVersion= ; ;; Show desktop notifications (bool) ;showDesktopNotification=true ; ;; Show abort notifications (bool) ;showAbortNotification=true ; ;; Filename pattern using C++ strftime formatting ;filenamePattern=%F_%H-%M ; ;; Whether the tray icon is disabled (bool) ;disabledTrayIcon=false ; ;; Automatically close daemon when it's not needed (bool) ;; (This option is not available on Windows) ;autoCloseIdleDaemon=false ; ;; Allow multiple instances of `flameshot gui` to run at the same time (bool) ;allowMultipleGuiInstances=false ; ;; Last used tool thickness; same thickness shared by Pencil, Line, Arrow, Rectangular Selection, Circle (int) ;drawThickness=3 ; ;; Last used font size (int) ;drawFontSize=8 ; ;; Last used Circle Counter size (int) ;drawCircleCounterSize=1 ; ;; Last used Pixelate pixel size (int) ;drawPixelateSize=2 ; ;; Last used size for Rectangle rounded corners (int) ;drawRectangleSize=1 ; ;; Last used Marker size (int) ;drawMarkerSize=5 ; ;; Keep the App Launcher open after selecting an app (bool) ;keepOpenAppLauncher=false ; ;; Launch at startup (bool) ;startupLaunch=true ; ;; Show greeting message on startup (bool) ;showStartupLaunchMessage=true ; ;; Opacity of area outside selection (int in range 0-255) ;contrastOpacity=190 ; ;; Save image after copy (bool) ;saveAfterCopy=false ; ;; Copy path to image after save (bool) ;copyPathAfterSave=false ; ;; On successful upload, close the dialog and copy URL to clipboard (bool) ;copyAndCloseAfterUpload=true ; ;; Anti-aliasing image when zoom the pinned image (bool) ;antialiasingPinZoom=true ; ;; Use JPG format instead of PNG (bool) ;; (This option is not available on Windows) ;useJpgForClipboard=false ; ;; Upload to imgur without confirmation (bool) ;uploadWithoutConfirmation=false ; ;; Use larger color palette as the default one (bool) ;predefinedColorPaletteLarge=false ; ;; Set JPEG Quality (int in range 0-100) ;jpegQuality=75 ; ;; Shortcut Settings for all tools ;[Shortcuts] ;TYPE_ARROW=A ;TYPE_CANCEL=Ctrl+Backspace ;TYPE_CIRCLE=C ;TYPE_CIRCLECOUNT= ;TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return ;TYPE_COPY=Ctrl+C ;TYPE_DRAWER=D ;TYPE_EXIT=Ctrl+Q ;TYPE_IMAGEUPLOADER=Return ;TYPE_MARKER=M ;TYPE_MOVESELECTION=Ctrl+M ;TYPE_MOVE_DOWN=Down ;TYPE_MOVE_LEFT=Left ;TYPE_MOVE_RIGHT=Right ;TYPE_MOVE_UP=Up ;TYPE_OPEN_APP=Ctrl+O ;TYPE_PENCIL=P ;TYPE_PIN= ;TYPE_PIXELATE=B ;TYPE_RECTANGLE=R ;TYPE_REDO=Ctrl+Shift+Z ;TYPE_RESIZE_DOWN=Shift+Down ;TYPE_RESIZE_LEFT=Shift+Left ;TYPE_RESIZE_RIGHT=Shift+Right ;TYPE_RESIZE_UP=Shift+Up ;TYPE_SYM_RESIZE_DOWN=Ctrl+Shift+Down ;TYPE_SYM_RESIZE_LEFT=Ctrl+Shift+Left ;TYPE_SYM_RESIZE_RIGHT=Ctrl+Shift+Right ;TYPE_SYM_RESIZE_UP=Ctrl+Shift+Up ;TYPE_SAVE=Ctrl+S ;TYPE_SELECTION=S ;TYPE_SELECT_ALL=Ctrl+A ;TYPE_TEXT=T ;TYPE_TOGGLE_PANEL=Space ;TYPE_GRAB_COLOR=G ;TYPE_UNDO=Ctrl+Z ================================================ FILE: packaging/debian/changelog ================================================ flameshot (13.2.0-1) unstable; urgency=medium * Release for v13.3.0 -- Jeremy Borgman Fri, 24 Oct 2025 18:24:29 -0600 ================================================ FILE: packaging/debian/compat ================================================ 12 ================================================ FILE: packaging/debian/control ================================================ Source: flameshot Section: graphics Priority: optional Maintainer: Boyuan Yang Build-Depends: cmake (>= 3.22~), debhelper (>= 12), qt6-base-dev (>= 6.2.4~), qt6-tools-dev (>= 6.2.4~), qt6-tools-dev-tools (>= 6.2.4~), qt6-svg-dev (>= 6.2.4~) | libqt6svg6-dev (>= 6.2.4~), qt6-l10n-tools (>= 6.2.4~), libgl-dev, Rules-Requires-Root: no Standards-Version: 4.7.2 Homepage: https://flameshot.org/ Vcs-Browser: https://github.com/flameshot-org/flameshot Vcs-Git: https://github.com/flameshot-org/flameshot.git Package: flameshot Architecture: any # Ubuntu noble expanded shlibs are suffixed with t64 for Qt dependencies, later versions of Ubuntu reverted back without suffix so make it future proof # ${shlibs:Depends}, Depends: ${misc:Depends}, libc6 (>= 2.35), libgcc-s1 (>= 11), libstdc++6 (>= 11), hicolor-icon-theme, qt6-qpa-plugins (>= 6.2.4~), libqt6core6 (>= 6.2.4~), libqt6dbus6 (>= 6.2.4~), libqt6gui6 (>= 6.2.4~), libqt6network6 (>= 6.2.4~), libqt6widgets6 (>= 6.2.4~), libqt6svg6 (>= 6.2.4~), Recommends: xdg-desktop-portal-gtk | xdg-desktop-portal-gnome | xdg-desktop-portal-kde | xdg-desktop-portal-wlr, grim, Suggests: ca-certificates, openssl, qt6-image-formats-plugins, Description: Powerful yet simple-to-use screenshot software Flameshot is a powerful yet simple-to-use screenshot software. Notable features include customizable appearance, in-app screenshot editing, D-Bus interface, experimental GNOME/KDE Wayland support, integration with Imgur and support for both GUI and CLI interface. ================================================ FILE: packaging/debian/copyright ================================================ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: flameshot Source: https://github.com/flameshot-org/flameshot/ Files: * Copyright: 2016-2019 lupoDharkael License: GPL-3+ Comment: The author copied a few lines of code from KSnapshot regiongrabber.cpp revision 796531 (LGPL). Files: debian/* Copyright: 2017 Juanma Navarro Mañez 2018 Boyuan Yang License: GPL-3+ Files: data/img/app/flameshot.* data/img/hicolor/* Copyright: 2017 lupoDharkael License: Free-Art-License-1.3 Files: docs/appdata/flameshot.metainfo.xml Copyright: 2017-2019 lupoDharkael License: CC0-1.0 Files: data/img/material/black/* data/img/material/white/* Copyright: Google Inc. License: Apache-2.0 Files: src/widgets/capture/capturewidget.* Copyright: 2017 Alejandro Sirgo Rica 2017 Christian Kaiser 2007 Luca Gugelmann License: GPL-3+ Comment: Relicensed under GPL-3+ under flameshot project. . Originally based on Lightscreen areadialog.h, Copyright 2017 Christian Kaiser released under the GNU GPL2 . Originally based on KDE's KSnapshot regiongrabber.cpp, revision 796531, Copyright 2007 Luca Gugelmann released under the GNU LGPL Files: build/_deps/kdsingleapplication-src/* Copyright: 2019 Klarälvdalens Datakonsult AB License: Expat Files: build/_deps/qtcolorwidgets-src/* Copyright: 2013-2017 Mattia Basaglia License: LGPL-3+ Comment: As a special exception, this library can be included in any project under the terms of any of the GNU licenses, distributing the whole project under a different GNU license, see LICENSE-EXCEPTION for details. . Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU Lesser General Public License version 3 cover the whole combination. . As a special exception, the copyright holders of this library give you permission to combine this library with independent modules to produce an executable, and to copy and distribute the resulting executable under terms of any of the GNU General Public licenses, as published by the Free Software Foundation, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obliged to do so. If you do not wish to do so, delete this exception statement from your version. License: LGPL-3+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Lesser Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. . You should have received a copy of the GNU General Lesser Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU Lesser General Public License version 3 can be found in "/usr/share/common-licenses/LGPL-3". License: Expat The MIT License (MIT) . Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License: Apache-2.0 Google Material Design Icons are licensed under Apache License 2.0. . On Debian systems, the complete text of Apache License 2.0 can be found in "/usr/share/common-licenses/Apache-2.0". License: Free-Art-License-1.3 Free Art License 1.3 (FAL 1.3) . Preamble . The Free Art License grants the right to freely copy, distribute, and transform creative works without infringing the author's rights. . The Free Art License recognizes and protects these rights. Their implementation has been reformulated in order to allow everyone to use creations of the human mind in a creative manner, regardless of their types and ways of expression. . While the public's access to creations of the human mind usually is restricted by the implementation of copyright law, it is favoured by the Free Art License. This license intends to allow the use of a work’s resources; to establish new conditions for creating in order to increase creation opportunities. The Free Art License grants the right to use a work, and acknowledges the right holder’s and the user’s rights and responsibility. . The invention and development of digital technologies, Internet and Free Software have changed creation methods: creations of the human mind can obviously be distributed, exchanged, and transformed. They allow to produce common works to which everyone can contribute to the benefit of all. . The main rationale for this Free Art License is to promote and protect these creations of the human mind according to the principles of copyleft: freedom to use, copy, distribute, transform, and prohibition of exclusive appropriation. . Definitions . “work” either means the initial work, the subsequent works or the common work as defined hereafter: . “common work” means a work composed of the initial work and all subsequent contributions to it (originals and copies). The initial author is the one who, by choosing this license, defines the conditions under which contributions are made. . “Initial work” means the work created by the initiator of the common work (as defined above), the copies of which can be modified by whoever wants to . “Subsequent works” means the contributions made by authors who participate in the evolution of the common work by exercising the rights to reproduce, distribute, and modify that are granted by the license. . “Originals” (sources or resources of the work) means all copies of either the initial work or any subsequent work mentioning a date and used by their author(s) as references for any subsequent updates, interpretations, copies or reproductions. . “Copy” means any reproduction of an original as defined by this license. . 1. OBJECT . The aim of this license is to define the conditions under which one can use this work freely. . 2. SCOPE . This work is subject to copyright law. Through this license its author specifies the extent to which you can copy, distribute, and modify it. . 2.1 FREEDOM TO COPY (OR TO MAKE REPRODUCTIONS) . You have the right to copy this work for yourself, your friends or any other person, whatever the technique used. . 2.2 FREEDOM TO DISTRIBUTE, TO PERFORM IN PUBLIC . You have the right to distribute copies of this work; whether modified or not, whatever the medium and the place, with or without any charge, provided that you: attach this license without any modification to the copies of this work or indicate precisely where the license can be found, specify to the recipient the names of the author(s) of the originals, including yours if you have modified the work, specify to the recipient where to access the originals (either initial or subsequent). . The authors of the originals may, if they wish to, give you the right to distribute the originals under the same conditions as the copies. . 2.3 FREEDOM TO MODIFY . You have the right to modify copies of the originals (whether initial or subsequent) provided you comply with the following conditions: all conditions in article 2.2 above, if you distribute modified copies; indicate that the work has been modified and, if it is possible, what kind of modifications have been made; distribute the subsequent work under the same license or any compatible license. . The author(s) of the original work may give you the right to modify it under the same conditions as the copies. . 3. RELATED RIGHTS . Activities giving rise to author’s rights and related rights shall not challenge the rights granted by this license. . For example, this is the reason why performances must be subject to the same license or a compatible license. Similarly, integrating the work in a database, a compilation or an anthology shall not prevent anyone from using the work under the same conditions as those defined in this license. . 4. INCORPORATION OF THE WORK . Incorporating this work into a larger work that is not subject to the Free Art License shall not challenge the rights granted by this license. . If the work can no longer be accessed apart from the larger work in which it is incorporated, then incorporation shall only be allowed under the condition that the larger work is subject either to the Free Art License or a compatible license. . 5. COMPATIBILITY . A license is compatible with the Free Art License provided: it gives the right to copy, distribute, and modify copies of the work including for commercial purposes and without any other restrictions than those required by the respect of the other compatibility criteria; it ensures proper attribution of the work to its authors and access to previous versions of the work when possible; it recognizes the Free Art License as compatible (reciprocity); it requires that changes made to the work be subject to the same license or to a license which also meets these compatibility criteria. . 6. YOUR INTELLECTUAL RIGHTS . This license does not aim at denying your author's rights in your contribution or any related right. By choosing to contribute to the development of this common work, you only agree to grant others the same rights with regard to your contribution as those you were granted by this license. Conferring these rights does not mean you have to give up your intellectual rights. . 7. YOUR RESPONSIBILITIES . The freedom to use the work as defined by the Free Art License (right to copy, distribute, modify) implies that everyone is responsible for their own actions. . 8. DURATION OF THE LICENSE . This license takes effect as of your acceptance of its terms. The act of copying, distributing, or modifying the work constitutes a tacit agreement. This license will remain in effect for as long as the copyright which is attached to the work. If you do not respect the terms of this license, you automatically lose the rights that it confers. . If the legal status or legislation to which you are subject makes it impossible for you to respect the terms of this license, you may not make use of the rights which it confers. . 9. VARIOUS VERSIONS OF THE LICENSE . This license may undergo periodic modifications to incorporate improvements by its authors (instigators of the “Copyleft Attitude” movement) by way of new, numbered versions. . You will always have the choice of accepting the terms contained in the version under which the copy of the work was distributed to you, or alternatively, to use the provisions of one of the subsequent versions. . 10. SUB-LICENSING . Sub-licenses are not authorized by this license. Any person wishing to make use of the rights that it confers will be directly bound to the authors of the common work. . 11. LEGAL FRAMEWORK . This license is written with respect to both French law and the Berne Convention for the Protection of Literary and Artistic Works. . USER GUIDE . - How to use the Free Art License? . To benefit from the Free Art License, you only need to mention the following elements on your work: . [Name of the author, title, date of the work. When applicable, names of authors of the common work and, if possible, where to find the originals]. . Copyleft: This is a free work, you can copy, distribute, and modify it under the terms of the Free Art License http://artlibre.org/licence/lal/en/ . - Why to use the Free Art License? . 1.To give the greatest number of people access to your work. . 2.To allow it to be distributed freely. . 3.To allow it to evolve by allowing its copy, distribution, and transformation by others. . 4.So that you benefit from the resources of a work when it is under the Free Art License: to be able to copy, distribute or transform it freely. . 5.But also, because the Free Art License offers a legal framework to disallow any misappropriation. It is forbidden to take hold of your work and bypass the creative process for one's exclusive possession. . . - When to use the Free Art License? . Any time you want to benefit and make others benefit from the right to copy, distribute and transform creative works without any exclusive appropriation, you should use the Free Art License. You can for example use it for scientific, artistic or educational projects. . - What kinds of works can be subject to the Free Art License? . The Free Art License can be applied to digital as well as physical works. You can choose to apply the Free Art License on any text, picture, sound, gesture, or whatever sort of stuff on which you have sufficient author's rights. . - Historical background of this license: . It is the result of observing, using and creating digital technologies, free software, the Internet and art. It arose from the “Copyleft Attitude” meetings which took place in Paris in 2000. For the first time, these meetings brought together members of the Free Software community, artists, and members of the art world. The goal was to adapt the principles of Copyleft and free software to all sorts of creations. http://www.artlibre.org . Copyleft Attitude, 2007. . You can make reproductions and distribute this license verbatim (without any changes). . Translation : Jonathan Clarke, Benjamin Jean, Griselda Jung, Fanny Mourguet, Antoine Pitrou. Thanks to framalang.org License: GPL-3+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: CC0-1.0 On Debian systems, the complete text of the Creative Commons Zero v1.0 Universal License can be found in "/usr/share/common-licenses/CC0-1.0". ================================================ FILE: packaging/debian/docs ================================================ README.md ================================================ FILE: packaging/debian/rules ================================================ #!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 # see FEATURE AREAS in dpkg-buildflags(1) export DEB_BUILD_MAINT_OPTIONS = hardening=+all # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic # package maintainers to append LDFLAGS export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ override_dh_auto_configure: # The existence of an empty .git directory triggers syncqt. mkdir .git || true # This is required to use Cmake FetchContent dh_auto_configure -- \ -DFETCHCONTENT_FULLY_DISCONNECTED=OFF override_dh_auto_install: dh_auto_install # Remove not required headers, etc. rm -rf debian/flameshot/usr/include rm -rf debian/flameshot/usr/lib ================================================ FILE: packaging/debian/source/format ================================================ 3.0 (native) ================================================ FILE: packaging/flatpak/org.flameshot.Flameshot.yml ================================================ app-id: org.flameshot.Flameshot runtime: org.kde.Platform runtime-version: '6.9' sdk: org.kde.Sdk command: flameshot finish-args: # X11 + XShm access - --share=ipc - --socket=fallback-x11 # Wayland access - --socket=wayland - --device=dri # Connectivity - --share=network # QtSingleApplication, allow other instances to see log files - --env=TMPDIR=/var/tmp # Allow loading/saving files from anywhere - --filesystem=xdg-pictures # Notification access - --talk-name=org.freedesktop.Notifications # System Tray Icon - --talk-name=org.kde.StatusNotifierWatcher modules: - name: flameshot buildsystem: cmake-ninja config-opts: - -DCMAKE_BUILD_TYPE=Release - -DUSE_WAYLAND_CLIPBOARD=1 sources: - type: git url: https://gitlab.com/mattbas/Qt-Color-Widgets.git commit: 352bc8f99bf2174d5724ee70623427aa31ddc26a dest: external/Qt-Color-Widgets - type: git url: https://github.com/KDAB/KDSingleApplication.git tag: v1.2.0 dest: external/KDSingleApplication - type: git url: https://github.com/flameshot-org/flameshot.git branch: master #tag: v13.0.0 cleanup: - /share/bash-completion - /share/man - /share/zsh ================================================ FILE: packaging/macos/Info.plist.in ================================================ CFBundleExecutable ${MACOSX_BUNDLE_EXECUTABLE_NAME} CFBundleIconFile flameshot CFBundleIdentifier ${MACOSX_BUNDLE_GUI_IDENTIFIER} CFBundleName ${MACOSX_BUNDLE_BUNDLE_NAME} CFBundleDisplayName ${MACOSX_BUNDLE_BUNDLE_NAME} CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} CFBundleShortVersionString ${MACOSX_BUNDLE_SHORT_VERSION_STRING} CFBundlePackageType APPL CFBundleSignature ???? CFBundleInfoDictionaryVersion 6.0 LSMinimumSystemVersion ${CMAKE_OSX_DEPLOYMENT_TARGET} NSHighResolutionCapable LSUIElement ================================================ FILE: packaging/macos/create_dmg.sh ================================================ #!/bin/bash # Script to create and optionally sign a DMG file # Usage: create_dmg.sh # If signing identities are empty, DMG will be created unsigned APP_PATH="$1" DMG_PATH="$2" APP_SIGN_IDENTITY="$3" DMG_SIGN_IDENTITY="$4" if [ $# -ne 4 ]; then echo "Usage: create_dmg.sh " echo "Note: Leave signing identities empty to create unsigned DMG" exit 1 fi echo "Creating DMG from: $APP_PATH" echo "Output DMG: $DMG_PATH" rm -f "$DMG_PATH" TEMP_DIR=$(mktemp -d) echo "Using temp directory: $TEMP_DIR" cp -R "$APP_PATH" "$TEMP_DIR/" # Create Applications symlink ln -s /Applications "$TEMP_DIR/Applications" # Calculate size needed for DMG (in KB) SIZE=$(du -sk "$TEMP_DIR" | cut -f1) SIZE=$((SIZE + 1000)) # Add some padding echo "Creating DMG with size: ${SIZE}k" # Create DMG hdiutil create -srcfolder "$TEMP_DIR" \ -volname "Flameshot" \ -fs HFS+ \ -fsargs "-c c=64,a=16,e=16" \ -format UDZO \ -size ${SIZE}k \ "$DMG_PATH" if [ $? -ne 0 ]; then echo "Failed to create DMG" rm -rf "$TEMP_DIR" exit 1 fi echo "DMG created successfully" # Sign the DMG (either with identity or ad hoc) if [ -n "$DMG_SIGN_IDENTITY" ] && [ "$DMG_SIGN_IDENTITY" != "" ]; then echo "Signing DMG with identity: $DMG_SIGN_IDENTITY" codesign --force --sign "$DMG_SIGN_IDENTITY" --timestamp "$DMG_PATH" if [ $? -eq 0 ]; then echo "DMG signed with Developer ID" # Verify signature echo "Verifying DMG signature..." codesign --verify --verbose "$DMG_PATH" else echo "Failed to sign DMG with identity" rm -rf "$TEMP_DIR" exit 1 fi else echo "Signing DMG with ad hoc signature (no identity required)" codesign --force --sign - "$DMG_PATH" if [ $? -eq 0 ]; then echo "DMG signed with ad hoc signature" else echo "Failed to ad hoc sign DMG" rm -rf "$TEMP_DIR" exit 1 fi fi # Clean up rm -rf "$TEMP_DIR" echo "DMG creation complete: $DMG_PATH" if [ -z "$DMG_SIGN_IDENTITY" ] || [ "$DMG_SIGN_IDENTITY" = "" ]; then echo "" echo "NOTE: This DMG uses ad hoc signing (no Developer ID required)." echo "Users will see a security warning but can still run the app by:" echo "1. Right-clicking the app and selecting 'Open'" echo "2. Or going to System Preferences > Security & Privacy and clicking 'Open Anyway'" echo "3. The warning only appears on first launch" echo "" echo "The app and DMG are properly signed for Apple Silicon requirements." fi ================================================ FILE: packaging/rpm/fedora/flameshot.spec ================================================ # # spec file for package flameshot on fedora, rhel # Name: flameshot Version: 13.1.0 Release: 2%{?dist} License: GPLv3+ and ASL 2.0 and GPLv2 and LGPLv3 and Free Art Summary: Powerful yet simple to use screenshot software URL: https://github.com/flameshot-org/flameshot Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Vendor: Flameshot BuildRequires: cmake >= 3.22 BuildRequires: gcc-c++ >= 11 BuildRequires: fdupes BuildRequires: libappstream-glib BuildRequires: ninja-build BuildRequires: desktop-file-utils BuildRequires: cmake(Qt6Core) >= 6.2.4 BuildRequires: cmake(KF6GuiAddons) >= 6.7.0 BuildRequires: cmake(Qt6DBus) >= 6.2.4 BuildRequires: cmake(Qt6Gui) >= 6.2.4 BuildRequires: cmake(Qt6LinguistTools) >= 6.2.4 BuildRequires: cmake(Qt6Network) >= 6.2.4 BuildRequires: cmake(Qt6Svg) >= 6.2.4 BuildRequires: cmake(Qt6Widgets) >= 6.2.4 Requires: hicolor-icon-theme Requires: qt6-qtbase >= 6.2.4 Requires: qt6-qttools >= 6.2.4 Requires: qt6-qtsvg >= 6.2.4 Recommends: qt6-qtimageformats Recommends: xdg-desktop-portal%{?_isa} Recommends: (xdg-desktop-portal-gnome%{?_isa} if gnome-shell%{?_isa}) Recommends: (xdg-desktop-portal-kde%{?_isa} if plasma-workspace-wayland%{?_isa}) Recommends: (xdg-desktop-portal-wlr%{?_isa} if wlroots%{?_isa}) %description Powerful and simple to use screenshot software with built-in editor with advanced features. Features: * Customizable appearance. * Easy to use. * In-app screenshot edition. * DBus interface. %prep %autosetup -p1 %build %cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DUSE_WAYLAND_CLIPBOARD:BOOL=ON \ -DBUILD_SHARED_LIBS:BOOL=OFF %cmake_build %install %cmake_install rm -rf %{buildroot}%{_includedir}/QtColorWidgets rm -rf %{buildroot}%{_libdir}/cmake/QtColorWidgets rm -f %{buildroot}%{_libdir}/libQtColorWidgets.* rm -f %{buildroot}%{_libdir}/pkgconfig/QtColorWidgets.pc rm -rf %{buildroot}%{_includedir}/kdsingleapplication-qt6 rm -rf %{buildroot}%{_libdir}/cmake/KDSingleApplication-qt6 rm -f %{buildroot}%{_libdir}/libkdsingleapplication-qt6.* # https://fedoraproject.org/wiki/PackagingDrafts/find_lang %find_lang Internationalization --with-qt %fdupes %{buildroot}%{_datadir}/icons %check appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.metainfo.xml desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %files -f Internationalization.lang %{_datadir}/%{name}/translations/Internationalization_grc.qm %doc README.md %license LICENSE %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/translations %dir %{_datadir}/bash-completion/completions %dir %{_datadir}/zsh/site-functions %{_bindir}/%{name} %{_datadir}/applications/org.flameshot.Flameshot.desktop %{_metainfodir}/org.flameshot.Flameshot.metainfo.xml %{_datadir}/bash-completion/completions/%{name} %{_datadir}/zsh/site-functions/_%{name} %{_datadir}/fish/vendor_completions.d/%{name}.fish %{_datadir}/dbus-1/interfaces/org.flameshot.Flameshot.xml %{_datadir}/dbus-1/services/org.flameshot.Flameshot.service %{_datadir}/icons/hicolor/*/apps/*.png %{_datadir}/icons/hicolor/scalable/apps/*.svg %{_mandir}/man1/%{name}.1* %changelog * Sat Oct 28 2025 Jeremy Borgman - 13.3.0 - Updated for v13.3.0 release * Sat Oct 24 2025 Jeremy Borgman - 13.2.0 - Updated for v13.2.0 release * Sat Aug 16 2025 Elliott Tallis - 13.1.0-2 - Minor spec file tweaks * Sun Aug 13 2025 Jeremy Borgman - 13.1.0 - Update for v13.1.0 release * Sun Aug 06 2025 Jeremy Borgman - 13.0.1 - Update for v13.0.1 release * Sun Aug 03 2025 Jeremy Borgman - 13.0.0 - Update for v13 release * Sun Jul 17 2025 Jeremy Borgman - 13.0.rc2 - Beta for 13 release. * Sun Jul 12 2025 Jeremy Borgman - 13.0.rc1 - Beta for 13 release. * Sun Jul 03 2022 Jeremy Borgman - 12.1.0-1 - Update for 12.1 release. * Wed Jun 21 2022 Jeremy Borgman - 12.0.0-1 - Update for 12.0 release. * Fri Jan 14 2022 Jeremy Borgman - 11.0.0-1 - Update for 11.0 release. * Sun Aug 29 2021 Zetao Yang - 0.10.1-2 - Minor SPEC fixes. * Sun Jul 25 2021 Jeremy Borgman - 0.10.1-1 - Updated for flameshot 0.10.1 * Mon May 17 2021 Jeremy Borgman - 0.10.0-1 - Updated for flameshot 0.10.0 * Sat Feb 27 2021 Jeremy Borgman - 0.9.0-1 - Updated for flameshot 0.9.0 * Wed Oct 14 2020 Jeremy Borgman - 0.8.5-1 - Updated for flameshot 0.8.5 * Sat Oct 10 2020 Jeremy Borgman - 0.8.4-1 - Updated for flameshot 0.8.4 * Sat Sep 19 2020 Jeremy Borgman - 0.8.3-1 - Updated for flameshot 0.8.3 * Mon Sep 07 2020 Zetao Yang - 0.8.0-1 - Updated for flameshot 0.8.0 - More details, please see https://flameshot.org/changelog/#v080 * Sat Aug 18 2018 Zetao Yang - 0.6.0-1 - Updated for flameshot 0.6.0 - More details, please see https://flameshot.org/changelog/#v060 * Tue Jan 09 2018 Zetao Yang - 0.5.0-1 - Initial package for flameshot 0.5.0 - More details, please see https://flameshot.org/changelog/#v050 ================================================ FILE: packaging/rpm/opensuse/flameshot.spec ================================================ # # spec file for package flameshot on opensuse leap 15.x # Name: flameshot Version: 13.1.0 Release: 2 License: GPLv3+ and ASL 2.0 and GPLv2 and LGPLv3 and Free Art Summary: Powerful yet simple to use screenshot software URL: https://github.com/flameshot-org/flameshot Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Vendor: Flameshot BuildRequires: cmake >= 3.22 BuildRequires: gcc-c++ >= 11 BuildRequires: fdupes BuildRequires: update-desktop-files BuildRequires: appstream-glib BuildRequires: desktop-file-utils BuildRequires: cmake(Qt6Core) >= 6.2.4 BuildRequires: cmake(Qt6DBus) >= 6.2.4 BuildRequires: cmake(Qt6Gui) >= 6.2.4 BuildRequires: cmake(Qt6LinguistTools) >= 6.2.4 BuildRequires: cmake(Qt6Network) >= 6.2.4 BuildRequires: cmake(Qt6Svg) >= 6.2.4 BuildRequires: cmake(Qt6Widgets) >= 6.2.4 Requires: hicolor-icon-theme Requires: qt6-base >= 6.2.4 Requires: qt6-tools >= 6.2.4 Requires: qt6-svg >= 6.2.4 Recommends: qt6-imageformats Recommends: xdg-desktop-portal%{?_isa} Recommends: (xdg-desktop-portal-gnome%{?_isa} if gnome-shell%{?_isa}) Recommends: (xdg-desktop-portal-kde%{?_isa} if plasma-workspace-wayland%{?_isa}) Recommends: (xdg-desktop-portal-wlr%{?_isa} if wlroots%{?_isa}) %description Powerful and simple to use screenshot software with built-in editor with advanced features. Features: * Customizable appearance. * Easy to use. * In-app screenshot edition. * DBus interface. %prep %autosetup -p1 %build %cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS:BOOL=OFF %cmake_build %install %cmake_install rm -rf %{buildroot}%{_includedir}/QtColorWidgets rm -rf %{buildroot}%{_libdir}/cmake/QtColorWidgets rm -f %{buildroot}%{_libdir}/libQtColorWidgets.* rm -f %{buildroot}%{_libdir}/pkgconfig/QtColorWidgets.pc rm -rf %{buildroot}%{_includedir}/kdsingleapplication-qt6 rm -rf %{buildroot}%{_libdir}/cmake/KDSingleApplication-qt6 rm -f %{buildroot}%{_libdir}/libkdsingleapplication-qt6.* # https://fedoraproject.org/wiki/PackagingDrafts/find_lang %find_lang Internationalization --with-qt %suse_update_desktop_file -r org.flameshot.Flameshot Utility X-SuSE-DesktopUtility %fdupes %{buildroot}%{_datadir}/icons %check appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.metainfo.xml desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %files -f Internationalization.lang %{_datadir}/%{name}/translations/Internationalization_grc.qm %doc README.md %license LICENSE %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/translations %dir %{_datadir}/bash-completion/completions %dir %{_datadir}/zsh/site-functions %{_bindir}/%{name} %{_datadir}/applications/org.flameshot.Flameshot.desktop %{_datadir}/metainfo/org.flameshot.Flameshot.metainfo.xml %{_datadir}/bash-completion/completions/%{name} %{_datadir}/zsh/site-functions/_%{name} %{_datadir}/fish/vendor_completions.d/%{name}.fish %{_datadir}/dbus-1/interfaces/org.flameshot.Flameshot.xml %{_datadir}/dbus-1/services/org.flameshot.Flameshot.service %{_datadir}/icons/hicolor/*/apps/*.png %{_datadir}/icons/hicolor/scalable/apps/*.svg %{_mandir}/man1/%{name}.1* %changelog * Sat Oct 28 2025 Jeremy Borgman - 13.3.0 - Updated for v13.3.0 release * Sat Oct 24 2025 Jeremy Borgman - 13.2.0 - Updated for v13.2.0 release * Sat Aug 16 2025 Elliott Tallis - 13.1.0-2 - Minor spec file tweaks * Sun Aug 15 2025 Jeremy Borgman - 13.1.0 - Update for v13.1.0 release * Sun Aug 06 2025 Jeremy Borgman - 13.0.1 - Update for v13.0.1 release * Sun Aug 03 2025 Jeremy Borgman - 13.0.0 - Update for v13 release * Sun Jul 27 2025 Jeremy Borgman - 13.0.rc2 - Beta for 13 release. * Sun Jul 12 2025 Jeremy Borgman - 13.0.rc1 - Beta for 13 release. * Sun Jul 03 2022 Jeremy Borgman - 12.1.0-1 - Update for 12.1 release. * Wed Jun 21 2022 Jeremy Borgman - 12.0.0-1 - Update for 12.0 release. * Fri Jan 14 2022 Jeremy Borgman - 11.0.0-1 - Update for 11.0 release. * Sun Aug 29 2021 Zetao Yang - 0.10.1-2 - Minor SPEC fixes. * Sun Jul 25 2021 Jeremy Borgman - 0.10.1-1 - Updated for flameshot 0.10.1 * Mon May 17 2021 Jeremy Borgman - 0.10.0-1 - Updated for flameshot 0.10.0 * Sat Feb 27 2021 Jeremy Borgman - 0.9.0-1 - Updated for flameshot 0.9.0 * Wed Oct 14 2020 Jeremy Borgman - 0.8.5-1 - Updated for flameshot 0.8.5 * Sat Oct 10 2020 Jeremy Borgman - 0.8.4-1 - Updated for flameshot 0.8.4 * Sat Sep 19 2020 Jeremy Borgman - 0.8.3-1 - Updated for flameshot 0.8.3 * Mon Sep 07 2020 Zetao Yang - 0.8.0-1 - Updated for flameshot 0.8.0 - More details, please see https://flameshot.org/changelog/#v080 * Sat Aug 18 2018 Zetao Yang - 0.6.0-1 - Updated for flameshot 0.6.0 - More details, please see https://flameshot.org/changelog/#v060 * Tue Jan 09 2018 Zetao Yang - 0.5.0-1 - Initial package for flameshot 0.5.0 - More details, please see https://flameshot.org/changelog/#v050 ================================================ FILE: packaging/win-installer/LICENSE/GPL-3.0.txt ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: scripts/.gitkeep ================================================ ================================================ FILE: shell.nix ================================================ (import ( let lock = builtins.fromJSON (builtins.readFile ./flake.lock); nodeName = lock.nodes.root.inputs.flake-compat; in fetchTarball { url = lock.nodes.${nodeName}.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz"; sha256 = lock.nodes.${nodeName}.locked.narHash; } ) { src = ./.; }).shellNix ================================================ FILE: snapcraft.yaml ================================================ name: flameshot version: '13.3.0' base: core24 summary: Powerful yet simple to use screenshot software description: | A powerful open source screenshot and annotation tool for Linux, Flameshot has a varied set of markup tools available, which include Freehand drawing, Lines, Arrows, Boxes, Circles, Highlighting, Blur. Additionally, you can customise the color, size and/or thickness of many of these image annotation tools. grade: stable confinement: strict compression: lzo platforms: amd64: build-on: [amd64] build-for: [amd64] # arm64: # build-on: [arm64] # build-for: [arm64] apps: flameshot: command: usr/bin/flameshot desktop: usr/share/applications/org.flameshot.Flameshot.desktop common-id: org.flameshot.Flameshot extensions: [kde-neon-6] slots: [dbus-flameshot] plugs: - home - gsettings - removable-media parts: flameshot: plugin: cmake source: https://github.com/flameshot-org/flameshot.git source-tag: v$SNAPCRAFT_PROJECT_VERSION build-packages: - libxkbcommon-dev - libproxy-dev cmake-parameters: - -DFLAMESHOT_ICON=/snap/flameshot/current/usr/share/icons/hicolor/scalable/apps/flameshot.svg - -DCMAKE_INSTALL_PREFIX=/usr - -DUSE_WAYLAND_CLIPBOARD=1 override-build: | craftctl default sed -i 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/org.flameshot.Flameshot.svg|' ${CRAFT_PART_INSTALL}/usr/share/applications/org.flameshot.Flameshot.desktop sed -i 's/^\(Name\(\[.\+\]\)\?=.*\)$/\1 [Snap]/g' ${CRAFT_PART_INSTALL}/usr/share/applications/org.flameshot.Flameshot.desktop slots: # Depending on in which environment we're running we either need # to use the system or session DBus so we also need to have one # slot for each. dbus-flameshot: interface: dbus bus: session name: org.flameshot.Flameshot layout: /usr/share/flameshot/translations: symlink: $SNAP/usr/share/flameshot/translations ================================================ FILE: src/CMakeLists.txt ================================================ find_package( Qt${QT_VERSION_MAJOR} CONFIG REQUIRED Core Gui Widgets Network Svg LinguistTools ) if (UNIX) find_package( Qt${QT_VERSION_MAJOR} CONFIG REQUIRED DBus ) endif() if (USE_WAYLAND_CLIPBOARD) find_package(KF6GuiAddons) endif() set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) # set application icon if (APPLE) set(FLAMESHOT_ICONSET ${CMAKE_BINARY_DIR}/flameshot.iconset) set(FLAMESHOT_ICNS ${CMAKE_BINARY_DIR}/flameshot.icns) # generate iconset execute_process( COMMAND bash "-c" "mkdir -p \"${FLAMESHOT_ICONSET}\"" ) execute_process( COMMAND bash "-c" "sips -z 16 16 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_16x16.png" COMMAND bash "-c" "sips -z 32 32 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_16x16@2x.png" COMMAND bash "-c" "sips -z 32 32 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_32x32.png" COMMAND bash "-c" "sips -z 64 64 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_32x32@2x.png" COMMAND bash "-c" "sips -z 64 64 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_64x64x.png" COMMAND bash "-c" "sips -z 128 128 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_64x64@2.png" COMMAND bash "-c" "sips -z 128 128 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_128x128.png" COMMAND bash "-c" "sips -z 256 256 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_128x128@2x.png" COMMAND bash "-c" "sips -z 256 256 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_256x256.png" COMMAND bash "-c" "sips -z 512 512 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_256x256@2x.png" COMMAND bash "-c" "sips -z 512 512 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_512x512.png" COMMAND bash "-c" "sips -z 1024 1024 \"${CMAKE_SOURCE_DIR}\"/data/img/app/org.flameshot.Flameshot-1024.png --out \"${FLAMESHOT_ICONSET}\"/icon_512x512@2x.png" COMMAND bash "-c" "iconutil -o \"${FLAMESHOT_ICNS}\" -c icns \"${FLAMESHOT_ICONSET}\"" ) execute_process( COMMAND bash "-c" "rm -R \"${FLAMESHOT_ICONSET}\"" ) execute_process( # copy icon from cache generated on the localhost if generation on CI failed COMMAND bash "-c" "[[ -r '\"${FLAMESHOT_ICNS}\"' ]] || cp \"${CMAKE_SOURCE_DIR}\"/packaging/macos/flameshot.icns \"${FLAMESHOT_ICNS}\"" ) # Set application icon set(MACOSX_BUNDLE_ICON_FILE flameshot.icns) # And this part tells CMake where to find and install the file itself set(APP_ICON_MACOSX ${FLAMESHOT_ICNS}) set_source_files_properties(${APP_ICON_MACOSX} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") add_executable(flameshot MACOSX_BUNDLE main.cpp ${APP_ICON_MACOSX}) else () add_executable(flameshot) endif () add_executable(Flameshot::flameshot ALIAS flameshot) if(FLAMESHOT_ICON) target_compile_definitions(flameshot PUBLIC FLAMESHOT_ICON="${FLAMESHOT_ICON}") endif() if (WIN32) add_executable(flameshot-cli) target_sources( flameshot-cli PRIVATE windows-cli.cpp) set_target_properties(flameshot-cli PROPERTIES OUTPUT_NAME "flameshot-cli") target_link_options(flameshot-cli PRIVATE /SUBSYSTEM:CONSOLE) set_property(TARGET flameshot PROPERTY WIN32_EXECUTABLE true) # Getting error D8016 - /utf-8 automatically set by current cmake/msvc ? #if (MSVC) # target_compile_options(flameshot PRIVATE /source-charset:utf-8) #endif () endif () if(MSVC) OPTION(USE_MP "use multiple" ON) OPTION(ProjectConfig_Global_COMPILE_FLAGS_WITH_MP "Set The Global Option COMPILE_FLAGS /MP to target." ON) if(ProjectConfig_Global_COMPILE_FLAGS_WITH_MP OR USE_MP) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") endif() endif() add_subdirectory(cli) add_subdirectory(config) add_subdirectory(core) add_subdirectory(utils) add_subdirectory(widgets) add_subdirectory(tools) set(FLAMESHOT_TS_FILES ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_bg.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ca.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_cs.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_da.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_de_DE.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_el.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_en.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_es.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_et.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_eu.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_fa.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_fi.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_fr.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ga.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_gl.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_grc.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_he.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_hu.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_id.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_it_IT.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ja.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ka.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ko.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_nb_NO.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_nl_NL.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_nl.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_pt.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_pl.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_pt_BR.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ro.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ru.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_sk.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_sr_SP.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_sv_SE.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_sw.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_ta.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_th.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_tr.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_uk.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_vi.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_zh_CN.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_zh_HK.ts ${CMAKE_SOURCE_DIR}/data/translations/Internationalization_zh_TW.ts ) if (GENERATE_TS) qt6_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${FLAMESHOT_TS_FILES}) else () qt6_add_translation(QM_FILES ${FLAMESHOT_TS_FILES}) endif () target_sources( flameshot PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../data/graphics.qrc ${CMAKE_CURRENT_SOURCE_DIR}/../data/flameshot.rc # windows binary icon resource file ${QM_FILES} main.cpp) target_include_directories( flameshot PUBLIC $ $ $ $ $ $ $ $ $ $ $ $ $ if(ENABLE_IMGUR) $ endif() $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $) target_include_directories( flameshot PUBLIC $ ) target_link_libraries( flameshot project_warnings project_options Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Widgets QtColorWidgets ) if (UNIX) target_link_libraries( flameshot Qt${QT_VERSION_MAJOR}::DBus ) endif() if (USE_KDSINGLEAPPLICATION) message(STATUS "KDSingleApplication is used!") add_compile_definitions(USE_KDSINGLEAPPLICATION=1) if (USE_BUNDLED_KDSINGLEAPPLICATION) target_include_directories(flameshot PRIVATE ${kdsingleapplication_SOURCE_DIR} ${kdsingleapplication_BINARY_DIR}) endif() target_link_libraries( flameshot KDAB::kdsingleapplication ) endif() if (USE_WAYLAND_CLIPBOARD) target_compile_definitions(flameshot PRIVATE USE_WAYLAND_CLIPBOARD=1) target_link_libraries(flameshot KF6::GuiAddons) endif() if (APPLE) set_target_properties(flameshot PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME "Flameshot" MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} MACOSX_BUNDLE_IDENTIFIER "org.flameshot.Flameshot" MACOSX_BUNDLE_GUI_IDENTIFIER "org.flameshot.Flameshot" ) set_property(TARGET flameshot PROPERTY MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/packaging/macos/Info.plist.in ) target_link_libraries( flameshot qhotkey ) endif () set(_src_root_path ${CMAKE_CURRENT_SOURCE_DIR}) file(GLOB_RECURSE _source_list LIST_DIRECTORIES false "${_src_root_path}/*.cpp" "${_src_root_path}/*.h") # will be organized according to the actual directory structure, .h.cpp is put together source_group(TREE ${_src_root_path} FILES ${_source_list}) if (WIN32) set(USE_OPENSSL FALSE) if (ENABLE_OPENSSL) find_package(OpenSSL) if (OPENSSL_FOUND) message(STATUS "OpenSSL support enabled.") set(USE_OPENSSL TRUE) endif () else () mark_as_advanced(CLEAR OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR) endif () if (NOT USE_OPENSSL) message(WARNING "OpenSSL is required to upload screenshots") endif () target_link_libraries( flameshot qhotkey ) endif () # Choose default color palette (small or large) if($ENV{FLAMESHOT_PREDEFINED_COLOR_PALETTE_LARGE}) set(FLAMESHOT_PREDEFINED_COLOR_PALETTE_LARGE true) else() set(FLAMESHOT_PREDEFINED_COLOR_PALETTE_LARGE false) endif() message("Flameshot predefined color palette large: " ${FLAMESHOT_PREDEFINED_COLOR_PALETTE_LARGE}) target_compile_definitions(flameshot PRIVATE PREDEFINED_COLOR_PALETTE_LARGE=${FLAMESHOT_PREDEFINED_COLOR_PALETTE_LARGE}) find_package (Git) if( DEFINED ENV{GIT_HASH}) message("Using provided git_commit_hash: $ENV{GIT_HASH}") set(FLAMESHOT_GIT_HASH $ENV{GIT_HASH}) target_compile_definitions(flameshot PRIVATE FLAMESHOT_GIT_HASH="${FLAMESHOT_GIT_HASH}") elseif (GIT_FOUND) message("git found: ${GIT_EXECUTABLE} in version ${GIT_VERSION_STRING}") execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD OUTPUT_VARIABLE FLAMESHOT_GIT_HASH) string(REGEX REPLACE "\r*\n$" "" FLAMESHOT_GIT_HASH "${FLAMESHOT_GIT_HASH}") target_compile_definitions(flameshot PRIVATE FLAMESHOT_GIT_HASH="${FLAMESHOT_GIT_HASH}") message("FLAMESHOT_GIT_HASH: ${FLAMESHOT_GIT_HASH}") else() target_compile_definitions(flameshot PRIVATE FLAMESHOT_GIT_HASH="-") message(WARNING "Compiling without git commit hash") endif () target_compile_definitions(flameshot PRIVATE APP_PREFIX="${CMAKE_INSTALL_PREFIX}") target_compile_definitions(flameshot PRIVATE APP_VERSION="v${PROJECT_VERSION}") #target_compile_definitions(flameshot PRIVATE QAPPLICATION_CLASS=QApplication) target_compile_definitions(flameshot PRIVATE FLAMESHOT_APP_VERSION_URL="${GIT_API_URL}") # Enable easier debugging of screenshot capture mode if (FLAMESHOT_DEBUG_CAPTURE) target_compile_definitions(flameshot PRIVATE FLAMESHOT_DEBUG_CAPTURE) endif () if (USE_MONOCHROME_ICON) target_compile_definitions(flameshot PRIVATE USE_MONOCHROME_ICON) endif () foreach (FILE ${QM_FILES}) get_filename_component(F_NAME ${FILE} NAME) add_custom_command( TARGET flameshot POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${F_NAME} ${CMAKE_CURRENT_BINARY_DIR}/translations/${F_NAME}) endforeach () # ###################################################################################################################### # Installation instructions include(GNUInstallDirs) set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/Flameshot) if(USE_LAUNCHER_ABSOLUTE_PATH) set(LAUNCHER_EXECUTABLE "${CMAKE_INSTALL_FULL_BINDIR}/flameshot") else() set(LAUNCHER_EXECUTABLE "flameshot") endif() # Install binary install(TARGETS flameshot EXPORT flameshot-targets BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) if (WIN32) install(TARGETS flameshot-cli RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif () if (UNIX) # Install desktop files, completion and dbus files configure_file(${CMAKE_SOURCE_DIR}/data/desktopEntry/package/org.flameshot.Flameshot.desktop ${CMAKE_CURRENT_BINARY_DIR}/share/applications/org.flameshot.Flameshot.desktop @ONLY) configure_file(${CMAKE_SOURCE_DIR}/data/appdata/org.flameshot.Flameshot.metainfo.xml ${CMAKE_CURRENT_BINARY_DIR}/share/metainfo/org.flameshot.Flameshot.metainfo.xml COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/shell-completion/flameshot.bash ${CMAKE_CURRENT_BINARY_DIR}/share/bash-completion/completions/flameshot COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/shell-completion/flameshot.zsh ${CMAKE_CURRENT_BINARY_DIR}/share/zsh/site-functions/_flameshot COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/shell-completion/flameshot.fish ${CMAKE_CURRENT_BINARY_DIR}/share/fish/vendor_completions.d/flameshot.fish COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/dbus/org.flameshot.Flameshot.xml ${CMAKE_CURRENT_BINARY_DIR}/share/dbus-1/interfaces/org.flameshot.Flameshot.xml COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/dbus/org.flameshot.Flameshot.service.in ${CMAKE_CURRENT_BINARY_DIR}/share/dbus-1/services/org.flameshot.Flameshot.service) # Install man pages configure_file(${CMAKE_SOURCE_DIR}/data/man/man1/flameshot.1 ${CMAKE_CURRENT_BINARY_DIR}/share/man/man1/flameshot.1 COPYONLY) # Install Icons configure_file(${CMAKE_SOURCE_DIR}/data/img/hicolor/48x48/apps/org.flameshot.Flameshot.png ${CMAKE_CURRENT_BINARY_DIR}/share/icons/hicolor/48x48/apps/org.flameshot.Flameshot.png COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/img/hicolor/128x128/apps/org.flameshot.Flameshot.png ${CMAKE_CURRENT_BINARY_DIR}/share/icons/hicolor/128x128/apps/org.flameshot.Flameshot.png COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/img/hicolor/scalable/apps/org.flameshot.Flameshot.svg ${CMAKE_CURRENT_BINARY_DIR}/share/icons/hicolor/scalable/apps/org.flameshot.Flameshot.svg COPYONLY) # Install icon with both names configure_file(${CMAKE_SOURCE_DIR}/data/img/hicolor/48x48/apps/flameshot.png ${CMAKE_CURRENT_BINARY_DIR}/share/icons/hicolor/48x48/apps/flameshot.png COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/img/hicolor/128x128/apps/flameshot.png ${CMAKE_CURRENT_BINARY_DIR}/share/icons/hicolor/128x128/apps/flameshot.png COPYONLY) configure_file(${CMAKE_SOURCE_DIR}/data/img/hicolor/scalable/apps/flameshot.svg ${CMAKE_CURRENT_BINARY_DIR}/share/icons/hicolor/scalable/apps/flameshot.svg COPYONLY) # Install assets install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/share/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}) # Install Translations install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/flameshot/translations) endif () # windeployqt if (WIN32) # Add CMAKE_PREFIX_PATH to search paths foreach(prefix ${CMAKE_PREFIX_PATH}) list(APPEND WINDEPLOYQT_SEARCH_PATHS "${prefix}/bin") endforeach() list(APPEND WINDEPLOYQT_SEARCH_PATHS "$ENV{QTDIR}/bin") find_program(WINDEPLOYQT_EXE windeployqt.exe PATHS ${WINDEPLOYQT_SEARCH_PATHS} ) if(WINDEPLOYQT_EXE) message(STATUS "windeployqt found: ${WINDEPLOYQT_EXE}") if (CMAKE_BUILD_TYPE MATCHES Release) set(BINARIES_TYPE --release) else () set(BINARIES_TYPE --debug) endif () add_custom_command( TARGET flameshot POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/windeployqt_stuff COMMAND ${WINDEPLOYQT_EXE} ${BINARIES_TYPE} --no-translations --compiler-runtime --no-system-d3d-compiler --no-quick-import --dir ${CMAKE_BINARY_DIR}/windeployqt_stuff $ # copy translations manually QM_FILES COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/windeployqt_stuff/translations COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/src/translations ${CMAKE_BINARY_DIR}/windeployqt_stuff/translations) install(DIRECTORY ${CMAKE_BINARY_DIR}/windeployqt_stuff/ DESTINATION bin) STRING(REGEX REPLACE "\\\\" "/" OPENSSL_ROOT_DIR "$ENV{OPENSSL_ROOT_DIR}" ) if (ENABLE_OPENSSL) if (EXISTS ${OPENSSL_ROOT_DIR}/bin) install( DIRECTORY ${OPENSSL_ROOT_DIR}/bin/ DESTINATION bin FILES_MATCHING PATTERN "*.dll") else () message(WARNING "Unable to find OpenSSL dlls.") endif () endif () else () message(WARNING "Unable to find executable windeployqt.") endif () endif () # macdeployqt if (APPLE) # Code signing settings - optional, set to empty string to skip signing set(CODE_SIGN_IDENTITY "" CACHE STRING "Code signing identity (leave empty to skip signing)") set(DMG_SIGN_IDENTITY "" CACHE STRING "DMG signing identity (leave empty to skip signing)") # Custom target to create DMG (signed or unsigned) add_custom_target(create_dmg COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../packaging/macos/create_dmg.sh "${CMAKE_CURRENT_BINARY_DIR}/Flameshot.app" "${CMAKE_CURRENT_BINARY_DIR}/Flameshot-${PROJECT_VERSION}.dmg" "${CODE_SIGN_IDENTITY}" "${DMG_SIGN_IDENTITY}" DEPENDS flameshot WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Creating DMG" VERBATIM ) # Always sign the app bundle (either with identity or ad hoc) if(CODE_SIGN_IDENTITY AND NOT CODE_SIGN_IDENTITY STREQUAL "") # Identity-based signing (requires Developer ID) add_custom_command(TARGET flameshot POST_BUILD COMMAND codesign --force --deep --sign "${CODE_SIGN_IDENTITY}" --options runtime --timestamp "$" COMMENT "Code signing app bundle with ${CODE_SIGN_IDENTITY}" ) else() # Ad hoc signing add_custom_command(TARGET flameshot POST_BUILD COMMAND codesign --force --deep --sign - "$" COMMENT "Ad hoc code signing app bundle (no identity required)" ) endif() # Deploy Qt libraries and dependencies find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS ${Qt6_DIR}/../../../bin) if(MACDEPLOYQT_EXECUTABLE) add_custom_command(TARGET flameshot POST_BUILD COMMAND ${MACDEPLOYQT_EXECUTABLE} "$" -verbose=2 COMMENT "Deploying Qt libraries" ) # Re-sign after macdeployqt (it modifies the bundle) if(CODE_SIGN_IDENTITY AND NOT CODE_SIGN_IDENTITY STREQUAL "") add_custom_command(TARGET flameshot POST_BUILD COMMAND codesign --force --deep --sign "${CODE_SIGN_IDENTITY}" --options runtime --timestamp "$" COMMENT "Re-signing app bundle after Qt deployment" ) else() add_custom_command(TARGET flameshot POST_BUILD COMMAND codesign --force --deep --sign - "$" COMMENT "Re-signing app bundle after Qt deployment (ad hoc)" ) endif() else() message(WARNING "macdeployqt not found. App may not run on systems without Qt installed.") endif() endif () ================================================ FILE: src/cli/CMakeLists.txt ================================================ target_sources(flameshot PRIVATE commandlineparser.cpp commandoption.cpp commandargument.cpp) ================================================ FILE: src/cli/commandargument.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "commandargument.h" #include CommandArgument::CommandArgument() = default; CommandArgument::CommandArgument(QString name, QString description) : m_name(std::move(name)) , m_description(std::move(description)) {} void CommandArgument::setName(const QString& name) { m_name = name; } QString CommandArgument::name() const { return m_name; } void CommandArgument::setDescription(const QString& description) { m_description = description; } QString CommandArgument::description() const { return m_description; } bool CommandArgument::isRoot() const { return m_name.isEmpty() && m_description.isEmpty(); } bool CommandArgument::operator==(const CommandArgument& arg) const { return m_description == arg.m_description && m_name == arg.m_name; } ================================================ FILE: src/cli/commandargument.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class CommandArgument { public: CommandArgument(); explicit CommandArgument(QString name, QString description); void setName(const QString& name); QString name() const; void setDescription(const QString& description); QString description() const; bool isRoot() const; bool operator==(const CommandArgument& arg) const; private: QString m_name; QString m_description; }; ================================================ FILE: src/cli/commandlineparser.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "commandlineparser.h" #include "abstractlogger.h" #include "src/utils/globalvalues.h" #include #include CommandLineParser::CommandLineParser() : m_description(qApp->applicationName()) {} namespace { AbstractLogger out = AbstractLogger::info(AbstractLogger::Stdout).enableMessageHeader(false); AbstractLogger err = AbstractLogger::error(AbstractLogger::Stderr); auto versionOption = CommandOption({ "v", "version" }, QStringLiteral("Displays version information")); auto helpOption = CommandOption({ "h", "help" }, QStringLiteral("Displays this help")); QString optionsToString(const QList& options, const QList& subcommands) { int size = 0; // track the largest size QStringList dashedOptionList; // save the dashed options and its size in order to print the description // of every option at the same horizontal character position. for (auto const& option : options) { QStringList dashedOptions = option.dashedNames(); QString joinedDashedOptions = dashedOptions.join(QStringLiteral(", ")); if (!option.valueName().isEmpty()) { joinedDashedOptions += QStringLiteral(" <%1>").arg(option.valueName()); } if (joinedDashedOptions.length() > size) { size = joinedDashedOptions.length(); } dashedOptionList << joinedDashedOptions; } // check the length of the subcommands for (auto const& subcommand : subcommands) { if (subcommand.name().length() > size) { size = subcommand.name().length(); } } // generate the text QString result; if (!dashedOptionList.isEmpty()) { result += QObject::tr("Options") + ":\n"; QString linePadding = QStringLiteral(" ").repeated(size + 4).prepend("\n"); for (int i = 0; i < options.length(); ++i) { result += QStringLiteral(" %1 %2\n") .arg(dashedOptionList.at(i).leftJustified(size, ' '), options.at(i).description().replace( QLatin1String("\n"), linePadding)); } if (!subcommands.isEmpty()) { result += QLatin1String("\n"); } } if (!subcommands.isEmpty()) { result += QObject::tr("Subcommands") + ":\n"; } for (const auto& subcommand : subcommands) { result += QStringLiteral(" %1 %2\n") .arg(subcommand.name().leftJustified(size, ' '), subcommand.description()); } return result; } } // unnamed namespace bool CommandLineParser::processArgs(const QStringList& args, QStringList::const_iterator& actualIt, Node*& actualNode) { QString argument = *actualIt; bool ok = true; bool isValidArg = false; for (Node& n : actualNode->subNodes) { if (n.argument.name() == argument) { actualNode = &n; isValidArg = true; break; } } if (isValidArg) { auto nextArg = actualNode->argument; m_foundArgs.append(nextArg); // check next is help ++actualIt; ok = processIfOptionIsHelp(args, actualIt, actualNode); --actualIt; } else { ok = false; err << QStringLiteral("'%1' is not a valid argument.").arg(argument); } return ok; } bool CommandLineParser::processOptions(const QStringList& args, QStringList::const_iterator& actualIt, Node* const actualNode) { QString arg = *actualIt; bool ok = true; // track values int equalsPos = arg.indexOf(QLatin1String("=")); QString valueStr; if (equalsPos != -1) { valueStr = arg.mid(equalsPos + 1); // right arg = arg.mid(0, equalsPos); // left } // check format -x --xx... bool isDoubleDashed = arg.startsWith(QLatin1String("--")); ok = isDoubleDashed ? arg.length() > 3 : arg.length() == 2; if (!ok) { err << QStringLiteral("the option %1 has a wrong format.").arg(arg); return ok; } arg = isDoubleDashed ? arg.remove(0, 2) : arg.remove(0, 1); // get option auto endIt = actualNode->options.cend(); auto optionIt = endIt; for (auto i = actualNode->options.cbegin(); i != endIt; ++i) { if ((*i).names().contains(arg)) { optionIt = i; break; } } if (optionIt == endIt) { QString argName = actualNode->argument.name(); if (argName.isEmpty()) { argName = qApp->applicationName(); } err << QStringLiteral("the option '%1' is not a valid option " "for the argument '%2'.") .arg(arg, argName); ok = false; return ok; } // check presence of values CommandOption option = *optionIt; bool requiresValue = !(option.valueName().isEmpty()); if (!requiresValue && equalsPos != -1) { err << QStringLiteral("the option '%1' contains a '=' and it doesn't " "require a value.") .arg(arg); ok = false; return ok; } else if (requiresValue && valueStr.isEmpty()) { // find in the next if (actualIt + 1 != args.cend()) { ++actualIt; } else { err << QStringLiteral("Expected value after the option '%1'.") .arg(arg); ok = false; return ok; } valueStr = *actualIt; } // check the value correctness if (requiresValue) { ok = option.checkValue(valueStr); if (!ok) { QString msg = option.errorMsg(); if (!msg.endsWith(QLatin1String("."))) { msg += QLatin1String("."); } err << msg; return ok; } option.setValue(valueStr); } m_foundOptions.append(option); return ok; } bool CommandLineParser::parse(const QStringList& args) { m_foundArgs.clear(); m_foundOptions.clear(); bool ok = true; Node* actualNode = &m_parseTree; auto it = ++args.cbegin(); // check version option QStringList dashedVersion = versionOption.dashedNames(); if (m_withVersion && args.length() > 1 && dashedVersion.contains(args.at(1))) { if (args.length() == 2) { printVersion(); m_foundOptions << versionOption; } else { err << "Invalid arguments after the version option."; ok = false; } return ok; } // check help option ok = processIfOptionIsHelp(args, it, actualNode); // process the other args for (; it != args.cend() && ok; ++it) { const QString& val = *it; if (val.startsWith(QLatin1String("-"))) { ok = processOptions(args, it, actualNode); } else { ok = processArgs(args, it, actualNode); } } if (!ok && !m_generalErrorMessage.isEmpty()) { err.enableMessageHeader(false); err << m_generalErrorMessage; err.enableMessageHeader(true); } return ok; } CommandOption CommandLineParser::addVersionOption() { m_withVersion = true; return versionOption; } CommandOption CommandLineParser::addHelpOption() { m_withHelp = true; return helpOption; } bool CommandLineParser::AddArgument(const CommandArgument& arg, const CommandArgument& parent) { bool res = true; Node* n = findParent(parent); if (n == nullptr) { res = false; } else { Node child; child.argument = arg; n->subNodes.append(child); } return res; } bool CommandLineParser::AddOption(const CommandOption& option, const CommandArgument& parent) { bool res = true; Node* n = findParent(parent); if (n == nullptr) { res = false; } else { n->options.append(option); } return res; } bool CommandLineParser::AddOptions(const QList& options, const CommandArgument& parent) { bool res = true; for (auto const& option : options) { if (!AddOption(option, parent)) { res = false; break; } } return res; } void CommandLineParser::setGeneralErrorMessage(const QString& msg) { m_generalErrorMessage = msg; } void CommandLineParser::setDescription(const QString& description) { m_description = description; } bool CommandLineParser::isSet(const CommandArgument& arg) const { return m_foundArgs.contains(arg); } bool CommandLineParser::isSet(const CommandOption& option) const { return m_foundOptions.contains(option); } QString CommandLineParser::value(const CommandOption& option) const { QString value = option.value(); for (const CommandOption& fOption : m_foundOptions) { if (option == fOption) { value = fOption.value(); break; } } return value; } void CommandLineParser::printVersion() { out << GlobalValues::versionInfo(); } void CommandLineParser::printHelp(QStringList args, const Node* node) { args.removeLast(); // remove the help, it's always the last QString helpText; // add usage info QString argName = node->argument.name(); if (argName.isEmpty()) { argName = qApp->applicationName(); } QString argText = node->subNodes.isEmpty() ? "" : "[" + QObject::tr("subcommands") + "]"; helpText += (QObject::tr("Usage") + ": %1 [%2-" + QObject::tr("options") + QStringLiteral("] %3\n\n")) .arg(args.join(QStringLiteral(" ")), argName, argText); // short section about default behavior helpText += QObject::tr("Per default runs Flameshot in the background and " "adds a tray icon for configuration."); helpText += "\n\n"; // add command options and subarguments QList subcommands; for (const Node& n : node->subNodes) { subcommands.append(n.argument); } auto modifiedOptions = node->options; if (m_withHelp) { modifiedOptions << helpOption; } if (m_withVersion && node == &m_parseTree) { modifiedOptions << versionOption; } helpText += optionsToString(modifiedOptions, subcommands); // print it out << helpText; } CommandLineParser::Node* CommandLineParser::findParent( const CommandArgument& parent) { if (parent == CommandArgument()) { return &m_parseTree; } // find the parent in the subNodes recursively Node* res = nullptr; for (auto& subNode : m_parseTree.subNodes) { res = recursiveParentSearch(parent, subNode); if (res != nullptr) { break; } } return res; } CommandLineParser::Node* CommandLineParser::recursiveParentSearch( const CommandArgument& parent, Node& node) const { Node* res = nullptr; if (node.argument == parent) { res = &node; } else { for (auto& subNode : node.subNodes) { res = recursiveParentSearch(parent, subNode); if (res != nullptr) { break; } } } return res; } bool CommandLineParser::processIfOptionIsHelp( const QStringList& args, QStringList::const_iterator& actualIt, Node*& actualNode) { bool ok = true; auto dashedHelpNames = helpOption.dashedNames(); if (m_withHelp && actualIt != args.cend() && dashedHelpNames.contains(*actualIt)) { if (actualIt + 1 == args.cend()) { m_foundOptions << helpOption; printHelp(args, actualNode); actualIt++; } else { err << "Invalid arguments after the help option."; ok = false; } } return ok; } ================================================ FILE: src/cli/commandlineparser.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/cli/commandargument.h" #include "src/cli/commandoption.h" #include class CommandLineParser { public: CommandLineParser(); bool parse(const QStringList& args); CommandArgument rootArgument() const { return CommandArgument(); } CommandOption addVersionOption(); CommandOption addHelpOption(); bool AddArgument(const CommandArgument& arg, const CommandArgument& parent = CommandArgument()); bool AddOption(const CommandOption& option, const CommandArgument& parent = CommandArgument()); bool AddOptions(const QList& options, const CommandArgument& parent = CommandArgument()); void setGeneralErrorMessage(const QString& msg); void setDescription(const QString& description); bool isSet(const CommandArgument& arg) const; bool isSet(const CommandOption& option) const; QString value(const CommandOption& option) const; private: bool m_withHelp = false; bool m_withVersion = false; QString m_description; QString m_generalErrorMessage; struct Node { explicit Node(const CommandArgument& arg) : argument(arg) {} Node() {} bool operator==(const Node& n) const { return argument == n.argument && options == n.options && subNodes == n.subNodes; } CommandArgument argument; QList options; QList subNodes; }; Node m_parseTree; QList m_foundOptions; QList m_foundArgs; // helper functions void printVersion(); void printHelp(QStringList args, const Node* node); Node* findParent(const CommandArgument& parent); Node* recursiveParentSearch(const CommandArgument& parent, Node& node) const; bool processIfOptionIsHelp(const QStringList& args, QStringList::const_iterator& actualIt, Node*& actualNode); bool processArgs(const QStringList& args, QStringList::const_iterator& actualIt, Node*& actualNode); bool processOptions(const QStringList& args, QStringList::const_iterator& actualIt, Node* const actualNode); }; ================================================ FILE: src/cli/commandoption.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "commandoption.h" #include CommandOption::CommandOption(const QString& name, QString description, QString valueName, QString defaultValue) : m_names(name) , m_description(std::move(description)) , m_valueName(std::move(valueName)) , m_value(std::move(defaultValue)) { m_checker = [](QString const&) { return true; }; } CommandOption::CommandOption(QStringList names, QString description, QString valueName, QString defaultValue) : m_names(std::move(names)) , m_description(std::move(description)) , m_valueName(std::move(valueName)) , m_value(std::move(defaultValue)) { m_checker = [](QString const&) -> bool { return true; }; } void CommandOption::setName(const QString& name) { m_names = QStringList() << name; } void CommandOption::setNames(const QStringList& names) { m_names = names; } QStringList CommandOption::names() const { return m_names; } QStringList CommandOption::dashedNames() const { QStringList dashedNames; for (const QString& name : m_names) { // prepend "-" to single character options, and "--" to the others QString dashedName = (name.length() == 1) ? QStringLiteral("-%1").arg(name) : QStringLiteral("--%1").arg(name); dashedNames << dashedName; } return dashedNames; } void CommandOption::setValueName(const QString& name) { m_valueName = name; } QString CommandOption::valueName() const { return m_valueName; } void CommandOption::setValue(const QString& value) { if (m_valueName.isEmpty()) { m_valueName = QLatin1String("value"); } m_value = value; } QString CommandOption::value() const { return m_value; } void CommandOption::addChecker(const function checker, const QString& errMsg) { m_checker = checker; m_errorMsg = errMsg; } bool CommandOption::checkValue(const QString& value) const { return m_checker(value); } QString CommandOption::description() const { return m_description; } void CommandOption::setDescription(const QString& description) { m_description = description; } QString CommandOption::errorMsg() const { return m_errorMsg; } bool CommandOption::operator==(const CommandOption& option) const { return m_description == option.m_description && m_names == option.m_names && m_valueName == option.m_valueName; } ================================================ FILE: src/cli/commandoption.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include using std::function; class CommandOption { public: CommandOption(const QString& name, QString description, QString valueName = QString(), QString defaultValue = QString()); CommandOption(QStringList names, QString description, QString valueName = QString(), QString defaultValue = QString()); void setName(const QString& name); void setNames(const QStringList& names); QStringList names() const; QStringList dashedNames() const; void setValueName(const QString& name); QString valueName() const; void setValue(const QString& value); QString value() const; void addChecker(const function checker, const QString& errMsg); bool checkValue(const QString& value) const; QString description() const; void setDescription(const QString& description); QString errorMsg() const; bool operator==(const CommandOption& option) const; private: QStringList m_names; QString m_description; QString m_valueName; QString m_value; function m_checker; QString m_errorMsg; }; ================================================ FILE: src/config/CMakeLists.txt ================================================ target_sources( flameshot PRIVATE buttonlistview.cpp cacheutils.cpp clickablelabel.cpp colorpickereditmode.cpp colorpickereditor.cpp configerrordetails.cpp configresolver.cpp configwindow.cpp extendedslider.cpp filenameeditor.cpp generalconf.cpp setshortcutwidget.cpp shortcutswidget.cpp strftimechooserwidget.cpp styleoverride.cpp uicoloreditor.cpp visualseditor.cpp ) ================================================ FILE: src/config/buttonlistview.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "buttonlistview.h" #include "src/tools/toolfactory.h" #include "src/utils/confighandler.h" #include #include ButtonListView::ButtonListView(QWidget* parent) : QListWidget(parent) { setMouseTracking(true); setFlow(QListWidget::TopToBottom); initButtonList(); updateComponents(); connect( this, &QListWidget::itemClicked, this, &ButtonListView::reverseItemCheck); } void ButtonListView::initButtonList() { ToolFactory factory; auto listTypes = CaptureToolButton::getIterableButtonTypes(); for (const CaptureTool::Type t : listTypes) { CaptureTool* tool = factory.CreateTool(t); // add element to the local map m_buttonTypeByName.insert(tool->name(), t); // init the menu option auto* m_buttonItem = new QListWidgetItem(this); // when the background is lighter than gray, it uses the white icons QColor bgColor = this->palette().color(QWidget::backgroundRole()); m_buttonItem->setIcon(tool->icon(bgColor, false)); m_buttonItem->setFlags(Qt::ItemIsUserCheckable); QColor foregroundColor = this->palette().color(QWidget::foregroundRole()); m_buttonItem->setForeground(foregroundColor); m_buttonItem->setText(tool->name()); m_buttonItem->setToolTip(tool->description()); tool->deleteLater(); } } void ButtonListView::updateActiveButtons(QListWidgetItem* item) { CaptureTool::Type bType = m_buttonTypeByName[item->text()]; if (item->checkState() == Qt::Checked) { m_listButtons.append(bType); // TODO refactor so we don't need external sorts using bt = CaptureTool::Type; std::sort(m_listButtons.begin(), m_listButtons.end(), [](bt a, bt b) { return CaptureToolButton::getPriorityByButton(a) < CaptureToolButton::getPriorityByButton(b); }); } else { m_listButtons.removeOne(bType); } ConfigHandler().setButtons(m_listButtons); } void ButtonListView::reverseItemCheck(QListWidgetItem* item) { if (item->checkState() == Qt::Checked) { item->setCheckState(Qt::Unchecked); } else { item->setCheckState(Qt::Checked); } updateActiveButtons(item); } void ButtonListView::selectAll() { ConfigHandler().setAllTheButtons(); for (int i = 0; i < this->count(); ++i) { QListWidgetItem* item = this->item(i); item->setCheckState(Qt::Checked); } } void ButtonListView::updateComponents() { m_listButtons = ConfigHandler().buttons(); auto listTypes = CaptureToolButton::getIterableButtonTypes(); for (int i = 0; i < this->count(); ++i) { QListWidgetItem* item = this->item(i); auto elem = static_cast(listTypes.at(i)); if (m_listButtons.contains(elem)) { item->setCheckState(Qt::Checked); } else { item->setCheckState(Qt::Unchecked); } } } ================================================ FILE: src/config/buttonlistview.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/widgets/capture/capturetoolbutton.h" #include class ButtonListView : public QListWidget { public: explicit ButtonListView(QWidget* parent = nullptr); public slots: void selectAll(); void updateComponents(); private slots: void reverseItemCheck(QListWidgetItem*); protected: void initButtonList(); private: QList m_listButtons; QMap m_buttonTypeByName; void updateActiveButtons(QListWidgetItem*); }; ================================================ FILE: src/config/cacheutils.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Jeremy Borgman #include "cacheutils.h" #include #include #include #include #include #include QString getCachePath() { auto cachePath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); if (!QDir(cachePath).exists()) { QDir().mkpath(cachePath); } return cachePath; } void setLastRegion(QRect const& newRegion) { auto cachePath = getCachePath() + "/region.txt"; QFile file(cachePath); if (file.open(QIODevice::WriteOnly)) { QDataStream out(&file); out << newRegion; file.close(); } } QRect getLastRegion() { auto cachePath = getCachePath() + "/region.txt"; QFile file(cachePath); QRect lastRegion; if (file.open(QIODevice::ReadOnly)) { QDataStream input(&file); input >> lastRegion; file.close(); } else { lastRegion = QRect(0, 0, 0, 0); } return lastRegion; } ================================================ FILE: src/config/cacheutils.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Jeremy Borgman #ifndef FLAMESHOT_CACHEUTILS_H #define FLAMESHOT_CACHEUTILS_H class QString; class QRect; QString getCachePath(); QRect getLastRegion(); void setLastRegion(QRect const& newRegion); #endif // FLAMESHOT_CACHEUTILS_H ================================================ FILE: src/config/clickablelabel.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "clickablelabel.h" ClickableLabel::ClickableLabel(QWidget* parent) : QLabel(parent) {} ClickableLabel::ClickableLabel(const QString& s, QWidget* parent) : QLabel(parent) { setText(s); } void ClickableLabel::mousePressEvent(QMouseEvent*) { emit clicked(); } ================================================ FILE: src/config/clickablelabel.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class ClickableLabel : public QLabel { Q_OBJECT public: explicit ClickableLabel(QWidget* parent = nullptr); ClickableLabel(const QString& s, QWidget* parent = nullptr); signals: void clicked(); private: void mousePressEvent(QMouseEvent*); }; ================================================ FILE: src/config/colorpickereditmode.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2022 Dearsh Oberoi #include "colorpickereditmode.h" #include #include ColorPickerEditMode::ColorPickerEditMode(QWidget* parent) : ColorPickerWidget(parent) { m_isPressing = false; m_isDragging = false; installEventFilter(this); } bool ColorPickerEditMode::eventFilter(QObject* obj, QEvent* event) { auto widget = static_cast(obj); switch (event->type()) { case QEvent::MouseButtonPress: { auto mouseEvent = static_cast(event); if (mouseEvent->button() == Qt::LeftButton) { m_mousePressPos = mouseEvent->pos(); m_mouseMovePos = m_mousePressPos; for (int i = 1; i < m_colorList.size(); ++i) { if (m_colorAreaList.at(i).contains(m_mousePressPos)) { m_isPressing = true; m_draggedPresetInitialPos = m_colorAreaList[i].topLeft(); m_selectedIndex = i; update(m_colorAreaList.at(i) + QMargins(10, 10, 10, 10)); update(m_colorAreaList.at(m_lastIndex) + QMargins(10, 10, 10, 10)); m_lastIndex = i; emit colorSelected(m_selectedIndex); break; } } } } break; case QEvent::MouseMove: { auto mouseEvent = static_cast(event); if (m_isPressing) { QPoint eventPos = mouseEvent->pos(); QPoint diff = eventPos - m_mouseMovePos; m_colorAreaList[m_selectedIndex].translate(diff); widget->update(); if (!m_isDragging) { QPoint totalMovedDiff = eventPos - m_mousePressPos; if (totalMovedDiff.manhattanLength() > 3) { m_isDragging = true; } } m_mouseMovePos = eventPos; } } break; case QEvent::MouseButtonRelease: { m_isPressing = false; if (m_isDragging) { QPoint draggedPresetCenter = m_colorAreaList[m_selectedIndex].center(); m_isDragging = false; bool swapped = false; for (int i = 1; i < m_colorList.size(); ++i) { if (i != m_selectedIndex && m_colorAreaList.at(i).contains(draggedPresetCenter)) { // swap colors QColor temp = m_colorList[i]; m_colorList[i] = m_colorList[m_selectedIndex]; m_colorList[m_selectedIndex] = temp; m_config.setUserColors(m_colorList); m_colorAreaList[m_selectedIndex].moveTo( m_draggedPresetInitialPos); m_selectedIndex = i; widget->update(); m_lastIndex = i; emit presetsSwapped(m_selectedIndex); swapped = true; break; } } if (!swapped) { m_colorAreaList[m_selectedIndex].moveTo( m_draggedPresetInitialPos); widget->update(); } } } break; default: break; } return QObject::eventFilter(obj, event); } ================================================ FILE: src/config/colorpickereditmode.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2022 Dearsh Oberoi #pragma once #include "src/utils/confighandler.h" #include "src/widgets/colorpickerwidget.h" class ColorPickerEditMode : public ColorPickerWidget { Q_OBJECT public: explicit ColorPickerEditMode(QWidget* parent = nullptr); signals: void colorSelected(int index); void presetsSwapped(int index); private: bool eventFilter(QObject* obj, QEvent* event) override; bool m_isPressing = false; bool m_isDragging = false; QPoint m_mouseMovePos; QPoint m_mousePressPos; QPoint m_draggedPresetInitialPos; ConfigHandler m_config; }; ================================================ FILE: src/config/colorpickereditor.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2022 Dearsh Oberoi #include "colorpickereditor.h" #include "colorpickereditmode.h" #include "src/utils/globalvalues.h" #include #include #include #include #include #include #include #include #include #include ColorPickerEditor::ColorPickerEditor(QWidget* parent) : QWidget(parent) , m_selectedIndex(1) { m_color = m_config.drawColor(); m_colorList = m_config.userColors(); m_gLayout = new QGridLayout(this); m_colorpicker = new ColorPickerEditMode(this); m_gLayout->addWidget(m_colorpicker, 0, 0); m_colorWheel = new color_widgets::ColorWheel(this); m_colorWheel->setColor(m_color); const int size = GlobalValues::buttonBaseSize() * 3.5; m_colorWheel->setMinimumSize(size, size); m_gLayout->addWidget(m_colorWheel, 1, 0); auto* m_vLocalLayout1 = new QVBoxLayout(); m_vLocalLayout1->addStretch(); m_colorEditLabel = new QLabel(tr("Edit Preset:"), this); m_vLocalLayout1->addWidget(m_colorEditLabel); m_colorEdit = new QLineEdit(this); m_colorEdit->setText(m_colorList[m_selectedIndex].name(QColor::HexRgb)); m_colorEdit->setToolTip(tr("Enter color to update preset")); connect(m_colorpicker, &ColorPickerEditMode::colorSelected, this, [this](int index) { m_selectedIndex = index; m_colorEdit->setText( m_colorList[m_selectedIndex].name(QColor::HexRgb)); }); connect(m_colorpicker, &ColorPickerEditMode::presetsSwapped, this, [this](int index) { m_selectedIndex = index; m_colorList = m_config.userColors(); m_colorEdit->setText( m_colorList[m_selectedIndex].name(QColor::HexRgb)); }); m_vLocalLayout1->addWidget(m_colorEdit); m_updatePresetButton = new QPushButton(tr("Update"), this); m_updatePresetButton->setToolTip( tr("Press button to update the selected preset")); connect(m_updatePresetButton, &QPushButton::pressed, this, &ColorPickerEditor::onUpdatePreset); m_vLocalLayout1->addWidget(m_updatePresetButton); m_deletePresetButton = new QPushButton(tr("Delete"), this); m_deletePresetButton->setToolTip( tr("Press button to delete the selected preset")); connect(m_deletePresetButton, &QPushButton::pressed, this, &ColorPickerEditor::onDeletePreset); m_vLocalLayout1->addWidget(m_deletePresetButton); m_vLocalLayout1->addStretch(); m_gLayout->addLayout(m_vLocalLayout1, 0, 1); auto* m_vLocalLayout2 = new QVBoxLayout(); m_vLocalLayout2->addStretch(); m_addPresetLabel = new QLabel(tr("Add Preset:"), this); m_vLocalLayout2->addWidget(m_addPresetLabel); m_colorInput = new QLineEdit(this); m_colorInput->setText(m_color.name(QColor::HexRgb)); m_colorInput->setToolTip( tr("Enter color manually or select it using the color-wheel")); connect(m_colorWheel, &color_widgets::ColorWheel::colorSelected, this, [=, this](QColor c) { m_color = c; m_colorInput->setText(m_color.name(QColor::HexRgb)); }); m_vLocalLayout2->addWidget(m_colorInput); m_addPresetButton = new QPushButton(tr("Add"), this); m_addPresetButton->setToolTip(tr("Press button to add preset")); connect(m_addPresetButton, &QPushButton::pressed, this, &ColorPickerEditor::onAddPreset); m_vLocalLayout2->addWidget(m_addPresetButton); m_vLocalLayout2->addStretch(); m_gLayout->addLayout(m_vLocalLayout2, 1, 1); } void ColorPickerEditor::addPreset() { if (m_colorList.contains(m_color)) { return; } const int maxPresetsAllowed = 17; if (m_colorList.size() >= maxPresetsAllowed) { QMessageBox::critical( this, tr("Error"), tr("Unable to add preset. Maximum limit reached.")); return; } m_colorList << m_color; m_config.setUserColors(m_colorList); } void ColorPickerEditor::deletePreset() { const int minPresetsAllowed = 3; if (m_colorList.size() <= minPresetsAllowed) { QMessageBox::critical( this, tr("Error"), tr("Unable to remove preset. Minimum limit reached.")); return; } m_colorList.remove(m_selectedIndex); m_config.setUserColors(m_colorList); } void ColorPickerEditor::updatePreset() { QColor c = QColor(m_colorEdit->text()); if (m_colorList.contains(c)) { m_colorEdit->setText(m_colorList[m_selectedIndex].name(QColor::HexRgb)); return; } m_colorList[m_selectedIndex] = c; m_config.setUserColors(m_colorList); } void ColorPickerEditor::onAddPreset() { #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) if (QColor::isValidColor(m_colorInput->text())) { #else if (QColor::isValidColorName(m_colorInput->text())) { #endif m_color = QColor(m_colorInput->text()); m_colorInput->setText(m_color.name(QColor::HexRgb)); } else { m_colorInput->setText(m_color.name(QColor::HexRgb)); return; } addPreset(); m_colorpicker->updateWidget(); m_selectedIndex = 1; m_colorpicker->updateSelection(m_selectedIndex); m_colorEdit->setText(m_colorList[m_selectedIndex].name(QColor::HexRgb)); } void ColorPickerEditor::onDeletePreset() { deletePreset(); m_colorpicker->updateWidget(); m_selectedIndex = 1; m_colorpicker->updateSelection(m_selectedIndex); m_colorEdit->setText(m_colorList[m_selectedIndex].name(QColor::HexRgb)); } void ColorPickerEditor::onUpdatePreset() { #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) if (QColor::isValidColor(m_colorEdit->text())) { #else if (QColor::isValidColorName(m_colorEdit->text())) { #endif QColor c = QColor(m_colorEdit->text()); m_colorEdit->setText(c.name(QColor::HexRgb)); } else { m_colorEdit->setText(m_colorList[m_selectedIndex].name(QColor::HexRgb)); return; } updatePreset(); m_colorpicker->updateWidget(); } ================================================ FILE: src/config/colorpickereditor.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2022 Dearsh Oberoi #pragma once #include "QtColorWidgets/color_wheel.hpp" #include "src/utils/confighandler.h" #include class ColorPickerEditMode; class QLabel; class QPushButton; class QLineEdit; class QColor; class QGridLayout; class ColorPickerEditor : public QWidget { Q_OBJECT public: explicit ColorPickerEditor(QWidget* parent = nullptr); private slots: void onAddPreset(); void onDeletePreset(); void onUpdatePreset(); private: void addPreset(); void deletePreset(); void updatePreset(); ColorPickerEditMode* m_colorpicker; color_widgets::ColorWheel* m_colorWheel; QLabel* m_colorEditLabel; QLineEdit* m_colorEdit; QPushButton* m_deletePresetButton; QPushButton* m_updatePresetButton; QLineEdit* m_colorInput; QLabel* m_addPresetLabel; QPushButton* m_addPresetButton; QColor m_color; int m_selectedIndex; QVector m_colorList; ConfigHandler m_config; QGridLayout* m_gLayout; }; ================================================ FILE: src/config/configerrordetails.cpp ================================================ #include "src/config/configerrordetails.h" #include "src/utils/abstractlogger.h" #include "src/utils/confighandler.h" #include #include #include #include ConfigErrorDetails::ConfigErrorDetails(QWidget* parent) : QDialog(parent) { // Generate error log message QString str; AbstractLogger stream(str, AbstractLogger::Error); ConfigHandler().checkForErrors(&stream); // Set up dialog setWindowTitle(tr("Configuration errors")); setLayout(new QVBoxLayout(this)); // Add text display auto* textDisplay = new QTextEdit(this); textDisplay->setPlainText(str); textDisplay->setReadOnly(true); layout()->addWidget(textDisplay); // Add Ok button using BBox = QDialogButtonBox; BBox* buttons = new BBox(BBox::Ok); layout()->addWidget(buttons); connect(buttons, &BBox::clicked, this, [this]() { close(); }); show(); qApp->processEvents(); QPoint center = geometry().center(); QRect dialogRect(0, 0, 600, 400); dialogRect.moveCenter(center); setGeometry(dialogRect); } ================================================ FILE: src/config/configerrordetails.h ================================================ #include #pragma once class ConfigErrorDetails : public QDialog { public: ConfigErrorDetails(QWidget* parent = nullptr); }; ================================================ FILE: src/config/configresolver.cpp ================================================ #include "src/config/configresolver.h" #include "src/config/configerrordetails.h" #include "src/utils/confighandler.h" #include "src/utils/valuehandler.h" #include #include #include #include ConfigResolver::ConfigResolver(QWidget* parent) : QDialog(parent) { setWindowTitle(tr("Resolve configuration errors")); setMinimumSize({ 250, 200 }); setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); populate(); connect(ConfigHandler::getInstance(), &ConfigHandler::fileChanged, this, [this]() { populate(); }); } QGridLayout* ConfigResolver::layout() { return dynamic_cast(QDialog::layout()); } void ConfigResolver::populate() { ConfigHandler config; QList unrecognized; QList semanticallyWrong; config.checkUnrecognizedSettings(nullptr, &unrecognized); config.checkSemantics(nullptr, &semanticallyWrong); // Remove previous layout and children, if any resetLayout(); bool anyErrors = !semanticallyWrong.isEmpty() || !unrecognized.isEmpty(); int row = 0; // No errors detected if (!anyErrors) { accept(); } else { layout()->addWidget( new QLabel( tr("You must resolve all errors before continuing:")), 0, 0, 1, 2); ++row; } // List semantically incorrect settings with a "Reset" button for (const auto& key : semanticallyWrong) { auto* label = new QLabel(key); auto* reset = new QPushButton(tr("Reset")); label->setToolTip("This setting has a bad value."); reset->setToolTip(tr("Reset to the default value.")); layout()->addWidget(label, row, 0); layout()->addWidget(reset, row, 1); reset->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(reset, &QPushButton::clicked, this, [key]() { ConfigHandler().resetValue(key); }); ++row; } // List unrecognized settings with a "Remove" button for (const auto& key : unrecognized) { auto* label = new QLabel(key); auto* remove = new QPushButton(tr("Remove")); label->setToolTip("This setting is unrecognized."); remove->setToolTip(tr("Remove this setting.")); layout()->addWidget(label, row, 0); layout()->addWidget(remove, row, 1); connect(remove, &QPushButton::clicked, this, [key]() { ConfigHandler().remove(key); }); ++row; } if (!config.checkShortcutConflicts()) { auto* conflicts = new QLabel( tr("Some keyboard shortcuts have conflicts.\n" "This will NOT prevent flameshot from starting.\n" "Please solve them manually in the configuration file.")); conflicts->setWordWrap(true); conflicts->setMaximumWidth(geometry().width()); conflicts->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); layout()->addWidget(conflicts, row, 0, 1, 2, Qt::AlignCenter); ++row; } auto* separator = new QFrame(this); separator->setFrameShape(QFrame::HLine); separator->setFrameShadow(QFrame::Sunken); layout()->addWidget(separator, row, 0, 1, 2); ++row; using BBox = QDialogButtonBox; // Add button box at the bottom auto* buttons = new BBox(this); layout()->addWidget(buttons, row, 0, 1, 2, Qt::AlignCenter); if (anyErrors) { auto* resolveAll = new QPushButton(tr("Resolve all")); resolveAll->setToolTip(tr("Resolve all listed errors.")); buttons->addButton(resolveAll, BBox::ResetRole); connect(resolveAll, &QPushButton::clicked, this, [=, this]() { for (const auto& key : semanticallyWrong) { ConfigHandler().resetValue(key); } for (const auto& key : unrecognized) { ConfigHandler().remove(key); } }); } auto* details = new QPushButton(tr("Details")); buttons->addButton(details, BBox::HelpRole); connect(details, &QPushButton::clicked, this, [this]() { (new ConfigErrorDetails(this))->exec(); }); buttons->addButton(BBox::Cancel); connect(buttons, &BBox::rejected, this, [this]() { reject(); }); } void ConfigResolver::resetLayout() { for (auto* child : children()) { child->deleteLater(); } delete layout(); setLayout(new QGridLayout()); layout()->setSizeConstraint(QLayout::SetFixedSize); } ================================================ FILE: src/config/configresolver.h ================================================ #pragma once #include class QGridLayout; class ConfigResolver : public QDialog { public: ConfigResolver(QWidget* parent = nullptr); QGridLayout* layout(); private: void populate(); void resetLayout(); }; ================================================ FILE: src/config/configwindow.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "configwindow.h" #include "abstractlogger.h" #include "src/config/configresolver.h" #include "src/config/filenameeditor.h" #include "src/config/generalconf.h" #include "src/config/shortcutswidget.h" #include "src/config/strftimechooserwidget.h" #include "src/config/visualseditor.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include "src/utils/pathinfo.h" #include #include #include #include #include #include #include #include #include #include // ConfigWindow contains the menus where you can configure the application ConfigWindow::ConfigWindow(QWidget* parent) : QWidget(parent) { // We wrap QTabWidget in a QWidget because of a Qt bug auto* layout = new QVBoxLayout(this); m_tabWidget = new QTabWidget(this); m_tabWidget->tabBar()->setUsesScrollButtons(false); layout->addWidget(m_tabWidget); setAttribute(Qt::WA_DeleteOnClose); setWindowIcon(QIcon(GlobalValues::iconPath())); setWindowTitle(tr("Configuration")); connect(ConfigHandler::getInstance(), &ConfigHandler::fileChanged, this, &ConfigWindow::updateChildren); QColor background = this->palette().window().color(); bool isDark = ColorUtils::colorIsDark(background); QString modifier = isDark ? PathInfo::whiteIconPath() : PathInfo::blackIconPath(); // general m_generalConfig = new GeneralConf(); m_generalConfigTab = new QWidget(); auto* generalConfigLayout = new QVBoxLayout(m_generalConfigTab); m_generalConfigTab->setLayout(generalConfigLayout); generalConfigLayout->addWidget(m_generalConfig); m_tabWidget->addTab( m_generalConfigTab, QIcon(modifier + "config.svg"), tr("General")); // visuals m_visuals = new VisualsEditor(); m_visualsTab = new QWidget(); auto* visualsLayout = new QVBoxLayout(m_visualsTab); m_visualsTab->setLayout(visualsLayout); visualsLayout->addWidget(m_visuals); m_tabWidget->addTab( m_visualsTab, QIcon(modifier + "graphics.svg"), tr("Interface")); // filename m_filenameEditor = new FileNameEditor(); m_filenameEditorTab = new QWidget(); auto* filenameEditorLayout = new QVBoxLayout(m_filenameEditorTab); m_filenameEditorTab->setLayout(filenameEditorLayout); filenameEditorLayout->addWidget(m_filenameEditor); m_tabWidget->addTab(m_filenameEditorTab, QIcon(modifier + "name_edition.svg"), tr("Filename Editor")); // shortcuts m_shortcuts = new ShortcutsWidget(); m_shortcutsTab = new QWidget(); auto* shortcutsLayout = new QVBoxLayout(m_shortcutsTab); m_shortcutsTab->setLayout(shortcutsLayout); shortcutsLayout->addWidget(m_shortcuts); m_tabWidget->addTab( m_shortcutsTab, QIcon(modifier + "shortcut.svg"), tr("Shortcuts")); // connect update sigslots connect(this, &ConfigWindow::updateChildren, m_filenameEditor, &FileNameEditor::updateComponents); connect(this, &ConfigWindow::updateChildren, m_visuals, &VisualsEditor::updateComponents); connect(this, &ConfigWindow::updateChildren, m_generalConfig, &GeneralConf::updateComponents); // Error indicator (this must come last) initErrorIndicator(m_visualsTab, m_visuals); initErrorIndicator(m_filenameEditorTab, m_filenameEditor); initErrorIndicator(m_generalConfigTab, m_generalConfig); initErrorIndicator(m_shortcutsTab, m_shortcuts); } void ConfigWindow::keyPressEvent(QKeyEvent* e) { if (e->key() == Qt::Key_Escape) { close(); } } void ConfigWindow::initErrorIndicator(QWidget* tab, QWidget* widget) { auto* label = new QLabel(tab); auto* btnResolve = new QPushButton(tr("Resolve"), tab); auto* btnLayout = new QHBoxLayout(); // Set up label label->setText(tr( "Configuration file has errors. Resolve them before continuing.")); label->setStyleSheet(QStringLiteral(":disabled { color: %1; }") .arg(qApp->palette().color(QPalette::Text).name())); label->setVisible(ConfigHandler().hasError()); // Set up "Show errors" button btnResolve->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed); btnLayout->addWidget(btnResolve); btnResolve->setVisible(ConfigHandler().hasError()); widget->setEnabled(!ConfigHandler().hasError()); // Add label and button to the parent widget's layout auto* layout = static_cast(tab->layout()); if (layout != nullptr) { layout->insertWidget(0, label); layout->insertLayout(1, btnLayout); } else { widget->layout()->addWidget(label); widget->layout()->addWidget(btnResolve); } // Sigslots connect( ConfigHandler::getInstance(), &ConfigHandler::error, widget, [=, this]() { widget->setEnabled(false); label->show(); btnResolve->show(); }); connect(ConfigHandler::getInstance(), &ConfigHandler::errorResolved, widget, [=]() { widget->setEnabled(true); label->hide(); btnResolve->hide(); }); connect(btnResolve, &QPushButton::clicked, this, [this]() { ConfigResolver().exec(); }); } ================================================ FILE: src/config/configwindow.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class FileNameEditor; class ShortcutsWidget; class GeneralConf; class QFileSystemWatcher; class VisualsEditor; class QWidget; class ConfigWindow : public QWidget { Q_OBJECT public: explicit ConfigWindow(QWidget* parent = nullptr); signals: void updateChildren(); protected: void keyPressEvent(QKeyEvent*); private: QTabWidget* m_tabWidget; FileNameEditor* m_filenameEditor; QWidget* m_filenameEditorTab; ShortcutsWidget* m_shortcuts; QWidget* m_shortcutsTab; GeneralConf* m_generalConfig; QWidget* m_generalConfigTab; VisualsEditor* m_visuals; QWidget* m_visualsTab; void initErrorIndicator(QWidget* tab, QWidget* widget); }; ================================================ FILE: src/config/extendedslider.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "extendedslider.h" ExtendedSlider::ExtendedSlider(QWidget* parent) : QSlider(parent) { connect(this, &ExtendedSlider::valueChanged, this, &ExtendedSlider::updateTooltip); connect( this, &ExtendedSlider::sliderMoved, this, &ExtendedSlider::fireTimer); m_timer.setSingleShot(true); connect( &m_timer, &QTimer::timeout, this, &ExtendedSlider::modificationsEnded); } int ExtendedSlider::mappedValue(int min, int max) { qreal progress = ((value() - minimum())) / static_cast(maximum() - minimum()); return min + (max - min) * progress; } void ExtendedSlider::setMapedValue(int min, int val, int max) { qreal progress = ((val - min) + 1) / static_cast(max - min); int value = minimum() + (maximum() - minimum()) * progress; setValue(value); } void ExtendedSlider::updateTooltip() { setToolTip(QString::number(value()) + "%"); } void ExtendedSlider::fireTimer() { m_timer.start(500); } ================================================ FILE: src/config/extendedslider.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include class ExtendedSlider : public QSlider { Q_OBJECT public: explicit ExtendedSlider(QWidget* parent = nullptr); int mappedValue(int min, int max); void setMapedValue(int min, int val, int max); signals: void modificationsEnded(); private slots: void updateTooltip(); void fireTimer(); private: QTimer m_timer; }; ================================================ FILE: src/config/filenameeditor.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "filenameeditor.h" #include "src/config/strftimechooserwidget.h" #include "src/utils/confighandler.h" #include "src/utils/filenamehandler.h" #include #include #include #include #include FileNameEditor::FileNameEditor(QWidget* parent) : QWidget(parent) { initWidgets(); initLayout(); } void FileNameEditor::initLayout() { m_layout = new QVBoxLayout(this); auto* infoLabel = new QLabel(tr("Edit the name of your captures:"), this); infoLabel->setFixedHeight(20); m_layout->addWidget(infoLabel); m_layout->addWidget(m_helperButtons); m_layout->addWidget(new QLabel(tr("Edit:"))); m_layout->addWidget(m_nameEditor); m_layout->addWidget(new QLabel(tr("Preview:"))); m_layout->addWidget(m_outputLabel); auto* horizLayout = new QHBoxLayout(); horizLayout->addWidget(m_saveButton); horizLayout->addWidget(m_resetButton); horizLayout->addWidget(m_clearButton); m_layout->addLayout(horizLayout); } void FileNameEditor::initWidgets() { m_nameHandler = new FileNameHandler(this); // editor m_nameEditor = new QLineEdit(this); m_nameEditor->setMaxLength(FileNameHandler::MAX_CHARACTERS); // preview m_outputLabel = new QLineEdit(this); m_outputLabel->setDisabled(true); QString foreground = this->palette().windowText().color().name(); m_outputLabel->setStyleSheet(QStringLiteral("color: %1").arg(foreground)); QPalette pal = m_outputLabel->palette(); QColor color = pal.color(QPalette::Disabled, m_outputLabel->backgroundRole()); pal.setColor(QPalette::Active, m_outputLabel->backgroundRole(), color); m_outputLabel->setPalette(pal); connect(m_nameEditor, &QLineEdit::textChanged, this, &FileNameEditor::showParsedPattern); updateComponents(); // helper buttons m_helperButtons = new StrftimeChooserWidget(this); connect(m_helperButtons, &StrftimeChooserWidget::variableEmitted, this, &FileNameEditor::addToNameEditor); // save m_saveButton = new QPushButton(tr("Save"), this); connect( m_saveButton, &QPushButton::clicked, this, &FileNameEditor::savePattern); m_saveButton->setToolTip(tr("Saves the pattern")); // restore previous saved values m_resetButton = new QPushButton(tr("Restore"), this); connect( m_resetButton, &QPushButton::clicked, this, &FileNameEditor::resetName); m_resetButton->setToolTip(tr("Restores the saved pattern")); // clear m_clearButton = new QPushButton(tr("Clear"), this); connect(m_clearButton, &QPushButton::clicked, this, [this]() { m_nameEditor->setText(ConfigHandler().filenamePatternDefault()); m_nameEditor->selectAll(); m_nameEditor->setFocus(); }); m_clearButton->setToolTip(tr("Deletes the name")); } void FileNameEditor::savePattern() { QString pattern = m_nameEditor->text(); ConfigHandler().setFilenamePattern(pattern); } void FileNameEditor::showParsedPattern(const QString& p) { QString output = m_nameHandler->parseFilename(p); m_outputLabel->setText(output); } void FileNameEditor::resetName() { m_nameEditor->setText(ConfigHandler().filenamePattern()); } void FileNameEditor::addToNameEditor(const QString& s) { m_nameEditor->setText(m_nameEditor->text() + s); m_nameEditor->setFocus(); } void FileNameEditor::updateComponents() { m_nameEditor->setText(ConfigHandler().filenamePattern()); m_outputLabel->setText(m_nameHandler->parsedPattern()); } ================================================ FILE: src/config/filenameeditor.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include class QVBoxLayout; class QLineEdit; class FileNameHandler; class QPushButton; class StrftimeChooserWidget; class FileNameEditor : public QWidget { Q_OBJECT public: explicit FileNameEditor(QWidget* parent = nullptr); private: QVBoxLayout* m_layout; QLineEdit* m_outputLabel; QLineEdit* m_nameEditor; FileNameHandler* m_nameHandler; StrftimeChooserWidget* m_helperButtons; QPushButton* m_saveButton; QPushButton* m_resetButton; QPushButton* m_clearButton; void initLayout(); void initWidgets(); public slots: void addToNameEditor(const QString& s); void updateComponents(); private slots: void savePattern(); void showParsedPattern(const QString&); void resetName(); }; ================================================ FILE: src/config/generalconf.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "generalconf.h" #include "src/core/flameshot.h" #include "src/utils/confighandler.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include GeneralConf::GeneralConf(QWidget* parent) : QWidget(parent) , m_historyConfirmationToDelete(nullptr) , m_undoLimit(nullptr) { m_layout = new QVBoxLayout(this); m_layout->setAlignment(Qt::AlignTop); // Scroll area adapts the size of the content on small screens. // It must be initialized before the checkboxes. initScrollArea(); initAutostart(); #if !defined(Q_OS_WIN) initAutoCloseIdleDaemon(); #endif initShowTrayIcon(); initShowDesktopNotification(); initShowAbortNotification(); #if !defined(DISABLE_UPDATE_CHECKER) initCheckForUpdates(); #endif initShowStartupLaunchMessage(); initShowQuitPrompt(); initAllowMultipleGuiInstances(); initSaveLastRegion(); initShowHelp(); initShowSidePanelButton(); initUseJpgForClipboard(); initCopyOnDoubleClick(); initSaveAfterCopy(); initCopyPathAfterSave(); initAntialiasingPinZoom(); initUndoLimit(); initInsecurePixelate(); #ifdef ENABLE_IMGUR initCopyAndCloseAfterUpload(); initUploadWithoutConfirmation(); initHistoryConfirmationToDelete(); initUploadHistoryMax(); initUploadClientSecret(); #endif initPredefinedColorPaletteLarge(); initShowSelectionGeometry(); m_layout->addStretch(); initShowMagnifier(); initSquareMagnifier(); initJpegQuality(); initReverseArrow(); // this has to be at the end initConfigButtons(); updateComponents(); } void GeneralConf::_updateComponents(bool allowEmptySavePath) { ConfigHandler config; m_helpMessage->setChecked(config.showHelp()); m_sidePanelButton->setChecked(config.showSidePanelButton()); m_sysNotifications->setChecked(config.showDesktopNotification()); m_abortNotifications->setChecked(config.showAbortNotification()); m_autostart->setChecked(config.startupLaunch()); m_saveAfterCopy->setChecked(config.saveAfterCopy()); m_copyPathAfterSave->setChecked(config.copyPathAfterSave()); m_antialiasingPinZoom->setChecked(config.antialiasingPinZoom()); m_useJpgForClipboard->setChecked(config.useJpgForClipboard()); m_copyOnDoubleClick->setChecked(config.copyOnDoubleClick()); #ifdef ENABLE_IMGUR m_uploadWithoutConfirmation->setChecked(config.uploadWithoutConfirmation()); m_copyURLAfterUpload->setChecked(config.copyURLAfterUpload()); m_historyConfirmationToDelete->setChecked( config.historyConfirmationToDelete()); m_uploadHistoryMax->setValue(config.uploadHistoryMax()); #endif #if !defined(DISABLE_UPDATE_CHECKER) m_checkForUpdates->setChecked(config.checkForUpdates()); #endif m_allowMultipleGuiInstances->setChecked(config.allowMultipleGuiInstances()); m_showMagnifier->setChecked(config.showMagnifier()); m_squareMagnifier->setChecked(config.squareMagnifier()); m_saveLastRegion->setChecked(config.saveLastRegion()); m_reverseArrow->setChecked(config.reverseArrow()); #if !defined(Q_OS_WIN) m_autoCloseIdleDaemon->setChecked(config.autoCloseIdleDaemon()); #endif m_predefinedColorPaletteLarge->setChecked( config.predefinedColorPaletteLarge()); m_showStartupLaunchMessage->setChecked(config.showStartupLaunchMessage()); m_showQuitPrompt->setChecked(config.showQuitPrompt()); m_screenshotPathFixedCheck->setChecked(config.savePathFixed()); m_undoLimit->setValue(config.undoLimit()); if (allowEmptySavePath || !config.savePath().isEmpty()) { m_savePath->setText(config.savePath()); } #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) m_showTray->setChecked(!config.disabledTrayIcon()); #endif } void GeneralConf::updateComponents() { _updateComponents(false); } void GeneralConf::saveLastRegion(bool checked) { ConfigHandler().setSaveLastRegion(checked); } void GeneralConf::showHelpChanged(bool checked) { ConfigHandler().setShowHelp(checked); } void GeneralConf::showSidePanelButtonChanged(bool checked) { ConfigHandler().setShowSidePanelButton(checked); } void GeneralConf::showDesktopNotificationChanged(bool checked) { ConfigHandler().setShowDesktopNotification(checked); } void GeneralConf::showAbortNotificationChanged(bool checked) { ConfigHandler().setShowAbortNotification(checked); } #if !defined(DISABLE_UPDATE_CHECKER) void GeneralConf::checkForUpdatesChanged(bool checked) { ConfigHandler().setCheckForUpdates(checked); } #endif void GeneralConf::allowMultipleGuiInstancesChanged(bool checked) { ConfigHandler().setAllowMultipleGuiInstances(checked); } void GeneralConf::autoCloseIdleDaemonChanged(bool checked) { ConfigHandler().setAutoCloseIdleDaemon(checked); } void GeneralConf::autostartChanged(bool checked) { ConfigHandler().setStartupLaunch(checked); } void GeneralConf::importConfiguration() { QString fileName = QFileDialog::getOpenFileName(this, tr("Import")); if (fileName.isEmpty()) { return; } QFile file(fileName); if (!file.open(QFile::ReadOnly)) { QMessageBox::about(this, tr("Error"), tr("Unable to read file.")); return; } QStringDecoder decoder(QStringDecoder::System); QString text = decoder(file.readAll()); file.close(); QFile config(ConfigHandler().configFilePath()); if (!config.open(QFile::WriteOnly)) { QMessageBox::about(this, tr("Error"), tr("Unable to write file.")); return; } QStringEncoder encoder(QStringEncoder::System); config.write(encoder(text)); config.close(); } void GeneralConf::exportFileConfiguration() { QString defaultFileName = QSettings().fileName(); QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), defaultFileName); // Cancel button or target same as source if (fileName.isNull() || fileName == defaultFileName) { return; } QFile targetFile(fileName); if (targetFile.exists()) { targetFile.remove(); } bool ok = QFile::copy(ConfigHandler().configFilePath(), fileName); if (!ok) { QMessageBox::about(this, tr("Error"), tr("Unable to write file.")); } } void GeneralConf::resetConfiguration() { QMessageBox::StandardButton reply; reply = QMessageBox::question( this, tr("Confirm Reset"), tr("Are you sure you want to reset the configuration?"), QMessageBox::Yes | QMessageBox::No); if (reply == QMessageBox::Yes) { m_savePath->setText( QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); ConfigHandler().setDefaultSettings(); _updateComponents(true); } } void GeneralConf::initScrollArea() { m_scrollArea = new QScrollArea(this); m_layout->addWidget(m_scrollArea); auto* content = new QWidget(m_scrollArea); m_scrollArea->setWidget(content); m_scrollArea->setWidgetResizable(true); m_scrollArea->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); content->setObjectName("content"); m_scrollArea->setObjectName("scrollArea"); m_scrollArea->setStyleSheet( "#content, #scrollArea { background: transparent; border: 0px; }"); m_scrollAreaLayout = new QVBoxLayout(content); m_scrollAreaLayout->setContentsMargins(0, 0, 20, 0); } void GeneralConf::initShowHelp() { m_helpMessage = new QCheckBox(tr("Show help message"), this); m_helpMessage->setToolTip(tr("Show the help message at the beginning " "in the capture mode")); m_scrollAreaLayout->addWidget(m_helpMessage); connect( m_helpMessage, &QCheckBox::clicked, this, &GeneralConf::showHelpChanged); } void GeneralConf::initSaveLastRegion() { m_saveLastRegion = new QCheckBox(tr("Use last region for GUI mode"), this); m_saveLastRegion->setToolTip( tr("Use the last region as the default selection for the next screenshot " "in GUI mode")); m_scrollAreaLayout->addWidget(m_saveLastRegion); connect(m_saveLastRegion, &QCheckBox::clicked, this, &GeneralConf::saveLastRegion); } void GeneralConf::initShowSidePanelButton() { m_sidePanelButton = new QCheckBox(tr("Show the side panel button"), this); m_sidePanelButton->setToolTip( tr("Show the side panel toggle button in the capture mode")); m_scrollAreaLayout->addWidget(m_sidePanelButton); connect(m_sidePanelButton, &QCheckBox::clicked, this, &GeneralConf::showSidePanelButtonChanged); } void GeneralConf::initShowDesktopNotification() { m_sysNotifications = new QCheckBox(tr("Show desktop notifications"), this); m_sysNotifications->setToolTip(tr("Enable desktop notifications")); m_scrollAreaLayout->addWidget(m_sysNotifications); connect(m_sysNotifications, &QCheckBox::clicked, this, &GeneralConf::showDesktopNotificationChanged); } void GeneralConf::initShowAbortNotification() { m_abortNotifications = new QCheckBox(tr("Show abort notifications"), this); m_abortNotifications->setToolTip(tr("Enable abort notifications")); m_scrollAreaLayout->addWidget(m_abortNotifications); connect(m_abortNotifications, &QCheckBox::clicked, this, &GeneralConf::showAbortNotificationChanged); } void GeneralConf::initShowTrayIcon() { #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) m_showTray = new QCheckBox(tr("Show tray icon"), this); m_showTray->setToolTip(tr("Show icon in the system tray")); m_scrollAreaLayout->addWidget(m_showTray); connect(m_showTray, &QCheckBox::clicked, this, [](bool checked) { ConfigHandler().setDisabledTrayIcon(!checked); }); #endif } void GeneralConf::initHistoryConfirmationToDelete() { m_historyConfirmationToDelete = new QCheckBox( tr("Confirmation required to delete screenshot from the latest uploads"), this); m_historyConfirmationToDelete->setToolTip( tr("Ask for confirmation to delete screenshot from the latest uploads")); m_scrollAreaLayout->addWidget(m_historyConfirmationToDelete); connect(m_historyConfirmationToDelete, &QCheckBox::clicked, this, &GeneralConf::historyConfirmationToDelete); } void GeneralConf::initConfigButtons() { auto* buttonLayout = new QHBoxLayout(); auto* box = new QGroupBox(tr("Configuration File")); box->setFlat(true); box->setLayout(buttonLayout); m_layout->addWidget(box); m_exportButton = new QPushButton(tr("Export")); buttonLayout->addWidget(m_exportButton); connect(m_exportButton, &QPushButton::clicked, this, &GeneralConf::exportFileConfiguration); m_importButton = new QPushButton(tr("Import")); buttonLayout->addWidget(m_importButton); connect(m_importButton, &QPushButton::clicked, this, &GeneralConf::importConfiguration); m_resetButton = new QPushButton(tr("Reset")); buttonLayout->addWidget(m_resetButton); connect(m_resetButton, &QPushButton::clicked, this, &GeneralConf::resetConfiguration); } #if !defined(DISABLE_UPDATE_CHECKER) void GeneralConf::initCheckForUpdates() { m_checkForUpdates = new QCheckBox(tr("Automatic check for updates"), this); m_checkForUpdates->setToolTip(tr("Check for updates automatically")); m_scrollAreaLayout->addWidget(m_checkForUpdates); connect(m_checkForUpdates, &QCheckBox::clicked, this, &GeneralConf::checkForUpdatesChanged); } #endif void GeneralConf::initAllowMultipleGuiInstances() { m_allowMultipleGuiInstances = new QCheckBox( tr("Allow multiple flameshot GUI instances simultaneously"), this); m_allowMultipleGuiInstances->setToolTip(tr( "This allows you to take screenshots of Flameshot itself for example")); m_scrollAreaLayout->addWidget(m_allowMultipleGuiInstances); connect(m_allowMultipleGuiInstances, &QCheckBox::clicked, this, &GeneralConf::allowMultipleGuiInstancesChanged); } void GeneralConf::initAutoCloseIdleDaemon() { m_autoCloseIdleDaemon = new QCheckBox( tr("Automatically unload from memory when it is not needed"), this); m_autoCloseIdleDaemon->setToolTip(tr( "Automatically close daemon (background process) when it is not needed")); m_scrollAreaLayout->addWidget(m_autoCloseIdleDaemon); connect(m_autoCloseIdleDaemon, &QCheckBox::clicked, this, &GeneralConf::autoCloseIdleDaemonChanged); } void GeneralConf::initAutostart() { m_autostart = new QCheckBox(tr("Launch in background at startup"), this); m_autostart->setToolTip(tr( "Launch Flameshot daemon (background process) when computer is booted")); m_scrollAreaLayout->addWidget(m_autostart); connect( m_autostart, &QCheckBox::clicked, this, &GeneralConf::autostartChanged); } void GeneralConf::initShowStartupLaunchMessage() { m_showStartupLaunchMessage = new QCheckBox(tr("Show welcome message on launch"), this); ConfigHandler config; m_showStartupLaunchMessage->setToolTip( tr("Show the welcome message box in the middle of the screen while " "taking a screenshot")); m_scrollAreaLayout->addWidget(m_showStartupLaunchMessage); connect(m_showStartupLaunchMessage, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setShowStartupLaunchMessage(checked); }); } void GeneralConf::initShowQuitPrompt() { m_showQuitPrompt = new QCheckBox(tr("Ask before quit capture"), this); ConfigHandler config; m_showQuitPrompt->setToolTip( tr("Show the confirmation prompt before ESC quit")); m_scrollAreaLayout->addWidget(m_showQuitPrompt); connect(m_showQuitPrompt, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setShowQuitPrompt(checked); }); } void GeneralConf::initPredefinedColorPaletteLarge() { m_predefinedColorPaletteLarge = new QCheckBox(tr("Use large predefined color palette"), this); m_predefinedColorPaletteLarge->setToolTip( tr("Use a large predefined color palette")); m_scrollAreaLayout->addWidget(m_predefinedColorPaletteLarge); connect( m_predefinedColorPaletteLarge, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setPredefinedColorPaletteLarge(checked); }); } void GeneralConf::initCopyOnDoubleClick() { m_copyOnDoubleClick = new QCheckBox(tr("Copy on double click"), this); m_copyOnDoubleClick->setToolTip( tr("Enable Copy to clipboard on Double Click")); m_scrollAreaLayout->addWidget(m_copyOnDoubleClick); connect(m_copyOnDoubleClick, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setCopyOnDoubleClick(checked); }); } void GeneralConf::initCopyAndCloseAfterUpload() { m_copyURLAfterUpload = new QCheckBox(tr("Copy URL after upload"), this); m_copyURLAfterUpload->setToolTip( tr("Copy URL after uploading was successful")); m_scrollAreaLayout->addWidget(m_copyURLAfterUpload); connect(m_copyURLAfterUpload, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setCopyURLAfterUpload(checked); }); } void GeneralConf::initSaveAfterCopy() { m_saveAfterCopy = new QCheckBox(tr("Save image after copy"), this); m_saveAfterCopy->setToolTip( tr("After copying the screenshot, save it to a file as well")); m_scrollAreaLayout->addWidget(m_saveAfterCopy); connect(m_saveAfterCopy, &QCheckBox::clicked, this, &GeneralConf::saveAfterCopyChanged); auto* box = new QGroupBox(tr("Save Path")); box->setFlat(true); m_layout->addWidget(box); auto* vboxLayout = new QVBoxLayout(); box->setLayout(vboxLayout); auto* pathLayout = new QHBoxLayout(); QString path = ConfigHandler().savePath(); m_savePath = new QLineEdit(path, this); m_savePath->setDisabled(true); QString foreground = this->palette().windowText().color().name(); m_savePath->setStyleSheet(QStringLiteral("color: %1").arg(foreground)); pathLayout->addWidget(m_savePath); m_changeSaveButton = new QPushButton(tr("Change..."), this); pathLayout->addWidget(m_changeSaveButton); connect(m_changeSaveButton, &QPushButton::clicked, this, &GeneralConf::changeSavePath); m_screenshotPathFixedCheck = new QCheckBox(tr("Use fixed path for screenshots to save"), this); connect(m_screenshotPathFixedCheck, &QCheckBox::toggled, this, &GeneralConf::togglePathFixed); vboxLayout->addLayout(pathLayout); vboxLayout->addWidget(m_screenshotPathFixedCheck); auto* extensionLayout = new QHBoxLayout(); extensionLayout->addWidget( new QLabel(tr("Preferred save file extension:"))); m_setSaveAsFileExtension = new QComboBox(this); QStringList imageFormatList; for (const auto& mimeType : QImageWriter::supportedImageFormats()) imageFormatList.append(mimeType); m_setSaveAsFileExtension->addItems(imageFormatList); int currentIndex = m_setSaveAsFileExtension->findText(ConfigHandler().saveAsFileExtension()); m_setSaveAsFileExtension->setCurrentIndex(currentIndex); connect(m_setSaveAsFileExtension, &QComboBox::currentTextChanged, this, &GeneralConf::setSaveAsFileExtension); extensionLayout->addWidget(m_setSaveAsFileExtension); vboxLayout->addLayout(extensionLayout); } void GeneralConf::historyConfirmationToDelete(bool checked) { ConfigHandler().setHistoryConfirmationToDelete(checked); } void GeneralConf::initUploadHistoryMax() { auto* box = new QGroupBox(tr("Latest Uploads Max Size")); box->setFlat(true); m_layout->addWidget(box); auto* vboxLayout = new QVBoxLayout(); box->setLayout(vboxLayout); m_uploadHistoryMax = new QSpinBox(this); m_uploadHistoryMax->setMaximum(50); QString foreground = this->palette().windowText().color().name(); m_uploadHistoryMax->setStyleSheet( QStringLiteral("color: %1").arg(foreground)); connect(m_uploadHistoryMax, static_cast(&QSpinBox::valueChanged), this, &GeneralConf::uploadHistoryMaxChanged); vboxLayout->addWidget(m_uploadHistoryMax); } void GeneralConf::initUploadClientSecret() { auto* box = new QGroupBox(tr("Imgur Application Client ID")); box->setFlat(true); m_layout->addWidget(box); auto* vboxLayout = new QVBoxLayout(); box->setLayout(vboxLayout); m_uploadClientKey = new QLineEdit(this); QString foreground = this->palette().windowText().color().name(); m_uploadClientKey->setStyleSheet( QStringLiteral("color: %1").arg(foreground)); m_uploadClientKey->setText(ConfigHandler().uploadClientSecret()); connect(m_uploadClientKey, &QLineEdit::editingFinished, this, &GeneralConf::uploadClientKeyEdited); vboxLayout->addWidget(m_uploadClientKey); } void GeneralConf::uploadClientKeyEdited() { ConfigHandler().setUploadClientSecret(m_uploadClientKey->text()); } void GeneralConf::uploadHistoryMaxChanged(int max) { ConfigHandler().setUploadHistoryMax(max); } void GeneralConf::initUndoLimit() { auto* box = new QGroupBox(tr("Undo limit")); box->setFlat(true); m_layout->addWidget(box); auto* vboxLayout = new QVBoxLayout(); box->setLayout(vboxLayout); m_undoLimit = new QSpinBox(this); m_undoLimit->setMinimum(1); m_undoLimit->setMaximum(999); QString foreground = this->palette().windowText().color().name(); m_undoLimit->setStyleSheet(QStringLiteral("color: %1").arg(foreground)); connect(m_undoLimit, static_cast(&QSpinBox::valueChanged), this, &GeneralConf::undoLimit); vboxLayout->addWidget(m_undoLimit); } void GeneralConf::undoLimit(int limit) { ConfigHandler().setUndoLimit(limit); } void GeneralConf::initUseJpgForClipboard() { m_useJpgForClipboard = new QCheckBox(tr("Use JPG format for clipboard (PNG default)"), this); #ifdef Q_OS_WIN ConfigHandler().setUseJpgForClipboard(false); m_useJpgForClipboard->setVisible(false); #else m_useJpgForClipboard->setToolTip( tr("Use lossy JPG format for clipboard (lossless PNG default)")); connect(m_useJpgForClipboard, &QCheckBox::clicked, this, &GeneralConf::useJpgForClipboardChanged); #endif m_scrollAreaLayout->addWidget(m_useJpgForClipboard); } void GeneralConf::saveAfterCopyChanged(bool checked) { ConfigHandler().setSaveAfterCopy(checked); } void GeneralConf::changeSavePath() { QString path = ConfigHandler().savePath(); path = chooseFolder(path); if (!path.isEmpty()) { m_savePath->setText(path); ConfigHandler().setSavePath(path); } } void GeneralConf::initCopyPathAfterSave() { m_copyPathAfterSave = new QCheckBox(tr("Copy file path after save"), this); m_copyPathAfterSave->setToolTip(tr("Copy the file path to clipboard after " "the file is saved")); m_scrollAreaLayout->addWidget(m_copyPathAfterSave); connect(m_copyPathAfterSave, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setCopyPathAfterSave(checked); }); } void GeneralConf::initAntialiasingPinZoom() { m_antialiasingPinZoom = new QCheckBox(tr("Anti-aliasing image when zoom the pinned image"), this); m_antialiasingPinZoom->setToolTip( tr("After zooming the pinned image, should the image get smoothened or " "stay pixelated")); m_scrollAreaLayout->addWidget(m_antialiasingPinZoom); connect(m_antialiasingPinZoom, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setAntialiasingPinZoom(checked); }); } void GeneralConf::initUploadWithoutConfirmation() { m_uploadWithoutConfirmation = new QCheckBox(tr("Upload image without confirmation"), this); m_uploadWithoutConfirmation->setToolTip( tr("Upload image without confirmation")); m_scrollAreaLayout->addWidget(m_uploadWithoutConfirmation); connect(m_uploadWithoutConfirmation, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setUploadWithoutConfirmation(checked); }); } const QString GeneralConf::chooseFolder(const QString& pathDefault) { QString path; if (pathDefault.isEmpty()) { path = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); } path = QFileDialog::getExistingDirectory( this, tr("Choose a Folder"), path, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (path.isEmpty()) { return path; } if (!QFileInfo(path).isWritable()) { QMessageBox::about( this, tr("Error"), tr("Unable to write to directory.")); return QString(); } return path; } void GeneralConf::initShowMagnifier() { m_showMagnifier = new QCheckBox(tr("Show magnifier"), this); m_showMagnifier->setToolTip(tr("Enable a magnifier while selecting the " "screenshot area")); m_scrollAreaLayout->addWidget(m_showMagnifier); connect(m_showMagnifier, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setShowMagnifier(checked); }); } void GeneralConf::initSquareMagnifier() { m_squareMagnifier = new QCheckBox(tr("Square shaped magnifier"), this); m_squareMagnifier->setToolTip(tr("Make the magnifier to be square-shaped")); m_scrollAreaLayout->addWidget(m_squareMagnifier); connect(m_squareMagnifier, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setSquareMagnifier(checked); }); } void GeneralConf::initShowSelectionGeometry() { auto* tobox = new QHBoxLayout(); int timeout = ConfigHandler().value("showSelectionGeometryHideTime").toInt(); m_xywhTimeout = new QSpinBox(); m_xywhTimeout->setRange(0, INT_MAX); m_xywhTimeout->setToolTip( tr("Milliseconds before geometry display hides; 0 means do not hide")); m_xywhTimeout->setValue(timeout); tobox->addWidget(m_xywhTimeout); tobox->addWidget(new QLabel(tr("Set geometry display timeout (ms)"))); m_scrollAreaLayout->addLayout(tobox); connect(m_xywhTimeout, static_cast(&QSpinBox::valueChanged), this, &GeneralConf::setSelGeoHideTime); auto* box = new QGroupBox(tr("Selection Geometry Display")); box->setFlat(true); m_layout->addWidget(box); auto* vboxLayout = new QVBoxLayout(); box->setLayout(vboxLayout); auto* selGeoLayout = new QHBoxLayout(); selGeoLayout->addWidget(new QLabel(tr("Display Location"))); m_selectGeometryLocation = new QComboBox(this); m_selectGeometryLocation->addItem(tr("None"), GeneralConf::xywh_none); m_selectGeometryLocation->addItem(tr("Top Left"), GeneralConf::xywh_top_left); m_selectGeometryLocation->addItem(tr("Top Right"), GeneralConf::xywh_top_right); m_selectGeometryLocation->addItem(tr("Bottom Left"), GeneralConf::xywh_bottom_left); m_selectGeometryLocation->addItem(tr("Bottom Right"), GeneralConf::xywh_bottom_right); m_selectGeometryLocation->addItem(tr("Center"), GeneralConf::xywh_center); // pick up int from config and use findData int pos = ConfigHandler().value("showSelectionGeometry").toInt(); m_selectGeometryLocation->setCurrentIndex( m_selectGeometryLocation->findData(pos)); connect( m_selectGeometryLocation, static_cast(&QComboBox::currentIndexChanged), this, &GeneralConf::setGeometryLocation); selGeoLayout->addWidget(m_selectGeometryLocation); vboxLayout->addLayout(selGeoLayout); vboxLayout->addStretch(); } void GeneralConf::initJpegQuality() { auto* tobox = new QHBoxLayout(); int quality = ConfigHandler().value("jpegQuality").toInt(); m_jpegQuality = new QSpinBox(); m_jpegQuality->setRange(0, 100); m_jpegQuality->setToolTip(tr("Quality range of 0-100; Higher number is " "better quality and larger file size")); m_jpegQuality->setValue(quality); tobox->addWidget(m_jpegQuality); tobox->addWidget(new QLabel(tr("JPEG Quality"))); m_scrollAreaLayout->addLayout(tobox); connect(m_jpegQuality, static_cast(&QSpinBox::valueChanged), this, &GeneralConf::setJpegQuality); } void GeneralConf::initReverseArrow() { m_reverseArrow = new QCheckBox(tr("Reverse arrow"), this); m_reverseArrow->setToolTip(tr("Draw the arrow head first")); m_scrollAreaLayout->addWidget(m_reverseArrow); connect( m_reverseArrow, &QCheckBox::clicked, this, &GeneralConf::setReverseArrow); } void GeneralConf::initInsecurePixelate() { m_insecurePixelate = new QCheckBox(tr("Insecure Pixelate"), this); m_insecurePixelate->setToolTip( tr("Draw the pixelation effect in an insecure but more asethetic way.")); m_insecurePixelate->setChecked(ConfigHandler().insecurePixelate()); m_scrollAreaLayout->addWidget(m_insecurePixelate); connect(m_insecurePixelate, &QCheckBox::clicked, this, &GeneralConf::setInsecurePixelate); } void GeneralConf::setSelGeoHideTime(int v) { ConfigHandler().setValue("showSelectionGeometryHideTime", v); } void GeneralConf::setJpegQuality(int v) { ConfigHandler().setJpegQuality(v); } void GeneralConf::setGeometryLocation(int index) { ConfigHandler().setValue("showSelectionGeometry", m_selectGeometryLocation->itemData(index)); } void GeneralConf::togglePathFixed() { ConfigHandler().setSavePathFixed(m_screenshotPathFixedCheck->isChecked()); } void GeneralConf::setSaveAsFileExtension(const QString& extension) { ConfigHandler().setSaveAsFileExtension(extension); } void GeneralConf::useJpgForClipboardChanged(bool checked) { ConfigHandler().setUseJpgForClipboard(checked); } void GeneralConf::setReverseArrow(bool checked) { ConfigHandler().setReverseArrow(checked); } void GeneralConf::setInsecurePixelate(bool checked) { ConfigHandler().setInsecurePixelate(checked); } ================================================ FILE: src/config/generalconf.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include class QVBoxLayout; class QCheckBox; class QPushButton; class QLabel; class QLineEdit; class QSpinBox; class QComboBox; class GeneralConf : public QWidget { Q_OBJECT public: explicit GeneralConf(QWidget* parent = nullptr); enum xywh_position { xywh_none = 0, xywh_top_left = 1, xywh_bottom_left = 2, xywh_top_right = 3, xywh_bottom_right = 4, xywh_center = 5 }; public slots: void updateComponents(); private slots: void showHelpChanged(bool checked); void saveLastRegion(bool checked); void showSidePanelButtonChanged(bool checked); void showDesktopNotificationChanged(bool checked); void showAbortNotificationChanged(bool checked); #if !defined(DISABLE_UPDATE_CHECKER) void checkForUpdatesChanged(bool checked); #endif void allowMultipleGuiInstancesChanged(bool checked); void autoCloseIdleDaemonChanged(bool checked); void autostartChanged(bool checked); void historyConfirmationToDelete(bool checked); void uploadHistoryMaxChanged(int max); void undoLimit(int limit); void saveAfterCopyChanged(bool checked); void changeSavePath(); void importConfiguration(); void exportFileConfiguration(); void resetConfiguration(); void togglePathFixed(); void uploadClientKeyEdited(); void useJpgForClipboardChanged(bool checked); void setSaveAsFileExtension(const QString& extension); void setGeometryLocation(int index); void setSelGeoHideTime(int v); void setJpegQuality(int v); void setReverseArrow(bool checked); void setInsecurePixelate(bool checked); private: const QString chooseFolder(const QString& currentPath = ""); void initAllowMultipleGuiInstances(); void initAntialiasingPinZoom(); void initAutoCloseIdleDaemon(); void initAutostart(); #if !defined(DISABLE_UPDATE_CHECKER) void initCheckForUpdates(); #endif void initConfigButtons(); void initCopyAndCloseAfterUpload(); void initCopyOnDoubleClick(); void initCopyPathAfterSave(); void initHistoryConfirmationToDelete(); void initPredefinedColorPaletteLarge(); void initSaveAfterCopy(); void initScrollArea(); void initShowDesktopNotification(); void initShowAbortNotification(); void initShowHelp(); void initShowMagnifier(); void initShowQuitPrompt(); void initShowSidePanelButton(); void initShowStartupLaunchMessage(); void initShowTrayIcon(); void initSquareMagnifier(); void initUndoLimit(); void initUploadWithoutConfirmation(); void initUseJpgForClipboard(); void initUploadHistoryMax(); void initUploadClientSecret(); void initSaveLastRegion(); void initShowSelectionGeometry(); void initJpegQuality(); void initReverseArrow(); void initInsecurePixelate(); void _updateComponents(bool allowEmptySavePath); // class members QVBoxLayout* m_layout; QVBoxLayout* m_scrollAreaLayout; QScrollArea* m_scrollArea; QCheckBox* m_sysNotifications; QCheckBox* m_abortNotifications; QCheckBox* m_showTray; QCheckBox* m_helpMessage; QCheckBox* m_sidePanelButton; #if !defined(DISABLE_UPDATE_CHECKER) QCheckBox* m_checkForUpdates; #endif QCheckBox* m_allowMultipleGuiInstances; QCheckBox* m_autoCloseIdleDaemon; QCheckBox* m_autostart; QCheckBox* m_showStartupLaunchMessage; QCheckBox* m_showQuitPrompt; QCheckBox* m_copyURLAfterUpload; QCheckBox* m_copyPathAfterSave; QCheckBox* m_antialiasingPinZoom; QCheckBox* m_saveLastRegion; QCheckBox* m_uploadWithoutConfirmation; QPushButton* m_importButton; QPushButton* m_exportButton; QPushButton* m_resetButton; QCheckBox* m_saveAfterCopy; QLineEdit* m_savePath; QLineEdit* m_uploadClientKey; QPushButton* m_changeSaveButton; QCheckBox* m_screenshotPathFixedCheck; QCheckBox* m_historyConfirmationToDelete; QCheckBox* m_useJpgForClipboard; QSpinBox* m_uploadHistoryMax; QSpinBox* m_undoLimit; QComboBox* m_setSaveAsFileExtension; QCheckBox* m_predefinedColorPaletteLarge; QCheckBox* m_showMagnifier; QCheckBox* m_squareMagnifier; QCheckBox* m_copyOnDoubleClick; QCheckBox* m_showSelectionGeometry; QComboBox* m_selectGeometryLocation; QSpinBox* m_xywhTimeout; QSpinBox* m_jpegQuality; QCheckBox* m_reverseArrow; QCheckBox* m_insecurePixelate; }; ================================================ FILE: src/config/setshortcutwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors #include "setshortcutwidget.h" #include "src/utils/globalvalues.h" #include #include #include #include #include #include SetShortcutDialog::SetShortcutDialog(QDialog* parent, const QString& shortcutName) : QDialog(parent) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowIcon(QIcon(GlobalValues::iconPath())); setWindowTitle(tr("Set Shortcut")); m_ks = QKeySequence(); m_layout = new QVBoxLayout(this); m_layout->setAlignment(Qt::AlignHCenter); auto* infoTop = new QLabel(tr("Enter new shortcut to change ")); infoTop->setMargin(10); infoTop->setAlignment(Qt::AlignCenter); m_layout->addWidget(infoTop); auto* infoIcon = new QLabel(); infoIcon->setAlignment(Qt::AlignCenter); infoIcon->setPixmap(QPixmap(":/img/app/keyboard.svg")); m_layout->addWidget(infoIcon); m_layout->addWidget(infoIcon); QString msg = ""; #if defined(Q_OS_MACOS) msg = tr( "Press Esc to cancel or ⌘+Backspace to disable the keyboard shortcut."); #else msg = tr("Press Esc to cancel or Backspace to disable the keyboard shortcut."); #endif auto restartMessageAdded = false; if (shortcutName == "TAKE_SCREENSHOT" && restartMessageAdded == false) { msg += "\n" + tr("Flameshot must be restarted for changes to take effect."); restartMessageAdded = true; } if (shortcutName == "SCREENSHOT_HISTORY" && restartMessageAdded == false) { msg += "\n" + tr("Flameshot must be restarted for changes to take effect."); restartMessageAdded = true; } auto* infoBottom = new QLabel(msg); infoBottom->setMargin(10); infoBottom->setAlignment(Qt::AlignCenter); m_layout->addWidget(infoBottom); // 0ms Delay: Event loop waits until after show(); widget fully initialized QTimer::singleShot(0, this, &SetShortcutDialog::startCapture); } void SetShortcutDialog::startCapture() { grabKeyboard(); // Call AFTER show()! setFocus(); } const QKeySequence& SetShortcutDialog::shortcut() { return m_ks; } void SetShortcutDialog::keyPressEvent(QKeyEvent* ke) { Qt::KeyboardModifiers mods = ke->modifiers(); if (mods & Qt::ShiftModifier) { m_modifier += "Shift+"; } if (mods & Qt::ControlModifier) { m_modifier += "Ctrl+"; } if (mods & Qt::AltModifier) { m_modifier += "Alt+"; } // ke->key() == Qt::Key_Meta required on Windows to grab Win key if (ke->modifiers() & Qt::MetaModifier || ke->key() == Qt::Key_Meta) { m_modifier += "Meta+"; } QString key = QKeySequence(ke->key()).toString(); m_ks = QKeySequence(m_modifier + key); } void SetShortcutDialog::keyReleaseEvent(QKeyEvent* event) { if (m_ks == QKeySequence(Qt::Key_Escape)) { reject(); } accept(); } void SetShortcutDialog::accept() { releaseKeyboard(); QDialog::accept(); } void SetShortcutDialog::reject() { releaseKeyboard(); QDialog::reject(); } ================================================ FILE: src/config/setshortcutwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors #ifndef SETSHORTCUTWIDGET_H #define SETSHORTCUTWIDGET_H #include #include #include class QVBoxLayout; class SetShortcutDialog : public QDialog { Q_OBJECT public: explicit SetShortcutDialog(QDialog* parent = nullptr, const QString& shortcutName = ""); const QKeySequence& shortcut(); public: void keyPressEvent(QKeyEvent*) override; void keyReleaseEvent(QKeyEvent* event) override; private slots: void accept() override; void reject() override; private: void startCapture(); QVBoxLayout* m_layout; QString m_modifier; QKeySequence m_ks; }; #endif // SETSHORTCUTWIDGET_H ================================================ FILE: src/config/shortcutswidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors #include "shortcutswidget.h" #include "capturetool.h" #include "setshortcutwidget.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/globalvalues.h" #include "toolfactory.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include ShortcutsWidget::ShortcutsWidget(QWidget* parent) : QWidget(parent) { setAttribute(Qt::WA_DeleteOnClose); setWindowIcon(QIcon(GlobalValues::iconPath())); setWindowTitle(tr("Hot Keys")); QRect position = frameGeometry(); QScreen* screen = QGuiAppCurrentScreen().currentScreen(); position.moveCenter(screen->availableGeometry().center()); move(position.topLeft()); m_layout = new QVBoxLayout(this); m_layout->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); #if defined(Q_OS_WIN) checkPrintScreenForcesSnipping(); #endif initInfoTable(); connect(ConfigHandler::getInstance(), &ConfigHandler::fileChanged, this, &ShortcutsWidget::populateInfoTable); #if defined(Q_OS_WIN) initMsScreenclipCheckbox(); #endif show(); } void ShortcutsWidget::initInfoTable() { m_table = new QTableWidget(this); m_table->setToolTip(tr("Available shortcuts in the screen capture mode.")); m_layout->addWidget(m_table); m_table->setColumnCount(2); m_table->setSelectionMode(QAbstractItemView::NoSelection); m_table->setFocusPolicy(Qt::NoFocus); m_table->verticalHeader()->hide(); // header creation QStringList names; names << tr("Description") << tr("Key"); m_table->setHorizontalHeaderLabels(names); connect(m_table, &QTableWidget::cellClicked, this, &ShortcutsWidget::onShortcutCellClicked); // populate with dynamic data populateInfoTable(); // adjust size m_table->horizontalHeader()->setMinimumSectionSize(200); m_table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); m_table->horizontalHeader()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_table->resizeColumnsToContents(); m_table->resizeRowsToContents(); } void ShortcutsWidget::populateInfoTable() { loadShortcuts(); m_table->setRowCount(m_shortcuts.size()); // add content for (int i = 0; i < m_shortcuts.size(); ++i) { const auto current_shortcut = m_shortcuts.at(i); const auto identifier = current_shortcut.at(0); const auto description = current_shortcut.at(1); const auto key_sequence = current_shortcut.at(2); m_table->setItem(i, 0, new QTableWidgetItem(description)); #if defined(Q_OS_MACOS) auto* item = new QTableWidgetItem(nativeOSHotKeyText(key_sequence)); #else QTableWidgetItem* item = new QTableWidgetItem(key_sequence); #endif item->setTextAlignment(Qt::AlignCenter); m_table->setItem(i, 1, item); if (identifier.isEmpty()) { QFont font; font.setBold(true); item->setFont(font); item->setFlags(item->flags() ^ Qt::ItemIsEnabled); m_table->item(i, 1)->setFont(font); } } // Read-only table items for (int x = 0; x < m_table->rowCount(); ++x) { for (int y = 0; y < m_table->columnCount(); ++y) { QTableWidgetItem* item = m_table->item(x, y); item->setFlags(item->flags() ^ Qt::ItemIsEditable); } } } void ShortcutsWidget::onShortcutCellClicked(int row, int col) { if (col == 1) { // Ignore non-changable shortcuts if (Qt::ItemIsEnabled != (Qt::ItemIsEnabled & m_table->item(row, col)->flags())) { return; } QString shortcutName = m_shortcuts.at(row).at(0); auto* setShortcutDialog = new SetShortcutDialog(nullptr, shortcutName); if (0 != setShortcutDialog->exec()) { QKeySequence shortcutValue = setShortcutDialog->shortcut(); // set no shortcut is Backspace #if defined(Q_OS_MACOS) if (shortcutValue == QKeySequence(Qt::CTRL | Qt::Key_Backspace)) { shortcutValue = QKeySequence(""); } #else if (shortcutValue == QKeySequence(Qt::Key_Backspace)) { shortcutValue = QKeySequence(""); } #endif if (m_config.setShortcut(shortcutName, shortcutValue.toString())) { populateInfoTable(); } } delete setShortcutDialog; } } void ShortcutsWidget::loadShortcuts() { m_shortcuts.clear(); auto buttonTypes = CaptureToolButton::getIterableButtonTypes(); // get shortcuts names from capture buttons for (const CaptureTool::Type& t : buttonTypes) { CaptureTool* tool = ToolFactory().CreateTool(t); QString shortcutName = QVariant::fromValue(t).toString(); appendShortcut(shortcutName, tool->description()); if (shortcutName == "TYPE_COPY") { if (m_config.copyOnDoubleClick()) { m_shortcuts << (QStringList() << "" << tool->description() << tr("Left Double-click")); } } delete tool; } // additional tools that don't have their own buttons appendShortcut("TYPE_TOGGLE_PANEL", tr("Toggle side panel")); appendShortcut("TYPE_GRAB_COLOR", tr("Grab a color from the screen")); appendShortcut("TYPE_RESIZE_LEFT", tr("Resize selection left 1px")); appendShortcut("TYPE_RESIZE_RIGHT", tr("Resize selection right 1px")); appendShortcut("TYPE_RESIZE_UP", tr("Resize selection up 1px")); appendShortcut("TYPE_RESIZE_DOWN", tr("Resize selection down 1px")); appendShortcut("TYPE_SYM_RESIZE_LEFT", tr("Symmetrically decrease width by 2px")); appendShortcut("TYPE_SYM_RESIZE_RIGHT", tr("Symmetrically increase width by 2px")); appendShortcut("TYPE_SYM_RESIZE_UP", tr("Symmetrically increase height by 2px")); appendShortcut("TYPE_SYM_RESIZE_DOWN", tr("Symmetrically decrease height by 2px")); appendShortcut("TYPE_SELECT_ALL", tr("Select entire screen")); appendShortcut("TYPE_MOVE_LEFT", tr("Move selection left 1px")); appendShortcut("TYPE_MOVE_RIGHT", tr("Move selection right 1px")); appendShortcut("TYPE_MOVE_UP", tr("Move selection up 1px")); appendShortcut("TYPE_MOVE_DOWN", tr("Move selection down 1px")); appendShortcut("TYPE_COMMIT_CURRENT_TOOL", tr("Commit text in text area")); appendShortcut("TYPE_DELETE_CURRENT_TOOL", tr("Delete selected drawn object")); appendShortcut("TYPE_CANCEL", tr("Cancel current selection")); // non-editable shortcuts have an empty shortcut name m_shortcuts << (QStringList() << "" << QObject::tr("Quit capture") << QKeySequence(Qt::Key_Escape).toString()); // Global hotkeys #if defined(Q_OS_MACOS) appendShortcut("TAKE_SCREENSHOT", tr("Capture screen")); #ifdef ENABLE_IMGUR appendShortcut("SCREENSHOT_HISTORY", tr("Screenshot history")); #endif #elif defined(Q_OS_WIN) if (this->isPrintScreenKeyForSnippingDisabled()) { m_shortcuts << (QStringList() << "" << QObject::tr("Capture screen") << "Print Screen"); } appendShortcut("TAKE_SCREENSHOT", tr("Capture screen")); #ifdef ENABLE_IMGUR m_shortcuts << (QStringList() << "" << QObject::tr("Screenshot history") << "Shift+Print Screen"); #endif #else // TODO - Linux doesn't support global shortcuts for (XServer and Wayland), // possibly it will be solved in the QHotKey library later. So it is // disabled for now. #endif m_shortcuts << (QStringList() << "" << QObject::tr("Show color picker") << "Right Click"); m_shortcuts << (QStringList() << "" << QObject::tr("Change the tool's size") << "Mouse Wheel"); } void ShortcutsWidget::appendShortcut(const QString& shortcutName, const QString& description) { QString shortcut = ConfigHandler().shortcut(shortcutName); m_shortcuts << (QStringList() << shortcutName << QObject::tr(description.toStdString().c_str()) << shortcut.replace("Return", "Enter")); } #if defined(Q_OS_MACOS) const QString& ShortcutsWidget::nativeOSHotKeyText(const QString& text) { m_res = text; m_res.replace("Ctrl+", "⌘"); m_res.replace("Alt+", "⌥"); m_res.replace("Meta+", "⌃"); m_res.replace("Shift+", "⇧"); return m_res; } #endif #if defined(Q_OS_WIN) void ShortcutsWidget::checkPrintScreenForcesSnipping() { if (!isPrintScreenKeyForSnippingDisabled() && !ConfigHandler().ignorePrntScrForcesSnipping()) { QMessageBox msgBox; msgBox.setWindowTitle("Flameshot"); msgBox.setIcon(QMessageBox::Question); msgBox.setText(tr("It seems, that Windows forces to open its screenshot" " tool when the 'Print Screen' key is pressed. Would " "you like to disable this so that Flameshot can use " "the 'Print Screen' key?") + "\n\n" + tr("Flameshot must be restarted for changes to take " "effect.")); QPushButton* yesBtn = msgBox.addButton(QMessageBox::Yes); QPushButton* noBtn = msgBox.addButton(QMessageBox::No); QPushButton* noDontAskAgainBtn = new QPushButton(tr("No, don't ask again")); msgBox.addButton(noDontAskAgainBtn, QMessageBox::RejectRole); msgBox.setDefaultButton(yesBtn); msgBox.exec(); if (msgBox.clickedButton() == yesBtn) { if (!disablePrintScreenKeyForSnipping()) { QMessageBox::warning( this, "Flameshot", tr("The registry could not be changed!")); } } else if (msgBox.clickedButton() == noDontAskAgainBtn) { ConfigHandler().setIgnorePrntScrForcesSnipping(true); } } } bool ShortcutsWidget::isPrintScreenKeyForSnippingDisabled() { QSettings PrintKeyForSnipping("HKEY_CURRENT_USER\\Control Panel\\Keyboard", QSettings::NativeFormat); return PrintKeyForSnipping.value("PrintScreenKeyForSnippingEnabled", 1) .toInt() == 0; } bool ShortcutsWidget::disablePrintScreenKeyForSnipping() { QSettings PrintKeyForSnipping("HKEY_CURRENT_USER\\Control Panel\\Keyboard", QSettings::NativeFormat); PrintKeyForSnipping.setValue("PrintScreenKeyForSnippingEnabled", 0); PrintKeyForSnipping.sync(); if (QSettings::AccessError == PrintKeyForSnipping.status()) { return false; } return this->isPrintScreenKeyForSnippingDisabled(); } void ShortcutsWidget::initMsScreenclipCheckbox() { m_registerMsScreenclip = new QCheckBox(tr("Register Flameshot as MS-SCREENCLIP application " "(administrator privileges required)"), this); m_registerMsScreenclip->setToolTip( tr("After registering, you can select Flameshot as the default " "screenshot application in Windows Settings.")); m_registerMsScreenclip->setChecked(isMsScreenclipRegistered()); m_layout->addWidget(m_registerMsScreenclip); connect( m_registerMsScreenclip, &QCheckBox::clicked, this, [this](bool checked) { if (checked) { if (!registerMsScreenclip()) { QMessageBox::warning( this, "Flameshot", tr("The registry could not be changed!") + "\n" + tr("You may start Flameshot as administrator ONCE and " "try again!")); m_registerMsScreenclip->setChecked(false); } } else { if (!unregisterMsScreenclip()) { QMessageBox::warning( this, "Flameshot", tr("The registry could not be changed!") + "\n" + tr("You may start Flameshot as administrator ONCE and " "try again!")); m_registerMsScreenclip->setChecked(true); } } }); } bool ShortcutsWidget::isMsScreenclipRegistered() { QSettings URLAssociations( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Flameshot\\Capabilities\\URLAssociations", QSettings::NativeFormat); QString value = URLAssociations.value("ms-screenclip", "").toString(); if (value.toLower() != "flameshot") return false; QSettings RegisteredApplications( "HKEY_LOCAL_MACHINE\\SOFTWARE\\RegisteredApplications", QSettings::NativeFormat); value = RegisteredApplications.value("Flameshot", "").toString(); if (value.toLower() != QString("SOFTWARE\\Flameshot\\Capabilities").toLower()) return false; QSettings FlameshotShellCmd( "HKEY_CURRENT_USER\\Software\\Classes\\Flameshot\\Shell\\Open\\command", QSettings::NativeFormat); value = FlameshotShellCmd.value(".").toString(); if (value.toLower() != QString("\"" + QDir::toNativeSeparators( QCoreApplication::applicationFilePath()) + "\" gui") .toLower()) return false; return true; // All registry entries found } bool ShortcutsWidget::registerMsScreenclip() { QSettings URLAssociations( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Flameshot\\Capabilities\\URLAssociations", QSettings::NativeFormat); URLAssociations.setValue("ms-screenclip", "Flameshot"); URLAssociations.sync(); if (QSettings::AccessError == URLAssociations.status()) { return false; } QSettings RegisteredApplications( "HKEY_LOCAL_MACHINE\\SOFTWARE\\RegisteredApplications", QSettings::NativeFormat); RegisteredApplications.setValue("Flameshot", "SOFTWARE\\Flameshot\\Capabilities"); RegisteredApplications.sync(); if (QSettings::AccessError == RegisteredApplications.status()) { return false; } QSettings FlameshotShellCmd( "HKEY_CURRENT_USER\\Software\\Classes\\Flameshot\\Shell\\Open\\command", QSettings::NativeFormat); FlameshotShellCmd.setValue( ".", "\"" + QDir::toNativeSeparators(QCoreApplication::applicationFilePath()) + "\" gui"); FlameshotShellCmd.sync(); if (QSettings::AccessError == FlameshotShellCmd.status()) { return false; } return isMsScreenclipRegistered(); } bool ShortcutsWidget::unregisterMsScreenclip() { QSettings FlameshotShellCmd("HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat); FlameshotShellCmd.remove("Flameshot"); FlameshotShellCmd.sync(); if (QSettings::AccessError == FlameshotShellCmd.status()) { return false; } QSettings RegisteredApplications( "HKEY_LOCAL_MACHINE\\SOFTWARE\\RegisteredApplications", QSettings::NativeFormat); RegisteredApplications.remove("Flameshot"); RegisteredApplications.sync(); if (QSettings::AccessError == RegisteredApplications.status()) { return false; } QSettings URLAssociations( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Flameshot\\Capabilities\\URLAssociations", QSettings::NativeFormat); URLAssociations.remove("ms-screenclip"); URLAssociations.sync(); if (QSettings::AccessError == URLAssociations.status()) { return false; } return !isMsScreenclipRegistered(); } #endif ================================================ FILE: src/config/shortcutswidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors #ifndef HOTKEYSCONFIG_H #define HOTKEYSCONFIG_H #include "src/utils/confighandler.h" #include #include #include class SetShortcutDialog; class QCheckBox; class QTableWidget; class QVBoxLayout; class ShortcutsWidget : public QWidget { Q_OBJECT public: explicit ShortcutsWidget(QWidget* parent = nullptr); private: void initInfoTable(); #if (defined(Q_OS_MACOS)) const QString& nativeOSHotKeyText(const QString& text); #endif private slots: void populateInfoTable(); void onShortcutCellClicked(int, int); private: #if (defined(Q_OS_MACOS)) QString m_res; #endif ConfigHandler m_config; QTableWidget* m_table; QVBoxLayout* m_layout; QList m_shortcuts; void loadShortcuts(); void appendShortcut(const QString& shortcutName, const QString& description); #if defined(Q_OS_WIN) void checkPrintScreenForcesSnipping(); bool isPrintScreenKeyForSnippingDisabled(); bool disablePrintScreenKeyForSnipping(); void initMsScreenclipCheckbox(); bool isMsScreenclipRegistered(); bool registerMsScreenclip(); bool unregisterMsScreenclip(); QCheckBox* m_registerMsScreenclip; #endif }; #endif // HOTKEYSCONFIG_H ================================================ FILE: src/config/strftimechooserwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "strftimechooserwidget.h" #include #include #include StrftimeChooserWidget::StrftimeChooserWidget(QWidget* parent) : QWidget(parent) { const quint8 MAXCOLUMNS = 2; auto* layout = new QGridLayout(this); quint8 row = 0; quint8 col = 0; QMapIterator iterator(m_buttonData); while (iterator.hasNext()) { iterator.next(); QString variable = iterator.value(); auto* button = new QPushButton(this); button->setText(tr(iterator.key().toStdString().data())); button->setToolTip(variable); button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); button->setMinimumHeight(25); layout->addWidget(button, row, col); connect(button, &QPushButton::clicked, this, [variable, this]() { emit variableEmitted(variable); }); col++; if (col >= MAXCOLUMNS) { row++; col = 0; } } setLayout(layout); } QMap StrftimeChooserWidget::m_buttonData{ { QT_TR_NOOP("Century (00-99)"), "%C" }, { QT_TR_NOOP("Year (00-99)"), "%y" }, { QT_TR_NOOP("Year (2000)"), "%Y" }, #ifndef Q_OS_WIN // TODO - fix localized names on windows (ex. Cyrillic) { QT_TR_NOOP("Month Name (jan)"), "%b" }, { QT_TR_NOOP("Month Name (january)"), "%B" }, #endif { QT_TR_NOOP("Month (01-12)"), "%m" }, { QT_TR_NOOP("Week Day (1-7)"), "%u" }, { QT_TR_NOOP("Week (01-53)"), "%V" }, #ifndef Q_OS_WIN // TODO - fix localized names on windows (ex. Cyrillic) { QT_TR_NOOP("Day Name (mon)"), "%a" }, { QT_TR_NOOP("Day Name (monday)"), "%A" }, #endif { QT_TR_NOOP("Day (01-31)"), "%d" }, { QT_TR_NOOP("Day of Month (1-31)"), "%e" }, { QT_TR_NOOP("Day (001-366)"), "%j" }, #ifndef Q_OS_WIN // TODO - fix localized names on windows (ex. Cyrillic) { QT_TR_NOOP("Time (%H-%M-%S)"), "%T" }, { QT_TR_NOOP("Time (%H-%M)"), "%R" }, #endif { QT_TR_NOOP("Hour (00-23)"), "%H" }, { QT_TR_NOOP("Hour (01-12)"), "%I" }, { QT_TR_NOOP("Minute (00-59)"), "%M" }, { QT_TR_NOOP("Second (00-59)"), "%S" }, #ifndef Q_OS_WIN // TODO - fix localized names on windows (ex. Cyrillic) { QT_TR_NOOP("Full Date (%m/%d/%y)"), "%D" }, #endif { QT_TR_NOOP("Full Date (%Y-%m-%d)"), "%F" }, { QT_TR_NOOP("Full Date (%d-%m-%Y)"), "%d-%m-%Y" }, }; ================================================ FILE: src/config/strftimechooserwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class StrftimeChooserWidget : public QWidget { Q_OBJECT public: explicit StrftimeChooserWidget(QWidget* parent = nullptr); signals: void variableEmitted(const QString&); private: static QMap m_buttonData; }; ================================================ FILE: src/config/styleoverride.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2020 Jeremy Borgman // // Created by jeremy on 9/24/20. #include "styleoverride.h" int StyleOverride::styleHint(StyleHint hint, const QStyleOption* option, const QWidget* widget, QStyleHintReturn* returnData) const { if (hint == SH_ToolTip_WakeUpDelay) { return 600; } else { return baseStyle()->styleHint(hint, option, widget, returnData); } } ================================================ FILE: src/config/styleoverride.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2020 Jeremy Borgman // // Created by jeremy on 9/24/20. #ifndef FLAMESHOT_STYLEOVERRIDE_H #define FLAMESHOT_STYLEOVERRIDE_H #include #include class StyleOverride : public QProxyStyle { Q_OBJECT public: int styleHint(StyleHint hint, const QStyleOption* option = Q_NULLPTR, const QWidget* widget = Q_NULLPTR, QStyleHintReturn* returnData = Q_NULLPTR) const; }; #endif // FLAMESHOT_STYLEOVERRIDE_H ================================================ FILE: src/config/uicoloreditor.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "uicoloreditor.h" #include "clickablelabel.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include #include #include #include #include UIcolorEditor::UIcolorEditor(QWidget* parent) : QWidget(parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_hLayout = new QHBoxLayout; m_vLayout = new QVBoxLayout; const int space = QFontMetrics(qApp->font()).lineSpacing(); m_hLayout->addItem(new QSpacerItem(space, space, QSizePolicy::Expanding)); m_vLayout->setAlignment(Qt::AlignVCenter); initButtons(); initColorWheel(); m_vLayout->addSpacing(space); m_hLayout->addLayout(m_vLayout); m_hLayout->addItem(new QSpacerItem(space, space, QSizePolicy::Expanding)); setLayout(m_hLayout); updateComponents(); } void UIcolorEditor::updateComponents() { ConfigHandler config; m_uiColor = config.uiColor(); m_contrastColor = config.contrastUiColor(); m_buttonContrast->setColor(m_contrastColor); m_buttonMainColor->setColor(m_uiColor); if (m_lastButtonPressed == m_buttonMainColor) { m_colorWheel->setColor(m_uiColor); } else { m_colorWheel->setColor(m_contrastColor); } } // updateUIcolor updates the appearance of the buttons void UIcolorEditor::updateUIcolor() { ConfigHandler config; if (m_lastButtonPressed == m_buttonMainColor) { config.setUiColor(m_uiColor); } else { config.setContrastUiColor(m_contrastColor); } } // updateLocalColor updates the local button void UIcolorEditor::updateLocalColor(const QColor c) { if (m_lastButtonPressed == m_buttonMainColor) { m_uiColor = c; } else { m_contrastColor = c; } m_lastButtonPressed->setColor(c); } void UIcolorEditor::initColorWheel() { m_colorWheel = new color_widgets::ColorWheel(this); connect(m_colorWheel, &color_widgets::ColorWheel::colorSelected, this, &UIcolorEditor::updateUIcolor); connect(m_colorWheel, &color_widgets::ColorWheel::colorChanged, this, &UIcolorEditor::updateLocalColor); const int size = GlobalValues::buttonBaseSize() * 3; m_colorWheel->setMinimumSize(size, size); m_colorWheel->setMaximumSize(size * 2, size * 2); m_colorWheel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_colorWheel->setToolTip(tr("Change the color moving the selectors and see" " the changes in the preview buttons.")); m_hLayout->addWidget(m_colorWheel); } void UIcolorEditor::initButtons() { const int extraSize = GlobalValues::buttonBaseSize() / 3; int frameSize = GlobalValues::buttonBaseSize() + extraSize; m_vLayout->addWidget(new QLabel(tr("Select a Button to modify it"), this)); auto* frame = new QGroupBox(); frame->setFixedSize(frameSize, frameSize); m_buttonMainColor = new CaptureToolButton(m_buttonIconType, frame); m_buttonMainColor->move(m_buttonMainColor->x() + extraSize / 2, m_buttonMainColor->y() + extraSize / 2); auto* h1 = new QHBoxLayout(); h1->addWidget(frame); m_labelMain = new ClickableLabel(tr("Main Color"), this); h1->addWidget(m_labelMain); m_vLayout->addLayout(h1); m_buttonMainColor->setToolTip(tr("Click on this button to set the edition" " mode of the main color.")); auto* frame2 = new QGroupBox(); m_buttonContrast = new CaptureToolButton(m_buttonIconType, frame2); m_buttonContrast->move(m_buttonContrast->x() + extraSize / 2, m_buttonContrast->y() + extraSize / 2); auto* h2 = new QHBoxLayout(); h2->addWidget(frame2); frame2->setFixedSize(frameSize, frameSize); m_labelContrast = new ClickableLabel(tr("Contrast Color"), this); m_labelContrast->setStyleSheet(QStringLiteral("color : gray")); h2->addWidget(m_labelContrast); m_vLayout->addLayout(h2); m_buttonContrast->setToolTip(tr("Click on this button to set the edition" " mode of the contrast color.")); connect(m_buttonMainColor, &CaptureToolButton::pressedButtonLeftClick, this, &UIcolorEditor::changeLastButton); connect(m_buttonContrast, &CaptureToolButton::pressedButtonLeftClick, this, &UIcolorEditor::changeLastButton); // clicking the labels changes the button too connect(m_labelMain, &ClickableLabel::clicked, this, [this] { changeLastButton(m_buttonMainColor); }); connect(m_labelContrast, &ClickableLabel::clicked, this, [this] { changeLastButton(m_buttonContrast); }); m_lastButtonPressed = m_buttonMainColor; } // visual update for the selected button void UIcolorEditor::changeLastButton(CaptureToolButton* b) { if (m_lastButtonPressed != b) { m_lastButtonPressed = b; QString offStyle(QStringLiteral("QLabel { color : gray; }")); if (b == m_buttonMainColor) { m_colorWheel->setColor(m_uiColor); m_labelContrast->setStyleSheet(offStyle); m_labelMain->setStyleSheet(styleSheet()); } else { m_colorWheel->setColor(m_contrastColor); m_labelContrast->setStyleSheet(styleSheet()); m_labelMain->setStyleSheet(offStyle); } b->setIcon(b->icon()); } } ================================================ FILE: src/config/uicoloreditor.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "QtColorWidgets/color_wheel.hpp" #include "src/widgets/capture/capturetoolbutton.h" #include class QVBoxLayout; class QHBoxLayout; class CaptureToolButton; class ClickableLabel; class UIcolorEditor : public QWidget { Q_OBJECT public: explicit UIcolorEditor(QWidget* parent = nullptr); public slots: void updateComponents(); private slots: void updateUIcolor(); void updateLocalColor(const QColor); void changeLastButton(CaptureToolButton*); private: QColor m_uiColor, m_contrastColor; CaptureToolButton* m_buttonMainColor; ClickableLabel* m_labelMain; CaptureToolButton* m_buttonContrast; ClickableLabel* m_labelContrast; CaptureToolButton* m_lastButtonPressed; color_widgets::ColorWheel* m_colorWheel; static const CaptureTool::Type m_buttonIconType = CaptureTool::TYPE_CIRCLE; QHBoxLayout* m_hLayout; QVBoxLayout* m_vLayout; void initColorWheel(); void initButtons(); }; ================================================ FILE: src/config/visualseditor.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "visualseditor.h" #include "src/config/buttonlistview.h" #include "src/config/colorpickereditor.h" #include "src/config/extendedslider.h" #include "src/config/uicoloreditor.h" #include "src/utils/confighandler.h" #include #include #include #include VisualsEditor::VisualsEditor(QWidget* parent) : QWidget(parent) { m_layout = new QVBoxLayout(); setLayout(m_layout); initWidgets(); } void VisualsEditor::updateComponents() { m_buttonList->updateComponents(); m_colorEditor->updateComponents(); int opacity = ConfigHandler().contrastOpacity(); m_opacitySlider->setMapedValue(0, opacity, 255); } void VisualsEditor::initOpacitySlider() { m_opacitySlider = new ExtendedSlider(); m_opacitySlider->setFocusPolicy(Qt::NoFocus); m_opacitySlider->setOrientation(Qt::Horizontal); m_opacitySlider->setRange(0, 100); auto* localLayout = new QHBoxLayout(); localLayout->addWidget(new QLabel(QStringLiteral("0%"))); localLayout->addWidget(m_opacitySlider); localLayout->addWidget(new QLabel(QStringLiteral("100%"))); auto* label = new QLabel(); QString labelMsg = tr("Opacity of area outside selection:") + " %1%"; ExtendedSlider* opacitySlider = m_opacitySlider; connect(m_opacitySlider, &ExtendedSlider::valueChanged, this, [labelMsg, label, opacitySlider](int val) { label->setText(labelMsg.arg(val)); ConfigHandler().setContrastOpacity( opacitySlider->mappedValue(0, 255)); }); m_layout->addWidget(label); m_layout->addLayout(localLayout); int opacity = ConfigHandler().contrastOpacity(); m_opacitySlider->setMapedValue(0, opacity, 255); } void VisualsEditor::initWidgets() { initTranslations(); m_tabWidget = new QTabWidget(); m_layout->addWidget(m_tabWidget); m_colorEditor = new UIcolorEditor(); m_colorEditorTab = new QWidget(); auto* colorEditorLayout = new QVBoxLayout(m_colorEditorTab); m_colorEditorTab->setLayout(colorEditorLayout); colorEditorLayout->addWidget(m_colorEditor); m_tabWidget->addTab(m_colorEditorTab, tr("UI Color Editor")); m_colorpickerEditor = new ColorPickerEditor(); m_colorpickerEditorTab = new QWidget(); auto* colorpickerEditorLayout = new QVBoxLayout(m_colorpickerEditorTab); colorpickerEditorLayout->addWidget(m_colorpickerEditor); m_tabWidget->addTab(m_colorpickerEditorTab, tr("Colorpicker Editor")); initOpacitySlider(); auto* boxButtons = new QGroupBox(); boxButtons->setTitle(tr("Button Selection")); auto* listLayout = new QVBoxLayout(boxButtons); m_buttonList = new ButtonListView(); m_layout->addWidget(boxButtons); listLayout->addWidget(m_buttonList); auto* setAllButtons = new QPushButton(tr("Select All")); connect(setAllButtons, &QPushButton::clicked, m_buttonList, &ButtonListView::selectAll); listLayout->addWidget(setAllButtons); } void VisualsEditor::initTranslations() { auto* localLayout = new QHBoxLayout(); localLayout->addWidget(new QLabel(tr("UI language"))); m_selectTranslation = new QComboBox(this); QStringList translations; QString tmpFilename; for (const QString& path : PathInfo::translationsPaths()) { QDirIterator it(path, QStringList() << QStringLiteral("*.qm"), QDir::NoDotAndDotDot | QDir::Files); while (it.hasNext()) { it.next(); tmpFilename = it.fileName(); if (tmpFilename.startsWith( QStringLiteral("Internationalization_"))) { tmpFilename = tmpFilename.remove(QStringLiteral("Internationalization_")) .remove(QStringLiteral(".qm")); if (!translations.contains(tmpFilename)) { translations << tmpFilename; } } } } translations.sort(); translations.push_front(QStringLiteral("auto")); m_selectTranslation->addItems(translations); QString language = ConfigHandler().value("uiLanguage").toString(); m_selectTranslation->setCurrentIndex( m_selectTranslation->findText(language)); connect(m_selectTranslation, &QComboBox::currentTextChanged, this, [this](const QString& text) { ConfigHandler().setUiLanguage(text); // TODO: Retranslate UI without restart QMessageBox::information( this, tr("Configuration"), tr("Flameshot must be restarted to apply these changes!")); }); localLayout->addWidget(m_selectTranslation); localLayout->addStretch(); m_layout->addLayout(localLayout); } ================================================ FILE: src/config/visualseditor.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include #include class ExtendedSlider; class QVBoxLayout; class ButtonListView; class UIcolorEditor; class ColorPickerEditor; class VisualsEditor : public QWidget { Q_OBJECT public: explicit VisualsEditor(QWidget* parent = nullptr); public slots: void updateComponents(); private: QVBoxLayout* m_layout; QTabWidget* m_tabWidget; UIcolorEditor* m_colorEditor; QWidget* m_colorEditorTab; ColorPickerEditor* m_colorpickerEditor; QWidget* m_colorpickerEditorTab; ButtonListView* m_buttonList; ExtendedSlider* m_opacitySlider; QComboBox* m_selectTranslation; void initWidgets(); void initOpacitySlider(); void initTranslations(); }; ================================================ FILE: src/core/CMakeLists.txt ================================================ target_sources(flameshot PRIVATE flameshot.h flameshotdaemon.h qguiappcurrentscreen.h ) target_sources(flameshot PRIVATE capturerequest.cpp flameshot.cpp flameshotdaemon.cpp qguiappcurrentscreen.cpp ) if (UNIX AND NOT APPLE) target_sources(flameshot PRIVATE flameshotdbusadapter.h flameshotdbusadapter.cpp ) endif () if (USE_KDSINGLEAPPLICATION) if (NOT WIN32) target_sources(flameshot PRIVATE signaldaemon.h signaldaemon.cpp ) endif () endif () if (WIN32) target_sources(flameshot PRIVATE globalshortcutfilter.h globalshortcutfilter.cpp) endif () ================================================ FILE: src/core/capturerequest.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "capturerequest.h" #include "confighandler.h" #include "src/config/cacheutils.h" #include #include #include #include #include CaptureRequest::CaptureRequest(CaptureRequest::CaptureMode mode, const uint delay, QVariant data, CaptureRequest::ExportTask tasks) : m_mode(mode) , m_delay(delay) , m_tasks(tasks) , m_data(std::move(data)) , m_selectedMonitor(-1) , m_hasSelectedMonitor(false) { ConfigHandler config; if (m_mode == CaptureRequest::CaptureMode::GRAPHICAL_MODE && config.saveLastRegion()) { setInitialSelection(getLastRegion()); } } CaptureRequest::CaptureMode CaptureRequest::captureMode() const { return m_mode; } uint CaptureRequest::delay() const { return m_delay; } QString CaptureRequest::path() const { return m_path; } QVariant CaptureRequest::data() const { return m_data; } CaptureRequest::ExportTask CaptureRequest::tasks() const { return m_tasks; } QRect CaptureRequest::initialSelection() const { return m_initialSelection; } void CaptureRequest::addTask(CaptureRequest::ExportTask task) { if (task == SAVE) { throw std::logic_error("SAVE task must be added using addSaveTask"); } m_tasks |= task; } void CaptureRequest::removeTask(ExportTask task) { ((int&)m_tasks) &= ~task; } void CaptureRequest::addSaveTask(const QString& path) { m_tasks |= SAVE; m_path = path; } void CaptureRequest::addPinTask(const QRect& pinWindowGeometry) { m_tasks |= PIN; m_pinWindowGeometry = pinWindowGeometry; } void CaptureRequest::setInitialSelection(const QRect& selection) { m_initialSelection = selection; } void CaptureRequest::setSelectedMonitor(int monitorIndex) { m_selectedMonitor = monitorIndex; m_hasSelectedMonitor = true; } int CaptureRequest::selectedMonitor() const { return m_selectedMonitor; } bool CaptureRequest::hasSelectedMonitor() const { return m_hasSelectedMonitor; } ================================================ FILE: src/core/capturerequest.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include #include class CaptureRequest { public: enum CaptureMode { FULLSCREEN_MODE, GRAPHICAL_MODE, SCREEN_MODE, }; enum ExportTask { NO_TASK = 0, COPY = 1, SAVE = 2, PRINT_RAW = 4, PRINT_GEOMETRY = 8, PIN = 16, UPLOAD = 32, ACCEPT_ON_SELECT = 64, }; CaptureRequest(CaptureMode mode, const uint delay = 0, QVariant data = QVariant(), ExportTask tasks = NO_TASK); void setStaticID(uint id); uint id() const; uint delay() const; QString path() const; QVariant data() const; CaptureMode captureMode() const; ExportTask tasks() const; QRect initialSelection() const; void addTask(ExportTask task); void removeTask(ExportTask task); void addSaveTask(const QString& path = QString()); void addPinTask(const QRect& pinWindowGeometry); void setInitialSelection(const QRect& selection); void setSelectedMonitor(int monitorIndex); int selectedMonitor() const; bool hasSelectedMonitor() const; private: CaptureMode m_mode; uint m_delay; QString m_path; ExportTask m_tasks; QVariant m_data; QRect m_pinWindowGeometry, m_initialSelection; int m_selectedMonitor; bool m_hasSelectedMonitor; CaptureRequest() {} }; using eTask = CaptureRequest::ExportTask; inline eTask operator|(const eTask& a, const eTask& b) { return static_cast(static_cast(a) | static_cast(b)); } inline eTask operator&(const eTask& a, const eTask& b) { return static_cast(static_cast(a) & static_cast(b)); } inline eTask& operator|=(eTask& a, const eTask& b) { a = static_cast(static_cast(a) | static_cast(b)); return a; } ================================================ FILE: src/core/flameshot.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "flameshot.h" #include "flameshotdaemon.h" #if defined(Q_OS_MACOS) || defined(Q_OS_WIN) #include "qhotkey.h" #endif #include "abstractlogger.h" #include "screenshotsaver.h" #include "src/config/configresolver.h" #include "src/config/configwindow.h" #include "src/core/qguiappcurrentscreen.h" #ifdef ENABLE_IMGUR #include "src/tools/imgupload/imguploadermanager.h" #include "src/tools/imgupload/storages/imguploaderbase.h" #include "src/widgets/imguploaddialog.h" #include "src/widgets/uploadhistory.h" #endif #include "src/utils/confighandler.h" #include "src/utils/screengrabber.h" #include "src/widgets/capture/capturewidget.h" #include "src/widgets/capturelauncher.h" #include "src/widgets/infowindow.h" #include #include #include #include #include #include #include #include #include #include #if defined(Q_OS_MACOS) #include #endif Flameshot::Flameshot() : m_haveExternalWidget(false) , m_captureWindow(nullptr) #if (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) , m_HotkeyScreenshotCapture(nullptr) #endif #if (defined(Q_OS_MACOS) && ENABLE_IMGUR) , m_HotkeyScreenshotHistory(nullptr) #endif { QString StyleSheet = CaptureButton::globalStyleSheet(); qApp->setStyleSheet(StyleSheet); #if defined(Q_OS_MACOS) // Try to take a test screenshot, MacOS will request a "Screen Recording" // permissions on the first run. Otherwise it will be hidden under the // CaptureWidget QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); currentScreen->grabWindow(0, 0, 0, 1, 1); #endif #if (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) // Set global shortcuts for MacOS or Windows m_HotkeyScreenshotCapture = new QHotkey( QKeySequence(ConfigHandler().shortcut("TAKE_SCREENSHOT")), true, this); QObject::connect(m_HotkeyScreenshotCapture, &QHotkey::activated, qApp, [this]() { gui(); }); #endif #if (defined(Q_OS_MACOS) && ENABLE_IMGUR) m_HotkeyScreenshotHistory = new QHotkey( QKeySequence(ConfigHandler().shortcut("SCREENSHOT_HISTORY")), true, this); QObject::connect(m_HotkeyScreenshotHistory, &QHotkey::activated, qApp, [this]() { history(); }); #endif } Flameshot* Flameshot::instance() { static Flameshot c; return &c; } CaptureWidget* Flameshot::gui(const CaptureRequest& req) { if (!resolveAnyConfigErrors()) { return nullptr; } #if defined(Q_OS_MACOS) // This is required on MacOS because of Mission Control. If you'll switch to // another Desktop you cannot take a new screenshot from the tray, you have // to switch back to the Flameshot Desktop manually. It is not obvious and a // large number of users are confused and report a bug. if (m_captureWindow != nullptr) { m_captureWindow->close(); delete m_captureWindow; m_captureWindow = nullptr; } #endif if (nullptr == m_captureWindow) { // TODO is this unnecessary now? int timeout = 5000; // 5 seconds const int delay = 100; QWidget* modalWidget = nullptr; for (; timeout >= 0; timeout -= delay) { modalWidget = qApp->activeModalWidget(); if (nullptr == modalWidget) { break; } modalWidget->close(); modalWidget->deleteLater(); QThread::msleep(delay); } if (0 == timeout) { QMessageBox::warning( nullptr, tr("Error"), tr("Unable to close active modal widgets")); return nullptr; } m_captureWindow = new CaptureWidget(req); #ifdef Q_OS_WIN m_captureWindow->show(); #elif defined(Q_OS_MACOS) // In "Emulate fullscreen mode" m_captureWindow->showFullScreen(); m_captureWindow->activateWindow(); m_captureWindow->raise(); #else m_captureWindow->showFullScreen(); // m_captureWindow->show(); // For CaptureWidget Debugging under Linux #endif return m_captureWindow; } else { emit captureFailed(); return nullptr; } } void Flameshot::screen(CaptureRequest req, const int screenNumber) { if (!resolveAnyConfigErrors()) { return; } bool ok = false; QPixmap p; QRect geometry; if (screenNumber < 0) { ScreenGrabber grabber; p = grabber.grabEntireDesktop(ok); if (ok) { QScreen* selectedScreen = grabber.getSelectedScreen(); if (selectedScreen) { geometry = ScreenGrabber().screenGeometry(selectedScreen); } else { ok = false; } } } else if (screenNumber >= qApp->screens().count()) { AbstractLogger() << QObject::tr( "Requested screen exceeds screen count"); ok = false; } else { // Specific screen number provided - use grabScreen to bypass selector QScreen* screen = qApp->screens()[screenNumber]; p = ScreenGrabber().grabScreen(screen, ok); if (ok) { geometry = ScreenGrabber().screenGeometry(screen); } } if (ok) { QRect region = req.initialSelection(); if (region.isNull()) { region = geometry; } else { QRect screenGeom = geometry; screenGeom.moveTopLeft({ 0, 0 }); region = region.intersected(screenGeom); p = p.copy(region); } if (req.tasks() & CaptureRequest::PIN) { // change geometry for pin task req.addPinTask(region); } exportCapture(p, geometry, req); } else { emit captureFailed(); } } void Flameshot::full(const CaptureRequest& req) { if (!resolveAnyConfigErrors()) { return; } bool ok = true; QPixmap p(ScreenGrabber().grabFullDesktop(ok)); if (ok) { QRect selection; // `flameshot full` does not support region selection exportCapture(p, selection, req); } else { emit captureFailed(); } } void Flameshot::launcher() { if (!resolveAnyConfigErrors()) { return; } if (m_launcherWindow == nullptr) { m_launcherWindow = new CaptureLauncher(); } m_launcherWindow->show(); #if defined(Q_OS_MACOS) m_launcherWindow->activateWindow(); m_launcherWindow->raise(); #endif } void Flameshot::config() { if (!resolveAnyConfigErrors()) { return; } if (m_configWindow == nullptr) { m_configWindow = new ConfigWindow(); m_configWindow->show(); // Call show() first, otherwise the correct geometry cannot be fetched // for centering the window on the screen QRect position = m_configWindow->frameGeometry(); QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); position.moveCenter(currentScreen->availableGeometry().center()); m_configWindow->move(position.topLeft()); #if defined(Q_OS_MACOS) m_configWindow->activateWindow(); m_configWindow->raise(); #endif } } void Flameshot::info() { if (m_infoWindow == nullptr) { m_infoWindow = new InfoWindow(); #if defined(Q_OS_MACOS) m_infoWindow->activateWindow(); m_infoWindow->raise(); #endif } } #ifdef ENABLE_IMGUR void Flameshot::history() { static UploadHistory* historyWidget = nullptr; if (historyWidget == nullptr) { historyWidget = new UploadHistory; historyWidget->loadHistory(); connect(historyWidget, &QObject::destroyed, this, []() { historyWidget = nullptr; }); } historyWidget->show(); // Call show() first, otherwise the correct geometry cannot be fetched // for centering the window on the screen QRect position = historyWidget->frameGeometry(); QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); position.moveCenter(currentScreen->availableGeometry().center()); historyWidget->move(position.topLeft()); #if defined(Q_OS_MACOS) historyWidget->activateWindow(); historyWidget->raise(); #endif } #endif void Flameshot::openSavePath() { QString savePath = ConfigHandler().savePath(); if (!savePath.isEmpty()) { QDesktopServices::openUrl(QUrl::fromLocalFile(savePath)); } } QVersionNumber Flameshot::getVersion() { return QVersionNumber::fromString( QStringLiteral(APP_VERSION).replace("v", "")); } void Flameshot::setOrigin(Origin origin) { m_origin = origin; } Flameshot::Origin Flameshot::origin() { return m_origin; } /** * @brief Prompt the user to resolve config errors if necessary. * @return Whether errors were resolved. */ bool Flameshot::resolveAnyConfigErrors() { bool resolved = true; ConfigHandler confighandler; if (!confighandler.checkUnrecognizedSettings() || !confighandler.checkSemantics()) { auto* resolver = new ConfigResolver(); QObject::connect( resolver, &ConfigResolver::rejected, [resolver, &resolved]() { resolved = false; resolver->deleteLater(); if (origin() == CLI) { exit(1); } }); QObject::connect( resolver, &ConfigResolver::accepted, [resolver, &resolved]() { resolved = true; resolver->close(); resolver->deleteLater(); // Ensure that the dialog is closed before starting capture qApp->processEvents(); }); resolver->exec(); qApp->processEvents(); } return resolved; } void Flameshot::requestCapture(const CaptureRequest& request) { if (!resolveAnyConfigErrors()) { return; } switch (request.captureMode()) { case CaptureRequest::FULLSCREEN_MODE: QTimer::singleShot(request.delay(), [this, request] { full(request); }); break; case CaptureRequest::SCREEN_MODE: { int&& number = request.data().toInt(); QTimer::singleShot(request.delay(), [this, request, number]() { screen(request, number); }); break; } case CaptureRequest::GRAPHICAL_MODE: { QTimer::singleShot( request.delay(), this, [this, request]() { gui(request); }); break; } default: emit captureFailed(); break; } } void Flameshot::exportCapture(const QPixmap& capture, QRect& selection, const CaptureRequest& req) { using CR = CaptureRequest; int tasks = req.tasks(), mode = req.captureMode(); QString path = req.path(); if (tasks & CR::PRINT_GEOMETRY) { QTextStream(stdout) << selection.width() << "x" << selection.height() << "+" << selection.x() << "+" << selection.y() << "\n"; } if (tasks & CR::PRINT_RAW) { QByteArray byteArray; QBuffer buffer(&byteArray); capture.save(&buffer, "PNG"); if (QFile file; file.open(stdout, QIODevice::WriteOnly)) { file.write(byteArray); file.close(); } } if (tasks & CR::SAVE) { if (req.path().isEmpty()) { saveToFilesystemGUI(capture); } else { saveToFilesystem(capture, path); } } if (tasks & CR::COPY) { FlameshotDaemon::copyToClipboard(capture); } if (tasks & CR::PIN) { FlameshotDaemon::createPin(capture, selection); if (mode == CR::SCREEN_MODE || mode == CR::FULLSCREEN_MODE) { AbstractLogger::info() << QObject::tr("Full screen screenshot pinned to screen"); } } #ifdef ENABLE_IMGUR if (tasks & CR::UPLOAD) { if (!ConfigHandler().uploadWithoutConfirmation()) { auto* dialog = new ImgUploadDialog(); if (dialog->exec() == QDialog::Rejected) { return; } } ImgUploaderBase* widget = ImgUploaderManager().uploader(capture); widget->show(); widget->activateWindow(); // NOTE: lambda can't capture 'this' because it might be destroyed later CR::ExportTask tasks = tasks; QObject::connect( widget, &ImgUploaderBase::uploadOk, [=, this](const QUrl& url) { if (ConfigHandler().copyURLAfterUpload()) { if (!(tasks & CR::COPY)) { FlameshotDaemon::copyToClipboard( url.toString(), tr("URL copied to clipboard.")); } widget->showPostUploadDialog(); } }); } #endif if (!(tasks & CR::UPLOAD)) { emit captureTaken(capture); } } void Flameshot::setExternalWidget(bool b) { m_haveExternalWidget = b; } bool Flameshot::haveExternalWidget() { return m_haveExternalWidget; } // STATIC ATTRIBUTES Flameshot::Origin Flameshot::m_origin = Flameshot::DAEMON; ================================================ FILE: src/core/flameshot.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/core/capturerequest.h" #include #include #include class CaptureWidget; class ConfigWindow; class InfoWindow; class CaptureLauncher; #ifdef ENABLE_IMGUR class UploadHistory; #endif #if (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) class QHotkey; #endif enum ErrCode : uint8_t { E_OK = 0, E_GENERAL, E_ABORTED, E_DBUSCONN, E_SIG_BASE = 128, E_SIGINT = E_SIG_BASE + 2, E_SIGTERM = E_SIG_BASE + 15, }; class Flameshot : public QObject { Q_OBJECT public: enum Origin { CLI, DAEMON }; static Flameshot* instance(); public slots: CaptureWidget* gui( const CaptureRequest& req = CaptureRequest::GRAPHICAL_MODE); void screen(CaptureRequest req, int const screenNumber = -1); void full(const CaptureRequest& req); void launcher(); void config(); void info(); #ifdef ENABLE_IMGUR void history(); #endif void openSavePath(); QVersionNumber getVersion(); public: static void setOrigin(Origin origin); static Origin origin(); void setExternalWidget(bool b); bool haveExternalWidget(); signals: void captureTaken(QPixmap p); void captureFailed(); public slots: void requestCapture(const CaptureRequest& request); void exportCapture(const QPixmap& p, QRect& selection, const CaptureRequest& req); private: Flameshot(); bool resolveAnyConfigErrors(); // class members static Origin m_origin; bool m_haveExternalWidget; QPointer m_captureWindow; QPointer m_infoWindow; QPointer m_launcherWindow; QPointer m_configWindow; #if (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) QHotkey* m_HotkeyScreenshotCapture; #endif #if (defined(Q_OS_MACOS) && ENABLE_IMGUR) QHotkey* m_HotkeyScreenshotHistory; #endif }; ================================================ FILE: src/core/flameshotdaemon.cpp ================================================ #include "flameshotdaemon.h" #include "abstractlogger.h" #include "confighandler.h" #include "flameshot.h" #include "pinwidget.h" #include "screenshotsaver.h" #include "src/utils/globalvalues.h" #include "src/widgets/capture/capturewidget.h" #include "src/widgets/trayicon.h" #include #include #include #include #include #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #include #include #endif #if !defined(DISABLE_UPDATE_CHECKER) #include #include #include #include #include #include #include #endif #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #include #include #endif #ifdef Q_OS_WIN #include "src/core/globalshortcutfilter.h" #endif /** * @brief A way of accessing the flameshot daemon both from the daemon itself, * and from subcommands. * * The daemon is necessary in order to: * - Host the system tray, * - Listen for hotkey events that will trigger captures, * - Host pinned screenshot widgets, * - Host the clipboard on X11, where the clipboard gets lost once flameshot * quits. * * If the `autoCloseIdleDaemon` option is true, the daemon will close as soon as * it is not needed to host pinned screenshots and the clipboard. On Windows, * this option is disabled and the daemon always persists, because the system * tray is currently the only way to interact with flameshot there. * * Both the daemon and non-daemon flameshot processes use the same public API, * which is implemented as static methods. In the daemon process, this class is * also instantiated as a singleton, so it can listen to D-Bus calls via the * sigslot mechanism. The instantiation is done by calling `start` (this must be * done only in the daemon process). Any instance (as opposed to static) members * can only be used if the current process is a daemon. * * @note The daemon will be automatically launched where necessary, via D-Bus. * This applies only to Linux. */ FlameshotDaemon::FlameshotDaemon() : m_persist(false) , m_hostingClipboard(false) , m_clipboardSignalBlocked(false) , m_trayIcon(nullptr) #if !defined(DISABLE_UPDATE_CHECKER) , m_appLatestVersion(QStringLiteral(APP_VERSION).replace("v", "")) , m_showManualCheckAppUpdateStatus(false) , m_networkCheckUpdates(nullptr) #endif { connect( QApplication::clipboard(), &QClipboard::dataChanged, this, [this]() { if (!m_hostingClipboard || m_clipboardSignalBlocked) { m_clipboardSignalBlocked = false; return; } m_hostingClipboard = false; quitIfIdle(); }); #ifdef Q_OS_WIN m_persist = true; #else m_persist = !ConfigHandler().autoCloseIdleDaemon(); connect(ConfigHandler::getInstance(), &ConfigHandler::fileChanged, this, [this]() { ConfigHandler config; enableTrayIcon(!config.disabledTrayIcon()); m_persist = !config.autoCloseIdleDaemon(); }); #endif #if !defined(DISABLE_UPDATE_CHECKER) if (ConfigHandler().checkForUpdates()) { getLatestAvailableVersion(); } #endif } void FlameshotDaemon::start() { if (!m_instance) { m_instance = new FlameshotDaemon(); // Tray icon needs FlameshotDaemon::instance() to be non-null m_instance->initTrayIcon(); qApp->setQuitOnLastWindowClosed(false); } } void FlameshotDaemon::createPin(const QPixmap& capture, QRect geometry) { if (instance()) { instance()->attachPin(capture, geometry); return; } QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) auto kdsa = KDSingleApplication(QStringLiteral("org.flameshot.Flameshot")); stream << QStringLiteral("attachPin") << capture << geometry; kdsa.sendMessage(data); #else stream << capture << geometry; QDBusMessage m = createMethodCall(QStringLiteral("attachPin")); m << data; call(m); #endif } void FlameshotDaemon::copyToClipboard(const QPixmap& capture) { #if defined(Q_OS_MACOS) && defined(USE_KDSINGLEAPPLICATION) auto kdsa = KDSingleApplication(QStringLiteral("org.flameshot.Flameshot")); if (kdsa.isPrimaryInstance() && instance()) { #else if (instance()) { #endif instance()->attachScreenshotToClipboard(capture); return; } QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #if defined(Q_OS_WIN) auto kdsa = KDSingleApplication(QStringLiteral("org.flameshot.Flameshot")); #endif stream << QStringLiteral("attachScreenshotToClipboard") << capture; kdsa.sendMessage(data); #else stream << capture; QDBusMessage m = createMethodCall(QStringLiteral("attachScreenshotToClipboard")); m << data; call(m); #endif } void FlameshotDaemon::copyToClipboard(const QString& text, const QString& notification) { #if defined(Q_OS_MACOS) && defined(USE_KDSINGLEAPPLICATION) auto kdsa = KDSingleApplication(QStringLiteral("org.flameshot.Flameshot")); if (kdsa.isPrimaryInstance() && instance()) { #else if (instance()) { #endif instance()->attachTextToClipboard(text, notification); return; } #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #if defined(Q_OS_WIN) auto kdsa = KDSingleApplication(QStringLiteral("org.flameshot.Flameshot")); #endif QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); stream << QStringLiteral("attachTextToClipboard") << text << notification; kdsa.sendMessage(data); #else auto m = createMethodCall(QStringLiteral("attachTextToClipboard")); m << text << notification; call(m); #endif } /** * @brief Is this instance of flameshot hosting any windows as a daemon? */ bool FlameshotDaemon::isThisInstanceHostingWidgets() { return instance() && !instance()->m_widgets.isEmpty(); } void FlameshotDaemon::sendTrayNotification(const QString& text, const QString& title, const int timeout) { if (m_trayIcon) { m_trayIcon->showMessage( title, text, QIcon(GlobalValues::iconPath()), timeout); } } #if !defined(DISABLE_UPDATE_CHECKER) void FlameshotDaemon::showUpdateNotificationIfAvailable(CaptureWidget* widget) { if (!m_appLatestUrl.isEmpty() && ConfigHandler().ignoreUpdateToVersion().compare(m_appLatestVersion) < 0) { widget->showAppUpdateNotification(m_appLatestVersion, m_appLatestUrl); } } void FlameshotDaemon::getLatestAvailableVersion() { // This features is required for MacOS and Windows user and for Linux users // who installed Flameshot not from the repository. QNetworkRequest requestCheckUpdates(QUrl(FLAMESHOT_APP_VERSION_URL)); if (nullptr == m_networkCheckUpdates) { m_networkCheckUpdates = new QNetworkAccessManager(this); connect(m_networkCheckUpdates, &QNetworkAccessManager::finished, this, &FlameshotDaemon::handleReplyCheckUpdates); } m_networkCheckUpdates->get(requestCheckUpdates); // check for updates each 24 hours QTimer::singleShot(1000 * 60 * 60 * 24, [this]() { if (ConfigHandler().checkForUpdates()) { this->getLatestAvailableVersion(); } }); } void FlameshotDaemon::checkForUpdates() { bool autoCheckEnabled = ConfigHandler().checkForUpdates(); if (autoCheckEnabled) { if (!m_appLatestUrl.isEmpty()) { QDesktopServices::openUrl(QUrl(m_appLatestUrl)); } } else { m_showManualCheckAppUpdateStatus = true; if (m_appLatestUrl.isEmpty()) { getLatestAvailableVersion(); } else { QVersionNumber appLatestVersion = QVersionNumber::fromString(m_appLatestVersion); if (Flameshot::instance()->getVersion() < appLatestVersion) { QDesktopServices::openUrl(QUrl(m_appLatestUrl)); } else { sendTrayNotification(tr("You have the latest version"), "Flameshot"); } } } } #endif /** * @brief Return the daemon instance. * * If this instance of flameshot is the daemon, a singleton instance of * `FlameshotDaemon` is returned. As a side effect`start` will called if it * wasn't called earlier. If this instance of flameshot is not the daemon, * `nullptr` is returned. * * This strategy is used because the daemon needs to receive signals from D-Bus, * for which an instance of a `QObject` is required. The singleton serves as * that object. */ FlameshotDaemon* FlameshotDaemon::instance() { // Because we don't use DBus on MacOS, each instance of flameshot is its own // mini-daemon, responsible for hosting its own persistent widgets (e.g. // pins). #if defined(Q_OS_MACOS) start(); #endif return m_instance; } /** * @brief Quit the daemon if it has nothing to do and the 'persist' flag is not * set. */ void FlameshotDaemon::quitIfIdle() { if (m_persist) { return; } if (!m_hostingClipboard && m_widgets.isEmpty()) { qApp->exit(E_OK); } } // SERVICE METHODS void FlameshotDaemon::attachPin(const QPixmap& pixmap, QRect geometry) { auto* pinWidget = new PinWidget(pixmap, geometry); m_widgets.append(pinWidget); connect(pinWidget, &QObject::destroyed, this, [=, this]() { m_widgets.removeOne(pinWidget); quitIfIdle(); }); pinWidget->show(); pinWidget->activateWindow(); } void FlameshotDaemon::attachScreenshotToClipboard(const QPixmap& pixmap) { m_hostingClipboard = true; QClipboard* clipboard = QApplication::clipboard(); clipboard->blockSignals(true); // This variable is necessary because the signal doesn't get blocked on // windows for some reason m_clipboardSignalBlocked = true; saveToClipboard(pixmap); clipboard->blockSignals(false); } // D-BUS / KDSingleApplication METHODS void FlameshotDaemon::attachPin(const QByteArray& data) { QDataStream stream(data); QPixmap pixmap; QRect geometry; stream >> pixmap; stream >> geometry; attachPin(pixmap, geometry); } void FlameshotDaemon::attachScreenshotToClipboard(const QByteArray& screenshot) { QDataStream stream(screenshot); QPixmap p; stream >> p; attachScreenshotToClipboard(p); } void FlameshotDaemon::attachTextToClipboard(const QString& text, const QString& notification) { // Must send notification before clipboard modification on linux if (!notification.isEmpty()) { AbstractLogger::info() << notification; } m_hostingClipboard = true; QClipboard* clipboard = QApplication::clipboard(); clipboard->blockSignals(true); // This variable is necessary because the signal doesn't get blocked on // windows for some reason m_clipboardSignalBlocked = true; clipboard->setText(text); clipboard->blockSignals(false); } void FlameshotDaemon::initTrayIcon() { #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) if (!ConfigHandler().disabledTrayIcon()) { enableTrayIcon(true); } #elif defined(Q_OS_WIN) enableTrayIcon(true); GlobalShortcutFilter* nativeFilter = new GlobalShortcutFilter(this); qApp->installNativeEventFilter(nativeFilter); #endif } void FlameshotDaemon::enableTrayIcon(bool enable) { if (enable) { if (m_trayIcon == nullptr) { m_trayIcon = new TrayIcon(); } else { m_trayIcon->show(); return; } } else if (m_trayIcon) { m_trayIcon->hide(); } } #if !defined(DISABLE_UPDATE_CHECKER) void FlameshotDaemon::handleReplyCheckUpdates(QNetworkReply* reply) { if (!ConfigHandler().checkForUpdates() && !m_showManualCheckAppUpdateStatus) { return; } if (reply->error() == QNetworkReply::NoError) { QJsonDocument response = QJsonDocument::fromJson(reply->readAll()); QJsonObject json = response.object(); m_appLatestVersion = json["tag_name"].toString().replace("v", ""); QVersionNumber appLatestVersion = QVersionNumber::fromString(m_appLatestVersion); if (Flameshot::instance()->getVersion() < appLatestVersion) { emit newVersionAvailable(appLatestVersion); m_appLatestUrl = json["html_url"].toString(); if (m_showManualCheckAppUpdateStatus) { QDesktopServices::openUrl(QUrl(m_appLatestUrl)); } } else if (m_showManualCheckAppUpdateStatus) { sendTrayNotification(tr("You have the latest version"), "Flameshot"); } } else { qWarning() << "Failed to get information about the latest version. " << reply->errorString(); if (m_showManualCheckAppUpdateStatus) { if (FlameshotDaemon::instance()) { FlameshotDaemon::instance()->sendTrayNotification( tr("Failed to get information about the latest version."), "Flameshot"); } } } m_showManualCheckAppUpdateStatus = false; } #endif #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) QDBusMessage FlameshotDaemon::createMethodCall(const QString& method) { QDBusMessage m = QDBusMessage::createMethodCall(QStringLiteral("org.flameshot.Flameshot"), QStringLiteral("/"), QLatin1String(""), method); return m; } void FlameshotDaemon::checkDBusConnection(const QDBusConnection& connection) { if (!connection.isConnected()) { AbstractLogger::error() << tr("Unable to connect via DBus"); qApp->exit(E_DBUSCONN); } } void FlameshotDaemon::call(const QDBusMessage& m) { QDBusConnection sessionBus = QDBusConnection::sessionBus(); checkDBusConnection(sessionBus); sessionBus.call(m); } #endif #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) void FlameshotDaemon::messageReceivedFromSecondaryInstance( const QByteArray& message) { // qDebug() << "Received message from second instance:" << message; QByteArray messageCopy = message; QBuffer buffer(&messageCopy); buffer.open(QIODevice::ReadOnly); QDataStream stream(&buffer); QString methodCall; stream >> methodCall; // qDebug() << "Method:" << methodCall; if (methodCall == QStringLiteral("attachPin")) { QPixmap capture; QRect geometry; stream >> capture >> geometry; // qDebug() << "Pixmap:" << capture; // qDebug() << "Geometry:" << geometry; if (!capture.isNull()) { FlameshotDaemon::instance()->attachPin(capture, geometry); } else { qWarning() << "Received \"attachPin\" from second instance, but " "pixmap is empty!"; } } else if (methodCall == QStringLiteral("attachScreenshotToClipboard")) { QPixmap capture; stream >> capture; // qDebug() << "Pixmap:" << capture; if (!capture.isNull()) { FlameshotDaemon::instance()->attachScreenshotToClipboard(capture); } else { qWarning() << "Received \"attachScreenshotToClipboard\" from " "second instance, but pixmap is empty!"; } } else if (methodCall == (QStringLiteral("attachTextToClipboard"))) { QString text; QString notification; stream >> text >> notification; // qDebug() << "Text:" << text; // qDebug() << "Notification:" << notification; if (!text.isEmpty()) { FlameshotDaemon::instance()->attachTextToClipboard(text, notification); } else { qWarning() << "Received \"attachTextToClipboard\" from second " "instance, but text is empty!"; } } else { qWarning() << "Received unknown message from second instance:" << message; } } #endif // STATIC ATTRIBUTES FlameshotDaemon* FlameshotDaemon::m_instance = nullptr; ================================================ FILE: src/core/flameshotdaemon.h ================================================ #pragma once #include #include #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #include #endif class QPixmap; class QRect; class QDBusMessage; class QDBusConnection; class TrayIcon; class CaptureWidget; #if !defined(DISABLE_UPDATE_CHECKER) class QNetworkAccessManager; class QNetworkReply; class QVersionNumber; #endif class FlameshotDaemon : public QObject { Q_OBJECT public: static void start(); static FlameshotDaemon* instance(); static void createPin(const QPixmap& capture, QRect geometry); static void copyToClipboard(const QPixmap& capture); static void copyToClipboard(const QString& text, const QString& notification = ""); static bool isThisInstanceHostingWidgets(); void sendTrayNotification( const QString& text, const QString& title = QStringLiteral("Flameshot Info"), const int timeout = 5000); #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) public slots: void messageReceivedFromSecondaryInstance(const QByteArray& message); #endif #if !defined(DISABLE_UPDATE_CHECKER) public: void showUpdateNotificationIfAvailable(CaptureWidget* widget); public slots: void checkForUpdates(); void getLatestAvailableVersion(); private slots: void handleReplyCheckUpdates(QNetworkReply* reply); signals: void newVersionAvailable(QVersionNumber version); #endif private: FlameshotDaemon(); void quitIfIdle(); void attachPin(const QPixmap& pixmap, QRect geometry); void attachScreenshotToClipboard(const QPixmap& pixmap); void attachPin(const QByteArray& data); void attachScreenshotToClipboard(const QByteArray& screenshot); void attachTextToClipboard(const QString& text, const QString& notification); void initTrayIcon(); void enableTrayIcon(bool enable); #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) static QDBusMessage createMethodCall(const QString& method); static void checkDBusConnection(const QDBusConnection& connection); static void call(const QDBusMessage& m); #endif bool m_persist; bool m_hostingClipboard; bool m_clipboardSignalBlocked; QList m_widgets; TrayIcon* m_trayIcon; #if !defined(DISABLE_UPDATE_CHECKER) QString m_appLatestUrl; QString m_appLatestVersion; bool m_showManualCheckAppUpdateStatus; QNetworkAccessManager* m_networkCheckUpdates; #endif static FlameshotDaemon* m_instance; #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) friend class FlameshotDBusAdapter; #endif }; ================================================ FILE: src/core/flameshotdbusadapter.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "flameshotdbusadapter.h" #include "src/core/flameshotdaemon.h" FlameshotDBusAdapter::FlameshotDBusAdapter(QObject* parent) : QDBusAbstractAdaptor(parent) {} FlameshotDBusAdapter::~FlameshotDBusAdapter() = default; void FlameshotDBusAdapter::attachScreenshotToClipboard(const QByteArray& data) { FlameshotDaemon::instance()->attachScreenshotToClipboard(data); } void FlameshotDBusAdapter::attachTextToClipboard(const QString& text, const QString& notification) { FlameshotDaemon::instance()->attachTextToClipboard(text, notification); } void FlameshotDBusAdapter::attachPin(const QByteArray& data) { FlameshotDaemon::instance()->attachPin(data); } ================================================ FILE: src/core/flameshotdbusadapter.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class FlameshotDBusAdapter : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.flameshot.Flameshot") public: explicit FlameshotDBusAdapter(QObject* parent = nullptr); virtual ~FlameshotDBusAdapter(); public slots: Q_NOREPLY void attachScreenshotToClipboard(const QByteArray& data); Q_NOREPLY void attachTextToClipboard(const QString& text, const QString& notification); Q_NOREPLY void attachPin(const QByteArray& data); }; ================================================ FILE: src/core/globalshortcutfilter.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "globalshortcutfilter.h" #include "src/core/flameshot.h" #include GlobalShortcutFilter::GlobalShortcutFilter(QObject* parent) : QObject(parent) { // Forced Print Screen if (RegisterHotKey(NULL, 1, 0, VK_SNAPSHOT)) { // ok - capture screen } if (RegisterHotKey(NULL, 2, MOD_SHIFT, VK_SNAPSHOT)) { // ok - show screenshots history } } bool GlobalShortcutFilter::nativeEventFilter(const QByteArray& eventType, void* message, qintptr* result) { Q_UNUSED(eventType) Q_UNUSED(result) MSG* msg = static_cast(message); if (msg->message == WM_HOTKEY) { // TODO: this is just a temporary workaround; proper global // support would need custom shortcuts defined by the user. const quint32 keycode = HIWORD(msg->lParam); const quint32 modifiers = LOWORD(msg->lParam); #ifdef ENABLE_IMGUR // Show screenshots history if (VK_SNAPSHOT == keycode && MOD_SHIFT == modifiers) { Flameshot::instance()->history(); return true; } #endif // Capture screen if (VK_SNAPSHOT == keycode && 0 == modifiers) { Flameshot::instance()->requestCapture( CaptureRequest(CaptureRequest::GRAPHICAL_MODE)); return true; } } return false; // Forward event to Qt } ================================================ FILE: src/core/globalshortcutfilter.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include class GlobalShortcutFilter : public QObject , public QAbstractNativeEventFilter { Q_OBJECT public: explicit GlobalShortcutFilter(QObject* parent = nullptr); bool nativeEventFilter(const QByteArray& eventType, void* message, qintptr* result); private: quint32 getNativeModifier(Qt::KeyboardModifiers modifiers); quint32 nativeKeycode(Qt::Key key); bool registerShortcut(quint32 nativeKey, quint32 nativeMods); bool unregisterShortcut(quint32 nativeKey, quint32 nativeMods); }; ================================================ FILE: src/core/qguiappcurrentscreen.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Yuriy Puchkov #include "qguiappcurrentscreen.h" #include #include #include #include QGuiAppCurrentScreen::QGuiAppCurrentScreen() { m_currentScreen = nullptr; } QScreen* QGuiAppCurrentScreen::currentScreen() { return currentScreen(QCursor::pos()); } QScreen* QGuiAppCurrentScreen::currentScreen(const QPoint& pos) { m_currentScreen = screenAt(pos); #if defined(Q_OS_MACOS) // On the MacOS if mouse position is at the edge of bottom or right sides // qGuiApp->screenAt will return nullptr, so we need to try to find current // screen by moving 1 pixel inside to the current desktop area if (!m_currentScreen && pos.x() > 0) { QPoint posCorrected(pos.x() - 1, pos.y()); m_currentScreen = screenAt(posCorrected); } if (!m_currentScreen && pos.y() > 0) { QPoint posCorrected(pos.x(), pos.y() - 1); m_currentScreen = screenAt(posCorrected); } if (!m_currentScreen && pos.x() > 0 && pos.y() > 0) { QPoint posCorrected(pos.x() - 1, pos.y() - 1); m_currentScreen = screenAt(posCorrected); } #endif if (!m_currentScreen) { qCritical("Unable to get current screen, starting to use primary " "screen. It may be a cause of logical error and working with " "a wrong screen."); m_currentScreen = qGuiApp->primaryScreen(); } return m_currentScreen; } QScreen* QGuiAppCurrentScreen::screenAt(const QPoint& pos) { m_currentScreen = qGuiApp->screenAt(pos); return m_currentScreen; } ================================================ FILE: src/core/qguiappcurrentscreen.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Yuriy Puchkov #ifndef FLAMESHOT_QGUIAPPCURRENTSCREEN_H #define FLAMESHOT_QGUIAPPCURRENTSCREEN_H #include class QScreen; class QGuiAppCurrentScreen { public: explicit QGuiAppCurrentScreen(); QScreen* currentScreen(); QScreen* currentScreen(const QPoint& pos); private: QScreen* screenAt(const QPoint& pos); // class members private: QScreen* m_currentScreen; }; #endif // FLAMESHOT_QGUIAPPCURRENTSCREEN_H ================================================ FILE: src/core/signaldaemon.cpp ================================================ #include "signaldaemon.h" #include "flameshot.h" #include #include #include #include #include #include int SignalDaemon::sigintFd[2]; int SignalDaemon::sigtermFd[2]; SignalDaemon::SignalDaemon(QObject* parent) : QObject(parent) { if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigintFd)) qFatal("Couldn't create INT socketpair"); if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigtermFd)) qFatal("Couldn't create TERM socketpair"); snInt = new QSocketNotifier(sigintFd[1], QSocketNotifier::Read, this); connect( snInt, SIGNAL(activated(QSocketDescriptor)), this, SLOT(handleSigInt())); snTerm = new QSocketNotifier(sigtermFd[1], QSocketNotifier::Read, this); connect(snTerm, SIGNAL(activated(QSocketDescriptor)), this, SLOT(handleSigTerm())); } void SignalDaemon::intSignalHandler(int) { char msg = 1; ::write(sigintFd[0], &msg, sizeof(msg)); } void SignalDaemon::termSignalHandler(int) { char msg = 1; ::write(sigtermFd[0], &msg, sizeof(msg)); } void SignalDaemon::handleSigTerm() { snTerm->setEnabled(false); char tmp = 0; ::read(sigtermFd[1], &tmp, sizeof(tmp)); QApplication::exit(E_SIGTERM); snTerm->setEnabled(true); } void SignalDaemon::handleSigInt() { snInt->setEnabled(false); char tmp = 0; ::read(sigintFd[1], &tmp, sizeof(tmp)); QApplication::exit(E_SIGINT); snInt->setEnabled(true); } ================================================ FILE: src/core/signaldaemon.h ================================================ #include #include class SignalDaemon : public QObject { Q_OBJECT public: SignalDaemon(QObject* parent = 0); ~SignalDaemon() = default; // Unix signal handlers. static void intSignalHandler(int unused); static void termSignalHandler(int unused); public slots: // Qt signal handlers. void handleSigInt(); void handleSigTerm(); private: static int sigintFd[2]; static int sigtermFd[2]; QSocketNotifier* snInt; QSocketNotifier* snTerm; }; ================================================ FILE: src/main.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #ifdef USE_KDSINGLEAPPLICATION #include #ifdef Q_OS_UNIX #include "core/signaldaemon.h" #include "csignal" #endif #endif #include "abstractlogger.h" #include "src/cli/commandlineparser.h" #include "src/config/cacheutils.h" #include "src/config/styleoverride.h" #include "src/core/capturerequest.h" #include "src/core/flameshot.h" #include "src/core/flameshotdaemon.h" #include "src/utils/confighandler.h" #include "src/utils/filenamehandler.h" #include "src/utils/pathinfo.h" #include "src/utils/valuehandler.h" #include #include #include #include #include #include #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #include "src/core/flameshotdbusadapter.h" #include #include #include #endif // Required for saving button list QList Q_DECLARE_METATYPE(QList) #if defined(USE_KDSINGLEAPPLICATION) && defined(Q_OS_UNIX) static int setup_unix_signal_handlers() { struct sigaction sint, term; sint.sa_handler = SignalDaemon::intSignalHandler; sigemptyset(&sint.sa_mask); sint.sa_flags = 0; sint.sa_flags |= SA_RESTART; if (sigaction(SIGINT, &sint, 0)) return 1; term.sa_handler = SignalDaemon::termSignalHandler; sigemptyset(&term.sa_mask); term.sa_flags = 0; term.sa_flags |= SA_RESTART; if (sigaction(SIGTERM, &term, 0)) return 2; return 0; } #endif int requestCaptureAndWait(const CaptureRequest& req) { Flameshot* flameshot = Flameshot::instance(); flameshot->requestCapture(req); QObject::connect(flameshot, &Flameshot::captureTaken, [&](const QPixmap&) { #if defined(Q_OS_MACOS) // Only useful on MacOS because each instance hosts its own widgets if (!FlameshotDaemon::isThisInstanceHostingWidgets()) { qApp->exit(0); } #else // if this instance is not daemon, make sure it exit after caputre finish if (FlameshotDaemon::instance() == nullptr && !Flameshot::instance()->haveExternalWidget()) { qApp->exit(E_OK); } #endif }); QObject::connect(flameshot, &Flameshot::captureFailed, []() { AbstractLogger::Target logTarget = static_cast( ConfigHandler().showAbortNotification() ? AbstractLogger::Target::Default : AbstractLogger::Target::Default & ~AbstractLogger::Target::Notification); AbstractLogger::info(logTarget) << "Screenshot aborted."; qApp->exit(E_ABORTED); }); return qApp->exec(); } QSharedMemory* guiMutexLock() { QString key = "org.flameshot.Flameshot-" APP_VERSION; auto* shm = new QSharedMemory(key); #ifdef Q_OS_UNIX // Destroy shared memory if the last instance crashed on Unix shm->attach(); delete shm; shm = new QSharedMemory(key); #endif if (!shm->create(1)) { delete shm; return nullptr; } return shm; } void configureTranslation(QTranslator& translator, QTranslator& qtTranslator) { bool foundTranslation; // Configure translations for (const QString& path : PathInfo::translationsPaths()) { if (ConfigHandler().uiLanguage() == QStringLiteral("auto")) { // Load language, which was detected from the system foundTranslation = translator.load(QLocale(), QStringLiteral("Internationalization"), QStringLiteral("_"), path); } else { // Load language from settings foundTranslation = translator.load(QStringLiteral("Internationalization_") + ConfigHandler().uiLanguage(), path); } if (foundTranslation) { break; } } if (!foundTranslation) { if (ConfigHandler().uiLanguage() == QStringLiteral("auto")) { QLocale l; qWarning() << QStringLiteral( "No Flameshot translation found for %1") .arg(l.uiLanguages().join(", ")); } else { qWarning() << QStringLiteral( "No Flameshot translation found for %1") .arg(ConfigHandler().uiLanguage()); } } if (ConfigHandler().uiLanguage() == QStringLiteral("auto")) { foundTranslation = qtTranslator.load(QLocale::system(), "qt", "_", QLibraryInfo::path(QLibraryInfo::TranslationsPath)); } else { foundTranslation = qtTranslator.load( QStringLiteral("qt_") + ConfigHandler().uiLanguage(), QLibraryInfo::path(QLibraryInfo::TranslationsPath)); } if (!foundTranslation) { if (ConfigHandler().uiLanguage() == QStringLiteral("auto")) { qWarning() << QStringLiteral("No Qt translation found for %1") .arg(QLocale::languageToString( QLocale::system().language())); } else { qWarning() << QStringLiteral("No Qt translation found for %1") .arg(ConfigHandler().uiLanguage()); } } qApp->installTranslator(&translator); qApp->installTranslator(&qtTranslator); } void configureApp(bool gui, QTranslator& translator, QTranslator& qtTranslator) { if (gui) { #if defined(Q_OS_WIN) && QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) QApplication::setStyle("Fusion"); // Supports dark scheme on Win 10/11 #else QApplication::setStyle(new StyleOverride); #endif } auto app = QCoreApplication::instance(); app->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true); configureTranslation(translator, qtTranslator); } // TODO find a way so we don't have to do this /// Recreate the application as a QApplication void reinitializeAsQApplication(int& argc, char* argv[], QTranslator& translator, QTranslator& qtTranslator) { delete QCoreApplication::instance(); new QApplication(argc, argv); configureApp(true, translator, qtTranslator); } int main(int argc, char* argv[]) { QTranslator translator, qtTranslator; // Required for saving button list QList qRegisterMetaType>(); QCoreApplication::setApplicationVersion(APP_VERSION); QCoreApplication::setApplicationName(QStringLiteral("flameshot")); QCoreApplication::setOrganizationName(QStringLiteral("flameshot")); // no arguments, just launch Flameshot if (argc == 1) { QApplication app(argc, argv); configureTranslation(translator, qtTranslator); #ifdef USE_KDSINGLEAPPLICATION #ifdef Q_OS_UNIX setup_unix_signal_handlers(); auto signalDaemon = SignalDaemon(); #endif auto kdsa = KDSingleApplication(QStringLiteral("org.flameshot.Flameshot")); if (!kdsa.isPrimaryInstance()) { return 0; // Quit } #endif configureApp(true, translator, qtTranslator); auto c = Flameshot::instance(); FlameshotDaemon::start(); #if defined(USE_KDSINGLEAPPLICATION) && \ (defined(Q_OS_MACOS) || defined(Q_OS_WIN)) if (kdsa.isPrimaryInstance()) { QObject::connect( &kdsa, &KDSingleApplication::messageReceived, FlameshotDaemon::instance(), &FlameshotDaemon::messageReceivedFromSecondaryInstance); } #endif #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) new FlameshotDBusAdapter(c); QDBusConnection dbus = QDBusConnection::sessionBus(); if (!dbus.isConnected()) { AbstractLogger::error() << QObject::tr("Unable to connect via DBus"); } dbus.registerObject(QStringLiteral("/"), c); dbus.registerService(QStringLiteral("org.flameshot.Flameshot")); #endif return qApp->exec(); } /*--------------| * CLI parsing | * ------------*/ new QCoreApplication(argc, argv); configureApp(false, translator, qtTranslator); CommandLineParser parser; // Add description parser.setDescription( QObject::tr("Powerful yet simple to use screenshot software.")); parser.setGeneralErrorMessage(QObject::tr("See") + " flameshot --help."); // Arguments CommandArgument fullArgument( QStringLiteral("full"), QObject::tr("Capture screenshot of all monitors at the same time.")); CommandArgument launcherArgument(QStringLiteral("launcher"), QObject::tr("Open the capture launcher.")); CommandArgument guiArgument( QStringLiteral("gui"), QObject::tr("Start a manual capture in GUI mode.")); CommandArgument configArgument(QStringLiteral("config"), QObject::tr("Configure") + " flameshot."); CommandArgument screenArgument( QStringLiteral("screen"), QObject::tr("Capture a screenshot of the specified monitor.")); // Options CommandOption pathOption( { "p", "path" }, QObject::tr("Existing directory or new file to save to"), QStringLiteral("path")); CommandOption clipboardOption( { "c", "clipboard" }, QObject::tr("Save the capture to the clipboard")); CommandOption pinOption("pin", QObject::tr("Pin the capture to the screen")); CommandOption delayOption({ "d", "delay" }, QObject::tr("Delay time in milliseconds"), QStringLiteral("milliseconds")); CommandOption useLastRegionOption( "last-region", QObject::tr("Repeat screenshot with previously selected region")); CommandOption regionOption("region", QObject::tr("Screenshot region to select"), QStringLiteral("WxH+X+Y or string")); CommandOption filenameOption({ "f", "filename" }, QObject::tr("Set the filename pattern"), QStringLiteral("pattern")); CommandOption acceptOnSelectOption( { "s", "accept-on-select" }, QObject::tr("Accept capture as soon as a selection is made")); CommandOption trayOption({ "t", "trayicon" }, QObject::tr("Enable or disable the trayicon"), QStringLiteral("bool")); CommandOption autostartOption( { "a", "autostart" }, QObject::tr("Enable or disable run at startup"), QStringLiteral("bool")); CommandOption notificationOption( { "n", "notifications" }, QObject::tr("Enable or disable the notifications"), QStringLiteral("bool")); CommandOption checkOption( "check", QObject::tr("Check the configuration for errors")); CommandOption showHelpOption( { "s", "showhelp" }, QObject::tr("Show the help message in the capture mode"), QStringLiteral("bool")); CommandOption mainColorOption({ "m", "maincolor" }, QObject::tr("Define the main UI color"), QStringLiteral("color-code")); CommandOption contrastColorOption( { "k", "contrastcolor" }, QObject::tr("Define the contrast UI color"), QStringLiteral("color-code")); CommandOption rawImageOption({ "r", "raw" }, QObject::tr("Print raw PNG capture")); CommandOption selectionOption( { "g", "print-geometry" }, QObject::tr("Print geometry of the selection in the format WxH+X+Y. Does " "nothing if raw is specified")); CommandOption screenNumberOption( { "n", "number" }, QObject::tr("Define the screen to capture (starting from 0)") + ",\n" + QObject::tr("default: screen containing the cursor"), QObject::tr("Screen number"), QStringLiteral("-1")); CommandOption editOption( { "e", "edit" }, QObject::tr("Interactively select and edit the screenshot region")); // Add checkers auto colorChecker = [](const QString& colorCode) -> bool { QColor parsedColor(colorCode); return parsedColor.isValid() && parsedColor.alphaF() == 1.0; }; QString colorErr = QObject::tr("Invalid color, " "this flag supports the following formats:\n" "- #RGB (each of R, G, and B is a single hex digit)\n" "- #RRGGBB\n- #RRRGGGBBB\n" "- #RRRRGGGGBBBB\n" "- Named colors like 'blue' or 'red'\n" "You may need to escape the '#' sign as in '\\#FFF'"); const QString delayErr = QObject::tr("Invalid delay, it must be a number greater than 0"); const QString numberErr = QObject::tr("Invalid screen number, it must be non negative"); const QString regionErr = QObject::tr( "Invalid region, use 'WxH+X+Y' or 'all' or 'screen0/screen1/...'."); auto numericChecker = [](const QString& delayValue) -> bool { bool ok; int value = delayValue.toInt(&ok); return ok && value >= 0; }; auto regionChecker = [](const QString& region) -> bool { Region valueHandler; return valueHandler.check(region); }; const QString pathErr = QObject::tr("Invalid path, must be an existing directory or a new file " "in an existing directory"); auto pathChecker = [pathErr](const QString& pathValue) -> bool { QFileInfo fileInfo(pathValue); if (fileInfo.isDir() || fileInfo.dir().exists()) { return true; } else { AbstractLogger::error() << QObject::tr(pathErr.toLatin1().data()); return false; } }; const QString booleanErr = QObject::tr("Invalid value, it must be defined as 'true' or 'false'"); auto booleanChecker = [](const QString& value) -> bool { return value == QLatin1String("true") || value == QLatin1String("false"); }; contrastColorOption.addChecker(colorChecker, colorErr); mainColorOption.addChecker(colorChecker, colorErr); delayOption.addChecker(numericChecker, delayErr); regionOption.addChecker(regionChecker, regionErr); useLastRegionOption.addChecker(booleanChecker, booleanErr); pathOption.addChecker(pathChecker, pathErr); trayOption.addChecker(booleanChecker, booleanErr); autostartOption.addChecker(booleanChecker, booleanErr); notificationOption.addChecker(booleanChecker, booleanErr); showHelpOption.addChecker(booleanChecker, booleanErr); screenNumberOption.addChecker(numericChecker, numberErr); // Relationships parser.AddArgument(guiArgument); parser.AddArgument(screenArgument); parser.AddArgument(fullArgument); parser.AddArgument(launcherArgument); parser.AddArgument(configArgument); auto helpOption = parser.addHelpOption(); auto versionOption = parser.addVersionOption(); parser.AddOptions({ pathOption, clipboardOption, delayOption, regionOption, useLastRegionOption, rawImageOption, selectionOption, pinOption, acceptOnSelectOption }, guiArgument); parser.AddOptions({ screenNumberOption, editOption, clipboardOption, pathOption, delayOption, regionOption, rawImageOption, pinOption }, screenArgument); parser.AddOptions( { pathOption, clipboardOption, delayOption, rawImageOption }, fullArgument); parser.AddOptions({ autostartOption, notificationOption, filenameOption, trayOption, showHelpOption, mainColorOption, contrastColorOption, checkOption }, configArgument); // Parse if (!parser.parse(qApp->arguments())) { goto finish; } // PROCESS DATA //-------------- Flameshot::setOrigin(Flameshot::CLI); if (parser.isSet(helpOption) || parser.isSet(versionOption)) { } else if (parser.isSet(launcherArgument)) { // LAUNCHER reinitializeAsQApplication(argc, argv, translator, qtTranslator); Flameshot* flameshot = Flameshot::instance(); flameshot->launcher(); qApp->exec(); } else if (parser.isSet(guiArgument)) { // GUI reinitializeAsQApplication(argc, argv, translator, qtTranslator); // Prevent multiple instances of 'flameshot gui' from running if not // configured to do so. if (!ConfigHandler().allowMultipleGuiInstances()) { auto* mutex = guiMutexLock(); if (!mutex) { return 1; } QObject::connect( qApp, &QCoreApplication::aboutToQuit, qApp, [mutex]() { mutex->detach(); delete mutex; }); } // Option values QString path = parser.value(pathOption); if (!path.isEmpty()) { path = QDir(path).absolutePath(); } int delay = parser.value(delayOption).toInt(); QString region = parser.value(regionOption); bool useLastRegion = parser.isSet(useLastRegionOption); bool clipboard = parser.isSet(clipboardOption); bool raw = parser.isSet(rawImageOption); bool printGeometry = parser.isSet(selectionOption); bool pin = parser.isSet(pinOption); bool acceptOnSelect = parser.isSet(acceptOnSelectOption); CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay, path); if (!region.isEmpty()) { auto selectionRegion = Region().value(region).toRect(); req.setInitialSelection(selectionRegion); } else if (useLastRegion) { req.setInitialSelection(getLastRegion()); } if (clipboard) { req.addTask(CaptureRequest::COPY); } if (raw) { req.addTask(CaptureRequest::PRINT_RAW); } if (!path.isEmpty()) { req.addSaveTask(path); } if (printGeometry) { req.addTask(CaptureRequest::PRINT_GEOMETRY); } if (pin) { req.addTask(CaptureRequest::PIN); } if (acceptOnSelect) { req.addTask(CaptureRequest::ACCEPT_ON_SELECT); if (!clipboard && !raw && path.isEmpty() && !printGeometry && !pin) { req.addSaveTask(); } } int guiExitCode = requestCaptureAndWait(req); delete qApp; return guiExitCode; } else if (parser.isSet(fullArgument)) { // FULL reinitializeAsQApplication(argc, argv, translator, qtTranslator); // Option values QString path = parser.value(pathOption); if (!path.isEmpty()) { path = QDir(path).absolutePath(); } int delay = parser.value(delayOption).toInt(); bool clipboard = parser.isSet(clipboardOption); bool raw = parser.isSet(rawImageOption); CaptureRequest req(CaptureRequest::FULLSCREEN_MODE, delay); if (clipboard) { req.addTask(CaptureRequest::COPY); } if (!path.isEmpty()) { req.addSaveTask(path); } if (raw) { req.addTask(CaptureRequest::PRINT_RAW); } if (!clipboard && path.isEmpty() && !raw) { req.addSaveTask(); } { int fullExitCode = requestCaptureAndWait(req); delete qApp; return fullExitCode; } } else if (parser.isSet(screenArgument)) { // SCREEN reinitializeAsQApplication(argc, argv, translator, qtTranslator); QString numberStr = parser.value(screenNumberOption); // Option values int screenNumber = numberStr.startsWith(QLatin1String("-")) ? -1 : numberStr.toInt(); QString path = parser.value(pathOption); if (!path.isEmpty()) { path = QDir(path).absolutePath(); } int delay = parser.value(delayOption).toInt(); QString region = parser.value(regionOption); bool clipboard = parser.isSet(clipboardOption); bool raw = parser.isSet(rawImageOption); bool pin = parser.isSet(pinOption); bool edit = parser.isSet(editOption); CaptureRequest req(edit ? CaptureRequest::GRAPHICAL_MODE : CaptureRequest::SCREEN_MODE, delay); // For edit mode, set the selected monitor if (edit && screenNumber >= 0) { req.setSelectedMonitor(screenNumber); } if (!region.isEmpty()) { if (region.startsWith("screen")) { AbstractLogger::error() << "The 'screen' command does not support " "'--region screen'.\n" "See flameshot --help.\n"; exit(1); } req.setInitialSelection(Region().value(region).toRect()); } if (clipboard) { req.addTask(CaptureRequest::COPY); } if (raw) { req.addTask(CaptureRequest::PRINT_RAW); } if (!path.isEmpty()) { req.addSaveTask(path); } if (pin) { req.addTask(CaptureRequest::PIN); } if (!edit && !clipboard && !raw && path.isEmpty() && !pin) { req.addSaveTask(); } { int screenExitCode = requestCaptureAndWait(req); delete qApp; return screenExitCode; } } else if (parser.isSet(configArgument)) { // CONFIG bool autostart = parser.isSet(autostartOption); bool notification = parser.isSet(notificationOption); bool filename = parser.isSet(filenameOption); bool tray = parser.isSet(trayOption); bool mainColor = parser.isSet(mainColorOption); bool contrastColor = parser.isSet(contrastColorOption); bool check = parser.isSet(checkOption); bool someFlagSet = (autostart || notification || filename || tray || mainColor || contrastColor || check); if (check) { AbstractLogger err = AbstractLogger::error(AbstractLogger::Stderr); bool ok = ConfigHandler().checkForErrors(&err); if (ok) { AbstractLogger::info() << QStringLiteral("No errors detected.\n"); goto finish; } else { return 1; } } if (!someFlagSet) { // Open gui when no options are given reinitializeAsQApplication(argc, argv, translator, qtTranslator); QObject::connect( qApp, &QApplication::lastWindowClosed, qApp, &QApplication::quit); Flameshot::instance()->config(); qApp->exec(); } else { ConfigHandler config; if (autostart) { config.setStartupLaunch(parser.value(autostartOption) == "true"); } if (notification) { config.setShowDesktopNotification( parser.value(notificationOption) == "true"); } if (filename) { QString newFilename(parser.value(filenameOption)); config.setFilenamePattern(newFilename); FileNameHandler fh; QTextStream(stdout) << QStringLiteral("The new pattern is '%1'\n" "Parsed pattern example: %2\n") .arg(newFilename, fh.parsedPattern()); } if (tray) { config.setDisabledTrayIcon(parser.value(trayOption) == "false"); } if (mainColor) { // TODO use value handler QString colorCode = parser.value(mainColorOption); QColor parsedColor(colorCode); config.setUiColor(parsedColor); } if (contrastColor) { QString colorCode = parser.value(contrastColorOption); QColor parsedColor(colorCode); config.setContrastUiColor(parsedColor); } } } finish: delete qApp; return 0; } ================================================ FILE: src/tools/CMakeLists.txt ================================================ target_sources(flameshot PRIVATE arrow/arrowtool.h arrow/arrowtool.cpp) target_sources(flameshot PRIVATE pixelate/pixelatetool.h pixelate/pixelatetool.cpp) target_sources(flameshot PRIVATE circle/circletool.h circle/circletool.cpp) target_sources(flameshot PRIVATE circlecount/circlecounttool.h circlecount/circlecounttool.cpp) target_sources(flameshot PRIVATE copy/copytool.h copy/copytool.cpp) target_sources(flameshot PRIVATE exit/exittool.h exit/exittool.cpp) target_sources(flameshot PRIVATE sizeincrease/sizeincreasetool.h sizeincrease/sizeincreasetool.cpp) target_sources(flameshot PRIVATE sizedecrease/sizedecreasetool.h sizedecrease/sizedecreasetool.cpp) if (ENABLE_IMGUR) target_sources( flameshot PRIVATE imgupload/storages/imgur/imguruploader.h imgupload/storages/imgur/imguruploader.cpp imgupload/storages/imguploaderbase.h imgupload/storages/imguploaderbase.cpp imgupload/imguploadertool.h imgupload/imguploadertool.cpp imgupload/imguploadermanager.h imgupload/imguploadermanager.cpp ) endif() target_sources( flameshot PRIVATE launcher/applaunchertool.h launcher/applauncherwidget.h launcher/launcheritemdelegate.h launcher/terminallauncher.h launcher/applaunchertool.cpp launcher/applauncherwidget.cpp launcher/launcheritemdelegate.cpp launcher/openwithprogram.cpp launcher/terminallauncher.cpp) target_sources(flameshot PRIVATE line/linetool.h line/linetool.cpp) target_sources(flameshot PRIVATE marker/markertool.h marker/markertool.cpp) target_sources(flameshot PRIVATE move/movetool.h move/movetool.cpp) target_sources(flameshot PRIVATE pencil/penciltool.h pencil/penciltool.cpp) target_sources( flameshot PRIVATE pin/pintool.h pin/pinwidget.h pin/pintool.cpp pin/pinwidget.cpp) target_sources(flameshot PRIVATE rectangle/rectangletool.h rectangle/rectangletool.cpp) target_sources(flameshot PRIVATE redo/redotool.h redo/redotool.cpp) target_sources(flameshot PRIVATE save/savetool.h save/savetool.cpp) target_sources(flameshot PRIVATE accept/accepttool.h accept/accepttool.cpp) target_sources(flameshot PRIVATE invert/inverttool.h invert/inverttool.cpp) target_sources(flameshot PRIVATE selection/selectiontool.h selection/selectiontool.cpp) target_sources( flameshot PRIVATE text/textconfig.h text/texttool.h text/textwidget.h text/textconfig.cpp text/texttool.cpp text/textwidget.cpp) target_sources(flameshot PRIVATE undo/undotool.h undo/undotool.cpp) target_sources( flameshot PRIVATE abstractactiontool.cpp abstractpathtool.cpp abstracttwopointtool.cpp capturecontext.cpp toolfactory.cpp abstractactiontool.h abstractpathtool.h abstracttwopointtool.h capturetool.h toolfactory.h) ================================================ FILE: src/tools/abstractactiontool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "abstractactiontool.h" AbstractActionTool::AbstractActionTool(QObject* parent) : CaptureTool(parent) {} bool AbstractActionTool::isValid() const { return true; } bool AbstractActionTool::isSelectable() const { return false; } bool AbstractActionTool::showMousePreview() const { return false; } QRect AbstractActionTool::boundingRect() const { return {}; } void AbstractActionTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(painter) Q_UNUSED(pixmap) } void AbstractActionTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { Q_UNUSED(painter) Q_UNUSED(context) } void AbstractActionTool::drawEnd(const QPoint& p) { Q_UNUSED(p) } void AbstractActionTool::drawMove(const QPoint& p) { Q_UNUSED(p) } void AbstractActionTool::drawStart(const CaptureContext& context) { Q_UNUSED(context) } void AbstractActionTool::onColorChanged(const QColor& c) { Q_UNUSED(c) } void AbstractActionTool::onSizeChanged(int size) { Q_UNUSED(size) } ================================================ FILE: src/tools/abstractactiontool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "capturetool.h" class AbstractActionTool : public CaptureTool { Q_OBJECT public: explicit AbstractActionTool(QObject* parent = nullptr); bool isValid() const override; bool isSelectable() const override; bool showMousePreview() const override; QRect boundingRect() const override; void process(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; public slots: void drawEnd(const QPoint& p) override; void drawMove(const QPoint& p) override; void drawStart(const CaptureContext& context) override; void onColorChanged(const QColor& c) override; void onSizeChanged(int size) override; }; ================================================ FILE: src/tools/abstractpathtool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "abstractpathtool.h" #include AbstractPathTool::AbstractPathTool(QObject* parent) : CaptureTool(parent) , m_thickness(1) , m_padding(0) {} void AbstractPathTool::copyParams(const AbstractPathTool* from, AbstractPathTool* to) { to->m_color = from->m_color; to->m_thickness = from->m_thickness; to->m_padding = from->m_padding; to->m_pos = from->m_pos; to->m_points.clear(); for (auto point : from->m_points) { to->m_points.append(point); } } bool AbstractPathTool::isValid() const { return m_points.length() > 1; } bool AbstractPathTool::closeOnButtonPressed() const { return false; } bool AbstractPathTool::isSelectable() const { return true; } bool AbstractPathTool::showMousePreview() const { return true; } QRect AbstractPathTool::mousePreviewRect(const CaptureContext& context) const { QRect rect(0, 0, context.toolSize + 2, context.toolSize + 2); rect.moveCenter(context.mousePos); return rect; } QRect AbstractPathTool::boundingRect() const { if (m_points.isEmpty()) { return {}; } int min_x = m_points.at(0).x(); int min_y = m_points.at(0).y(); int max_x = m_points.at(0).x(); int max_y = m_points.at(0).y(); for (auto point : m_points) { if (point.x() < min_x) { min_x = point.x(); } if (point.y() < min_y) { min_y = point.y(); } if (point.x() > max_x) { max_x = point.x(); } if (point.y() > max_y) { max_y = point.y(); } } int offset = m_thickness <= 1 ? 1 : static_cast(round(m_thickness * 0.7 + 0.5)); return QRect(min_x - offset, min_y - offset, std::abs(min_x - max_x) + offset * 2, std::abs(min_y - max_y) + offset * 2) .normalized(); } void AbstractPathTool::drawEnd(const QPoint& p) { Q_UNUSED(p) } void AbstractPathTool::drawMove(const QPoint& p) { addPoint(p); } void AbstractPathTool::onColorChanged(const QColor& c) { m_color = c; } void AbstractPathTool::onSizeChanged(int size) { m_thickness = size; } void AbstractPathTool::addPoint(const QPoint& point) { if (m_pathArea.left() > point.x()) { m_pathArea.setLeft(point.x()); } else if (m_pathArea.right() < point.x()) { m_pathArea.setRight(point.x()); } if (m_pathArea.top() > point.y()) { m_pathArea.setTop(point.y()); } else if (m_pathArea.bottom() < point.y()) { m_pathArea.setBottom(point.y()); } m_points.append(point); } void AbstractPathTool::move(const QPoint& mousePos) { if (m_points.empty()) { return; } QPoint basePos = *pos(); QPoint offset = mousePos - basePos; for (auto& m_point : m_points) { m_point += offset; } } const QPoint* AbstractPathTool::pos() { if (m_points.empty()) { m_pos = QPoint(); return &m_pos; } int x = m_points.at(0).x(); int y = m_points.at(0).y(); for (auto point : m_points) { if (point.x() < x) { x = point.x(); } if (point.y() < y) { y = point.y(); } } m_pos.setX(x); m_pos.setY(y); return &m_pos; } ================================================ FILE: src/tools/abstractpathtool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "capturetool.h" class AbstractPathTool : public CaptureTool { Q_OBJECT public: explicit AbstractPathTool(QObject* parent = nullptr); bool isValid() const override; bool closeOnButtonPressed() const override; bool isSelectable() const override; bool showMousePreview() const override; QRect mousePreviewRect(const CaptureContext& context) const override; QRect boundingRect() const override; void move(const QPoint& mousePos) override; const QPoint* pos() override; int size() const override { return m_thickness; }; public slots: void drawEnd(const QPoint& p) override; void drawMove(const QPoint& p) override; void onColorChanged(const QColor& c) override; void onSizeChanged(int size) override; protected: void copyParams(const AbstractPathTool* from, AbstractPathTool* to); void addPoint(const QPoint& point); // class members QRect m_pathArea; QColor m_color; QVector m_points; // use m_padding to extend the area of the backup int m_padding; QPoint m_pos; private: int m_thickness; }; ================================================ FILE: src/tools/abstracttwopointtool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "abstracttwopointtool.h" #include #include #include namespace { const double ADJ_UNIT = std::atan(1.0); const int DIRS_NUMBER = 4; enum UNIT { HORIZ_DIR = 0, DIAG1_DIR = 1, VERT_DIR = 2 }; const double ADJ_DIAG_UNIT = 2 * ADJ_UNIT; const int DIAG_DIRS_NUMBER = 2; enum DIAG_UNIT { DIR1 = 0 }; } AbstractTwoPointTool::AbstractTwoPointTool(QObject* parent) : CaptureTool(parent) , m_thickness(1) , m_padding(0) {} void AbstractTwoPointTool::copyParams(const AbstractTwoPointTool* from, AbstractTwoPointTool* to) { CaptureTool::copyParams(from, to); to->m_points.first = from->m_points.first; to->m_points.second = from->m_points.second; to->m_color = from->m_color; to->m_thickness = from->m_thickness; to->m_padding = from->m_padding; to->m_supportsOrthogonalAdj = from->m_supportsOrthogonalAdj; to->m_supportsDiagonalAdj = from->m_supportsDiagonalAdj; } bool AbstractTwoPointTool::isValid() const { return (m_points.first != m_points.second); } bool AbstractTwoPointTool::closeOnButtonPressed() const { return false; } bool AbstractTwoPointTool::isSelectable() const { return true; } bool AbstractTwoPointTool::showMousePreview() const { return true; } QRect AbstractTwoPointTool::mousePreviewRect( const CaptureContext& context) const { QRect rect(0, 0, context.toolSize + 2, context.toolSize + 2); rect.moveCenter(context.mousePos); return rect; } QRect AbstractTwoPointTool::boundingRect() const { if (!isValid()) { return {}; } int offset = m_thickness <= 1 ? 1 : static_cast(round(m_thickness * 0.7 + 0.5)); QRect rect = QRect(std::min(m_points.first.x(), m_points.second.x()) - offset, std::min(m_points.first.y(), m_points.second.y()) - offset, std::abs(m_points.first.x() - m_points.second.x()) + offset * 2, std::abs(m_points.first.y() - m_points.second.y()) + offset * 2); return rect.normalized(); } void AbstractTwoPointTool::drawEnd(const QPoint& p) { Q_UNUSED(p) } void AbstractTwoPointTool::drawMove(const QPoint& p) { m_points.second = p; } void AbstractTwoPointTool::drawMoveWithAdjustment(const QPoint& p) { m_points.second = m_points.first + adjustedVector(p - m_points.first); } void AbstractTwoPointTool::onColorChanged(const QColor& c) { m_color = c; } void AbstractTwoPointTool::onSizeChanged(int size) { m_thickness = size; } void AbstractTwoPointTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { painter.setPen(QPen(context.color, context.toolSize)); painter.drawLine(context.mousePos, context.mousePos); } void AbstractTwoPointTool::drawStart(const CaptureContext& context) { onColorChanged(context.color); m_points.first = context.mousePos; m_points.second = context.mousePos; onSizeChanged(context.toolSize); } QPoint AbstractTwoPointTool::adjustedVector(QPoint v) const { if (m_supportsOrthogonalAdj && m_supportsDiagonalAdj) { int dir = (static_cast(round(atan2(-v.y(), v.x()) / ADJ_UNIT)) + DIRS_NUMBER) % DIRS_NUMBER; if (dir == UNIT::HORIZ_DIR) { v.setY(0); } else if (dir == UNIT::VERT_DIR) { v.setX(0); } else if (dir == UNIT::DIAG1_DIR) { int newX = (v.x() - v.y()) / 2; int newY = -newX; v.setX(newX); v.setY(newY); } else { int newX = (v.x() + v.y()) / 2; int newY = newX; v.setX(newX); v.setY(newY); } } else if (m_supportsDiagonalAdj) { int dir = (static_cast(round((atan2(-v.y(), v.x()) - ADJ_DIAG_UNIT / 2) / ADJ_DIAG_UNIT)) + DIAG_DIRS_NUMBER) % DIAG_DIRS_NUMBER; if (dir == DIAG_UNIT::DIR1) { int newX = (v.x() - v.y()) / 2; int newY = -newX; v.setX(newX); v.setY(newY); } else { int newX = (v.x() + v.y()) / 2; int newY = newX; v.setX(newX); v.setY(newY); } } return v; } void AbstractTwoPointTool::move(const QPoint& pos) { QPoint offset = m_points.second - m_points.first; m_points.first = pos; m_points.second = m_points.first + offset; } const QPoint* AbstractTwoPointTool::pos() { return &m_points.first; } ================================================ FILE: src/tools/abstracttwopointtool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "capturetool.h" class AbstractTwoPointTool : public CaptureTool { Q_OBJECT public: explicit AbstractTwoPointTool(QObject* parent = nullptr); bool isValid() const override; bool closeOnButtonPressed() const override; bool isSelectable() const override; bool showMousePreview() const override; QRect mousePreviewRect(const CaptureContext& context) const override; QRect boundingRect() const override; void move(const QPoint& pos) override; const QPoint* pos() override; int size() const override { return m_thickness; }; const QColor& color() { return m_color; }; const QPair points() const { return m_points; }; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; public slots: void drawEnd(const QPoint& p) override; void drawMove(const QPoint& p) override; void drawMoveWithAdjustment(const QPoint& p) override; void onColorChanged(const QColor& c) override; void onSizeChanged(int size) override; virtual void drawStart(const CaptureContext& context) override; private: QPoint adjustedVector(QPoint v) const; protected: void copyParams(const AbstractTwoPointTool* from, AbstractTwoPointTool* to); void setPadding(int padding) { m_padding = padding; }; private: // class members int m_thickness; int m_padding; QColor m_color; QPair m_points; protected: // use m_padding to extend the area of the backup bool m_supportsOrthogonalAdj = false; bool m_supportsDiagonalAdj = false; }; ================================================ FILE: src/tools/accept/accepttool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "accepttool.h" #include "src/utils/screenshotsaver.h" #include #include #include #if defined(Q_OS_MACOS) #include "src/widgets/capture/capturewidget.h" #include #endif AcceptTool::AcceptTool(QObject* parent) : AbstractActionTool(parent) {} bool AcceptTool::closeOnButtonPressed() const { return true; } QIcon AcceptTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "accept.svg"); } QString AcceptTool::name() const { return tr("Accept"); } CaptureTool::Type AcceptTool::type() const { return CaptureTool::TYPE_ACCEPT; } QString AcceptTool::description() const { return tr("Accept the capture"); } CaptureTool* AcceptTool::copy(QObject* parent) { return new AcceptTool(parent); } void AcceptTool::pressed(CaptureContext& context) { emit requestAction(REQ_CAPTURE_DONE_OK); if (context.request.tasks() & CaptureRequest::PIN) { QRect geometry = context.selection; geometry.moveTopLeft(geometry.topLeft() + context.widgetOffset); context.request.addTask(CaptureRequest::PIN); } emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/accept/accepttool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "abstractactiontool.h" class AcceptTool : public AbstractActionTool { Q_OBJECT public: explicit AcceptTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/arrow/arrowtool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "arrowtool.h" #include "confighandler.h" #include namespace { const int ArrowWidth = 10; const int ArrowHeight = 18; QPainterPath getArrowHead(QPoint p1, QPoint p2, const int thickness) { QLineF base(p1, p2); // Create the vector for the position of the base of the arrowhead QLineF temp(QPoint(0, 0), p2 - p1); int val = ArrowHeight + thickness * 4; if (base.length() < (val - thickness * 2)) { val = static_cast(base.length() + thickness * 2); } temp.setLength(base.length() + thickness * 2 - val); // Move across the line up to the head QPointF bottomTranslation(temp.p2()); // Rotate base of the arrowhead base.setLength(ArrowWidth + thickness * 2); base.setAngle(base.angle() + 90); // Move to the correct point QPointF temp2 = p1 - base.p2(); // Center it QPointF centerTranslation((temp2.x() / 2), (temp2.y() / 2)); base.translate(bottomTranslation); base.translate(centerTranslation); QPainterPath path; path.moveTo(p2); path.lineTo(base.p1()); path.lineTo(base.p2()); path.lineTo(p2); return path; } // gets a shorter line to prevent overlap in the point of the arrow QLine getShorterLine(QPoint p1, QPoint p2, const int thickness) { QLineF l(p1, p2); int val = ArrowHeight + thickness * 4; if (l.length() < (val - thickness * 2)) { // here should be 0, but then we lose "angle", so this is hack, but // looks not very bad val = thickness / 4; l.setLength(val); } else { l.setLength(l.length() + thickness * 2 - val); } return l.toLine(); } } // unnamed namespace ArrowTool::ArrowTool(QObject* parent) : AbstractTwoPointTool(parent) { setPadding(ArrowWidth / 2); m_supportsOrthogonalAdj = true; m_supportsDiagonalAdj = true; } QIcon ArrowTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "arrow-bottom-left.svg"); } QString ArrowTool::name() const { return tr("Arrow"); } CaptureTool::Type ArrowTool::type() const { return CaptureTool::TYPE_ARROW; } QString ArrowTool::description() const { return tr("Set the Arrow as the paint tool"); } QRect ArrowTool::boundingRect() const { if (!isValid()) { return {}; } int offset = size() <= 1 ? 1 : static_cast(round(size() / 2 + 0.5)); // get min and max arrow pos int min_x = points().first.x(); int min_y = points().first.y(); int max_x = points().first.x(); int max_y = points().first.y(); for (int i = 0; i < m_arrowPath.elementCount(); i++) { QPointF pt = m_arrowPath.elementAt(i); if (static_cast(pt.x()) < min_x) { min_x = static_cast(pt.x()); } if (static_cast(pt.y()) < min_y) { min_y = static_cast(pt.y()); } if (static_cast(pt.x()) > max_x) { max_x = static_cast(pt.x()); } if (static_cast(pt.y()) > max_y) { max_y = static_cast(pt.y()); } } // get min and max line pos int line_pos_min_x = std::min(std::min(points().first.x(), points().second.x()), min_x); int line_pos_min_y = std::min(std::min(points().first.y(), points().second.y()), min_y); int line_pos_max_x = std::max(std::max(points().first.x(), points().second.x()), max_x); int line_pos_max_y = std::max(std::max(points().first.y(), points().second.y()), max_y); QRect rect = QRect(line_pos_min_x - offset, line_pos_min_y - offset, line_pos_max_x - line_pos_min_x + offset * 2, line_pos_max_y - line_pos_min_y + offset * 2); return rect.normalized(); } CaptureTool* ArrowTool::copy(QObject* parent) { auto* tool = new ArrowTool(parent); copyParams(this, tool); return tool; } void ArrowTool::copyParams(const ArrowTool* from, ArrowTool* to) { AbstractTwoPointTool::copyParams(from, to); to->m_arrowPath = this->m_arrowPath; } void ArrowTool::process(QPainter& painter, const QPixmap& pixmap) { bool isArrowReversed = ConfigHandler().reverseArrow(); const QPoint& head = isArrowReversed ? points().second : points().first; const QPoint& tail = isArrowReversed ? points().first : points().second; Q_UNUSED(pixmap) painter.setPen(QPen(color(), size())); painter.drawLine(getShorterLine(head, tail, size())); m_arrowPath = getArrowHead(head, tail, size()); painter.fillPath(m_arrowPath, QBrush(color())); } void ArrowTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/arrow/arrowtool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" #include #include class ArrowTool : public AbstractTwoPointTool { Q_OBJECT public: explicit ArrowTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; QRect boundingRect() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; protected: void copyParams(const ArrowTool* from, ArrowTool* to); CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; private: QPainterPath m_arrowPath; }; ================================================ FILE: src/tools/capturecontext.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "capturecontext.h" #include "capturerequest.h" #include "flameshot.h" // TODO rename QPixmap CaptureContext::selectedScreenshotArea() const { if (selection.isNull()) { return screenshot; } else { return screenshot.copy(selection); } } ================================================ FILE: src/tools/capturecontext.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "capturerequest.h" #include #include #include #include struct CaptureContext { // screenshot with modifications QPixmap screenshot; // unmodified screenshot QPixmap origScreenshot; // Selection area QRect selection; // Selected tool color QColor color; // Path where the content has to be saved QString savePath; // Offset of the capture widget based on the system's screen (top-left) QPoint widgetOffset; // Mouse position inside the widget QPoint mousePos; // Size of the active tool int toolSize; // Current circle count int circleCount; // Mode of the capture widget bool fullscreen; CaptureRequest request = CaptureRequest::GRAPHICAL_MODE; QPixmap selectedScreenshotArea() const; }; ================================================ FILE: src/tools/capturetool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/capturecontext.h" #include "src/utils/colorutils.h" #include "src/utils/pathinfo.h" #include #include class CaptureTool : public QObject { Q_OBJECT public: // IMPORTANT: // Add new entries to the BOTTOM so existing user configurations don't get // messed up. // ALSO NOTE: // When adding new types, don't forget to update: // - CaptureToolButton::iterableButtonTypes // - CaptureToolButton::buttonTypeOrder enum Type { NONE = -1, TYPE_PENCIL = 0, TYPE_DRAWER = 1, TYPE_ARROW = 2, TYPE_SELECTION = 3, TYPE_RECTANGLE = 4, TYPE_CIRCLE = 5, TYPE_MARKER = 6, TYPE_MOVESELECTION = 8, TYPE_UNDO = 9, TYPE_COPY = 10, TYPE_SAVE = 11, TYPE_EXIT = 12, #ifdef ENABLE_IMGUR TYPE_IMAGEUPLOADER = 13, #endif TYPE_OPEN_APP = 14, TYPE_PIXELATE = 15, TYPE_REDO = 16, TYPE_PIN = 17, TYPE_TEXT = 18, TYPE_CIRCLECOUNT = 19, TYPE_SIZEINCREASE = 20, TYPE_SIZEDECREASE = 21, TYPE_INVERT = 22, TYPE_ACCEPT = 23, TYPE_CANCEL = 24, }; Q_ENUM(Type); // Request actions on the main widget enum Request { // Call close() in the editor. REQ_CLOSE_GUI, // Call hide() in the editor. REQ_HIDE_GUI, // Undo the last active modification in the stack. REQ_UNDO_MODIFICATION, // Redo the next modification in the stack. REQ_REDO_MODIFICATION, // Open the color picker under the mouse. REQ_SHOW_COLOR_PICKER, // Notify is the screenshot has been saved. REQ_CAPTURE_DONE_OK, // Notify to redraw screenshot with tools without object selection. REQ_CLEAR_SELECTION, // Instance this->widget()'s widget inside the editor under the mouse. REQ_ADD_CHILD_WIDGET, // Instance this->widget()'s widget which handles its own lifetime. REQ_ADD_EXTERNAL_WIDGETS, // increase tool size for all tools REQ_INCREASE_TOOL_SIZE, // decrease tool size for all tools REQ_DECREASE_TOOL_SIZE }; explicit CaptureTool(QObject* parent = nullptr) : QObject(parent) , m_count(0) , m_editMode(false) {} // TODO unused virtual void setCapture(const QPixmap& pixmap){}; // Returns false when the tool is in an inconsistent state and shouldn't // be included in the tool undo/redo stack. virtual bool isValid() const = 0; // Close the capture after the process() call if the tool was activated // from a button press. TODO remove this function virtual bool closeOnButtonPressed() const = 0; // If the tool keeps active after the selection. virtual bool isSelectable() const = 0; // Enable mouse preview. virtual bool showMousePreview() const = 0; virtual QRect mousePreviewRect(const CaptureContext& context) const { return {}; }; virtual QRect boundingRect() const = 0; // The icon of the tool. // inEditor is true when the icon is requested inside the editor // and false otherwise. virtual QIcon icon(const QColor& background, bool inEditor) const = 0; // Name displayed for the tool, this could be translated with tr() virtual QString name() const = 0; // Codename for the tool, this shouldn't change as it is used as ID // for the tool in the internals of Flameshot virtual CaptureTool::Type type() const = 0; // Short description of the tool. virtual QString description() const = 0; // Short tool item info virtual QString info() { return name(); }; // if the type is TYPE_WIDGET the widget is loaded in the main widget. // If the type is TYPE_EXTERNAL_WIDGET it is created outside as an // individual widget. virtual QWidget* widget() { return nullptr; } // When the tool is selected this method is called and the widget is added // to the configuration panel inside the main widget. virtual QWidget* configurationWidget() { return nullptr; } // Return a copy of the tool virtual CaptureTool* copy(QObject* parent = nullptr) = 0; virtual void setEditMode(bool b) { m_editMode = b; }; virtual bool editMode() { return m_editMode; }; // return true if object was change after editMode virtual bool isChanged() { return true; }; // Counter for all object types (currently is used for the CircleCounter // only) virtual void setCount(int count) { m_count = count; }; virtual int count() const { return m_count; }; // Called every time the tool has to draw virtual void process(QPainter& painter, const QPixmap& pixmap) = 0; virtual void drawSearchArea(QPainter& painter, const QPixmap& pixmap) { process(painter, pixmap); }; virtual void drawObjectSelection(QPainter& painter) { drawObjectSelectionRect(painter, boundingRect()); }; // When the tool is selected, this is called when the mouse moves virtual void paintMousePreview(QPainter& painter, const CaptureContext& context) = 0; // Move tool objects virtual void move(const QPoint& pos) { Q_UNUSED(pos) }; virtual const QPoint* pos() { return nullptr; }; signals: void requestAction(Request r); protected: void copyParams(const CaptureTool* from, CaptureTool* to) { to->m_count = from->m_count; } QString iconPath(const QColor& c) const { return ColorUtils::colorIsDark(c) ? PathInfo::whiteIconPath() : PathInfo::blackIconPath(); } void drawObjectSelectionRect(QPainter& painter, QRect rect) { QPen orig_pen = painter.pen(); painter.setPen(QPen(Qt::black, 3)); painter.drawRect(rect); painter.setPen(QPen(Qt::white, 1, Qt::DotLine)); painter.drawRect(rect); painter.setPen(orig_pen); } public slots: // On mouse release. virtual void drawEnd(const QPoint& p) = 0; // Mouse pressed and moving, called once a pixel. virtual void drawMove(const QPoint& p) = 0; // Called when drawMove is needed with an adjustment; // should be overridden in case an adjustment is applicable. virtual void drawMoveWithAdjustment(const QPoint& p) { drawMove(p); } // Called when the tool is activated. virtual void drawStart(const CaptureContext& context) = 0; // Called right after pressing the button which activates the tool. virtual void pressed(CaptureContext& context) = 0; // Called when the color is changed in the editor. virtual void onColorChanged(const QColor& c) = 0; // Called when the size the tool size is changed by the user. virtual void onSizeChanged(int size) = 0; virtual int size() const { return -1; }; private: unsigned int m_count; bool m_editMode; }; ================================================ FILE: src/tools/circle/circletool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "circletool.h" #include CircleTool::CircleTool(QObject* parent) : AbstractTwoPointTool(parent) { m_supportsDiagonalAdj = true; } QIcon CircleTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "circle-outline.svg"); } QString CircleTool::name() const { return tr("Circle"); } CaptureTool::Type CircleTool::type() const { return CaptureTool::TYPE_CIRCLE; } QString CircleTool::description() const { return tr("Set the Circle as the paint tool"); } CaptureTool* CircleTool::copy(QObject* parent) { auto* tool = new CircleTool(parent); copyParams(this, tool); return tool; } void CircleTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.setPen(QPen(color(), size())); painter.drawEllipse(QRect(points().first, points().second)); } void CircleTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/circle/circletool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class CircleTool : public AbstractTwoPointTool { Q_OBJECT public: explicit CircleTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/circlecount/circlecounttool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "circlecounttool.h" #include "colorutils.h" #include #include namespace { #define PADDING_VALUE 2 #define THICKNESS_OFFSET 15 } CircleCountTool::CircleCountTool(QObject* parent) : AbstractTwoPointTool(parent) , m_valid(false) {} QIcon CircleCountTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "circlecount-outline.svg"); } QString CircleCountTool::info() { m_tempString = QString("%1 - %2").arg(name(), count()); return m_tempString; } bool CircleCountTool::isValid() const { return m_valid; } QRect CircleCountTool::mousePreviewRect(const CaptureContext& context) const { int width = (context.toolSize + THICKNESS_OFFSET) * 2; QRect rect(0, 0, width, width); rect.moveCenter(context.mousePos); return rect; } QRect CircleCountTool::boundingRect() const { if (!isValid()) { return {}; } int bubble_size = size() + THICKNESS_OFFSET + PADDING_VALUE; int line_pos_min_x = std::min(points().first.x() - bubble_size, points().second.x()); int line_pos_min_y = std::min(points().first.y() - bubble_size, points().second.y()); int line_pos_max_x = std::max(points().first.x() + bubble_size, points().second.x()); int line_pos_max_y = std::max(points().first.y() + bubble_size, points().second.y()); return { line_pos_min_x, line_pos_min_y, line_pos_max_x - line_pos_min_x, line_pos_max_y - line_pos_min_y }; } QString CircleCountTool::name() const { return tr("Circle Counter"); } CaptureTool::Type CircleCountTool::type() const { return CaptureTool::TYPE_CIRCLECOUNT; } void CircleCountTool::copyParams(const CircleCountTool* from, CircleCountTool* to) { AbstractTwoPointTool::copyParams(from, to); to->setCount(from->count()); to->m_valid = from->m_valid; } QString CircleCountTool::description() const { return tr("Add an autoincrementing counter bubble"); } CaptureTool* CircleCountTool::copy(QObject* parent) { auto* tool = new CircleCountTool(parent); copyParams(this, tool); return tool; } void CircleCountTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) // save current pen, brush, and font state auto orig_pen = painter.pen(); auto orig_brush = painter.brush(); auto orig_font = painter.font(); QColor contrastColor = ColorUtils::colorIsDark(color()) ? Qt::white : Qt::black; QColor antiContrastColor = ColorUtils::colorIsDark(color()) ? Qt::black : Qt::white; int bubble_size = size() + THICKNESS_OFFSET; QLineF line(points().first, points().second); // if the mouse is outside of the bubble, draw the pointer if (line.length() > bubble_size) { painter.setPen(QPen(color(), 0)); painter.setBrush(color()); int middleX = points().first.x(); int middleY = points().first.y(); QLineF normal = line.normalVector(); normal.setLength(bubble_size); QPoint p1 = normal.p2().toPoint(); QPoint p2(middleX - (p1.x() - middleX), middleY - (p1.y() - middleY)); QPainterPath path; path.moveTo(points().first); path.lineTo(p1); path.lineTo(points().second); path.lineTo(p2); path.lineTo(points().first); painter.drawPath(path); } painter.setPen(contrastColor); painter.setBrush(antiContrastColor); painter.drawEllipse( points().first, bubble_size + PADDING_VALUE, bubble_size + PADDING_VALUE); painter.setBrush(color()); painter.drawEllipse(points().first, bubble_size, bubble_size); QRect textRect = QRect(points().first.x() - bubble_size / 2, points().first.y() - bubble_size / 2, bubble_size, bubble_size); auto new_font = orig_font; auto fontSize = bubble_size; new_font.setPixelSize(fontSize); new_font.setBold(true); painter.setFont(new_font); // Draw bounding circle QRect bRect = painter.boundingRect(textRect, Qt::AlignCenter, QString::number(count())); // Calculate font size while (bRect.width() > textRect.width()) { fontSize--; if (fontSize == 0) { break; } new_font.setPixelSize(fontSize); painter.setFont(new_font); bRect = painter.boundingRect( textRect, Qt::AlignCenter, QString::number(count())); } // Draw text painter.setPen(contrastColor); painter.drawText(textRect, Qt::AlignCenter, QString::number(count())); // restore original font, brush, and pen painter.setFont(orig_font); painter.setBrush(orig_brush); painter.setPen(orig_pen); } void CircleCountTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { onSizeChanged(context.toolSize + PADDING_VALUE); // Thickness for pen is *2 to range from radius to diameter to match the // ellipse draw function auto orig_pen = painter.pen(); auto orig_opacity = painter.opacity(); painter.setOpacity(0.35); painter.setPen(QPen(context.color, (size() + THICKNESS_OFFSET) * 2, Qt::SolidLine, Qt::RoundCap)); painter.drawLine(context.mousePos, { context.mousePos.x() + 1, context.mousePos.y() + 1 }); painter.setOpacity(orig_opacity); painter.setPen(orig_pen); } void CircleCountTool::drawStart(const CaptureContext& context) { AbstractTwoPointTool::drawStart(context); m_valid = true; } void CircleCountTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/circlecount/circlecounttool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class CircleCountTool : public AbstractTwoPointTool { Q_OBJECT public: explicit CircleCountTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; QString info() override; bool isValid() const override; QRect mousePreviewRect(const CaptureContext& context) const override; QRect boundingRect() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; protected: CaptureTool::Type type() const override; void copyParams(const CircleCountTool* from, CircleCountTool* to); public slots: void drawStart(const CaptureContext& context) override; void pressed(CaptureContext& context) override; private: QString m_tempString; bool m_valid; }; ================================================ FILE: src/tools/copy/copytool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "copytool.h" #include "src/utils/screenshotsaver.h" #include CopyTool::CopyTool(QObject* parent) : AbstractActionTool(parent) {} bool CopyTool::closeOnButtonPressed() const { return true; } QIcon CopyTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "content-copy.svg"); } QString CopyTool::name() const { return tr("Copy"); } CaptureTool::Type CopyTool::type() const { return CaptureTool::TYPE_COPY; } QString CopyTool::description() const { return tr("Copy selection to clipboard"); } CaptureTool* CopyTool::copy(QObject* parent) { return new CopyTool(parent); } void CopyTool::pressed(CaptureContext& context) { emit requestAction(REQ_CLEAR_SELECTION); context.request.addTask(CaptureRequest::COPY); emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/copy/copytool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class CopyTool : public AbstractActionTool { Q_OBJECT public: explicit CopyTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/exit/exittool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "exittool.h" #include ExitTool::ExitTool(QObject* parent) : AbstractActionTool(parent) {} bool ExitTool::closeOnButtonPressed() const { return true; } QIcon ExitTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "close.svg"); } QString ExitTool::name() const { return tr("Exit"); } CaptureTool::Type ExitTool::type() const { return CaptureTool::TYPE_EXIT; } QString ExitTool::description() const { return tr("Leave the capture screen"); } CaptureTool* ExitTool::copy(QObject* parent) { return new ExitTool(parent); } void ExitTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/exit/exittool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class ExitTool : public AbstractActionTool { Q_OBJECT public: explicit ExitTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; // TODO create a new abstract class to get rid of such baggage CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/imgupload/imguploadermanager.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Yurii Puchkov & Contributors // #include "imguploadermanager.h" #include #include // TODO - remove this hard-code and create plugin manager in the future, you may // include other storage headers here #include "storages/imgur/imguruploader.h" ImgUploaderManager::ImgUploaderManager(QObject* parent) : QObject(parent) , m_imgUploaderBase(nullptr) { // TODO - implement ImgUploader for other Storages and selection among them m_imgUploaderPlugin = IMG_UPLOADER_STORAGE_DEFAULT; init(); } void ImgUploaderManager::init() { // TODO - implement ImgUploader for other Storages and selection among them, // example: // if (uploaderPlugin().compare("s3") == 0) { // m_qstrUrl = ImgS3Settings().value("S3", "S3_URL").toString(); //} else { // m_qstrUrl = "https://imgur.com/"; // m_imgUploaderPlugin = "imgur"; //} m_urlString = "https://imgur.com/"; m_imgUploaderPlugin = "imgur"; } ImgUploaderBase* ImgUploaderManager::uploader(const QPixmap& capture, QWidget* parent) { // TODO - implement ImgUploader for other Storages and selection among them, // example: // if (uploaderPlugin().compare("s3") == 0) { // m_imgUploaderBase = // (ImgUploaderBase*)(new ImgS3Uploader(capture, parent)); //} else { // m_imgUploaderBase = // (ImgUploaderBase*)(new ImgurUploader(capture, parent)); //} m_imgUploaderBase = (ImgUploaderBase*)(new ImgurUploader(capture, parent)); if (m_imgUploaderBase && !capture.isNull()) { m_imgUploaderBase->upload(); } return m_imgUploaderBase; } ImgUploaderBase* ImgUploaderManager::uploader(const QString& imgUploaderPlugin) { m_imgUploaderPlugin = imgUploaderPlugin; init(); return uploader(QPixmap()); } const QString& ImgUploaderManager::uploaderPlugin() { return m_imgUploaderPlugin; } const QString& ImgUploaderManager::url() { return m_urlString; } ================================================ FILE: src/tools/imgupload/imguploadermanager.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Yurii Puchkov & Contributors // #ifndef FLAMESHOT_IMGUPLOADERMANAGER_H #define FLAMESHOT_IMGUPLOADERMANAGER_H #include "src/tools/imgupload/storages/imguploaderbase.h" #include #define IMG_UPLOADER_STORAGE_DEFAULT "imgur" class QPixmap; class QWidget; class ImgUploaderManager : public QObject { Q_OBJECT public: explicit ImgUploaderManager(QObject* parent = nullptr); ImgUploaderBase* uploader(const QPixmap& capture, QWidget* parent = nullptr); ImgUploaderBase* uploader(const QString& imgUploaderPlugin); const QString& url(); const QString& uploaderPlugin(); private: void init(); private: ImgUploaderBase* m_imgUploaderBase; QString m_urlString; QString m_imgUploaderPlugin; }; #endif // FLAMESHOT_IMGUPLOADERMANAGER_H ================================================ FILE: src/tools/imgupload/imguploadertool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "imguploadertool.h" ImgUploaderTool::ImgUploaderTool(QObject* parent) : AbstractActionTool(parent) {} bool ImgUploaderTool::closeOnButtonPressed() const { return true; } QIcon ImgUploaderTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor); return QIcon(iconPath(background) + "cloud-upload.svg"); } QString ImgUploaderTool::name() const { return tr("Image Uploader"); } CaptureTool::Type ImgUploaderTool::type() const { return CaptureTool::TYPE_IMAGEUPLOADER; } QString ImgUploaderTool::description() const { return tr("Upload the selection"); } CaptureTool* ImgUploaderTool::copy(QObject* parent) { return new ImgUploaderTool(parent); } void ImgUploaderTool::pressed(CaptureContext& context) { emit requestAction(REQ_CLEAR_SELECTION); emit requestAction(REQ_CAPTURE_DONE_OK); context.request.addTask(CaptureRequest::UPLOAD); emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/imgupload/imguploadertool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class ImgUploaderTool : public AbstractActionTool { Q_OBJECT public: explicit ImgUploaderTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; private: QPixmap capture; }; ================================================ FILE: src/tools/imgupload/storages/imguploaderbase.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "imguploaderbase.h" #include "src/core/flameshotdaemon.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include "src/utils/history.h" #include "src/utils/screenshotsaver.h" #include "src/widgets/imagelabel.h" #include "src/widgets/loadspinner.h" #include "src/widgets/notificationwidget.h" #include // FIXME #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ImgUploaderBase::ImgUploaderBase(const QPixmap& capture, QWidget* parent) : QWidget(parent) , m_pixmap(capture) { setWindowTitle(tr("Upload image")); setWindowIcon(QIcon(GlobalValues::iconPath())); QRect position = frameGeometry(); QScreen* screen = QGuiApplication::screenAt(QCursor::pos()); position.moveCenter(screen->availableGeometry().center()); move(position.topLeft()); m_spinner = new LoadSpinner(this); m_spinner->setColor(ConfigHandler().uiColor()); m_spinner->start(); m_infoLabel = new QLabel(tr("Uploading Image")); m_infoLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); m_infoLabel->setCursor(QCursor(Qt::IBeamCursor)); m_vLayout = new QVBoxLayout(); setLayout(m_vLayout); m_vLayout->addWidget(m_spinner, 0, Qt::AlignHCenter); m_vLayout->addWidget(m_infoLabel); setAttribute(Qt::WA_DeleteOnClose); } LoadSpinner* ImgUploaderBase::spinner() { return m_spinner; } const QUrl& ImgUploaderBase::imageURL() { return m_imageURL; } void ImgUploaderBase::setImageURL(const QUrl& imageURL) { m_imageURL = imageURL; } const QPixmap& ImgUploaderBase::pixmap() { return m_pixmap; } void ImgUploaderBase::setPixmap(const QPixmap& pixmap) { m_pixmap = pixmap; } NotificationWidget* ImgUploaderBase::notification() { return m_notification; } void ImgUploaderBase::setInfoLabelText(const QString& text) { m_infoLabel->setText(text); } void ImgUploaderBase::startDrag() { auto* mimeData = new QMimeData; mimeData->setUrls(QList{ m_imageURL }); mimeData->setImageData(m_pixmap); auto* dragHandler = new QDrag(this); dragHandler->setMimeData(mimeData); dragHandler->setPixmap(m_pixmap.scaled( 256, 256, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation)); dragHandler->exec(); } void ImgUploaderBase::showPostUploadDialog() { m_infoLabel->deleteLater(); m_notification = new NotificationWidget(); m_vLayout->addWidget(m_notification); auto* imageLabel = new ImageLabel(); imageLabel->setScreenshot(m_pixmap); imageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); connect(imageLabel, &ImageLabel::dragInitiated, this, &ImgUploaderBase::startDrag); m_vLayout->addWidget(imageLabel); m_hLayout = new QHBoxLayout(); m_vLayout->addLayout(m_hLayout); m_copyUrlButton = new QPushButton(tr("Copy URL")); m_openUrlButton = new QPushButton(tr("Open URL")); m_openDeleteUrlButton = new QPushButton(tr("Delete image")); m_toClipboardButton = new QPushButton(tr("Image to Clipboard.")); m_saveToFilesystemButton = new QPushButton(tr("Save image")); m_hLayout->addWidget(m_copyUrlButton); m_hLayout->addWidget(m_openUrlButton); m_hLayout->addWidget(m_openDeleteUrlButton); m_hLayout->addWidget(m_toClipboardButton); m_hLayout->addWidget(m_saveToFilesystemButton); connect( m_copyUrlButton, &QPushButton::clicked, this, &ImgUploaderBase::copyURL); connect( m_openUrlButton, &QPushButton::clicked, this, &ImgUploaderBase::openURL); connect(m_openDeleteUrlButton, &QPushButton::clicked, this, &ImgUploaderBase::deleteCurrentImage); connect(m_toClipboardButton, &QPushButton::clicked, this, &ImgUploaderBase::copyImage); QObject::connect(m_saveToFilesystemButton, &QPushButton::clicked, this, &ImgUploaderBase::saveScreenshotToFilesystem); } void ImgUploaderBase::openURL() { bool successful = QDesktopServices::openUrl(m_imageURL); if (!successful) { m_notification->showMessage(tr("Unable to open the URL.")); } } void ImgUploaderBase::copyURL() { FlameshotDaemon::copyToClipboard(m_imageURL.toString()); m_notification->showMessage(tr("URL copied to clipboard.")); } void ImgUploaderBase::copyImage() { FlameshotDaemon::copyToClipboard(m_pixmap); m_notification->showMessage(tr("Screenshot copied to clipboard.")); } void ImgUploaderBase::deleteCurrentImage() { History history; HistoryFileName unpackFileName = history.unpackFileName(m_currentImageName); deleteImage(unpackFileName.file, unpackFileName.token); } void ImgUploaderBase::saveScreenshotToFilesystem() { if (!saveToFilesystemGUI(m_pixmap)) { m_notification->showMessage( tr("Unable to save the screenshot to disk.")); return; } m_notification->showMessage(tr("Screenshot saved.")); } ================================================ FILE: src/tools/imgupload/storages/imguploaderbase.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include class QNetworkReply; class QNetworkAccessManager; class QHBoxLayout; class QVBoxLayout; class QLabel; class LoadSpinner; class QPushButton; class QUrl; class NotificationWidget; class ImgUploaderBase : public QWidget { Q_OBJECT public: explicit ImgUploaderBase(const QPixmap& capture, QWidget* parent = nullptr); LoadSpinner* spinner(); const QUrl& imageURL(); void setImageURL(const QUrl&); const QPixmap& pixmap(); void setPixmap(const QPixmap&); void setInfoLabelText(const QString&); NotificationWidget* notification(); virtual void deleteImage(const QString& fileName, const QString& deleteToken) = 0; virtual void upload() = 0; signals: void uploadOk(const QUrl& url); void deleteOk(); public slots: void showPostUploadDialog(); private slots: void startDrag(); void openURL(); void copyURL(); void copyImage(); void deleteCurrentImage(); void saveScreenshotToFilesystem(); private: QPixmap m_pixmap; QVBoxLayout* m_vLayout; QHBoxLayout* m_hLayout; // loading QLabel* m_infoLabel; LoadSpinner* m_spinner; // uploaded QPushButton* m_openUrlButton; QPushButton* m_openDeleteUrlButton; QPushButton* m_copyUrlButton; QPushButton* m_toClipboardButton; QPushButton* m_saveToFilesystemButton; QUrl m_imageURL; NotificationWidget* m_notification; public: QString m_currentImageName; }; ================================================ FILE: src/tools/imgupload/storages/imgur/imguruploader.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "imguruploader.h" #include "src/utils/confighandler.h" #include "src/utils/filenamehandler.h" #include "src/utils/history.h" #include "src/widgets/loadspinner.h" #include "src/widgets/notificationwidget.h" #include #include #include #include #include #include #include #include #include #include ImgurUploader::ImgurUploader(const QPixmap& capture, QWidget* parent) : ImgUploaderBase(capture, parent) { m_NetworkAM = new QNetworkAccessManager(this); connect(m_NetworkAM, &QNetworkAccessManager::finished, this, &ImgurUploader::handleReply); } void ImgurUploader::handleReply(QNetworkReply* reply) { spinner()->deleteLater(); m_currentImageName.clear(); QJsonDocument response = QJsonDocument::fromJson(reply->readAll()); QJsonObject json = response.object(); if (reply->error() == QNetworkReply::NoError) { QJsonObject data = json[QStringLiteral("data")].toObject(); setImageURL(data[QStringLiteral("link")].toString()); auto deleteToken = data[QStringLiteral("deletehash")].toString(); // save history m_currentImageName = imageURL().toString(); int lastSlash = m_currentImageName.lastIndexOf("/"); if (lastSlash >= 0) { m_currentImageName = m_currentImageName.mid(lastSlash + 1); } // save image to history History history; m_currentImageName = history.packFileName("imgur", deleteToken, m_currentImageName); history.save(pixmap(), m_currentImageName); emit uploadOk(imageURL()); } else { QString status; if (json.contains(QStringLiteral("errors")) && json.value(QStringLiteral("errors")).isArray()) { QJsonArray errorsArray = json.value(QStringLiteral("errors")).toArray(); if (!errorsArray.isEmpty() && errorsArray.at(0).isObject()) { QJsonObject errorObj = errorsArray.at(0).toObject(); status = errorObj.value(QStringLiteral("code")).toString() + " - " + errorObj.value(QStringLiteral("status")).toString(); } } setInfoLabelText(reply->errorString() + "\n" + status); } new QShortcut(Qt::Key_Escape, this, SLOT(close())); } void ImgurUploader::upload() { QByteArray byteArray; QBuffer buffer(&byteArray); pixmap().save(&buffer, "PNG"); QUrlQuery urlQuery; urlQuery.addQueryItem(QStringLiteral("title"), QStringLiteral("")); QString description = FileNameHandler().parsedPattern(); urlQuery.addQueryItem(QStringLiteral("description"), description); QUrl url(QStringLiteral("https://api.imgur.com/3/image")); url.setQuery(urlQuery); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/application/x-www-form-urlencoded"); request.setRawHeader("Authorization", QStringLiteral("Client-ID %1") .arg(ConfigHandler().uploadClientSecret()) .toUtf8()); m_NetworkAM->post(request, byteArray); } void ImgurUploader::deleteImage(const QString& fileName, const QString& deleteToken) { Q_UNUSED(fileName) bool successful = QDesktopServices::openUrl( QUrl(QStringLiteral("https://imgur.com/delete/%1").arg(deleteToken))); if (!successful) { notification()->showMessage(tr("Unable to open the URL.")); } emit deleteOk(); } ================================================ FILE: src/tools/imgupload/storages/imgur/imguruploader.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/imgupload/storages/imguploaderbase.h" #include #include class QNetworkReply; class QNetworkAccessManager; class QUrl; class ImgurUploader : public ImgUploaderBase { Q_OBJECT public: explicit ImgurUploader(const QPixmap& capture, QWidget* parent = nullptr); void deleteImage(const QString& fileName, const QString& deleteToken); private slots: void handleReply(QNetworkReply* reply); private: void upload(); private: QNetworkAccessManager* m_NetworkAM; }; ================================================ FILE: src/tools/invert/inverttool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "inverttool.h" #include #include #include #include #include #include #include InvertTool::InvertTool(QObject* parent) : AbstractTwoPointTool(parent) {} QIcon InvertTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "invert.svg"); } QString InvertTool::name() const { return tr("Invert"); } CaptureTool::Type InvertTool::type() const { return CaptureTool::TYPE_INVERT; } QString InvertTool::description() const { return tr("Set Inverter as the paint tool"); } QRect InvertTool::boundingRect() const { return QRect(points().first, points().second).normalized(); } CaptureTool* InvertTool::copy(QObject* parent) { auto* tool = new InvertTool(parent); copyParams(this, tool); return tool; } void InvertTool::process(QPainter& painter, const QPixmap& pixmap) { QRect selection = boundingRect().intersected(pixmap.rect()); auto pixelRatio = pixmap.devicePixelRatio(); QRect selectionScaled = QRect(selection.topLeft() * pixelRatio, selection.bottomRight() * pixelRatio); // Invert selection QPixmap inv = pixmap.copy(selectionScaled); QImage img = inv.toImage(); img.invertPixels(); painter.drawImage(selection, img); } void InvertTool::drawSearchArea(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.fillRect(boundingRect(), QBrush(Qt::black)); } void InvertTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { Q_UNUSED(context) Q_UNUSED(painter) } void InvertTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/invert/inverttool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class InvertTool : public AbstractTwoPointTool { Q_OBJECT public: explicit InvertTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; QRect boundingRect() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; void drawSearchArea(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/launcher/applaunchertool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "applaunchertool.h" #include "applauncherwidget.h" AppLauncher::AppLauncher(QObject* parent) : AbstractActionTool(parent) {} bool AppLauncher::closeOnButtonPressed() const { return true; } QIcon AppLauncher::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "open_with.svg"); } QString AppLauncher::name() const { return tr("App Launcher"); } CaptureTool::Type AppLauncher::type() const { return CaptureTool::TYPE_OPEN_APP; } QString AppLauncher::description() const { return tr("Choose an app to open the capture"); } QWidget* AppLauncher::widget() { return new AppLauncherWidget(capture); } CaptureTool* AppLauncher::copy(QObject* parent) { return new AppLauncher(parent); } void AppLauncher::pressed(CaptureContext& context) { capture = context.selectedScreenshotArea(); emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_ADD_EXTERNAL_WIDGETS); emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/launcher/applaunchertool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class AppLauncher : public AbstractActionTool { Q_OBJECT public: explicit AppLauncher(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; QWidget* widget() override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; private: QPixmap capture; }; ================================================ FILE: src/tools/launcher/applauncherwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "applauncherwidget.h" #include "src/tools/launcher/launcheritemdelegate.h" #include "src/utils/confighandler.h" #include "src/utils/filenamehandler.h" #include "src/utils/globalvalues.h" #include "terminallauncher.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace { #if defined(Q_OS_WIN) QMap catIconNames({ { "Graphics", "image.svg" }, { "Utility", "apps.svg" } }); } #else QMap catIconNames( { { "Multimedia", "applications-multimedia" }, { "Development", "applications-development" }, { "Graphics", "applications-graphics" }, { "Network", "preferences-system-network" }, { "Office", "applications-office" }, { "Science", "applications-science" }, { "Settings", "preferences-desktop" }, { "System", "preferences-system" }, { "Utility", "applications-utilities" } }); } #endif AppLauncherWidget::AppLauncherWidget(const QPixmap& p, QWidget* parent) : QWidget(parent) , m_pixmap(p) { setAttribute(Qt::WA_DeleteOnClose); setWindowIcon(QIcon(GlobalValues::iconPath())); setWindowTitle(tr("Open With")); m_keepOpen = ConfigHandler().keepOpenAppLauncher(); #if defined(Q_OS_WIN) QDir userAppsFolder( QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation) .at(0)); m_parser.processDirectory(userAppsFolder); QString dir(m_parser.getAllUsersStartMenuPath()); if (!dir.isEmpty()) { QDir allUserAppsFolder(dir); m_parser.processDirectory(allUserAppsFolder); } #else QStringList appsLocations = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation); for (const auto& appsLocation : appsLocations) { QDir appsDir(appsLocation); m_parser.processDirectory(QDir(appsDir)); } #endif initAppMap(); initListWidget(); m_terminalCheckbox = new QCheckBox(tr("Launch in terminal"), this); m_keepOpenCheckbox = new QCheckBox(tr("Keep open after selection"), this); m_keepOpenCheckbox->setChecked(ConfigHandler().keepOpenAppLauncher()); connect(m_keepOpenCheckbox, &QCheckBox::clicked, this, &AppLauncherWidget::checkboxClicked); // search items m_lineEdit = new QLineEdit; connect(m_lineEdit, &QLineEdit::textChanged, this, &AppLauncherWidget::searchChanged); m_filterList = new QListWidget; m_filterList->hide(); configureListView(m_filterList); connect( m_filterList, &QListWidget::clicked, this, &AppLauncherWidget::launch); m_layout = new QVBoxLayout(this); m_layout->addWidget(m_filterList); m_layout->addWidget(m_tabWidget); m_layout->addWidget(m_lineEdit); m_layout->addWidget(m_keepOpenCheckbox); m_layout->addWidget(m_terminalCheckbox); m_lineEdit->setFocus(); } void AppLauncherWidget::launch(const QModelIndex& index) { if (!QFileInfo(m_tempFile).isReadable()) { m_tempFile = FileNameHandler().properScreenshotPath(QDir::tempPath(), "png"); bool ok = m_pixmap.save(m_tempFile); if (!ok) { QMessageBox::about( this, tr("Error"), tr("Unable to write in") + QDir::tempPath()); return; } } // Heuristically, if there is a % in the command we assume it is the file // name slot QString command = index.data(Qt::UserRole).toString(); #if defined(Q_OS_WIN) // Do not split on Windows, since file path can contain spaces // and % is not used in lnk files QStringList prog_args; prog_args << command; #else QStringList prog_args = command.split(" "); #endif // no quotes because it is going in an array! static const QRegularExpression regexp("(\\%.)"); if (command.contains("%")) { // but that means we need to substitute IN the array not the string! for (auto& i : prog_args) { if (i.contains("%")) i.replace(regexp, m_tempFile); } } else { // we really should append the file name if there prog_args.append(m_tempFile); // were no replacements } QString app_name = prog_args.at(0); bool inTerminal = index.data(Qt::UserRole + 1).toBool() || m_terminalCheckbox->isChecked(); if (inTerminal) { bool ok = TerminalLauncher::launchDetached(command); if (!ok) { QMessageBox::about( this, tr("Error"), tr("Unable to launch in terminal.")); } } else { QFileInfo fi(m_tempFile); QString workingDir = fi.absolutePath(); prog_args.removeAt(0); // strip program name out QProcess::startDetached(app_name, prog_args, workingDir); } if (!m_keepOpen) { close(); } } void AppLauncherWidget::checkboxClicked(const bool enabled) { m_keepOpen = enabled; ConfigHandler().setKeepOpenAppLauncher(enabled); m_keepOpenCheckbox->setChecked(enabled); } void AppLauncherWidget::searchChanged(const QString& text) { if (text.isEmpty()) { m_filterList->hide(); m_tabWidget->show(); } else { m_tabWidget->hide(); m_filterList->show(); m_filterList->clear(); const QRegularExpression regexp( QRegularExpression::wildcardToRegularExpression("*" + text + "*"), QRegularExpression::CaseInsensitiveOption); QVector apps; for (auto const& i : catIconNames.toStdMap()) { const QString& cat = i.first; if (!m_appsMap.contains(cat)) { continue; } const QVector& appList = m_appsMap[cat]; for (const DesktopAppData& app : appList) { if (!apps.contains(app) && (app.name.contains(regexp) || app.description.contains(regexp))) { apps.append(app); } } } addAppsToListWidget(m_filterList, apps); } } void AppLauncherWidget::initListWidget() { m_tabWidget = new QTabWidget; const int size = GlobalValues::buttonBaseSize(); m_tabWidget->setIconSize(QSize(size, size)); for (auto const& i : catIconNames.toStdMap()) { const QString& cat = i.first; const QString& iconName = i.second; if (!m_appsMap.contains(cat)) { continue; } auto* itemsWidget = new QListWidget(); configureListView(itemsWidget); const QVector& appList = m_appsMap[cat]; addAppsToListWidget(itemsWidget, appList); #if defined(Q_OS_WIN) QColor background = this->palette().window().color(); bool isDark = ColorUtils::colorIsDark(background); QString modifier = isDark ? PathInfo::whiteIconPath() : PathInfo::blackIconPath(); m_tabWidget->addTab( itemsWidget, QIcon(modifier + iconName), QLatin1String("")); #else m_tabWidget->addTab( itemsWidget, QIcon::fromTheme(iconName), QLatin1String("")); #endif m_tabWidget->setTabToolTip(m_tabWidget->count(), cat); if (cat == QLatin1String("Graphics")) { m_tabWidget->setCurrentIndex(m_tabWidget->count() - 1); } } } void AppLauncherWidget::initAppMap() { QStringList categories({ "AudioVideo", "Audio", "Video", "Development", "Graphics", "Network", "Office", "Science", "Settings", "System", "Utility" }); m_appsMap = m_parser.getAppsByCategory(categories); // Unify multimedia. QVector multimediaList; QStringList multimediaNames; multimediaNames << QStringLiteral("AudioVideo") << QStringLiteral("Audio") << QStringLiteral("Video"); for (const QString& name : std::as_const(multimediaNames)) { if (!m_appsMap.contains(name)) { continue; } for (const auto& i : m_appsMap[name]) { if (!multimediaList.contains(i)) { multimediaList.append(i); } } m_appsMap.remove(name); } if (!multimediaList.isEmpty()) { m_appsMap.insert(QStringLiteral("Multimedia"), multimediaList); } } void AppLauncherWidget::configureListView(QListWidget* widget) { widget->setItemDelegate(new LauncherItemDelegate()); widget->setViewMode(QListWidget::IconMode); widget->setResizeMode(QListView::Adjust); widget->setSpacing(4); widget->setFlow(QListView::LeftToRight); widget->setDragEnabled(false); widget->setMinimumWidth(GlobalValues::buttonBaseSize() * 11); connect(widget, &QListWidget::clicked, this, &AppLauncherWidget::launch); } void AppLauncherWidget::addAppsToListWidget( QListWidget* widget, const QVector& appList) { for (const DesktopAppData& app : appList) { auto* buttonItem = new QListWidgetItem(widget); buttonItem->setData(Qt::DecorationRole, app.icon); buttonItem->setData(Qt::DisplayRole, app.name); buttonItem->setData(Qt::UserRole, app.exec); buttonItem->setData(Qt::UserRole + 1, app.showInTerminal); QColor foregroundColor = this->palette().color(QWidget::foregroundRole()); buttonItem->setForeground(foregroundColor); buttonItem->setIcon(app.icon); buttonItem->setText(app.name); buttonItem->setToolTip(app.description); } } void AppLauncherWidget::keyPressEvent(QKeyEvent* keyEvent) { if (keyEvent->key() == Qt::Key_Escape) { close(); } else if (keyEvent->key() == Qt::Key_Return) { auto* widget = (QListWidget*)m_tabWidget->currentWidget(); if (m_filterList->isVisible()) widget = m_filterList; auto* item = widget->currentItem(); if (item == nullptr) { item = widget->item(0); widget->setCurrentItem(item); } QModelIndex const idx = widget->currentIndex(); AppLauncherWidget::launch(idx); } else { QWidget::keyPressEvent(keyEvent); } } ================================================ FILE: src/tools/launcher/applauncherwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include #if defined(Q_OS_WIN) #include "src/utils/winlnkfileparse.h" #else #include "src/utils/desktopfileparse.h" #endif class QTabWidget; class QCheckBox; class QVBoxLayout; class QLineEdit; class QListWidget; class AppLauncherWidget : public QWidget { Q_OBJECT public: explicit AppLauncherWidget(const QPixmap& p, QWidget* parent = nullptr); private slots: void launch(const QModelIndex& index); void checkboxClicked(const bool enabled); void searchChanged(const QString& text); private: void initListWidget(); void initAppMap(); void configureListView(QListWidget* widget); void addAppsToListWidget(QListWidget* widget, const QVector& appList); void keyPressEvent(QKeyEvent* keyEvent) override; #if defined(Q_OS_WIN) WinLnkFileParser m_parser; #else DesktopFileParser m_parser; #endif QPixmap m_pixmap; QString m_tempFile; bool m_keepOpen; QMap> m_appsMap; QCheckBox* m_keepOpenCheckbox; QCheckBox* m_terminalCheckbox; QVBoxLayout* m_layout; QLineEdit* m_lineEdit; QListWidget* m_filterList; QTabWidget* m_tabWidget; }; ================================================ FILE: src/tools/launcher/launcheritemdelegate.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "launcheritemdelegate.h" #include "src/utils/globalvalues.h" #include LauncherItemDelegate::LauncherItemDelegate(QObject* parent) : QStyledItemDelegate(parent) {} void LauncherItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { const QRect& rect = option.rect; if (option.state & (QStyle::State_Selected | QStyle::State_MouseOver)) { painter->save(); painter->setPen(Qt::transparent); painter->setBrush(QPalette().highlight()); painter->drawRect( rect.x(), rect.y(), rect.width() - 1, rect.height() - 1); painter->restore(); } auto icon = index.data(Qt::DecorationRole).value(); const int iconSide = static_cast(GlobalValues::buttonBaseSize() * 1.3); const int halfIcon = iconSide / 2; const int halfWidth = rect.width() / 2; const int halfHeight = rect.height() / 2; QSize size(iconSide, iconSide); QPixmap pixIcon = icon.pixmap(size).scaled( size, Qt::KeepAspectRatio, Qt::SmoothTransformation); painter->drawPixmap(rect.x() + (halfWidth - halfIcon), rect.y() + (halfHeight / 2 - halfIcon), iconSide, iconSide, pixIcon); const QRect textRect( rect.x(), rect.y() + halfHeight, rect.width(), halfHeight); painter->drawText(textRect, Qt::TextWordWrap | Qt::AlignHCenter, index.data(Qt::DisplayRole).toString()); } QSize LauncherItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { Q_UNUSED(option) Q_UNUSED(index) const int size = GlobalValues::buttonBaseSize(); return { static_cast(size * 3.2), static_cast(size * 3.7) }; } ================================================ FILE: src/tools/launcher/launcheritemdelegate.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/utils/desktopfileparse.h" #include class LauncherItemDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit LauncherItemDelegate(QObject* parent = nullptr); void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override; }; ================================================ FILE: src/tools/launcher/openwithprogram.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "openwithprogram.h" #if defined(Q_OS_WIN) #include "src/utils/filenamehandler.h" #include #include #include #ifdef _WIN32_WINNT #undef _WIN32_WINNT #define _WIN32_WINNT 0x601 #endif #include #pragma comment(lib, "Shell32.lib") #else #include "src/tools/launcher/applauncherwidget.h" #endif void showOpenWithMenu(const QPixmap& capture) { #if defined(Q_OS_WIN) QString tempFile = FileNameHandler().properScreenshotPath(QDir::tempPath(), "png"); bool ok = capture.save(tempFile); if (!ok) { QMessageBox::about(nullptr, QObject::tr("Error"), QObject::tr("Unable to write in") + QDir::tempPath()); return; } OPENASINFO info; auto wStringFile = tempFile.replace("/", "\\").toStdWString(); info.pcszFile = wStringFile.c_str(); info.pcszClass = nullptr; info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_EXEC; SHOpenWithDialog(nullptr, &info); #else auto* w = new AppLauncherWidget(capture); w->show(); #endif } ================================================ FILE: src/tools/launcher/openwithprogram.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include void showOpenWithMenu(const QPixmap& capture); ================================================ FILE: src/tools/launcher/terminallauncher.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "terminallauncher.h" #include #include #include #include namespace { static const TerminalApp terminalApps[] = { { "x-terminal-emulator", "-e" }, { "xfce4-terminal", "-x" }, { "konsole", "-e" }, { "gnome-terminal", "--" }, { "terminator", "-e" }, { "terminology", "-e" }, { "tilix", "-e" }, { "xterm", "-e" }, { "aterm", "-e" }, { "Eterm", "-e" }, { "rxvt", "-e" }, { "urxvt", "-e" }, }; } TerminalLauncher::TerminalLauncher(QObject* parent) : QObject(parent) {} TerminalApp TerminalLauncher::getPreferedTerminal() { TerminalApp res; for (const TerminalApp& app : terminalApps) { QString path = QStandardPaths::findExecutable(app.name); if (!path.isEmpty()) { res = app; break; } } return res; } bool TerminalLauncher::launchDetached(const QString& command) { TerminalApp app = getPreferedTerminal(); return QProcess::startDetached(app.name, { app.arg, command }); } ================================================ FILE: src/tools/launcher/terminallauncher.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include struct TerminalApp { QString name; QString arg; }; class TerminalLauncher : public QObject { Q_OBJECT public: explicit TerminalLauncher(QObject* parent = nullptr); static bool launchDetached(const QString& command); private: static TerminalApp getPreferedTerminal(); }; ================================================ FILE: src/tools/line/linetool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "linetool.h" #include LineTool::LineTool(QObject* parent) : AbstractTwoPointTool(parent) { m_supportsOrthogonalAdj = true; m_supportsDiagonalAdj = true; } QIcon LineTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "line.svg"); } QString LineTool::name() const { return tr("Line"); } CaptureTool::Type LineTool::type() const { return CaptureTool::TYPE_DRAWER; } QString LineTool::description() const { return tr("Set the Line as the paint tool"); } CaptureTool* LineTool::copy(QObject* parent) { auto* tool = new LineTool(parent); copyParams(this, tool); return tool; } void LineTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.setPen(QPen(color(), size())); painter.drawLine(points().first, points().second); } void LineTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/line/linetool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class LineTool : public AbstractTwoPointTool { Q_OBJECT public: explicit LineTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/marker/markertool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "markertool.h" #include #define PADDING_VALUE 14 MarkerTool::MarkerTool(QObject* parent) : AbstractTwoPointTool(parent) { m_supportsOrthogonalAdj = true; m_supportsDiagonalAdj = true; } QIcon MarkerTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "marker.svg"); } QString MarkerTool::name() const { return tr("Marker"); } CaptureTool::Type MarkerTool::type() const { return CaptureTool::TYPE_MARKER; } QString MarkerTool::description() const { return tr("Set the Marker as the paint tool"); } QRect MarkerTool::mousePreviewRect(const CaptureContext& context) const { int width = PADDING_VALUE + context.toolSize; QRect rect(0, 0, width + 2, width + 2); rect.moveCenter(context.mousePos); return rect; } CaptureTool* MarkerTool::copy(QObject* parent) { auto* tool = new MarkerTool(parent); copyParams(this, tool); return tool; } void MarkerTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) auto compositionMode = painter.compositionMode(); qreal opacity = painter.opacity(); auto pen = painter.pen(); painter.setCompositionMode(QPainter::CompositionMode_Multiply); painter.setOpacity(0.35); painter.setPen(QPen(color(), size())); painter.drawLine(points().first, points().second); painter.setPen(pen); painter.setOpacity(opacity); painter.setCompositionMode(compositionMode); } void MarkerTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { auto compositionMode = painter.compositionMode(); qreal opacity = painter.opacity(); auto pen = painter.pen(); painter.setCompositionMode(QPainter::CompositionMode_Multiply); painter.setOpacity(0.35); painter.setPen(QPen(context.color, PADDING_VALUE + context.toolSize)); painter.drawLine(context.mousePos, context.mousePos); painter.setPen(pen); painter.setOpacity(opacity); painter.setCompositionMode(compositionMode); } void MarkerTool::drawStart(const CaptureContext& context) { AbstractTwoPointTool::drawStart(context); onSizeChanged(context.toolSize + PADDING_VALUE); } void MarkerTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/marker/markertool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class MarkerTool : public AbstractTwoPointTool { Q_OBJECT public: explicit MarkerTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; QRect mousePreviewRect(const CaptureContext& context) const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; protected: CaptureTool::Type type() const override; public slots: void drawStart(const CaptureContext& context) override; void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/move/movetool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "movetool.h" #include MoveTool::MoveTool(QObject* parent) : AbstractActionTool(parent) {} bool MoveTool::closeOnButtonPressed() const { return false; } QIcon MoveTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "cursor-move.svg"); } QString MoveTool::name() const { return tr("Move"); } CaptureTool::Type MoveTool::type() const { return CaptureTool::TYPE_MOVESELECTION; } QString MoveTool::description() const { return tr("Move the selection area"); } CaptureTool* MoveTool::copy(QObject* parent) { return new MoveTool(parent); } void MoveTool::pressed(CaptureContext& context) { Q_UNUSED(context) } bool MoveTool::isSelectable() const { return true; } ================================================ FILE: src/tools/move/movetool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class MoveTool : public AbstractActionTool { Q_OBJECT public: explicit MoveTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; CaptureTool::Type type() const override; QString description() const override; bool isSelectable() const override; CaptureTool* copy(QObject* parent = nullptr) override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/pencil/penciltool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "penciltool.h" #include PencilTool::PencilTool(QObject* parent) : AbstractPathTool(parent) {} QIcon PencilTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "pencil.svg"); } QString PencilTool::name() const { return tr("Pencil"); } CaptureTool::Type PencilTool::type() const { return CaptureTool::TYPE_PENCIL; } QString PencilTool::description() const { return tr("Set the Pencil as the paint tool"); } CaptureTool* PencilTool::copy(QObject* parent) { auto* tool = new PencilTool(parent); copyParams(this, tool); return tool; } void PencilTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.setPen(QPen(m_color, size())); painter.drawPolyline(m_points.data(), m_points.size()); } void PencilTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { painter.setPen(QPen(context.color, context.toolSize + 2)); painter.drawLine(context.mousePos, context.mousePos); } void PencilTool::drawStart(const CaptureContext& context) { m_color = context.color; onSizeChanged(context.toolSize); m_points.append(context.mousePos); m_pathArea.setTopLeft(context.mousePos); m_pathArea.setBottomRight(context.mousePos); } void PencilTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/pencil/penciltool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractpathtool.h" class PencilTool : public AbstractPathTool { Q_OBJECT public: explicit PencilTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; protected: CaptureTool::Type type() const override; public slots: void drawStart(const CaptureContext& context) override; void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/pin/pintool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "pintool.h" #include "src/core/qguiappcurrentscreen.h" #include "src/tools/pin/pinwidget.h" #include PinTool::PinTool(QObject* parent) : AbstractActionTool(parent) {} bool PinTool::closeOnButtonPressed() const { return true; } QIcon PinTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "pin.svg"); } QString PinTool::name() const { return tr("Pin Tool"); } CaptureTool::Type PinTool::type() const { return CaptureTool::TYPE_PIN; } QString PinTool::description() const { return tr("Pin image on the desktop"); } CaptureTool* PinTool::copy(QObject* parent) { return new PinTool(parent); } void PinTool::pressed(CaptureContext& context) { emit requestAction(REQ_CLEAR_SELECTION); emit requestAction(REQ_CAPTURE_DONE_OK); context.request.addTask(CaptureRequest::PIN); emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/pin/pintool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class PinTool : public AbstractActionTool { Q_OBJECT public: explicit PinTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; private: QRect m_geometry; QPixmap m_pixmap; }; ================================================ FILE: src/tools/pin/pinwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include #include #include #include #include "pinwidget.h" #include "qguiappcurrentscreen.h" #include "screenshotsaver.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include #include #include #include #include namespace { constexpr int MARGIN = 7; constexpr int BLUR_RADIUS = 2 * MARGIN; constexpr qreal STEP = 0.03; constexpr qreal MIN_SIZE = 100.0; } PinWidget::PinWidget(const QPixmap& pixmap, const QRect& geometry, QWidget* parent) : QWidget(parent) , m_pixmap(pixmap) , m_layout(new QVBoxLayout(this)) , m_label(new QLabel()) , m_shadowEffect(new QGraphicsDropShadowEffect(this)) { setWindowIcon(QIcon(GlobalValues::iconPath())); setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Dialog); setFocusPolicy(Qt::StrongFocus); setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_DeleteOnClose); setWindowTitle("flameshot-pin"); ConfigHandler conf; m_baseColor = conf.uiColor(); m_hoverColor = conf.contrastUiColor(); m_layout->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN); m_shadowEffect->setColor(m_baseColor); m_shadowEffect->setBlurRadius(BLUR_RADIUS); m_shadowEffect->setOffset(0, 0); setGraphicsEffect(m_shadowEffect); setWindowOpacity(m_opacity); m_label->setPixmap(m_pixmap); m_layout->addWidget(m_label); new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q), this, SLOT(close())); new QShortcut(Qt::Key_Escape, this, SLOT(close())); qreal devicePixelRatio = 1; #if defined(Q_OS_MACOS) || defined(Q_OS_LINUX) QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); if (currentScreen != nullptr) { devicePixelRatio = currentScreen->devicePixelRatio(); } #endif const int margin = static_cast(static_cast(MARGIN) * devicePixelRatio); QRect adjusted_pos = geometry + QMargins(margin, margin, margin, margin); setGeometry(adjusted_pos); #if defined(Q_OS_MACOS) || defined(Q_OS_LINUX) if (currentScreen != nullptr) { QPoint topLeft = currentScreen->geometry().topLeft(); adjusted_pos.setX((adjusted_pos.x() - topLeft.x()) / devicePixelRatio + topLeft.x()); adjusted_pos.setY((adjusted_pos.y() - topLeft.y()) / devicePixelRatio + topLeft.y()); adjusted_pos.setWidth(adjusted_pos.size().width() / devicePixelRatio); adjusted_pos.setHeight(adjusted_pos.size().height() / devicePixelRatio); resize(0, 0); move(adjusted_pos.x(), adjusted_pos.y()); } #endif grabGesture(Qt::PinchGesture); this->setContextMenuPolicy(Qt::CustomContextMenu); connect(this, &QWidget::customContextMenuRequested, this, &PinWidget::showContextMenu); } void PinWidget::closePin() { update(); close(); } bool PinWidget::scrollEvent(QWheelEvent* event) { const auto phase = event->phase(); if (phase == Qt::ScrollPhase::ScrollUpdate #if defined(Q_OS_LINUX) || defined(Q_OS_WINDOWS) || defined(Q_OS_MACOS) || phase == Qt::ScrollPhase::NoScrollPhase #endif ) { const auto angle = event->angleDelta(); if (angle.y() == 0) { return true; } m_currentStepScaleFactor = angle.y() > 0 ? m_currentStepScaleFactor + STEP : m_currentStepScaleFactor - STEP; m_expanding = m_currentStepScaleFactor >= 1.0; } #if defined(Q_OS_MACOS) // ScrollEnd is currently supported only on Mac OSX if (phase == Qt::ScrollPhase::ScrollEnd) { #else else { #endif m_scaleFactor *= m_currentStepScaleFactor; m_currentStepScaleFactor = 1.0; m_expanding = false; } m_sizeChanged = true; update(); return true; } void PinWidget::enterEvent(QEnterEvent*) { m_shadowEffect->setColor(m_hoverColor); } void PinWidget::leaveEvent(QEvent*) { m_shadowEffect->setColor(m_baseColor); } void PinWidget::mouseDoubleClickEvent(QMouseEvent*) { closePin(); } void PinWidget::mousePressEvent(QMouseEvent* e) { if (QWindow* window = windowHandle(); window != nullptr) { window->startSystemMove(); return; } } void PinWidget::mouseMoveEvent(QMouseEvent* e) {} void PinWidget::keyPressEvent(QKeyEvent* event) { if (event->key() == Qt::Key_0) { m_opacity = 1.0; } else if (event->key() == Qt::Key_9) { m_opacity = 0.9; } else if (event->key() == Qt::Key_8) { m_opacity = 0.8; } else if (event->key() == Qt::Key_7) { m_opacity = 0.7; } else if (event->key() == Qt::Key_6) { m_opacity = 0.6; } else if (event->key() == Qt::Key_5) { m_opacity = 0.5; } else if (event->key() == Qt::Key_4) { m_opacity = 0.4; } else if (event->key() == Qt::Key_3) { m_opacity = 0.3; } else if (event->key() == Qt::Key_2) { m_opacity = 0.2; } else if (event->key() == Qt::Key_1) { m_opacity = 0.1; } setWindowOpacity(m_opacity); } bool PinWidget::gestureEvent(QGestureEvent* event) { if (QGesture* pinch = event->gesture(Qt::PinchGesture)) { pinchTriggered(static_cast(pinch)); } return true; } void PinWidget::rotateLeft() { m_sizeChanged = true; auto rotateTransform = QTransform().rotate(270); m_pixmap = m_pixmap.transformed(rotateTransform); } void PinWidget::rotateRight() { m_sizeChanged = true; auto rotateTransform = QTransform().rotate(90); m_pixmap = m_pixmap.transformed(rotateTransform); } void PinWidget::increaseOpacity() { m_opacity += 0.1; if (m_opacity > 1.0) { m_opacity = 1.0; } setWindowOpacity(m_opacity); } void PinWidget::decreaseOpacity() { m_opacity -= 0.1; if (m_opacity < 0.0) { m_opacity = 0.0; } setWindowOpacity(m_opacity); } bool PinWidget::event(QEvent* event) { if (event->type() == QEvent::Gesture) { return gestureEvent(static_cast(event)); } else if (event->type() == QEvent::Wheel) { return scrollEvent(static_cast(event)); } return QWidget::event(event); } void PinWidget::paintEvent(QPaintEvent* event) { if (m_sizeChanged) { const auto aspectRatio = m_expanding ? Qt::KeepAspectRatioByExpanding : Qt::KeepAspectRatio; const auto transformType = ConfigHandler().antialiasingPinZoom() ? Qt::SmoothTransformation : Qt::FastTransformation; const qreal iw = m_pixmap.width(); const qreal ih = m_pixmap.height(); const qreal nw = qBound(MIN_SIZE, iw * m_currentStepScaleFactor * m_scaleFactor, static_cast(maximumWidth())); const qreal nh = qBound(MIN_SIZE, ih * m_currentStepScaleFactor * m_scaleFactor, static_cast(maximumHeight())); const QPixmap pix = m_pixmap.scaled(nw, nh, aspectRatio, transformType); m_label->setPixmap(pix); adjustSize(); m_sizeChanged = false; } } void PinWidget::pinchTriggered(QPinchGesture* gesture) { const QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags(); if (changeFlags & QPinchGesture::ScaleFactorChanged) { m_currentStepScaleFactor = gesture->totalScaleFactor(); m_expanding = m_currentStepScaleFactor > gesture->lastScaleFactor(); } if (gesture->state() == Qt::GestureFinished) { m_scaleFactor *= m_currentStepScaleFactor; m_currentStepScaleFactor = 1; m_expanding = false; } m_sizeChanged = true; update(); } void PinWidget::showContextMenu(const QPoint& pos) { QMenu contextMenu(tr("Context menu"), this); QAction copyToClipboardAction(tr("Copy to clipboard"), this); connect(©ToClipboardAction, &QAction::triggered, this, &PinWidget::copyToClipboard); contextMenu.addAction(©ToClipboardAction); QAction saveToFileAction(tr("Save to file"), this); connect( &saveToFileAction, &QAction::triggered, this, &PinWidget::saveToFile); contextMenu.addAction(&saveToFileAction); contextMenu.addSeparator(); QAction rotateRightAction(tr("Rotate Right"), this); connect( &rotateRightAction, &QAction::triggered, this, &PinWidget::rotateRight); contextMenu.addAction(&rotateRightAction); QAction rotateLeftAction(tr("Rotate Left"), this); connect( &rotateLeftAction, &QAction::triggered, this, &PinWidget::rotateLeft); contextMenu.addAction(&rotateLeftAction); QAction increaseOpacityAction(tr("Increase Opacity"), this); connect(&increaseOpacityAction, &QAction::triggered, this, &PinWidget::increaseOpacity); contextMenu.addAction(&increaseOpacityAction); QAction decreaseOpacityAction(tr("Decrease Opacity"), this); connect(&decreaseOpacityAction, &QAction::triggered, this, &PinWidget::decreaseOpacity); contextMenu.addAction(&decreaseOpacityAction); QAction closePinAction(tr("Close"), this); connect(&closePinAction, &QAction::triggered, this, &PinWidget::closePin); contextMenu.addSeparator(); contextMenu.addAction(&closePinAction); contextMenu.exec(mapToGlobal(pos)); } void PinWidget::copyToClipboard() { saveToClipboard(m_pixmap); } void PinWidget::saveToFile() { hide(); saveToFilesystemGUI(m_pixmap); show(); } ================================================ FILE: src/tools/pin/pinwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QLabel; class QVBoxLayout; class QGestureEvent; class QPinchGesture; class QGraphicsDropShadowEffect; class PinWidget : public QWidget { Q_OBJECT public: explicit PinWidget(const QPixmap& pixmap, const QRect& geometry, QWidget* parent = nullptr); protected: void mouseDoubleClickEvent(QMouseEvent*) override; void mousePressEvent(QMouseEvent*) override; void mouseMoveEvent(QMouseEvent*) override; void keyPressEvent(QKeyEvent*) override; void enterEvent(QEnterEvent*) override; void leaveEvent(QEvent*) override; bool event(QEvent* event) override; void paintEvent(QPaintEvent* event) override; private: bool gestureEvent(QGestureEvent* event); bool scrollEvent(QWheelEvent* e); void pinchTriggered(QPinchGesture*); void closePin(); void rotateLeft(); void rotateRight(); void increaseOpacity(); void decreaseOpacity(); QPixmap m_pixmap; QVBoxLayout* m_layout; QLabel* m_label; QGraphicsDropShadowEffect* m_shadowEffect; QColor m_baseColor, m_hoverColor; bool m_expanding{ false }; qreal m_scaleFactor{ 1 }; qreal m_opacity{ 1 }; unsigned int m_rotateFactor{ 0 }; qreal m_currentStepScaleFactor{ 1 }; bool m_sizeChanged{ false }; private slots: void showContextMenu(const QPoint& pos); void copyToClipboard(); void saveToFile(); }; ================================================ FILE: src/tools/pixelate/pixelatetool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "pixelatetool.h" #include #include #include #include #include #include #include #include #include "confighandler.h" PixelateTool::PixelateTool(QObject* parent) : AbstractTwoPointTool(parent) {} QIcon PixelateTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "pixelate.svg"); } QString PixelateTool::name() const { return tr("Pixelate"); } CaptureTool::Type PixelateTool::type() const { return CaptureTool::TYPE_PIXELATE; } QString PixelateTool::description() const { return tr("Set Pixelate as the paint tool."); } QRect PixelateTool::boundingRect() const { return QRect(points().first, points().second).normalized(); } CaptureTool* PixelateTool::copy(QObject* parent) { auto* tool = new PixelateTool(parent); copyParams(this, tool); return tool; } /** * Since pixelation does not protect the contents of the pixelated area * (see e.g. https://github.com/bishopfox/unredacter), * _pseudo-pixelation_ is used: * * Only colors from the fringe of the selected area are used to generate * a pixelation-like effect. The interior of the selected area is not used * as an input at all and hence can not be recovered. * */ void PixelateTool::process(QPainter& painter, const QPixmap& pixmap) { bool useInsecurePixelate = ConfigHandler().insecurePixelate(); QRect selection = boundingRect().intersected(pixmap.rect()); auto pixelRatio = pixmap.devicePixelRatio(); QRect selectionScaled = QRect(selection.topLeft() * pixelRatio, selection.bottomRight() * pixelRatio); const auto width = static_cast(selection.width() * (0.5 / qMax(1, size() + 1))); const auto height = static_cast(selection.height() * (0.5 / qMax(1, size() + 1))); const auto effectSize = QSize(qMax(width, 1), qMax(height, 1)); if (useInsecurePixelate) { if (size() <= 1) { auto* blur = new QGraphicsBlurEffect(this); blur->setBlurRadius(10); auto* item = new QGraphicsPixmapItem(pixmap.copy(selectionScaled)); item->setGraphicsEffect(blur); QGraphicsScene scene; scene.addItem(item); scene.render(&painter, selection, QRectF()); blur->setBlurRadius(12); // multiple repeat for make blur effect stronger scene.render(&painter, selection, QRectF()); } else { auto pixmapPixelated = pixmap.copy(selectionScaled); pixmapPixelated = pixmapPixelated.scaled( effectSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); pixmapPixelated = pixmapPixelated.scaled(selection.width(), selection.height()); painter.drawImage(selection, pixmapPixelated.toImage()); } } else { // the PRNG is only used for visual effects and NOT part of the security // boundary std::mt19937 prng(42); // noise for the sampling process to avoid only sampling from a small // subset of the fringe std::normal_distribution sampling_noise(0, 5 * size() + 1); // additional noise that will be added on top of the effect to avoid // generating a monochromatic box when the fringe is monochromatic std::normal_distribution noise(0, 0.1f); QPoint const offset_top(0, selectionScaled.topLeft().y() == 0 ? 0 : -1); QPoint const offset_bottom(0, selectionScaled.bottomLeft().y() == pixmap.rect().bottomLeft().y() ? 0 : 1); QPoint const offset_left(selectionScaled.topLeft().x() == 0 ? 0 : -1, 0); QPoint const offset_right( selectionScaled.topRight().x() == pixmap.rect().topRight().x() ? 0 : 1, 0); // only values from the fringe will be used to compute the // pseudo-pixelation std::array fringe = { // top fringe pixmap .copy(QRect(selectionScaled.topLeft() + offset_top, selectionScaled.topRight() + offset_top)) .toImage(), // bottom fringe pixmap .copy(QRect(selectionScaled.bottomLeft() + offset_bottom, selectionScaled.bottomRight() + offset_bottom)) .toImage(), // left fringe pixmap .copy(QRect(selectionScaled.topLeft() + offset_left, selectionScaled.bottomLeft() + offset_left)) .toImage(), // right fringe pixmap .copy(QRect(selectionScaled.topRight() + offset_right, selectionScaled.bottomRight() + offset_right)) .toImage() }; // Image where the pseudo-pixelation is calculated. // This will later be scaled to cover the selected area. QImage pixelated = QImage(effectSize, QImage::Format_RGB32); // For every pixel of the effect, we consider four projections // to the fringe and sample a pixel from there. // Then a horizontal and vertical interpolation are calculated. std::array, 4> samples; for (int x = 0; x < width; ++x) { for (int y = 0; y < height; ++y) { float n = noise(prng); // relative horizontal resp. vertical position float const horizontal = x / (float)width; float const vertical = y / (float)height; for (int i = 0; i < 4; ++i) { QColor const c = fringe[i].pixel( std::clamp( static_cast(horizontal * fringe[i].width() + sampling_noise(prng)), 0, fringe[i].width() - 1), std::clamp( static_cast(vertical * fringe[i].height() + sampling_noise(prng)), 0, fringe[i].height() - 1)); samples[i][0] = c.redF(); samples[i][1] = c.greenF(); samples[i][2] = c.blueF(); } // weights of the horizontal resp. vertical interpolation float const weight_h = (qMin(x, width - x) / width) - (qMin(y, height - y) / height) + 0.5; float const weight_v = 1 - weight_h; // compute the weighted sum of the vertical and horizontal // interpolations std::array rgb = { 0, 0, 0 }; for (int i = 0; i < 3; ++i) { float c = // horizontal interpolation weight_h * ((1 - horizontal) * samples[2][i] + horizontal * samples[3][i]) // vertical interpolation + weight_v * ((1 - vertical) * samples[0][i] + vertical * samples[1][i]) // additional noise + n; rgb[i] = static_cast(0xff * c); rgb[i] = std::clamp(rgb[i], 0, 0xff); } QRgb const value = qRgb(rgb[0], rgb[1], rgb[2]); pixelated.setPixel(x, y, value); } } pixelated = pixelated.scaled(selection.width(), selection.height(), Qt::IgnoreAspectRatio, Qt::FastTransformation); painter.drawImage(selection, pixelated); } } void PixelateTool::drawSearchArea(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.fillRect(boundingRect(), QBrush(Qt::black)); } void PixelateTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { Q_UNUSED(context) Q_UNUSED(painter) } void PixelateTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/pixelate/pixelatetool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class PixelateTool : public AbstractTwoPointTool { Q_OBJECT public: explicit PixelateTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; QRect boundingRect() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; void drawSearchArea(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/rectangle/rectangletool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "rectangletool.h" #include #include #include RectangleTool::RectangleTool(QObject* parent) : AbstractTwoPointTool(parent) { m_supportsDiagonalAdj = true; } QIcon RectangleTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "square.svg"); } QString RectangleTool::name() const { return tr("Rectangle"); } CaptureTool::Type RectangleTool::type() const { return CaptureTool::TYPE_RECTANGLE; } QString RectangleTool::description() const { return tr("Set the Rectangle as the paint tool"); } CaptureTool* RectangleTool::copy(QObject* parent) { auto* tool = new RectangleTool(parent); copyParams(this, tool); return tool; } void RectangleTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) QPen orig_pen = painter.pen(); QBrush orig_brush = painter.brush(); painter.setPen( QPen(color(), size(), Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin)); painter.setBrush(QBrush(color())); if (size() == 0) { painter.drawRect(QRect(points().first, points().second)); } else { QPainterPath path; int offset = size() <= 1 ? 1 : static_cast(round(size() / 2 + 0.5)); path.addRoundedRect( QRectF( std::min(points().first.x(), points().second.x()) - offset, std::min(points().first.y(), points().second.y()) - offset, std::abs(points().first.x() - points().second.x()) + offset * 2, std::abs(points().first.y() - points().second.y()) + offset * 2), size(), size()); painter.fillPath(path, color()); } painter.setPen(orig_pen); painter.setBrush(orig_brush); } void RectangleTool::drawStart(const CaptureContext& context) { AbstractTwoPointTool::drawStart(context); onSizeChanged(context.toolSize); } void RectangleTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/rectangle/rectangletool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class RectangleTool : public AbstractTwoPointTool { Q_OBJECT public: explicit RectangleTool(QObject* parent = nullptr); QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; protected: CaptureTool::Type type() const override; public slots: void drawStart(const CaptureContext& context) override; void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/redo/redotool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "redotool.h" #include RedoTool::RedoTool(QObject* parent) : AbstractActionTool(parent) {} bool RedoTool::closeOnButtonPressed() const { return false; } QIcon RedoTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "redo-variant.svg"); } QString RedoTool::name() const { return tr("Redo"); } CaptureTool::Type RedoTool::type() const { return CaptureTool::TYPE_REDO; } QString RedoTool::description() const { return tr("Redo the next modification"); } CaptureTool* RedoTool::copy(QObject* parent) { return new RedoTool(parent); } void RedoTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_REDO_MODIFICATION); } ================================================ FILE: src/tools/redo/redotool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class RedoTool : public AbstractActionTool { Q_OBJECT public: explicit RedoTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/save/savetool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "savetool.h" #include "src/utils/screenshotsaver.h" #include SaveTool::SaveTool(QObject* parent) : AbstractActionTool(parent) {} bool SaveTool::closeOnButtonPressed() const { return true; } QIcon SaveTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "content-save.svg"); } QString SaveTool::name() const { return tr("Save"); } CaptureTool::Type SaveTool::type() const { return CaptureTool::TYPE_SAVE; } QString SaveTool::description() const { return tr("Save screenshot to a file"); } CaptureTool* SaveTool::copy(QObject* parent) { return new SaveTool(parent); } void SaveTool::pressed(CaptureContext& context) { emit requestAction(REQ_CLEAR_SELECTION); context.request.addSaveTask(); emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_CLOSE_GUI); } ================================================ FILE: src/tools/save/savetool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class SaveTool : public AbstractActionTool { Q_OBJECT public: explicit SaveTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/selection/selectiontool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "selectiontool.h" #include SelectionTool::SelectionTool(QObject* parent) : AbstractTwoPointTool(parent) { m_supportsDiagonalAdj = true; } bool SelectionTool::closeOnButtonPressed() const { return false; } QIcon SelectionTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "square-outline.svg"); } QString SelectionTool::name() const { return tr("Rectangular Selection"); } CaptureTool::Type SelectionTool::type() const { return CaptureTool::TYPE_SELECTION; } QString SelectionTool::description() const { return tr("Set Selection as the paint tool"); } CaptureTool* SelectionTool::copy(QObject* parent) { auto* tool = new SelectionTool(parent); copyParams(this, tool); return tool; } void SelectionTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.setPen( QPen(color(), size(), Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin)); painter.drawRect(QRect(points().first, points().second)); } void SelectionTool::pressed(CaptureContext& context) { Q_UNUSED(context) } ================================================ FILE: src/tools/selection/selectiontool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstracttwopointtool.h" class SelectionTool : public AbstractTwoPointTool { Q_OBJECT public: explicit SelectionTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/sizedecrease/sizedecreasetool.cpp ================================================ // Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors // // This file is part of Flameshot. // // Flameshot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Flameshot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Flameshot. If not, see . #include "sizedecreasetool.h" #include SizeDecreaseTool::SizeDecreaseTool(QObject* parent) : AbstractActionTool(parent) {} bool SizeDecreaseTool::closeOnButtonPressed() const { return false; } QIcon SizeDecreaseTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "minus.svg"); } QString SizeDecreaseTool::name() const { return tr("Decrease Tool Size"); } CaptureTool::Type SizeDecreaseTool::type() const { return CaptureTool::TYPE_SIZEDECREASE; } QString SizeDecreaseTool::description() const { return tr("Decrease the size of the other tools"); } CaptureTool* SizeDecreaseTool::copy(QObject* parent) { return new SizeDecreaseTool(parent); } void SizeDecreaseTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_DECREASE_TOOL_SIZE); } ================================================ FILE: src/tools/sizedecrease/sizedecreasetool.h ================================================ // Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors // // This file is part of Flameshot. // // Flameshot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Flameshot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Flameshot. If not, see . #pragma once #include "src/tools/abstractactiontool.h" class SizeDecreaseTool : public AbstractActionTool { Q_OBJECT public: explicit SizeDecreaseTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/sizeincrease/sizeincreasetool.cpp ================================================ // Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors // // This file is part of Flameshot. // // Flameshot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Flameshot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Flameshot. If not, see . #include "sizeincreasetool.h" #include SizeIncreaseTool::SizeIncreaseTool(QObject* parent) : AbstractActionTool(parent) {} bool SizeIncreaseTool::closeOnButtonPressed() const { return false; } QIcon SizeIncreaseTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "plus.svg"); } QString SizeIncreaseTool::name() const { return tr("Increase Tool Size"); } CaptureTool::Type SizeIncreaseTool::type() const { return CaptureTool::TYPE_SIZEINCREASE; } QString SizeIncreaseTool::description() const { return tr("Increase the size of the other tools"); } CaptureTool* SizeIncreaseTool::copy(QObject* parent) { return new SizeIncreaseTool(parent); } void SizeIncreaseTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_INCREASE_TOOL_SIZE); } ================================================ FILE: src/tools/sizeincrease/sizeincreasetool.h ================================================ // Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors // // This file is part of Flameshot. // // Flameshot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Flameshot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Flameshot. If not, see . #pragma once #include "src/tools/abstractactiontool.h" class SizeIncreaseTool : public AbstractActionTool { Q_OBJECT public: explicit SizeIncreaseTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/tools/text/textconfig.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "textconfig.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include "src/utils/pathinfo.h" #include #include #include #include TextConfig::TextConfig(QWidget* parent) : QWidget(parent) , m_layout(new QVBoxLayout(this)) , m_fontsCB(new QComboBox()) , m_strikeOutButton(nullptr) , m_underlineButton(nullptr) , m_weightButton(nullptr) , m_italicButton(nullptr) , m_leftAlignButton(nullptr) , m_centerAlignButton(nullptr) , m_rightAlignButton(nullptr) { connect(m_fontsCB, &QComboBox::currentTextChanged, this, &TextConfig::fontFamilyChanged); m_fontsCB->addItems(QFontDatabase::families()); setFontFamily(ConfigHandler().fontFamily()); QString iconPrefix = ColorUtils::colorIsDark(palette().windowText().color()) ? PathInfo::blackIconPath() : PathInfo::whiteIconPath(); m_strikeOutButton = new QPushButton( QIcon(iconPrefix + "format_strikethrough.svg"), QLatin1String("")); m_strikeOutButton->setCheckable(true); connect(m_strikeOutButton, &QPushButton::clicked, this, &TextConfig::fontStrikeOutChanged); m_strikeOutButton->setToolTip(tr("StrikeOut")); m_underlineButton = new QPushButton( QIcon(iconPrefix + "format_underlined.svg"), QLatin1String("")); m_underlineButton->setCheckable(true); connect(m_underlineButton, &QPushButton::clicked, this, &TextConfig::fontUnderlineChanged); m_underlineButton->setToolTip(tr("Underline")); m_weightButton = new QPushButton(QIcon(iconPrefix + "format_bold.svg"), QLatin1String("")); m_weightButton->setCheckable(true); connect(m_weightButton, &QPushButton::clicked, this, &TextConfig::weightButtonPressed); m_weightButton->setToolTip(tr("Bold")); m_italicButton = new QPushButton(QIcon(iconPrefix + "format_italic.svg"), QLatin1String("")); m_italicButton->setCheckable(true); connect(m_italicButton, &QPushButton::clicked, this, &TextConfig::fontItalicChanged); m_italicButton->setToolTip(tr("Italic")); auto* modifiersLayout = new QHBoxLayout(); m_leftAlignButton = new QPushButton(QIcon(iconPrefix + "leftalign.svg"), QLatin1String("")); m_leftAlignButton->setCheckable(true); m_leftAlignButton->setAutoExclusive(true); connect(m_leftAlignButton, &QPushButton::clicked, this, [this] { emit alignmentChanged(Qt::AlignLeft); }); m_leftAlignButton->setToolTip(tr("Left Align")); m_centerAlignButton = new QPushButton(QIcon(iconPrefix + "centeralign.svg"), QLatin1String("")); m_centerAlignButton->setCheckable(true); m_centerAlignButton->setAutoExclusive(true); connect(m_centerAlignButton, &QPushButton::clicked, this, [this] { emit alignmentChanged(Qt::AlignCenter); }); m_centerAlignButton->setToolTip(tr("Center Align")); m_rightAlignButton = new QPushButton(QIcon(iconPrefix + "rightalign.svg"), QLatin1String("")); m_rightAlignButton->setCheckable(true); m_rightAlignButton->setAutoExclusive(true); connect(m_rightAlignButton, &QPushButton::clicked, this, [this] { emit alignmentChanged(Qt::AlignRight); }); m_rightAlignButton->setToolTip(tr("Right Align")); auto* alignmentLayout = new QHBoxLayout(); alignmentLayout->addWidget(m_leftAlignButton); alignmentLayout->addWidget(m_centerAlignButton); alignmentLayout->addWidget(m_rightAlignButton); m_layout->addWidget(m_fontsCB); modifiersLayout->addWidget(m_strikeOutButton); modifiersLayout->addWidget(m_underlineButton); modifiersLayout->addWidget(m_weightButton); modifiersLayout->addWidget(m_italicButton); m_layout->addLayout(modifiersLayout); m_layout->addLayout(alignmentLayout); } void TextConfig::setFontFamily(const QString& fontFamily) { m_fontsCB->setCurrentIndex( m_fontsCB->findText(fontFamily.isEmpty() ? font().family() : fontFamily)); } void TextConfig::setUnderline(const bool underline) { m_underlineButton->setChecked(underline); } void TextConfig::setStrikeOut(const bool strikeout) { m_strikeOutButton->setChecked(strikeout); } void TextConfig::setWeight(const int weight) { m_weightButton->setChecked(static_cast(weight) == QFont::Bold); } void TextConfig::setItalic(const bool italic) { m_italicButton->setChecked(italic); } void TextConfig::weightButtonPressed(const bool weight) { if (weight) { emit fontWeightChanged(QFont::Bold); } else { emit fontWeightChanged(QFont::Normal); } } void TextConfig::setTextAlignment(Qt::AlignmentFlag alignment) { switch (alignment) { case (Qt::AlignCenter): m_leftAlignButton->setChecked(false); m_centerAlignButton->setChecked(true); m_rightAlignButton->setChecked(false); break; case (Qt::AlignRight): m_leftAlignButton->setChecked(false); m_centerAlignButton->setChecked(false); m_rightAlignButton->setChecked(true); break; case (Qt::AlignLeft): default: m_leftAlignButton->setChecked(true); m_centerAlignButton->setChecked(false); m_rightAlignButton->setChecked(false); break; } emit alignmentChanged(alignment); } ================================================ FILE: src/tools/text/textconfig.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QVBoxLayout; class QPushButton; class QComboBox; class TextConfig : public QWidget { Q_OBJECT public: explicit TextConfig(QWidget* parent = nullptr); void setFontFamily(const QString& fontFamily); void setUnderline(bool underline); void setStrikeOut(bool strikeout); void setWeight(int weight); void setItalic(bool italic); void setTextAlignment(Qt::AlignmentFlag alignment); signals: void fontFamilyChanged(const QString& f); void fontUnderlineChanged(const bool underlined); void fontStrikeOutChanged(const bool dashed); void fontWeightChanged(const QFont::Weight w); void fontItalicChanged(const bool italic); void alignmentChanged(Qt::AlignmentFlag alignment); public slots: private slots: void weightButtonPressed(bool weight); private: QVBoxLayout* m_layout; QComboBox* m_fontsCB; QPushButton* m_strikeOutButton; QPushButton* m_underlineButton; QPushButton* m_weightButton; QPushButton* m_italicButton; QPushButton* m_leftAlignButton; QPushButton* m_centerAlignButton; QPushButton* m_rightAlignButton; }; ================================================ FILE: src/tools/text/texttool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "texttool.h" #include "src/utils/confighandler.h" #include "textconfig.h" #include "textwidget.h" #define BASE_POINT_SIZE 8 #define MAX_INFO_LENGTH 24 TextTool::TextTool(QObject* parent) : CaptureTool(parent) , m_size(1) { QString fontFamily = ConfigHandler().fontFamily(); if (!fontFamily.isEmpty()) { m_font.setFamily(ConfigHandler().fontFamily()); } m_alignment = Qt::AlignLeft; } TextTool::~TextTool() { closeEditor(); } void TextTool::copyParams(const TextTool* from, TextTool* to) { CaptureTool::copyParams(from, to); to->m_font = from->m_font; to->m_alignment = from->m_alignment; to->m_text = from->m_text; to->m_size = from->m_size; to->m_color = from->m_color; to->m_textArea = from->m_textArea; to->m_currentPos = from->m_currentPos; } bool TextTool::isValid() const { return !m_text.isEmpty(); } bool TextTool::closeOnButtonPressed() const { return false; } bool TextTool::isSelectable() const { return true; } bool TextTool::showMousePreview() const { return false; } QRect TextTool::boundingRect() const { return m_textArea; } QIcon TextTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "text.svg"); } QString TextTool::name() const { return tr("Text"); } QString TextTool::info() { if (m_text.length() > 0) { m_tempString = QString("%1 - %2").arg(name(), m_text.trimmed()); m_tempString = m_tempString.split("\n").at(0); if (m_tempString.length() > MAX_INFO_LENGTH) { m_tempString.truncate(MAX_INFO_LENGTH); m_tempString += "…"; } return m_tempString; } return name(); } CaptureTool::Type TextTool::type() const { return CaptureTool::TYPE_TEXT; } QString TextTool::description() const { return tr("Add text to your capture"); } QWidget* TextTool::widget() { closeEditor(); m_widget = new TextWidget(); m_widget->setTextColor(m_color); m_font.setPointSize(m_size + BASE_POINT_SIZE); m_widget->setFont(m_font); m_widget->setAlignment(m_alignment); m_widget->setText(m_text); m_widget->selectAll(); connect(m_widget, &TextWidget::textUpdated, this, &TextTool::updateText); return m_widget; } void TextTool::closeEditor() { if (!m_widget.isNull()) { m_widget->hide(); delete m_widget; m_widget = nullptr; } if (!m_confW.isNull()) { m_confW->hide(); delete m_confW; m_confW = nullptr; } } QWidget* TextTool::configurationWidget() { m_confW = new TextConfig(); connect( m_confW, &TextConfig::fontFamilyChanged, this, &TextTool::updateFamily); connect(m_confW, &TextConfig::fontItalicChanged, this, &TextTool::updateFontItalic); connect(m_confW, &TextConfig::fontStrikeOutChanged, this, &TextTool::updateFontStrikeOut); connect(m_confW, &TextConfig::fontUnderlineChanged, this, &TextTool::updateFontUnderline); connect(m_confW, &TextConfig::fontWeightChanged, this, &TextTool::updateFontWeight); connect( m_confW, &TextConfig::alignmentChanged, this, &TextTool::updateAlignment); m_confW->setFontFamily(m_font.family()); m_confW->setItalic(m_font.italic()); m_confW->setUnderline(m_font.underline()); m_confW->setStrikeOut(m_font.strikeOut()); m_confW->setWeight(m_font.weight()); m_confW->setTextAlignment(m_alignment); return m_confW; } CaptureTool* TextTool::copy(QObject* parent) { auto* textTool = new TextTool(parent); if (m_confW != nullptr) { connect(m_confW, &TextConfig::fontFamilyChanged, textTool, &TextTool::updateFamily); connect(m_confW, &TextConfig::fontItalicChanged, textTool, &TextTool::updateFontItalic); connect(m_confW, &TextConfig::fontStrikeOutChanged, textTool, &TextTool::updateFontStrikeOut); connect(m_confW, &TextConfig::fontUnderlineChanged, textTool, &TextTool::updateFontUnderline); connect(m_confW, &TextConfig::fontWeightChanged, textTool, &TextTool::updateFontWeight); connect(m_confW, &TextConfig::alignmentChanged, textTool, &TextTool::updateAlignment); } copyParams(this, textTool); return textTool; } void TextTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) if (m_text.isEmpty()) { return; } const int val = 5; QFont orig_font = painter.font(); QPen orig_pen = painter.pen(); QFontMetrics fm(m_font); QSize fontsize(fm.boundingRect(QRect(), 0, m_text).size()); fontsize.setWidth(fontsize.width() + val * 2); fontsize.setHeight(fontsize.height() + val * 2); m_textArea.setSize(fontsize); // draw text painter.setFont(m_font); painter.setPen(m_color); if (!editMode()) { painter.drawText( m_textArea + QMargins(-val, -val, val, val), m_alignment, m_text); } painter.setFont(orig_font); painter.setPen(orig_pen); if (m_widget != nullptr) { m_widget->setAlignment(m_alignment); } } void TextTool::drawObjectSelection(QPainter& painter) { if (m_text.isEmpty()) { return; } drawObjectSelectionRect(painter, boundingRect()); } void TextTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { Q_UNUSED(painter) Q_UNUSED(context) } void TextTool::drawEnd(const QPoint& point) { m_textArea.moveTo(point); } void TextTool::drawMove(const QPoint& point) { m_widget->move(point); } void TextTool::drawStart(const CaptureContext& context) { m_color = context.color; m_size = context.toolSize; emit requestAction(REQ_ADD_CHILD_WIDGET); } void TextTool::pressed(CaptureContext& context) { Q_UNUSED(context) } void TextTool::onColorChanged(const QColor& color) { m_color = color; if (m_widget != nullptr) { m_widget->setTextColor(color); } } void TextTool::onSizeChanged(int size) { m_size = size; m_font.setPointSize(m_size + BASE_POINT_SIZE); if (m_widget != nullptr) { m_widget->setFont(m_font); } } void TextTool::updateText(const QString& newText) { m_text = newText; } void TextTool::updateFamily(const QString& text) { m_font.setFamily(text); if (m_textOld.isEmpty()) { ConfigHandler().setFontFamily(m_font.family()); } if (m_widget != nullptr) { m_widget->setFont(m_font); } } void TextTool::updateFontUnderline(const bool underlined) { m_font.setUnderline(underlined); if (m_widget != nullptr) { m_widget->setFont(m_font); } } void TextTool::updateFontStrikeOut(const bool strikeout) { m_font.setStrikeOut(strikeout); if (m_widget != nullptr) { m_widget->setFont(m_font); } } void TextTool::updateFontWeight(const QFont::Weight weight) { m_font.setWeight(weight); if (m_widget != nullptr) { m_widget->setFont(m_font); } } void TextTool::updateFontItalic(const bool italic) { m_font.setItalic(italic); if (m_widget != nullptr) { m_widget->setFont(m_font); } } void TextTool::move(const QPoint& pos) { m_textArea.moveTo(pos); } void TextTool::updateAlignment(Qt::AlignmentFlag alignment) { m_alignment = alignment; if (m_widget != nullptr) { m_widget->setAlignment(m_alignment); } } const QPoint* TextTool::pos() { m_currentPos = m_textArea.topLeft(); return &m_currentPos; } void TextTool::setEditMode(bool editMode) { if (editMode) { m_textOld = m_text; } CaptureTool::setEditMode(editMode); } bool TextTool::isChanged() { return QString::compare(m_text, m_textOld, Qt::CaseInsensitive) != 0; } ================================================ FILE: src/tools/text/texttool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/capturetool.h" #include "textconfig.h" #include #include class TextWidget; class TextConfig; class TextTool : public CaptureTool { Q_OBJECT public: explicit TextTool(QObject* parent = nullptr); ~TextTool() override; [[nodiscard]] bool isValid() const override; [[nodiscard]] bool closeOnButtonPressed() const override; [[nodiscard]] bool isSelectable() const override; [[nodiscard]] bool showMousePreview() const override; [[nodiscard]] QRect boundingRect() const override; [[nodiscard]] QIcon icon(const QColor& background, bool inEditor) const override; [[nodiscard]] QString name() const override; [[nodiscard]] QString description() const override; QString info() override; QWidget* widget() override; QWidget* configurationWidget() override; CaptureTool* copy(QObject* parent = nullptr) override; void process(QPainter& painter, const QPixmap& pixmap) override; void paintMousePreview(QPainter& painter, const CaptureContext& context) override; void move(const QPoint& pos) override; const QPoint* pos() override; void drawObjectSelection(QPainter& painter) override; void setEditMode(bool editMode) override; bool isChanged() override; protected: void copyParams(const TextTool* from, TextTool* to); [[nodiscard]] CaptureTool::Type type() const override; public slots: void drawEnd(const QPoint& point) override; void drawMove(const QPoint& point) override; void drawStart(const CaptureContext& context) override; void pressed(CaptureContext& context) override; void onColorChanged(const QColor& color) override; void onSizeChanged(int size) override; int size() const override { return m_size; }; private slots: void updateText(const QString& string); void updateFamily(const QString& string); void updateFontUnderline(bool underlined); void updateFontStrikeOut(bool strikeout); void updateFontWeight(QFont::Weight weight); void updateFontItalic(bool italic); void updateAlignment(Qt::AlignmentFlag alignment); private: void closeEditor(); QFont m_font; Qt::AlignmentFlag m_alignment; QString m_text; QString m_textOld; int m_size; QColor m_color; QRect m_textArea; QPointer m_widget; QPointer m_confW; QPoint m_currentPos; QString m_tempString; }; ================================================ FILE: src/tools/text/textwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "textwidget.h" TextWidget::TextWidget(QWidget* parent) : QTextEdit(parent) { setStyleSheet(QStringLiteral("TextWidget { background: transparent; }")); connect(this, &TextWidget::textChanged, this, &TextWidget::adjustSize); connect(this, &TextWidget::textChanged, this, &TextWidget::emitTextUpdated); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setContextMenuPolicy(Qt::NoContextMenu); } void TextWidget::showEvent(QShowEvent* e) { QFont font; QFontMetrics fm(font); setFixedWidth(fm.lineSpacing() * 6); setFixedHeight(fm.lineSpacing() * 2.5); m_baseSize = size(); m_minSize = m_baseSize; QTextEdit::showEvent(e); adjustSize(); } void TextWidget::resizeEvent(QResizeEvent* e) { m_minSize.setHeight(qMin(m_baseSize.height(), height())); m_minSize.setWidth(qMin(m_baseSize.width(), width())); QTextEdit::resizeEvent(e); } void TextWidget::setFont(const QFont& f) { QTextEdit::setFont(f); adjustSize(); } void TextWidget::setAlignment(Qt::AlignmentFlag alignment) { QTextEdit::setAlignment(alignment); adjustSize(); } void TextWidget::setTextColor(const QColor& c) { QString s( QStringLiteral("TextWidget { background: transparent; color: %1; }")); setStyleSheet(s.arg(c.name())); } void TextWidget::adjustSize() { QString&& text = this->toPlainText(); QFontMetrics fm(font()); QRect bounds = fm.boundingRect(QRect(), 0, text); int pixelsWide = bounds.width() + fm.lineSpacing(); int pixelsHigh = bounds.height() * 1.15 + fm.lineSpacing(); if (pixelsWide < m_minSize.width()) { pixelsWide = m_minSize.width(); } if (pixelsHigh < m_minSize.height()) { pixelsHigh = m_minSize.height(); } this->setFixedSize(pixelsWide, pixelsHigh); } void TextWidget::emitTextUpdated() { emit textUpdated(this->toPlainText()); } ================================================ FILE: src/tools/text/textwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class TextWidget : public QTextEdit { Q_OBJECT public: explicit TextWidget(QWidget* parent = nullptr); void adjustSize(); void setFont(const QFont& f); protected: void showEvent(QShowEvent* e); void resizeEvent(QResizeEvent* e); signals: void textUpdated(const QString& s); public slots: void setTextColor(const QColor& c); void setAlignment(Qt::AlignmentFlag alignment); private slots: void emitTextUpdated(); private: QSize m_baseSize; QSize m_minSize; }; ================================================ FILE: src/tools/toolfactory.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "toolfactory.h" #include "accept/accepttool.h" #include "arrow/arrowtool.h" #include "circle/circletool.h" #include "circlecount/circlecounttool.h" #include "copy/copytool.h" #include "exit/exittool.h" #ifdef ENABLE_IMGUR #include "imgupload/imguploadertool.h" #endif #include "invert/inverttool.h" #include "launcher/applaunchertool.h" #include "line/linetool.h" #include "marker/markertool.h" #include "move/movetool.h" #include "pencil/penciltool.h" #include "pin/pintool.h" #include "pixelate/pixelatetool.h" #include "rectangle/rectangletool.h" #include "redo/redotool.h" #include "save/savetool.h" #include "selection/selectiontool.h" #include "sizedecrease/sizedecreasetool.h" #include "sizeincrease/sizeincreasetool.h" #include "text/texttool.h" #include "undo/undotool.h" ToolFactory::ToolFactory(QObject* parent) : QObject(parent) {} CaptureTool* ToolFactory::CreateTool(CaptureTool::Type t, QObject* parent) { #define if_TYPE_return_TOOL(TYPE, TOOL) \ case CaptureTool::TYPE: \ return new TOOL(parent) switch (t) { if_TYPE_return_TOOL(TYPE_PENCIL, PencilTool); if_TYPE_return_TOOL(TYPE_DRAWER, LineTool); if_TYPE_return_TOOL(TYPE_ARROW, ArrowTool); if_TYPE_return_TOOL(TYPE_SELECTION, SelectionTool); if_TYPE_return_TOOL(TYPE_RECTANGLE, RectangleTool); if_TYPE_return_TOOL(TYPE_CIRCLE, CircleTool); if_TYPE_return_TOOL(TYPE_MARKER, MarkerTool); if_TYPE_return_TOOL(TYPE_MOVESELECTION, MoveTool); if_TYPE_return_TOOL(TYPE_UNDO, UndoTool); if_TYPE_return_TOOL(TYPE_COPY, CopyTool); if_TYPE_return_TOOL(TYPE_SAVE, SaveTool); if_TYPE_return_TOOL(TYPE_EXIT, ExitTool); #ifdef ENABLE_IMGUR if_TYPE_return_TOOL(TYPE_IMAGEUPLOADER, ImgUploaderTool); #endif #if !defined(Q_OS_MACOS) if_TYPE_return_TOOL(TYPE_OPEN_APP, AppLauncher); #endif if_TYPE_return_TOOL(TYPE_PIXELATE, PixelateTool); if_TYPE_return_TOOL(TYPE_REDO, RedoTool); if_TYPE_return_TOOL(TYPE_PIN, PinTool); if_TYPE_return_TOOL(TYPE_TEXT, TextTool); if_TYPE_return_TOOL(TYPE_CIRCLECOUNT, CircleCountTool); if_TYPE_return_TOOL(TYPE_SIZEINCREASE, SizeIncreaseTool); if_TYPE_return_TOOL(TYPE_SIZEDECREASE, SizeDecreaseTool); if_TYPE_return_TOOL(TYPE_INVERT, InvertTool); if_TYPE_return_TOOL(TYPE_ACCEPT, AcceptTool); default: return nullptr; } } ================================================ FILE: src/tools/toolfactory.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/capturetool.h" #include "src/widgets/capture/capturetoolbutton.h" #include class CaptureTool; class ToolFactory : public QObject { Q_OBJECT public: explicit ToolFactory(QObject* parent = nullptr); ToolFactory(const ToolFactory&) = delete; ToolFactory& operator=(const ToolFactory&) = delete; CaptureTool* CreateTool(CaptureTool::Type t, QObject* parent = nullptr); }; ================================================ FILE: src/tools/undo/undotool.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "undotool.h" #include UndoTool::UndoTool(QObject* parent) : AbstractActionTool(parent) {} bool UndoTool::closeOnButtonPressed() const { return false; } QIcon UndoTool::icon(const QColor& background, bool inEditor) const { Q_UNUSED(inEditor) return QIcon(iconPath(background) + "undo-variant.svg"); } QString UndoTool::name() const { return tr("Undo"); } CaptureTool::Type UndoTool::type() const { return CaptureTool::TYPE_UNDO; } QString UndoTool::description() const { return tr("Undo the last modification"); } CaptureTool* UndoTool::copy(QObject* parent) { return new UndoTool(parent); } void UndoTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_UNDO_MODIFICATION); } ================================================ FILE: src/tools/undo/undotool.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/abstractactiontool.h" class UndoTool : public AbstractActionTool { Q_OBJECT public: explicit UndoTool(QObject* parent = nullptr); bool closeOnButtonPressed() const override; QIcon icon(const QColor& background, bool inEditor) const override; QString name() const override; QString description() const override; CaptureTool* copy(QObject* parent = nullptr) override; protected: CaptureTool::Type type() const override; public slots: void pressed(CaptureContext& context) override; }; ================================================ FILE: src/utils/CMakeLists.txt ================================================ # Required to generate MOC target_sources( flameshot PRIVATE abstractlogger.h filenamehandler.h screengrabber.h systemnotification.h valuehandler.h strfparse.h ) target_sources( flameshot PRIVATE abstractlogger.cpp filenamehandler.cpp screengrabber.cpp monitorpreview.cpp confighandler.cpp systemnotification.cpp valuehandler.cpp screenshotsaver.cpp globalvalues.cpp desktopfileparse.cpp desktopinfo.cpp pathinfo.cpp colorutils.cpp history.cpp strfparse.cpp ) IF (UNIX AND NOT APPLE) target_sources( flameshot PRIVATE request.h request.cpp ) ENDIF() IF (WIN32) target_sources( flameshot PRIVATE winlnkfileparse.cpp ) ENDIF() ================================================ FILE: src/utils/abstractlogger.cpp ================================================ #include "abstractlogger.h" #include "systemnotification.h" #include #include AbstractLogger::AbstractLogger(Channel channel, int targets) : m_defaultChannel(channel) , m_targets(targets) { if (targets & LogFile) { // TODO } } /** * @brief Construct an AbstractLogger with output to a string. * @param additionalChannels Optional additional targets to output to. */ AbstractLogger::AbstractLogger(QString& str, Channel channel, int additionalChannels) : AbstractLogger(channel, additionalChannels) { m_textStreams << new QTextStream(&str); } AbstractLogger::~AbstractLogger() { qDeleteAll(m_textStreams); } AbstractLogger AbstractLogger::info(int targets) { return { Info, targets }; } AbstractLogger AbstractLogger::warning(int targets) { return { Warning, targets }; } AbstractLogger AbstractLogger::error(int targets) { return { Error, targets }; } AbstractLogger& AbstractLogger::sendMessage(const QString& msg, Channel channel) { if (m_targets & Notification) { SystemNotification().sendMessage( msg, messageHeader(channel, Notification), m_notificationPath); } if (!m_textStreams.isEmpty()) { for (auto* stream : m_textStreams) { *stream << messageHeader(channel, String) << msg << "\n"; } } if (m_targets & LogFile) { // TODO } if (m_targets & Stderr) { QTextStream stream(stderr); stream << messageHeader(channel, Stderr) << msg << "\n"; } if (m_targets & Stdout) { QTextStream stream(stdout); stream << messageHeader(channel, Stdout) << msg << "\n"; } return *this; } /** * @brief Send a message to the default channel of this logger. * @param msg * @return */ AbstractLogger& AbstractLogger::operator<<(const QString& msg) { sendMessage(msg, m_defaultChannel); return *this; } AbstractLogger& AbstractLogger::addOutputString(QString& str) { m_textStreams << new QTextStream(&str); return *this; } /** * @brief Attach a path to a notification so it can be dragged and dropped. */ AbstractLogger& AbstractLogger::attachNotificationPath(const QString& path) { if (m_targets & Notification) { m_notificationPath = path; } else { assert("Cannot attach notification path to a logger without a " "notification channel."); } return *this; } /** * @brief Enable/disable message header (e.g. "flameshot: info:"). */ AbstractLogger& AbstractLogger::enableMessageHeader(bool enable) { m_enableMessageHeader = enable; return *this; } /** * @brief Generate a message header for the given channel and target. */ QString AbstractLogger::messageHeader(Channel channel, Target target) { if (!m_enableMessageHeader) { return ""; } QString messageChannel; if (channel == Info) { messageChannel = "info"; } else if (channel == Warning) { messageChannel = "warning"; } else if (channel == Error) { messageChannel = "error"; } if (target == Notification) { messageChannel[0] = messageChannel[0].toUpper(); return "Flameshot " + messageChannel; } else { return "flameshot: " + messageChannel + ": "; } } ================================================ FILE: src/utils/abstractlogger.h ================================================ #pragma once #include #include #include /** * @brief A class that allows you to log events to where they need to go. */ class AbstractLogger { public: enum Target { Notification = 0x01, Stderr = 0x02, LogFile = 0x08, String = 0x10, Stdout = 0x20, Default = Notification | LogFile | Stderr, }; enum Channel { Info, Warning, Error }; AbstractLogger(Channel channel = Info, int targets = Default); AbstractLogger(QString& str, Channel channel, int additionalTargets = String); ~AbstractLogger(); // Convenience functions static AbstractLogger info(int targets = Default); static AbstractLogger warning(int targets = Default); static AbstractLogger error(int targets = Default); AbstractLogger& sendMessage(const QString& msg, Channel channel); AbstractLogger& operator<<(const QString& msg); AbstractLogger& addOutputString(QString& str); AbstractLogger& attachNotificationPath(const QString& path); AbstractLogger& enableMessageHeader(bool enable); private: QString messageHeader(Channel channel, Target target); int m_targets; Channel m_defaultChannel; QList m_textStreams; QString m_notificationPath; bool m_enableMessageHeader = true; }; ================================================ FILE: src/utils/colorutils.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "colorutils.h" inline qreal getColorLuma(const QColor& c) { return 0.30 * c.redF() + 0.59 * c.greenF() + 0.11 * c.blueF(); } bool ColorUtils::colorIsDark(const QColor& c) { // when luma <= 0.5, we considor it as a dark color return getColorLuma(c) <= 0.5; } QColor ColorUtils::contrastColor(const QColor& c) { int change = colorIsDark(c) ? 30 : -45; return { qBound(0, c.red() + change, 255), qBound(0, c.green() + change, 255), qBound(0, c.blue() + change, 255) }; } ================================================ FILE: src/utils/colorutils.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include namespace ColorUtils { // namespace bool colorIsDark(const QColor& c); QColor contrastColor(const QColor& c); } // namespace ================================================ FILE: src/utils/confighandler.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "confighandler.h" #include "abstractlogger.h" #include "src/tools/capturetool.h" #include "valuehandler.h" #include #include #include #include #include #include #include #include #include #include #include #include #if defined(Q_OS_MACOS) #include #endif // HELPER FUNCTIONS bool verifyLaunchFile() { #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) QString path = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, "autostart/", QStandardPaths::LocateDirectory) + "Flameshot.desktop"; bool res = QFile(path).exists(); #elif defined(Q_OS_WIN) QSettings bootUpSettings( "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat); bool res = bootUpSettings.value("Flameshot").toString() == QDir::toNativeSeparators(QCoreApplication::applicationFilePath()); #endif return res; } // VALUE HANDLING /** * Use this to declare a setting with a type that is either unrecognized by * QVariant or if you need to place additional constraints on its value. * @param KEY Name of the setting as in the config file * (a C-style string literal) * @param TYPE An instance of a `ValueHandler` derivative. This must be * specified in the form of a constructor, or the macro will * misbehave. */ #define OPTION(KEY, TYPE) \ { \ QStringLiteral(KEY), QSharedPointer(new TYPE) \ } #define SHORTCUT(NAME, DEFAULT_VALUE) \ { \ QStringLiteral(NAME), QSharedPointer(new KeySequence( \ QKeySequence(QLatin1String(DEFAULT_VALUE)))) \ } /** * This map contains all the information that is needed to parse, verify and * preprocess each configuration option in the General section. * NOTE: Please keep it well structured */ // clang-format off static QMap> recognizedGeneralOptions = { // KEY TYPE DEFAULT_VALUE OPTION("showHelp" ,Bool ( true )), OPTION("showSidePanelButton" ,Bool ( true )), OPTION("showDesktopNotification" ,Bool ( true )), OPTION("showAbortNotification" ,Bool ( true )), OPTION("disabledTrayIcon" ,Bool ( false )), OPTION("historyConfirmationToDelete" ,Bool ( true )), #if !defined(DISABLE_UPDATE_CHECKER) OPTION("checkForUpdates" ,Bool ( true )), #endif OPTION("allowMultipleGuiInstances" ,Bool ( false )), OPTION("showMagnifier" ,Bool ( false )), OPTION("squareMagnifier" ,Bool ( false )), #if !defined(Q_OS_WIN) OPTION("autoCloseIdleDaemon" ,Bool ( false )), #endif OPTION("startupLaunch" ,Bool ( false )), OPTION("showStartupLaunchMessage" ,Bool ( true )), OPTION("showQuitPrompt" ,Bool ( false )), OPTION("copyURLAfterUpload" ,Bool ( true )), OPTION("copyPathAfterSave" ,Bool ( false )), OPTION("antialiasingPinZoom" ,Bool ( true )), OPTION("useJpgForClipboard" ,Bool ( false )), OPTION("uploadWithoutConfirmation" ,Bool ( false )), OPTION("saveAfterCopy" ,Bool ( false )), OPTION("savePath" ,ExistingDir ( )), OPTION("savePathFixed" ,Bool ( false )), OPTION("saveAsFileExtension" ,SaveFileExtension ( )), OPTION("saveLastRegion" ,Bool ( false )), OPTION("uploadHistoryMax" ,LowerBoundedInt ( 0, 25 )), OPTION("undoLimit" ,BoundedInt ( 0, 999, 100 )), // Interface tab OPTION("uiLanguage" ,String ( "auto" )), OPTION("uiColor" ,Color ( {116, 0, 150} )), OPTION("contrastUiColor" ,Color ( {39, 0, 50} )), OPTION("contrastOpacity" ,BoundedInt ( 0, 255, 190 )), OPTION("buttons" ,ButtonList ( {} )), // Filename Editor tab OPTION("filenamePattern" ,FilenamePattern ( {} )), // Others // drawThickness shared by Pencil, Line, Arrow, Rectangular Selection, Circle OPTION("drawThickness" ,LowerBoundedInt ( 1, 3 )), OPTION("drawFontSize" ,LowerBoundedInt ( 1, 8 )), OPTION("drawCircleCounterSize" ,LowerBoundedInt ( 1, 1 )), OPTION("drawPixelateSize" ,LowerBoundedInt ( 1, 2 )), OPTION("drawRectangleSize" ,LowerBoundedInt ( 1, 1 )), OPTION("drawMarkerSize" ,LowerBoundedInt ( 1, 5 )), OPTION("drawColor" ,Color ( Qt::red )), OPTION("userColors" ,UserColors ( 3, 17 )), OPTION("ignoreUpdateToVersion" ,String ( "" )), OPTION("keepOpenAppLauncher" ,Bool ( false )), OPTION("fontFamily" ,String ( "" )), // PREDEFINED_COLOR_PALETTE_LARGE is defined in src/CMakeList.txt file and can be overwritten in GitHub actions OPTION("predefinedColorPaletteLarge", Bool ( PREDEFINED_COLOR_PALETTE_LARGE )), // NOTE: If another tool size is added besides drawThickness and // drawFontSize, remember to update ConfigHandler::toolSize OPTION("copyOnDoubleClick" ,Bool ( false )), OPTION("uploadClientSecret" ,String ( "313baf0c7b4d3ff" )), OPTION("showSelectionGeometry" , BoundedInt ( 0, 5, 4 )), OPTION("showSelectionGeometryHideTime", LowerBoundedInt ( 0, 3000 )), OPTION("jpegQuality" , BoundedInt ( 0,100,75 )), OPTION("reverseArrow" ,Bool ( false )), OPTION("insecurePixelate" ,Bool ( false )), #if defined(Q_OS_WIN) // Not visible on settings dialog OPTION("ignorePrntScrForcesSnipping" ,Bool ( false )), #endif }; static QMap> recognizedShortcuts = { // NAME DEFAULT_SHORTCUT SHORTCUT("TYPE_PENCIL" , "P" ), SHORTCUT("TYPE_DRAWER" , "D" ), SHORTCUT("TYPE_ARROW" , "A" ), SHORTCUT("TYPE_SELECTION" , "S" ), SHORTCUT("TYPE_RECTANGLE" , "R" ), SHORTCUT("TYPE_CIRCLE" , "C" ), SHORTCUT("TYPE_MARKER" , "M" ), SHORTCUT("TYPE_MOVESELECTION" , "Ctrl+M" ), SHORTCUT("TYPE_UNDO" , "Ctrl+Z" ), SHORTCUT("TYPE_COPY" , "Ctrl+C" ), SHORTCUT("TYPE_SAVE" , "Ctrl+S" ), SHORTCUT("TYPE_ACCEPT" , "Return" ), SHORTCUT("TYPE_EXIT" , "Ctrl+Q" ), SHORTCUT("TYPE_CANCEL" , "Ctrl+Backspace" ), #ifdef ENABLE_IMGUR SHORTCUT("TYPE_IMAGEUPLOADER" , ), #endif #if !defined(Q_OS_MACOS) SHORTCUT("TYPE_OPEN_APP" , "Ctrl+O" ), #endif SHORTCUT("TYPE_PIXELATE" , "B" ), SHORTCUT("TYPE_INVERT" , "I" ), SHORTCUT("TYPE_REDO" , "Ctrl+Shift+Z" ), SHORTCUT("TYPE_TEXT" , "T" ), SHORTCUT("TYPE_TOGGLE_PANEL" , "Space" ), SHORTCUT("TYPE_GRAB_COLOR" , "G" ), SHORTCUT("TYPE_RESIZE_LEFT" , "Shift+Left" ), SHORTCUT("TYPE_RESIZE_RIGHT" , "Shift+Right" ), SHORTCUT("TYPE_RESIZE_UP" , "Shift+Up" ), SHORTCUT("TYPE_RESIZE_DOWN" , "Shift+Down" ), SHORTCUT("TYPE_SYM_RESIZE_LEFT" , "Ctrl+Shift+Left" ), SHORTCUT("TYPE_SYM_RESIZE_RIGHT" , "Ctrl+Shift+Right" ), SHORTCUT("TYPE_SYM_RESIZE_UP" , "Ctrl+Shift+Up" ), SHORTCUT("TYPE_SYM_RESIZE_DOWN" , "Ctrl+Shift+Down" ), SHORTCUT("TYPE_SELECT_ALL" , "Ctrl+A" ), SHORTCUT("TYPE_MOVE_LEFT" , "Left" ), SHORTCUT("TYPE_MOVE_RIGHT" , "Right" ), SHORTCUT("TYPE_MOVE_UP" , "Up" ), SHORTCUT("TYPE_MOVE_DOWN" , "Down" ), SHORTCUT("TYPE_COMMIT_CURRENT_TOOL" , "Ctrl+Return" ), #if defined(Q_OS_WIN) SHORTCUT("TAKE_SCREENSHOT" , "Meta+Shift+x" ), #endif #if defined(Q_OS_MACOS) SHORTCUT("TYPE_DELETE_CURRENT_TOOL" , "Backspace" ), SHORTCUT("TAKE_SCREENSHOT" , "Ctrl+Shift+X" ), SHORTCUT("SCREENSHOT_HISTORY" , "Alt+Shift+X" ), #else SHORTCUT("TYPE_DELETE_CURRENT_TOOL" , "Delete" ), #endif SHORTCUT("TYPE_PIN" , ), SHORTCUT("TYPE_SIZEINCREASE" , ), SHORTCUT("TYPE_SIZEDECREASE" , ), SHORTCUT("TYPE_CIRCLECOUNT" , ), }; // clang-format on // CLASS CONFIGHANDLER ConfigHandler::ConfigHandler() #ifndef USE_PORTABLE_CONFIG : m_settings(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName()) #else : m_settings(qApp->applicationDirPath() + "/flameshot.ini", QSettings::IniFormat) #endif { static bool firstInitialization = true; if (firstInitialization) { // check for error every time the file changes m_configWatcher.reset(new QFileSystemWatcher()); ensureFileWatched(); QObject::connect(m_configWatcher.data(), &QFileSystemWatcher::fileChanged, [](const QString& fileName) { emit getInstance()->fileChanged(); if (QFile(fileName).exists()) { m_configWatcher->addPath(fileName); } if (m_skipNextErrorCheck) { m_skipNextErrorCheck = false; return; } ConfigHandler().checkAndHandleError(); if (!QFile(fileName).exists()) { // File watcher stops watching a deleted file. // Next time the config is accessed, force it // to check for errors (and watch again). m_errorCheckPending = true; } }); } firstInitialization = false; } /// Serves as an object to which slots can be connected. ConfigHandler* ConfigHandler::getInstance() { static ConfigHandler config; return &config; } // SPECIAL CASES bool ConfigHandler::startupLaunch() { bool res = value(QStringLiteral("startupLaunch")).toBool(); if (res != verifyLaunchFile()) { setStartupLaunch(res); } return res; } void ConfigHandler::setStartupLaunch(const bool start) { if (start == value(QStringLiteral("startupLaunch")).toBool()) { return; } setValue(QStringLiteral("startupLaunch"), start); #if defined(Q_OS_MACOS) /* TODO - there should be more correct way via API, but didn't find it without extra dependencies, there should be something like that: https://stackoverflow.com/questions/3358410/programmatically-run-at-startup-on-mac-os-x But files with this features differs on different MacOS versions and it doesn't work not on a BigSur at lease. */ QProcess process; if (start) { process.start("osascript", QStringList() << "-e" << "tell application \"System Events\" to make login " "item at end with properties {name: " "\"Flameshot\",path:\"/Applications/" "flameshot.app\", hidden:false}"); } else { process.start("osascript", QStringList() << "-e" << "tell application \"System Events\" to " "delete login item \"Flameshot\""); } if (!process.waitForFinished()) { qWarning() << "Login items is changed. " << process.errorString(); } else { qWarning() << "Unable to change login items, error:" << process.readAll(); } #elif defined(Q_OS_LINUX) || defined(Q_OS_UNIX) QString path = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/autostart/"; QDir autostartDir(path); if (!autostartDir.exists()) { autostartDir.mkpath("."); } QFile file(path + "Flameshot.desktop"); if (start) { if (file.open(QIODevice::WriteOnly)) { QByteArray data("[Desktop Entry]\nName=flameshot\nIcon=flameshot" "\nExec=flameshot\nTerminal=false\nType=Application" "\nX-GNOME-Autostart-enabled=true\n"); file.write(data); } } else { file.remove(); } #elif defined(Q_OS_WIN) QSettings bootUpSettings( "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat); // set workdir for flameshot on startup QSettings bootUpPath( "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App " "Paths", QSettings::NativeFormat); if (start) { QString app_path = QDir::toNativeSeparators(QCoreApplication::applicationFilePath()); bootUpSettings.setValue("Flameshot", app_path); // set application workdir bootUpPath.beginGroup("flameshot.exe"); bootUpPath.setValue("Path", QCoreApplication::applicationDirPath()); bootUpPath.endGroup(); } else { bootUpSettings.remove("Flameshot"); // remove application workdir bootUpPath.beginGroup("flameshot.exe"); bootUpPath.remove(""); bootUpPath.endGroup(); } #endif } void ConfigHandler::setAllTheButtons() { QList buttonlist = CaptureToolButton::getIterableButtonTypes(); setValue(QStringLiteral("buttons"), QVariant::fromValue(buttonlist)); } void ConfigHandler::setToolSize(CaptureTool::Type toolType, int size) { if (toolType == CaptureTool::TYPE_TEXT) { setDrawFontSize(size); } else if (toolType == CaptureTool::TYPE_RECTANGLE) { setDrawRectangleSize(size); } else if (toolType == CaptureTool::TYPE_MARKER) { setDrawMarkerSize(size); } else if (toolType == CaptureTool::TYPE_PIXELATE) { setDrawPixelateSize(size); } else if (toolType == CaptureTool::TYPE_CIRCLECOUNT) { setDrawCircleCounterSize(size); } else if (toolType != CaptureTool::NONE) { // All other tools are sharing the same size setDrawThickness(size); } } int ConfigHandler::toolSize(CaptureTool::Type toolType) { if (toolType == CaptureTool::TYPE_TEXT) { return drawFontSize(); } else if (toolType == CaptureTool::TYPE_RECTANGLE) { return drawRectangleSize(); } else if (toolType == CaptureTool::TYPE_MARKER) { return drawMarkerSize(); } else if (toolType == CaptureTool::TYPE_PIXELATE) { return drawPixelateSize(); } else if (toolType == CaptureTool::TYPE_CIRCLECOUNT) { return drawCircleCounterSize(); } else { // All other tools are sharing the same size return drawThickness(); } } // DEFAULTS QString ConfigHandler::filenamePatternDefault() { return QStringLiteral("%F_%H-%M"); } void ConfigHandler::setDefaultSettings() { for (const auto& key : m_settings.allKeys()) { if (isShortcut(key)) { // Do not reset Shortcuts continue; } m_settings.remove(key); } m_settings.sync(); } QString ConfigHandler::configFilePath() const { return m_settings.fileName(); } // GENERIC GETTERS AND SETTERS bool ConfigHandler::setShortcut(const QString& actionName, const QString& shortcut) { qDebug() << actionName; static QVector reservedShortcuts = { #if defined(Q_OS_MACOS) Qt::CTRL | Qt::Key_Backspace, Qt::Key_Escape, #else Qt::Key_Backspace, Qt::Key_Escape, #endif }; if (hasError()) { return false; } bool errorFlag = false; m_settings.beginGroup(CONFIG_GROUP_SHORTCUTS); if (shortcut.isEmpty()) { setValue(actionName, ""); } else if (reservedShortcuts.contains(QKeySequence(shortcut))) { // do not allow to set reserved shortcuts errorFlag = true; } else { errorFlag = false; // Make no difference for Return and Enter keys QString newShortcut = KeySequence().value(shortcut).toString(); for (auto& otherAction : m_settings.allKeys()) { if (actionName == otherAction) { continue; } QString existingShortcut = KeySequence().value(m_settings.value(otherAction)).toString(); if (newShortcut == existingShortcut) { errorFlag = true; goto done; } } m_settings.setValue(actionName, KeySequence().value(shortcut)); } done: m_settings.endGroup(); return !errorFlag; } QString ConfigHandler::shortcut(const QString& actionName) { QString setting = CONFIG_GROUP_SHORTCUTS "/" + actionName; QString shortcut = value(setting).toString(); if (!m_settings.contains(setting)) { // The action uses a shortcut that is a flameshot default // (not set explicitly by user) m_settings.beginGroup(CONFIG_GROUP_SHORTCUTS); for (auto& otherAction : m_settings.allKeys()) { if (m_settings.value(otherAction) == shortcut) { // We found an explicit shortcut - it will take precedence m_settings.endGroup(); return {}; } } m_settings.endGroup(); } return shortcut; } void ConfigHandler::setValue(const QString& key, const QVariant& value) { assertKeyRecognized(key); if (!hasError()) { // don't let the file watcher initiate another error check m_skipNextErrorCheck = true; auto val = valueHandler(key)->representation(value); m_settings.setValue(key, val); } } QVariant ConfigHandler::value(const QString& key) const { assertKeyRecognized(key); auto val = m_settings.value(key); auto handler = valueHandler(key); // Check the value for semantic errors if (val.isValid() && !handler->check(val)) { setErrorState(true); } if (m_hasError) { return handler->fallback(); } return handler->value(val); } void ConfigHandler::remove(const QString& key) { m_settings.remove(key); } void ConfigHandler::resetValue(const QString& key) { m_settings.setValue(key, valueHandler(key)->fallback()); } QSet& ConfigHandler::recognizedGeneralOptions() { auto keys = ::recognizedGeneralOptions.keys(); static QSet options = QSet(keys.begin(), keys.end()); return options; } QSet& ConfigHandler::recognizedShortcutNames() { auto keys = recognizedShortcuts.keys(); static QSet names = QSet(keys.begin(), keys.end()); return names; } /** * @brief Return keys from group `group`. * Use CONFIG_GROUP_GENERAL (General) for general settings. */ QSet ConfigHandler::keysFromGroup(const QString& group) const { QSet keys; for (const QString& key : m_settings.allKeys()) { if (group == CONFIG_GROUP_GENERAL && !key.contains('/')) { keys.insert(key); } else if (key.startsWith(group + "/")) { keys.insert(baseName(key)); } } return keys; } // ERROR HANDLING bool ConfigHandler::checkForErrors(AbstractLogger* log) const { return checkUnrecognizedSettings(log) && checkShortcutConflicts(log) && checkSemantics(log); } /** * @brief Parse the config to find settings with unrecognized names. * @return Whether the config passes this check. * * @note An unrecognized option is one that is not included in * `recognizedGeneralOptions` or `recognizedShortcutNames` depending on the * group the option belongs to. */ bool ConfigHandler::checkUnrecognizedSettings(AbstractLogger* log, QList* offenders) const { // sort the config keys by group QSet generalKeys = keysFromGroup(CONFIG_GROUP_GENERAL), shortcutKeys = keysFromGroup(CONFIG_GROUP_SHORTCUTS), recognizedGeneralKeys = recognizedGeneralOptions(), recognizedShortcutKeys = recognizedShortcutNames(); // subtract recognized keys generalKeys.subtract(recognizedGeneralKeys); shortcutKeys.subtract(recognizedShortcutKeys); // what is left are the unrecognized keys - hopefully empty bool ok = generalKeys.isEmpty() && shortcutKeys.isEmpty(); if (log != nullptr || offenders != nullptr) { for (const QString& key : generalKeys) { if (log) { *log << tr("Unrecognized setting: '%1'\n").arg(key); } if (offenders) { offenders->append(key); } } for (const QString& key : shortcutKeys) { if (log) { *log << tr("Unrecognized shortcut name: '%1'.\n").arg(key); } if (offenders) { offenders->append(CONFIG_GROUP_SHORTCUTS "/" + key); } } } return ok; } /** * @brief Check if there are multiple actions with the same shortcut. * @return Whether the config passes this check. * * @note It is not considered a conflict if action A uses shortcut S because it * is the flameshot default (not because the user explicitly configured it), and * action B uses the same shortcut. */ bool ConfigHandler::checkShortcutConflicts(AbstractLogger* log) const { bool ok = true; m_settings.beginGroup(CONFIG_GROUP_SHORTCUTS); QStringList shortcuts = m_settings.allKeys(); QStringList reportedInLog; for (auto key1 = shortcuts.begin(); key1 != shortcuts.end(); ++key1) { for (auto key2 = key1 + 1; key2 != shortcuts.end(); ++key2) { // values stored in variables are useful when running debugger QString value1 = m_settings.value(*key1).toString(), value2 = m_settings.value(*key2).toString(); // The check will pass if: // - one shortcut is empty (the action doesn't use a shortcut) // - or one of the settings is not found in m_settings, i.e. // user wants to use flameshot's default shortcut for the action // - or the shortcuts for both actions are different if (!(value1.isEmpty() || !m_settings.contains(*key1) || !m_settings.contains(*key2) || value1 != value2)) { ok = false; if (log == nullptr) { break; } else if (!reportedInLog.contains(*key1) && // No duplicate !reportedInLog.contains(*key2)) { // log entries reportedInLog.append(*key1); reportedInLog.append(*key2); *log << tr("Shortcut conflict: '%1' and '%2' " "have the same shortcut: %3\n") .arg(*key1, *key2, value1); } } } } m_settings.endGroup(); return ok; } /** * @brief Check each config value semantically. * @param log Destination for error log output. * @param offenders Destination for the semantically invalid keys. * @return Whether the config passes this check. */ bool ConfigHandler::checkSemantics(AbstractLogger* log, QList* offenders) const { QStringList allKeys = m_settings.allKeys(); bool ok = true; for (const QString& key : allKeys) { // Test if the key is recognized if (!recognizedGeneralOptions().contains(key) && (!isShortcut(key) || !recognizedShortcutNames().contains(baseName(key)))) { continue; } QVariant val = m_settings.value(key); auto valueHandler = this->valueHandler(key); if (val.isValid() && !valueHandler->check(val)) { // Key does not pass the check ok = false; if (log == nullptr && offenders == nullptr) { break; } if (log != nullptr) { *log << tr("Bad value in '%1'. Expected: %2\n") .arg(key, valueHandler->expected()); } if (offenders != nullptr) { offenders->append(key); } } } return ok; } /** * @brief Parse the configuration to find any errors in it. * * If the error state changes as a result of the check, it will perform the * appropriate action, e.g. notify the user. * * @see ConfigHandler::setErrorState for all the actions. */ void ConfigHandler::checkAndHandleError() const { if (!QFile(m_settings.fileName()).exists()) { setErrorState(false); } else { setErrorState(!checkForErrors()); } ensureFileWatched(); } /** * @brief Update the tracked error state of the config. * @param error The new error state. * * The error state is tracked so that signals are not emitted and the user is * not spammed every time the config file changes. Instead, only changes in * error state get reported. */ void ConfigHandler::setErrorState(bool error) const { bool hadError = m_hasError; m_hasError = error; // Notify user every time m_hasError changes if (!hadError && m_hasError) { QString msg = errorMessage(); AbstractLogger::error() << msg; emit getInstance()->error(); } else if (hadError && !m_hasError) { auto msg = tr("You have successfully resolved the configuration error."); AbstractLogger::info() << msg; emit getInstance()->errorResolved(); } } /** * @brief Return if the config contains an error. * * If an error check is due, it will be performed. */ bool ConfigHandler::hasError() const { if (m_errorCheckPending) { checkAndHandleError(); m_errorCheckPending = false; } return m_hasError; } /// Error message that can be used by other classes as well QString ConfigHandler::errorMessage() const { return tr( "The configuration contains an error. Open configuration to resolve."); } void ConfigHandler::ensureFileWatched() const { QFile file(m_settings.fileName()); if (!file.exists()) { if (file.open(QFileDevice::WriteOnly)) { file.close(); } } if (m_configWatcher != nullptr && m_configWatcher->files().isEmpty() && qApp != nullptr // ensures that the organization name can be accessed ) { m_configWatcher->addPath(m_settings.fileName()); } } /** * @brief Obtain a `ValueHandler` for the config option with the given key. * @return Smart pointer to the handler. * * @note If the key is from the CONFIG_GROUP_GENERAL (General) group, the * `recognizedGeneralOptions` map is looked up. If it is from * CONFIG_GROUP_SHORTCUTS (Shortcuts), a generic `KeySequence` value handler is * returned. */ QSharedPointer ConfigHandler::valueHandler( const QString& key) const { QSharedPointer handler; if (isShortcut(key)) { handler = recognizedShortcuts.value( baseName(key), QSharedPointer(new KeySequence())); } else { // General group handler = ::recognizedGeneralOptions.value(key); } return handler; } /** * This is used so that we can check if there is a mismatch between a config key * and its getter function. * Debug: throw an exception; Release: set error state */ void ConfigHandler::assertKeyRecognized(const QString& key) const { bool recognized = isShortcut(key) ? recognizedShortcutNames().contains(baseName(key)) : ::recognizedGeneralOptions.contains(key); if (!recognized) { #if defined(QT_DEBUG) // This should never happen, but just in case throw std::logic_error( tr("Bad config key '%1' in ConfigHandler. Please report " "this as a bug.") .arg(key) .toStdString()); #else setErrorState(true); #endif } } bool ConfigHandler::isShortcut(const QString& key) const { return m_settings.group() == QStringLiteral(CONFIG_GROUP_SHORTCUTS) || key.startsWith(QStringLiteral(CONFIG_GROUP_SHORTCUTS "/")); } QString ConfigHandler::baseName(const QString& key) const { return QFileInfo(key).baseName(); } // STATIC MEMBER DEFINITIONS bool ConfigHandler::m_hasError = false; bool ConfigHandler::m_errorCheckPending = true; bool ConfigHandler::m_skipNextErrorCheck = false; QSharedPointer ConfigHandler::m_configWatcher; ================================================ FILE: src/utils/confighandler.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/widgets/capture/capturetoolbutton.h" #include #include #include #include #define CONFIG_GROUP_GENERAL "General" #define CONFIG_GROUP_SHORTCUTS "Shortcuts" class QFileSystemWatcher; class ValueHandler; template class QSharedPointer; class QTextStream; class AbstractLogger; /** * Declare and implement a getter for a config option. `KEY` is the option key * as it appears in the config file, `TYPE` is the C++ type. At the same time * `KEY` is the name of the generated getter function. */ // clang-format off #define CONFIG_GETTER(KEY, TYPE) \ TYPE KEY() \ { \ return value(QStringLiteral(#KEY)).value(); \ } // clang-format on /** * Declare and implement a setter for a config option. `FUNC` is the name of the * generated function, `KEY` is the option key as it appears in the config file * and `TYPE` is the C++ type. */ #define CONFIG_SETTER(FUNC, KEY, TYPE) \ void FUNC(const TYPE& val) \ { \ QString key = QStringLiteral(#KEY); \ /* Without this check, multiple `flameshot gui` instances running */ \ /* simultaneously would cause an endless loop of fileWatcher calls */ \ if (QVariant::fromValue(val) != value(key)) { \ setValue(key, QVariant::fromValue(val)); \ } \ } /** * Combines the functionality of `CONFIG_GETTER` and `CONFIG_SETTER`. `GETFUNC` * is simultaneously the name of the getter function and the option key as it * appears in the config file. `SETFUNC` is the name of the setter function. * `TYPE` is the C++ type of the value. */ #define CONFIG_GETTER_SETTER(GETFUNC, SETFUNC, TYPE) \ CONFIG_GETTER(GETFUNC, TYPE) \ CONFIG_SETTER(SETFUNC, GETFUNC, TYPE) class ConfigHandler : public QObject { Q_OBJECT public: explicit ConfigHandler(); static ConfigHandler* getInstance(); // Definitions of getters and setters for config options // Some special cases are implemented regularly, without the macro // NOTE: When adding new options, make sure to add an entry in // recognizedGeneralOptions in the cpp file. CONFIG_GETTER_SETTER(userColors, setUserColors, QVector); CONFIG_GETTER_SETTER(savePath, setSavePath, QString) CONFIG_GETTER_SETTER(savePathFixed, setSavePathFixed, bool) CONFIG_GETTER_SETTER(uiLanguage, setUiLanguage, QString) CONFIG_GETTER_SETTER(uiColor, setUiColor, QColor) CONFIG_GETTER_SETTER(contrastUiColor, setContrastUiColor, QColor) CONFIG_GETTER_SETTER(drawColor, setDrawColor, QColor) CONFIG_GETTER_SETTER(predefinedColorPaletteLarge, setPredefinedColorPaletteLarge, bool) CONFIG_GETTER_SETTER(fontFamily, setFontFamily, QString) CONFIG_GETTER_SETTER(showHelp, setShowHelp, bool) CONFIG_GETTER_SETTER(showSidePanelButton, setShowSidePanelButton, bool) CONFIG_GETTER_SETTER(showDesktopNotification, setShowDesktopNotification, bool) CONFIG_GETTER_SETTER(showAbortNotification, setShowAbortNotification, bool) CONFIG_GETTER_SETTER(filenamePattern, setFilenamePattern, QString) CONFIG_GETTER_SETTER(disabledTrayIcon, setDisabledTrayIcon, bool) CONFIG_GETTER_SETTER(drawThickness, setDrawThickness, int) CONFIG_GETTER_SETTER(drawFontSize, setDrawFontSize, int) CONFIG_GETTER_SETTER(drawCircleCounterSize, setDrawCircleCounterSize, int) CONFIG_GETTER_SETTER(drawPixelateSize, setDrawPixelateSize, int) CONFIG_GETTER_SETTER(drawRectangleSize, setDrawRectangleSize, int) CONFIG_GETTER_SETTER(drawMarkerSize, setDrawMarkerSize, int) CONFIG_GETTER_SETTER(keepOpenAppLauncher, setKeepOpenAppLauncher, bool) #if !defined(DISABLE_UPDATE_CHECKER) CONFIG_GETTER_SETTER(checkForUpdates, setCheckForUpdates, bool) #endif CONFIG_GETTER_SETTER(allowMultipleGuiInstances, setAllowMultipleGuiInstances, bool) CONFIG_GETTER_SETTER(autoCloseIdleDaemon, setAutoCloseIdleDaemon, bool) CONFIG_GETTER_SETTER(showStartupLaunchMessage, setShowStartupLaunchMessage, bool) CONFIG_GETTER_SETTER(showQuitPrompt, setShowQuitPrompt, bool) CONFIG_GETTER_SETTER(contrastOpacity, setContrastOpacity, int) CONFIG_GETTER_SETTER(copyURLAfterUpload, setCopyURLAfterUpload, bool) CONFIG_GETTER_SETTER(historyConfirmationToDelete, setHistoryConfirmationToDelete, bool) CONFIG_GETTER_SETTER(uploadHistoryMax, setUploadHistoryMax, int) CONFIG_GETTER_SETTER(saveAfterCopy, setSaveAfterCopy, bool) CONFIG_GETTER_SETTER(copyPathAfterSave, setCopyPathAfterSave, bool) CONFIG_GETTER_SETTER(saveAsFileExtension, setSaveAsFileExtension, QString) CONFIG_GETTER_SETTER(antialiasingPinZoom, setAntialiasingPinZoom, bool) CONFIG_GETTER_SETTER(useJpgForClipboard, setUseJpgForClipboard, bool) CONFIG_GETTER_SETTER(uploadWithoutConfirmation, setUploadWithoutConfirmation, bool) CONFIG_GETTER_SETTER(ignoreUpdateToVersion, setIgnoreUpdateToVersion, QString) CONFIG_GETTER_SETTER(undoLimit, setUndoLimit, int) CONFIG_GETTER_SETTER(buttons, setButtons, QList) CONFIG_GETTER_SETTER(showMagnifier, setShowMagnifier, bool) CONFIG_GETTER_SETTER(squareMagnifier, setSquareMagnifier, bool) CONFIG_GETTER_SETTER(copyOnDoubleClick, setCopyOnDoubleClick, bool) CONFIG_GETTER_SETTER(uploadClientSecret, setUploadClientSecret, QString) CONFIG_GETTER_SETTER(saveLastRegion, setSaveLastRegion, bool) CONFIG_GETTER_SETTER(showSelectionGeometry, setShowSelectionGeometry, int) CONFIG_GETTER_SETTER(jpegQuality, setJpegQuality, int) CONFIG_GETTER_SETTER(reverseArrow, setReverseArrow, bool) CONFIG_GETTER_SETTER(insecurePixelate, setInsecurePixelate, bool) CONFIG_GETTER_SETTER(showSelectionGeometryHideTime, showSelectionGeometryHideTime, int) #if defined(Q_OS_WIN) CONFIG_GETTER_SETTER(ignorePrntScrForcesSnipping, setIgnorePrntScrForcesSnipping, bool) #endif // SPECIAL CASES bool startupLaunch(); void setStartupLaunch(const bool); void setAllTheButtons(); void setToolSize(CaptureTool::Type toolType, int size); int toolSize(CaptureTool::Type toolType); // DEFAULTS QString filenamePatternDefault(); void setDefaultSettings(); QString configFilePath() const; // GENERIC GETTERS AND SETTERS bool setShortcut(const QString& actionName, const QString& shortcut); QString shortcut(const QString& actionName); void setValue(const QString& key, const QVariant& value); QVariant value(const QString& key) const; void remove(const QString& key); void resetValue(const QString& key); // INFO static QSet& recognizedGeneralOptions(); static QSet& recognizedShortcutNames(); QSet keysFromGroup(const QString& group) const; // ERROR HANDLING bool checkForErrors(AbstractLogger* log = nullptr) const; bool checkUnrecognizedSettings(AbstractLogger* log = nullptr, QList* offenders = nullptr) const; bool checkShortcutConflicts(AbstractLogger* log = nullptr) const; bool checkSemantics(AbstractLogger* log = nullptr, QList* offenders = nullptr) const; void checkAndHandleError() const; void setErrorState(bool error) const; bool hasError() const; QString errorMessage() const; signals: void error() const; void errorResolved() const; void fileChanged() const; private: mutable QSettings m_settings; static bool m_hasError, m_errorCheckPending, m_skipNextErrorCheck; static QSharedPointer m_configWatcher; void ensureFileWatched() const; QSharedPointer valueHandler(const QString& key) const; void assertKeyRecognized(const QString& key) const; bool isShortcut(const QString& key) const; QString baseName(const QString& key) const; void cleanUnusedKeys(const QString& group, const QSet& keys) const; }; ================================================ FILE: src/utils/desktopfileparse.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "desktopfileparse.h" #include #include #include #include #include DesktopFileParser::DesktopFileParser() { QString locale = QLocale().name(); QString localeShort = QLocale().name().left(2); m_localeName = QStringLiteral("Name[%1]").arg(locale); m_localeDescription = QStringLiteral("Comment[%1]").arg(locale); m_localeNameShort = QStringLiteral("Name[%1]").arg(localeShort); m_localeDescriptionShort = QStringLiteral("Comment[%1]").arg(localeShort); m_defaultIcon = QIcon::fromTheme(QStringLiteral("application-x-executable")); } DesktopAppData DesktopFileParser::parseDesktopFile(const QString& fileName, bool& ok) const { DesktopAppData res; ok = true; QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { ok = false; return res; } bool nameLocaleSet = false; bool descriptionLocaleSet = false; bool isApplication = false; bool isService = false; QTextStream in(&file); // enter the desktop entry definition while (!in.atEnd() && in.readLine() != QLatin1String("[Desktop Entry]")) { } // start parsing while (!in.atEnd()) { QString line = in.readLine(); if (line.startsWith(QLatin1String("Icon"))) { res.icon = QIcon::fromTheme( line.mid(line.indexOf(QLatin1String("=")) + 1).trimmed(), m_defaultIcon); } else if (!nameLocaleSet && line.startsWith(QLatin1String("Name"))) { if (line.startsWith(m_localeName) || line.startsWith(m_localeNameShort)) { res.name = line.mid(line.indexOf(QLatin1String("=")) + 1).trimmed(); nameLocaleSet = true; } else if (line.startsWith(QLatin1String("Name="))) { res.name = line.mid(line.indexOf(QLatin1String("=")) + 1).trimmed(); } } else if (!descriptionLocaleSet && line.startsWith(QLatin1String("Comment"))) { if (line.startsWith(m_localeDescription) || line.startsWith(m_localeDescriptionShort)) { res.description = line.mid(line.indexOf(QLatin1String("=")) + 1).trimmed(); descriptionLocaleSet = true; } else if (line.startsWith(QLatin1String("Comment="))) { res.description = line.mid(line.indexOf(QLatin1String("=")) + 1).trimmed(); } } else if (line.startsWith(QLatin1String("Exec"))) { if (line.contains(QLatin1String("%"))) { res.exec = line.mid(line.indexOf(QLatin1String("=")) + 1).trimmed(); } else { ok = false; break; } } else if (line.startsWith(QLatin1String("Type"))) { if (line.contains(QLatin1String("Application"))) { isApplication = true; } if (line.contains(QLatin1String("Service"))) { isService = true; } } else if (line.startsWith(QLatin1String("Categories"))) { res.categories = line.mid(line.indexOf(QLatin1String("=")) + 1) .split(QStringLiteral(";")); } else if (line == QLatin1String("NoDisplay=true")) { ok = false; break; } else if (line == QLatin1String("Terminal=true")) { res.showInTerminal = true; } // ignore the other entries else if (line.startsWith(QLatin1String("["))) { break; } } file.close(); if (res.exec.isEmpty() || res.name.isEmpty() || (!isApplication && !isService)) { ok = false; } return res; } int DesktopFileParser::processDirectory(const QDir& dir) { // Note that // https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html // says files must end in .desktop or .directory // So filtering by .desktop stops us reading things like editor backups // .kdelnk is long deprecated QStringList entries = dir.entryList({ "*.desktop" }, QDir::NoDotAndDotDot | QDir::Files); bool ok; int length = m_appList.length(); for (const QString& file : entries) { DesktopAppData app = parseDesktopFile(dir.absoluteFilePath(file), ok); if (ok) { m_appList.append(app); } } return m_appList.length() - length; } QVector DesktopFileParser::getAppsByCategory( const QString& category) { QVector res; for (const DesktopAppData& app : std::as_const(m_appList)) { if (app.categories.contains(category)) { res.append(app); } } return res; } QMap> DesktopFileParser::getAppsByCategory( const QStringList& categories) { QMap> res; for (const DesktopAppData& app : std::as_const(m_appList)) { for (const QString& category : categories) { if (app.categories.contains(category)) { res[category].append(app); } } } return res; } ================================================ FILE: src/utils/desktopfileparse.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include #include class QDir; class QString; class QTextStream; struct DesktopAppData { DesktopAppData() : showInTerminal() {} DesktopAppData(const QString& name, const QString& description, const QString& exec, QIcon icon) : name(name) , description(description) , exec(exec) , icon(icon) , showInTerminal(false) {} bool operator==(const DesktopAppData& other) const { return name == other.name; } QString name; QString description; QString exec; QStringList categories; QIcon icon; bool showInTerminal; }; struct DesktopFileParser { DesktopFileParser(); DesktopAppData parseDesktopFile(const QString& fileName, bool& ok) const; int processDirectory(const QDir& dir); QVector getAppsByCategory(const QString& category); QMap> getAppsByCategory( const QStringList& categories); private: QString m_localeName; QString m_localeDescription; QString m_localeNameShort; QString m_localeDescriptionShort; QIcon m_defaultIcon; QVector m_appList; }; ================================================ FILE: src/utils/desktopinfo.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "desktopinfo.h" #include DesktopInfo::DesktopInfo() { auto e = QProcessEnvironment::systemEnvironment(); XDG_CURRENT_DESKTOP = e.value(QStringLiteral("XDG_CURRENT_DESKTOP")); XDG_SESSION_TYPE = e.value(QStringLiteral("XDG_SESSION_TYPE")); WAYLAND_DISPLAY = e.value(QStringLiteral("WAYLAND_DISPLAY")); KDE_FULL_SESSION = e.value(QStringLiteral("KDE_FULL_SESSION")); GNOME_DESKTOP_SESSION_ID = e.value(QStringLiteral("GNOME_DESKTOP_SESSION_ID")); DESKTOP_SESSION = e.value(QStringLiteral("DESKTOP_SESSION")); } bool DesktopInfo::waylandDetected() { return XDG_SESSION_TYPE == QLatin1String("wayland") || WAYLAND_DISPLAY.contains(QLatin1String("wayland"), Qt::CaseInsensitive); } DesktopInfo::WM DesktopInfo::windowManager() { DesktopInfo::WM res = DesktopInfo::OTHER; QStringList desktops = XDG_CURRENT_DESKTOP.split(QChar(':')); for (auto& desktop : desktops) { if (desktop.contains(QLatin1String("GNOME"), Qt::CaseInsensitive)) { return DesktopInfo::GNOME; } if (desktop.contains(QLatin1String("qtile"), Qt::CaseInsensitive)) { return DesktopInfo::QTILE; } if (desktop.contains(QLatin1String("sway"), Qt::CaseInsensitive) || desktop.contains(QLatin1String("river"), Qt::CaseInsensitive)) { return DesktopInfo::WLROOTS; } if (desktop.contains(QLatin1String("Hyprland"), Qt::CaseInsensitive)) { return DesktopInfo::HYPRLAND; } if (desktop.contains(QLatin1String("kde-plasma"))) { return DesktopInfo::KDE; } if (desktop.contains(QLatin1String("cosmic"), Qt::CaseInsensitive)) { return DesktopInfo::COSMIC; } } if (!GNOME_DESKTOP_SESSION_ID.isEmpty()) { return DesktopInfo::GNOME; } if (!KDE_FULL_SESSION.isEmpty()) { return DesktopInfo::KDE; } return res; } ================================================ FILE: src/utils/desktopinfo.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class DesktopInfo { public: DesktopInfo(); enum WM { GNOME, KDE, COSMIC, OTHER, QTILE, WLROOTS, HYPRLAND }; bool waylandDetected(); WM windowManager(); private: QString XDG_CURRENT_DESKTOP; QString XDG_SESSION_TYPE; QString WAYLAND_DISPLAY; QString KDE_FULL_SESSION; QString GNOME_DESKTOP_SESSION_ID; QString GDMSESSION; QString DESKTOP_SESSION; }; ================================================ FILE: src/utils/filenamehandler.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "filenamehandler.h" #include "abstractlogger.h" #include "src/utils/confighandler.h" #include "src/utils/strfparse.h" #include #include #include #include FileNameHandler::FileNameHandler(QObject* parent) : QObject(parent) { auto err = AbstractLogger::error(AbstractLogger::Stderr); try { std::locale::global(std::locale()); } catch (std::exception&) { err << "Locales on your system are not properly configured. Falling " "back to defaults"; std::locale::global(std::locale("en_US.UTF-8")); } } QString FileNameHandler::parsedPattern() { return parseFilename(ConfigHandler().filenamePattern()); } QString FileNameHandler::parseFilename(const QString& name) { QString res = name; if (name.isEmpty()) { res = ConfigHandler().filenamePatternDefault(); } // remove trailing characters '%' in the pattern while (res.endsWith('%')) { res.chop(1); } res = QString::fromStdString(strfparse::format_time_string(name.toStdString())); // add the parsed pattern in a correct format for the filesystem res = res.replace(QLatin1String("/"), QStringLiteral("⁄")) .replace(QLatin1String(":"), QLatin1String("-")); return res; } /** * @brief Generate a valid destination path from the possibly incomplete `path`. * The input `path` can be one of: * - empty string * - an existing directory * - a file in an existing directory * In each case, the output path will be an absolute path to a file with a * suffix matching the specified `format`. * @note * - If `path` points to a directory, the file name will be generated from the * formatted file name from the user configuration * - If `path` points to a file, its suffix will be changed to match `format` * - If `format` is not given, the suffix will remain untouched, unless `path` * has no suffix, in which case it will be given the "png" suffix * - If the path generated by the previous steps points to an existing file, * "_NUM" will be appended to its base name, where NUM is the first * available number that produces a non-existent path (starting from 1). * @param path Possibly incomplete file name to transform * @param format Desired output file suffix (excluding an initial '.' character) */ QString FileNameHandler::properScreenshotPath(QString path, const QString& format) { QFileInfo info(path); QString suffix = info.suffix(); if (info.isDir()) { // path is a directory => generate filename from configured pattern path = QDir(QDir(path).absolutePath() + "/" + parsedPattern()).path(); } else { // path points to a file => strip it of its suffix for now path = QDir(info.dir().absolutePath() + "/" + info.completeBaseName()) .path(); } if (!format.isEmpty()) { // Override suffix to match format path += "." + format; } else if (!suffix.isEmpty()) { // Leave the suffix as it was path += "." + suffix; } else { path += ".png"; } if (!QFileInfo::exists(path)) { return path; } else { return autoNumerateDuplicate(path); } } QString FileNameHandler::autoNumerateDuplicate(const QString& path) { // add numeration in case of repeated filename in the directory // find unused name adding _n where n is a number QFileInfo checkFile(path); QString directory = checkFile.dir().absolutePath(), filename = checkFile.completeBaseName(), suffix = checkFile.suffix(); if (!suffix.isEmpty()) { suffix = QStringLiteral(".") + suffix; } if (checkFile.exists()) { filename += QLatin1String("_"); int i = 1; while (true) { checkFile.setFile(directory + "/" + filename + QString::number(i) + suffix); if (!checkFile.exists()) { filename += QString::number(i); break; } ++i; } } return checkFile.filePath(); } ================================================ FILE: src/utils/filenamehandler.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class FileNameHandler : public QObject { Q_OBJECT public: explicit FileNameHandler(QObject* parent = nullptr); QString parsedPattern(); QString parseFilename(const QString& name); QString properScreenshotPath(QString filename, const QString& format = QString()); static const int MAX_CHARACTERS = 70; private: QString autoNumerateDuplicate(const QString& path); }; ================================================ FILE: src/utils/globalvalues.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "globalvalues.h" #include #include #if defined(Q_OS_MACOS) #include #endif int GlobalValues::buttonBaseSize() { return QFontMetrics(qApp->font()).lineSpacing() * 2.2; } QString GlobalValues::versionInfo() { return QStringLiteral("Flameshot " APP_VERSION " (" FLAMESHOT_GIT_HASH ")" "\nCompiled with Qt " QT_VERSION_STR); } QString GlobalValues::iconPath() { #if USE_MONOCHROME_ICON return QString(":img/app/flameshot.monochrome.svg"); #else return { ":img/app/flameshot.svg" }; #endif } QString GlobalValues::iconPathPNG() { #if USE_MONOCHROME_ICON return QString(":img/app/flameshot.monochrome.png"); #else return { ":img/app/flameshot.png" }; #endif } QString GlobalValues::trayIconPath() { #if USE_MONOCHROME_ICON #if defined(Q_OS_MACOS) auto currentMacOsVersion = QOperatingSystemVersion::current(); if (currentMacOsVersion >= QOperatingSystemVersion::MacOSBigSur) { return { ":img/app/flameshot.mask.png" }; } else { return { ":img/app/flameshot.monochrome.png" }; } #else return { ":img/app/flameshot.monochrome.png" }; #endif #else return { ":img/app/flameshot.png" }; #endif } ================================================ FILE: src/utils/globalvalues.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once class QString; namespace GlobalValues { int buttonBaseSize(); QString versionInfo(); QString iconPath(); QString iconPathPNG(); QString trayIconPath(); } ================================================ FILE: src/utils/history.cpp ================================================ #include "history.h" #include "src/utils/confighandler.h" #include #include #include #include History::History() { // Get cache history path ConfigHandler config; #ifdef Q_OS_WIN m_historyPath = QDir::homePath() + "/AppData/Roaming/flameshot/history/"; #else QString cachepath = QProcessEnvironment::systemEnvironment().value( "XDG_CACHE_HOME", QDir::homePath() + "/.cache"); m_historyPath = cachepath + "/flameshot/history/"; #endif // Check if directory for history exists and create if doesn't QDir dir = QDir(m_historyPath); if (!dir.exists()) { dir.mkpath("."); } } const QString& History::path() { return m_historyPath; } void History::save(const QPixmap& pixmap, const QString& fileName) { // scale preview only in local disk QPixmap pixmapScaled = QPixmap(pixmap); if (pixmap.height() / HISTORYPIXMAP_MAX_PREVIEW_HEIGHT >= pixmap.width() / HISTORYPIXMAP_MAX_PREVIEW_WIDTH) { pixmapScaled = pixmap.scaledToHeight(HISTORYPIXMAP_MAX_PREVIEW_HEIGHT, Qt::SmoothTransformation); } else { pixmapScaled = pixmap.scaledToWidth(HISTORYPIXMAP_MAX_PREVIEW_WIDTH, Qt::SmoothTransformation); } // save preview QFile file(path() + fileName); if (file.open(QIODevice::WriteOnly)) { pixmapScaled.save(&file, "PNG"); } history(); } const QList& History::history() { QDir directory(path()); QStringList images = directory.entryList(QStringList() << "*.png" << "*.PNG", QDir::Files, QDir::Time); int cnt = 0; int max = ConfigHandler().uploadHistoryMax(); m_thumbs.clear(); for (const auto& fileName : images) { if (++cnt <= max) { m_thumbs.append(fileName); } else { QFile file(path() + fileName); file.remove(); } } return m_thumbs; } const HistoryFileName& History::unpackFileName(const QString& fileNamePacked) { int nPathIndex = fileNamePacked.lastIndexOf("/"); QStringList unpackedFileName; if (nPathIndex == -1) { unpackedFileName = fileNamePacked.split("-"); } else { unpackedFileName = fileNamePacked.mid(nPathIndex + 1).split("-"); } switch (unpackedFileName.length()) { case 3: m_unpackedFileName.file = unpackedFileName[2]; m_unpackedFileName.token = unpackedFileName[1]; m_unpackedFileName.type = unpackedFileName[0]; break; case 2: m_unpackedFileName.file = unpackedFileName[1]; m_unpackedFileName.token = ""; m_unpackedFileName.type = unpackedFileName[0]; break; default: m_unpackedFileName.file = unpackedFileName[0]; m_unpackedFileName.token = ""; m_unpackedFileName.type = ""; break; } return m_unpackedFileName; } const QString& History::packFileName(const QString& storageType, const QString& deleteToken, const QString& fileName) { m_packedFileName = fileName; if (storageType.length() > 0) { if (deleteToken.length() > 0) { m_packedFileName = storageType + "-" + deleteToken + "-" + m_packedFileName; } else { m_packedFileName = storageType + "-" + m_packedFileName; } } return m_packedFileName; } ================================================ FILE: src/utils/history.h ================================================ #ifndef HISTORY_H #define HISTORY_H #define HISTORYPIXMAP_MAX_PREVIEW_WIDTH 250 #define HISTORYPIXMAP_MAX_PREVIEW_HEIGHT 100 #include #include #include struct HistoryFileName { QString file; QString token; QString type; }; class History { public: History(); void save(const QPixmap&, const QString&); const QList& history(); const QString& path(); const HistoryFileName& unpackFileName(const QString&); const QString& packFileName(const QString&, const QString&, const QString&); private: QString m_historyPath; QList m_thumbs; // temporary variables QString m_packedFileName; HistoryFileName m_unpackedFileName; }; #endif // HISTORY_H ================================================ FILE: src/utils/monitorpreview.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2026 Jeremy Borgman & Contributors #include "monitorpreview.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include #include #include #include MonitorPreview::MonitorPreview(int monitorIndex, QScreen* screen, const QPixmap& thumbnail, QWidget* parent) : QWidget(parent) , m_monitorIndex(monitorIndex) { QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(10, 10, 10, 10); layout->setSpacing(10); QLabel* imageLabel = new QLabel(this); imageLabel->setAlignment(Qt::AlignCenter); imageLabel->setPixmap(thumbnail); imageLabel->setStyleSheet( "QLabel { background-color: black; border-radius: 8px; }"); imageLabel->setScaledContents(false); m_textLabel = new QLabel(tr("Monitor %1: %2\nClick to select") .arg(m_monitorIndex + 1) .arg(screen->name()), this); m_textLabel->setAlignment(Qt::AlignCenter); layout->addWidget(imageLabel); layout->addWidget(m_textLabel); m_uiColor = ConfigHandler().uiColor(); m_contrastColor = ColorUtils::contrastColor(m_uiColor); // Apply initial themed background to text label only QString normalStyle = QString("QLabel { color: white; background-color: rgba(%1, %2, %3, 200); " "padding: 5px; font-size: 12pt; border-radius: 3px; }") .arg(m_uiColor.red()) .arg(m_uiColor.green()) .arg(m_uiColor.blue()); m_textLabel->setStyleSheet(normalStyle); } void MonitorPreview::mousePressEvent(QMouseEvent* event) { Q_UNUSED(event) emit monitorSelected(m_monitorIndex); } void MonitorPreview::enterEvent(QEnterEvent* event) { Q_UNUSED(event) QColor hoverBg = m_contrastColor; QString hoverStyle = QString("QLabel { color: white; background-color: rgba(%1, %2, %3, 220); " "padding: 5px; font-size: 12pt; border-radius: 3px; }") .arg(hoverBg.red()) .arg(hoverBg.green()) .arg(hoverBg.blue()); m_textLabel->setStyleSheet(hoverStyle); } void MonitorPreview::leaveEvent(QEvent* event) { Q_UNUSED(event) QString normalStyle = QString("QLabel { color: white; background-color: rgba(%1, %2, %3, 200); " "padding: 5px; font-size: 12pt; border-radius: 3px; }") .arg(m_uiColor.red()) .arg(m_uiColor.green()) .arg(m_uiColor.blue()); m_textLabel->setStyleSheet(normalStyle); } ================================================ FILE: src/utils/monitorpreview.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2026 Jeremy Borgman & Contributors #pragma once #include class QScreen; class QPixmap; class QLabel; class QEnterEvent; class MonitorPreview : public QWidget { Q_OBJECT public: MonitorPreview(int monitorIndex, QScreen* screen, const QPixmap& thumbnail, QWidget* parent = nullptr); int monitorIndex() const { return m_monitorIndex; } signals: void monitorSelected(int index); protected: void mousePressEvent(QMouseEvent* event) override; void enterEvent(QEnterEvent* event) override; void leaveEvent(QEvent* event) override; private: int m_monitorIndex; QColor m_uiColor; QColor m_contrastColor; QLabel* m_textLabel; }; ================================================ FILE: src/utils/pathinfo.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "pathinfo.h" #include #include #include const QString PathInfo::whiteIconPath() { return QStringLiteral(":/img/material/white/"); } const QString PathInfo::blackIconPath() { return QStringLiteral(":/img/material/black/"); } QStringList PathInfo::translationsPaths() { QString binaryPath = QFileInfo(qApp->applicationDirPath()).absoluteFilePath(); QString trPath = QDir::toNativeSeparators(binaryPath + "/translations"); #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) return QStringList() << QStringLiteral(APP_PREFIX) + "/share/flameshot/translations" << trPath << QStringLiteral("/usr/share/flameshot/translations") << QStringLiteral("/usr/local/share/flameshot/translations"); #endif return QStringList() << trPath; } ================================================ FILE: src/utils/pathinfo.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include namespace PathInfo { // namespace const QString whiteIconPath(); const QString blackIconPath(); QStringList translationsPaths(); } // namespace ================================================ FILE: src/utils/request.cpp ================================================ // // Created by nullobsi on 2021/02/01. // /* * Implementation of interface class OrgFreedesktopPortalRequestInterface */ #include "request.h" OrgFreedesktopPortalRequestInterface::OrgFreedesktopPortalRequestInterface( const QString& service, const QString& path, const QDBusConnection& connection, QObject* parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) {} OrgFreedesktopPortalRequestInterface::~OrgFreedesktopPortalRequestInterface() = default; ================================================ FILE: src/utils/request.h ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp -p response.cpp resp.xml * * qdbusxml2cpp is Copyright (C) 2020 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #ifndef RESPONSE_CPP #define RESPONSE_CPP #include #include #include #include #include #include #include #include /* * Proxy class for interface org.freedesktop.portal.Request */ class OrgFreedesktopPortalRequestInterface : public QDBusAbstractInterface { Q_OBJECT public: static inline const char* staticInterfaceName() { return "org.freedesktop.portal.Request"; } public: OrgFreedesktopPortalRequestInterface(const QString& service, const QString& path, const QDBusConnection& connection, QObject* parent = nullptr); ~OrgFreedesktopPortalRequestInterface(); public Q_SLOTS: // METHODS inline QDBusPendingReply<> Close() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Close"), argumentList); } Q_SIGNALS: // SIGNALS void Response(uint response, QVariantMap results); }; namespace org { namespace freedesktop { namespace portal { typedef ::OrgFreedesktopPortalRequestInterface Request; } } } #endif ================================================ FILE: src/utils/screengrabber.cpp ================================================ #include "screengrabber.h" #include "abstractlogger.h" #include "monitorpreview.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/confighandler.h" #include "src/utils/filenamehandler.h" #include "src/utils/systemnotification.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef FLAMESHOT_DEBUG_CAPTURE #include #endif #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #include "request.h" #include #include #include #include #include #endif bool ScreenGrabber::m_monitorSelectionActive = false; ScreenGrabber::ScreenGrabber(QObject* parent) : QObject(parent) , m_selectedMonitor(-1) , m_monitorSelectionLoop(nullptr) , m_userCancelled(false) { // Increase image allocation limit for large screenshots // (multi-monitor/high-DPI) Default is 128MB, set to 1GB to handle 4K+ // multi-monitor setups QImageReader::setAllocationLimit(1024); } void ScreenGrabber::freeDesktopPortal(bool& ok, QPixmap& res) { #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) auto* connectionInterface = QDBusConnection::sessionBus().interface(); auto service = QStringLiteral("org.freedesktop.portal.Desktop"); if (!connectionInterface->isServiceRegistered(service)) { ok = false; AbstractLogger::error() << tr( "Could not locate the `org.freedesktop.portal.Desktop` service"); return; } QDBusInterface screenshotInterface( service, QStringLiteral("/org/freedesktop/portal/desktop"), QStringLiteral("org.freedesktop.portal.Screenshot")); // unique token QString token = QUuid::createUuid().toString().remove('-').remove('{').remove('}'); // premake interface auto* request = new OrgFreedesktopPortalRequestInterface( service, "/org/freedesktop/portal/desktop/request/" + QDBusConnection::sessionBus().baseService().remove(':').replace('.', '_') + "/" + token, QDBusConnection::sessionBus(), this); QEventLoop loop; const auto onPortalResponse = [&res, &loop, this](uint status, const QVariantMap& map) { if (status == 0) { // Parse this as URI to handle unicode properly QUrl uri = map.value("uri").toString(); QString uriString = uri.toLocalFile(); res = QPixmap(uriString); QFile imgFile(uriString); imgFile.remove(); } loop.quit(); }; // prevent racy situations and listen before calling screenshot QMetaObject::Connection conn = QObject::connect( request, &org::freedesktop::portal::Request::Response, onPortalResponse); QTimer timeout; timeout.setSingleShot(true); timeout.setInterval(30000); // 30 second timeout QObject::connect(&timeout, &QTimer::timeout, &loop, [&loop, this]() { AbstractLogger::error() << tr("Screenshot portal timed out after 30 seconds"); loop.quit(); }); timeout.start(); screenshotInterface.call( QStringLiteral("Screenshot"), "", QMap({ { "handle_token", QVariant(token) }, { "interactive", QVariant(false) } })); loop.exec(); timeout.stop(); QObject::disconnect(conn); request->Close().waitForFinished(); request->deleteLater(); if (res.isNull()) { ok = false; return; } #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("FreeDesktop portal screenshot size: %1x%2, DPR: %3") .arg(res.width()) .arg(res.height()) .arg(res.devicePixelRatio()); #endif #endif } QPixmap ScreenGrabber::selectMonitorAndCrop(const QPixmap& fullScreenshot, bool& ok) { ok = true; #if defined(Q_OS_MACOS) // Avoid showing additional top-level monitor selection UI on macOS // Only screenshot the monitor where the tray activated the screenshot return cropToMonitor(fullScreenshot, 0); #else // If there's only one monitor, skip selection const QList screens = QGuiApplication::screens(); if (screens.size() == 1) { return cropToMonitor(fullScreenshot, 0); } if (m_monitorSelectionActive) { AbstractLogger::error() << tr("Screenshot already in progress, please wait for the current " "screenshot to complete"); ok = false; return QPixmap(); } m_monitorSelectionActive = true; m_selectedMonitor = -1; m_userCancelled = false; QWidget* container = createMonitorPreviews(fullScreenshot); // Wait for user to select a monitor QEventLoop loop; m_monitorSelectionLoop = &loop; loop.exec(); m_monitorSelectionLoop = nullptr; delete container; m_monitorSelectionActive = false; if (m_selectedMonitor >= 0) { return cropToMonitor(fullScreenshot, m_selectedMonitor); } else { ok = false; if (m_userCancelled) { AbstractLogger::info() << tr("Screenshot cancelled"); } return fullScreenshot; } #endif } QPixmap ScreenGrabber::grabEntireDesktop(bool& ok, int preSelectedMonitor) { ok = true; int wid = 0; QPixmap screenshot; #if defined(Q_OS_MACOS) QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); if (!currentScreen) { AbstractLogger::error() << tr("Unable to get current screen"); ok = false; return QPixmap(); } const QRect geom = currentScreen->geometry(); screenshot = currentScreen->grabWindow( wid, geom.x(), geom.y(), geom.width(), geom.height()); screenshot.setDevicePixelRatio(currentScreen->devicePixelRatio()); return screenshot; #elif defined(Q_OS_LINUX) || defined(Q_OS_UNIX) freeDesktopPortal(ok, screenshot); if (!ok) { AbstractLogger::error() << tr("Unable to capture screen"); return QPixmap(); } #elif defined(Q_OS_WIN) screenshot = windowsScreenshot(wid); #endif // If monitor was pre-selected skip UI and crop directly if (preSelectedMonitor >= 0) { const QList screens = QGuiApplication::screens(); if (preSelectedMonitor < screens.size()) { m_selectedMonitor = preSelectedMonitor; return cropToMonitor(screenshot, preSelectedMonitor); } } return selectMonitorAndCrop(screenshot, ok); } QPixmap ScreenGrabber::grabFullDesktop(bool& ok) { ok = true; QPixmap screenshot; #if defined(Q_OS_MACOS) // On macOS, composite all screens into a single pixmap. const QList screens = QGuiApplication::screens(); QRect totalGeom; for (QScreen* s : screens) { totalGeom = totalGeom.united(s->geometry()); } qreal maxDpr = 1.0; for (QScreen* s : screens) { maxDpr = qMax(maxDpr, s->devicePixelRatio()); } screenshot = QPixmap(qRound(totalGeom.width() * maxDpr), qRound(totalGeom.height() * maxDpr)); screenshot.setDevicePixelRatio(maxDpr); screenshot.fill(Qt::black); QPainter painter(&screenshot); for (QScreen* s : screens) { QRect geom = s->geometry(); QPixmap p = s->grabWindow(0); QPoint offset = geom.topLeft() - totalGeom.topLeft(); painter.drawPixmap(offset, p); } painter.end(); #elif defined(Q_OS_LINUX) || defined(Q_OS_UNIX) freeDesktopPortal(ok, screenshot); if (!ok) { AbstractLogger::error() << tr("Unable to capture screen"); } #elif defined(Q_OS_WIN) screenshot = windowsScreenshot(0); #endif return screenshot; } QRect ScreenGrabber::screenGeometry(QScreen* screen) { QRect geometry = screen->geometry(); if (m_info.waylandDetected()) { QPoint topLeft(0, 0); geometry.moveTo(geometry.topLeft() - topLeft); } return geometry; } QPixmap ScreenGrabber::grabScreen(QScreen* screen, bool& ok) { QPixmap p; QRect geometry = screenGeometry(screen); #if defined(Q_OS_LINUX) const QList screens = QGuiApplication::screens(); int screenIndex = screens.indexOf(screen); p = grabEntireDesktop(ok, screenIndex); #else ok = true; return screen->grabWindow( 0, geometry.x(), geometry.y(), geometry.width(), geometry.height()); #endif return p; } QRect ScreenGrabber::desktopGeometry() { QRect geometry; for (QScreen* const screen : QGuiApplication::screens()) { QRect scrRect = screen->geometry(); #if !defined(Q_OS_WIN) // https://doc.qt.io/qt-6/highdpi.html#device-independent-screen-geometry qreal dpr = screen->devicePixelRatio(); scrRect.moveTo(QPointF(scrRect.x() / dpr, scrRect.y() / dpr).toPoint()); #endif geometry = geometry.united(scrRect); } return geometry; } QScreen* ScreenGrabber::getSelectedScreen() const { const QList screens = QGuiApplication::screens(); if ((m_selectedMonitor < 0) || (m_selectedMonitor >= screens.size())) { return nullptr; } return screens[m_selectedMonitor]; } QWidget* ScreenGrabber::createMonitorPreviews(const QPixmap& fullScreenshot) { const QList screens = QGuiApplication::screens(); #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("=== All Screen Information ==="); for (int i = 0; i < screens.size(); ++i) { QScreen* s = screens[i]; qDebug() << tr("Screen %1: %2").arg(i).arg(s->name()); qDebug() << tr(" Logical geometry: %1x%2+%3+%4") .arg(s->geometry().width()) .arg(s->geometry().height()) .arg(s->geometry().x()) .arg(s->geometry().y()); qDebug() << tr(" DPR: %1").arg(s->devicePixelRatio()); } #endif QWidget* monitorPreviews = new QWidget( nullptr, Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); monitorPreviews->setAttribute(Qt::WA_TranslucentBackground); monitorPreviews->setStyleSheet( "QWidget { background-color: transparent; }"); monitorPreviews->installEventFilter(this); // For ESC key handling monitorPreviews->setFocusPolicy(Qt::StrongFocus); QHBoxLayout* containerLayout = new QHBoxLayout(monitorPreviews); containerLayout->setSpacing(20); containerLayout->setContentsMargins(20, 20, 20, 20); // Build list of screen indices sorted by X position (left to right) QList sortedIndices; for (int i = 0; i < screens.size(); ++i) { sortedIndices.append(i); } std::sort( sortedIndices.begin(), sortedIndices.end(), [&screens](int a, int b) { return screens[a]->geometry().x() < screens[b]->geometry().x(); }); for (int i : sortedIndices) { QScreen* screen = screens[i]; QPixmap cropped = cropToMonitor(fullScreenshot, i); QPixmap thumbnail = cropped.scaled( 400, 250, Qt::KeepAspectRatio, Qt::SmoothTransformation); thumbnail.setDevicePixelRatio(1.0); MonitorPreview* preview = new MonitorPreview(i, screen, thumbnail, monitorPreviews); connect( preview, &MonitorPreview::monitorSelected, this, [this](int index) { m_selectedMonitor = index; if (m_monitorSelectionLoop) { m_monitorSelectionLoop->quit(); } }); containerLayout->addWidget(preview); } monitorPreviews->setLayout(containerLayout); monitorPreviews->adjustSize(); QScreen* primaryScreen = QGuiApplication::primaryScreen(); QRect screenGeometry = primaryScreen->geometry(); QPoint center = screenGeometry.center(); monitorPreviews->move(center.x() - monitorPreviews->width() / 2, center.y() - monitorPreviews->height() / 2); monitorPreviews->show(); return monitorPreviews; } bool ScreenGrabber::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::KeyPress) { QKeyEvent* keyEvent = static_cast(event); if (keyEvent->key() == Qt::Key_Escape) { // User cancelled selection m_selectedMonitor = -1; m_userCancelled = true; if (m_monitorSelectionLoop) { m_monitorSelectionLoop->quit(); } return true; } } return QObject::eventFilter(obj, event); } QPixmap ScreenGrabber::cropToMonitor(const QPixmap& fullScreenshot, int monitorIndex) { const QList screens = QGuiApplication::screens(); if (monitorIndex >= screens.size()) { return fullScreenshot; } QScreen* targetScreen = screens[monitorIndex]; QRect targetGeometry = targetScreen->geometry(); qreal targetDpr = targetScreen->devicePixelRatio(); // Calculate total logical dimensions and minimum coordinates int minX = 0, minY = 0; int maxX = 0, maxY = 0; for (QScreen* screen : screens) { QRect geo = screen->geometry(); minX = qMin(minX, geo.x()); minY = qMin(minY, geo.y()); maxX = qMax(maxX, geo.x() + geo.width()); maxY = qMax(maxY, geo.y() + geo.height()); } int totalLogicalWidth = maxX - minX; int totalLogicalHeight = maxY - minY; #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("Total logical dimensions: %1x%2 (min: %3,%4)") .arg(totalLogicalWidth) .arg(totalLogicalHeight) .arg(minX) .arg(minY); qDebug() << tr("Screenshot dimensions: %1x%2") .arg(fullScreenshot.width()) .arg(fullScreenshot.height()); #endif int cropX, cropY, cropWidth, cropHeight; #if defined(Q_OS_LINUX) // Linux (both X11 and Wayland via freedesktop portal): // Use logical coordinate-based cropping since portal returns full // desktop qreal screenshotScaleX = (qreal)fullScreenshot.width() / totalLogicalWidth; qreal screenshotScaleY = (qreal)fullScreenshot.height() / totalLogicalHeight; #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("Screenshot scale factors: X=%1 Y=%2") .arg(screenshotScaleX) .arg(screenshotScaleY); #endif cropX = qRound((targetGeometry.x() - minX) * screenshotScaleX); cropY = qRound((targetGeometry.y() - minY) * screenshotScaleY); cropWidth = qRound(targetGeometry.width() * screenshotScaleX); cropHeight = qRound(targetGeometry.height() * screenshotScaleY); #else // Windows: Calculate physical pixel positions for mixed DPI cropX = 0; cropY = 0; for (QScreen* screen : screens) { QRect geom = screen->geometry(); qreal dpr = screen->devicePixelRatio(); // Sum physical widths of screens completely to the left if (geom.x() + geom.width() <= targetGeometry.x()) { cropX += qRound(geom.width() * dpr); } // Sum physical heights of screens completely above if (geom.y() + geom.height() <= targetGeometry.y()) { cropY += qRound(geom.height() * dpr); } } cropWidth = qRound(targetGeometry.width() * targetDpr); cropHeight = qRound(targetGeometry.height() * targetDpr); #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("Calculated crop position for mixed DPI: X=%1 Y=%2") .arg(cropX) .arg(cropY); #endif #endif QRect cropRect(cropX, cropY, cropWidth, cropHeight); #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("Screen %1: %2").arg(monitorIndex).arg(targetScreen->name()); qDebug() << tr(" Logical geometry: %1x%2+%3+%4 DPR: %5") .arg(targetGeometry.width()) .arg(targetGeometry.height()) .arg(targetGeometry.x()) .arg(targetGeometry.y()) .arg(targetDpr); qDebug() << tr(" Crop rect in screenshot: %1x%2+%3+%4") .arg(cropRect.width()) .arg(cropRect.height()) .arg(cropRect.x()) .arg(cropRect.y()); #endif // Ensure crop rect is within bounds cropRect = cropRect.intersected( QRect(0, 0, fullScreenshot.width(), fullScreenshot.height())); if (cropRect.isEmpty()) { AbstractLogger::warning() << tr("Crop rect is empty, returning full screenshot"); return fullScreenshot; } QPixmap cropped = fullScreenshot.copy(cropRect); #if defined(Q_OS_LINUX) // Linux: May need rescaling if scale factors don't match if (qAbs(screenshotScaleX - targetDpr) > 0.01) { int targetPhysicalWidth = qRound(targetGeometry.width() * targetDpr); int targetPhysicalHeight = qRound(targetGeometry.height() * targetDpr); cropped = cropped.scaled(targetPhysicalWidth, targetPhysicalHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); #ifdef FLAMESHOT_DEBUG_CAPTURE qDebug() << tr("Scaling screenshot to: %1 %2") .arg(targetPhysicalWidth) .arg(targetPhysicalHeight); #endif } #endif // Cropped region should be at target monitor's native DPR cropped.setDevicePixelRatio(targetDpr); return cropped; } QPixmap ScreenGrabber::windowsScreenshot(int wid) { const QList screens = QGuiApplication::screens(); QRect geometry = desktopGeometry(); int canvasWidth = 0; int canvasHeight = 0; // Build a map tracking where each screen should be positioned in // physical pixels struct ScreenInfo { QRect physicalRect; // Where to draw in the canvas QPixmap pixmap; }; QMap screenInfos; int minLogicalX = geometry.x(); int minLogicalY = geometry.y(); for (QScreen* screen : screens) { QRect screenGeom = screen->geometry(); qreal screenDpr = screen->devicePixelRatio(); QPixmap screenPixmap = screen->grabWindow(wid); screenPixmap.setDevicePixelRatio(1.0); int logicalX = screenGeom.x() - minLogicalX; int logicalY = screenGeom.y() - minLogicalY; int physicalWidth = screenPixmap.width(); int physicalHeight = screenPixmap.height(); int physicalX = 0; int physicalY = 0; for (QScreen* otherScreen : screens) { QRect otherGeom = otherScreen->geometry(); qreal otherDpr = otherScreen->devicePixelRatio(); // If this screen is entirely to the left of current screen if (otherGeom.x() + otherGeom.width() <= screenGeom.x()) { physicalX += qRound(otherGeom.width() * otherDpr); } // If this screen is entirely above the current screen if (otherGeom.y() + otherGeom.height() <= screenGeom.y()) { physicalY += qRound(otherGeom.height() * otherDpr); } } ScreenInfo info; info.physicalRect = QRect(physicalX, physicalY, physicalWidth, physicalHeight); info.pixmap = screenPixmap; screenInfos[screen] = info; canvasWidth = qMax(canvasWidth, physicalX + physicalWidth); canvasHeight = qMax(canvasHeight, physicalY + physicalHeight); } // Composite all screens onto canvas QPixmap desktop(canvasWidth, canvasHeight); desktop.fill(Qt::black); QPainter painter(&desktop); painter.setCompositionMode(QPainter::CompositionMode_Source); for (QScreen* screen : screens) { const ScreenInfo& info = screenInfos[screen]; painter.drawPixmap(info.physicalRect.topLeft(), info.pixmap); } painter.end(); return desktop; } ================================================ FILE: src/utils/screengrabber.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/utils/desktopinfo.h" #include #include #include #include #include class QEventLoop; class QWidget; class ScreenGrabber : public QObject { Q_OBJECT public: explicit ScreenGrabber(QObject* parent = nullptr); QPixmap grabEntireDesktop(bool& ok, int preSelectedMonitor = -1); QPixmap grabFullDesktop(bool& ok); QRect screenGeometry(QScreen* screen); QPixmap grabScreen(QScreen* screenNumber, bool& ok); void freeDesktopPortal(bool& ok, QPixmap& res); QRect desktopGeometry(); QRect logicalDesktopGeometry(); int getSelectedMonitor() const { return m_selectedMonitor; } QScreen* getSelectedScreen() const; QPixmap selectMonitorAndCrop(const QPixmap& fullScreenshot, bool& ok); protected: bool eventFilter(QObject* obj, QEvent* event) override; private: void adjustDevicePixelRatio(QPixmap& pixmap); QWidget* createMonitorPreviews(const QPixmap& fullScreenshot); QPixmap cropToMonitor(const QPixmap& fullScreenshot, int monitorIndex); QPixmap windowsScreenshot(int wid); DesktopInfo m_info; QPixmap Screenshot; int m_selectedMonitor; QEventLoop* m_monitorSelectionLoop; bool m_userCancelled; static bool m_monitorSelectionActive; }; ================================================ FILE: src/utils/screenshotsaver.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "screenshotsaver.h" #include "abstractlogger.h" #include "src/core/flameshot.h" #include "src/core/flameshotdaemon.h" #include "src/utils/confighandler.h" #include "src/utils/filenamehandler.h" #include "src/utils/globalvalues.h" #include "utils/desktopinfo.h" #include #include #include #include #include #include #if USE_WAYLAND_CLIPBOARD #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #if defined(Q_OS_MACOS) #include "src/widgets/capture/capturewidget.h" #endif bool saveToFilesystem(const QPixmap& capture, const QString& path, const QString& messagePrefix) { QString completePath = FileNameHandler().properScreenshotPath( path, ConfigHandler().saveAsFileExtension()); QFile file{ completePath }; bool okay = false; if (file.open(QIODevice::WriteOnly)) { QString saveExtension; saveExtension = QFileInfo(completePath).suffix().toLower(); if (saveExtension == "jpg" || saveExtension == "jpeg") { okay = capture.save(&file, nullptr, ConfigHandler().jpegQuality()); } else { okay = capture.save(&file); } QString saveMessage = messagePrefix; QString notificationPath = completePath; if (!saveMessage.isEmpty()) { saveMessage += " "; } if (okay) { saveMessage += QObject::tr("Capture saved as ") + completePath; AbstractLogger::info().attachNotificationPath(notificationPath) << saveMessage; } else { saveMessage += QObject::tr("Error trying to save as ") + completePath; if (file.error() != QFile::NoError) { saveMessage += ": " + file.errorString(); } notificationPath = ""; AbstractLogger::error().attachNotificationPath(notificationPath) << saveMessage; } } return okay; } QString ShowSaveFileDialog(const QString& title, const QString& directory) { QFileDialog dialog(nullptr, title, directory); dialog.setAcceptMode(QFileDialog::AcceptSave); // Build string list of supported image formats QStringList mimeTypeList; for (const auto& mimeType : QImageWriter::supportedMimeTypes()) { // image/heif has several aliases and they cause glitch in save dialog // It is necessary to keep the image/heif (otherwise HEIF plug-in from // kimageformats will not work) but the aliases could be filtered out. if (mimeType != "image/heic" && mimeType != "image/heic-sequence" && mimeType != "image/heif-sequence") { mimeTypeList.append(mimeType); } } dialog.setMimeTypeFilters(mimeTypeList); QString suffix = ConfigHandler().saveAsFileExtension(); if (suffix.isEmpty()) { suffix = "png"; } QString defaultMimeType = QMimeDatabase().mimeTypeForFile("image." + suffix).name(); dialog.selectMimeTypeFilter(defaultMimeType); dialog.setDefaultSuffix(suffix); if (dialog.exec() == QDialog::Accepted) { return dialog.selectedFiles().constFirst(); } else { return {}; } } void saveJpegToClipboardMacOS(const QPixmap& capture) { // Convert QPixmap to JPEG data QByteArray jpegData; QBuffer buffer(&jpegData); buffer.open(QIODevice::WriteOnly); QImageWriter imageWriter(&buffer, "jpeg"); // Set JPEG quality to whatever is in settings imageWriter.setQuality(ConfigHandler().jpegQuality()); if (!imageWriter.write(capture.toImage())) { qWarning() << "Failed to write image to JPEG format."; return; } // Save JPEG data to a temporary file QTemporaryFile tempFile; if (!tempFile.open()) { qWarning() << "Failed to open temporary file for writing."; return; } tempFile.write(jpegData); tempFile.close(); // Use osascript to copy the contents of the file to clipboard QProcess process; QString script = QString("set the clipboard to (read (POSIX file \"%1\") as «class PNGf»)") .arg(tempFile.fileName()); process.start("osascript", QStringList() << "-e" << script); if (!process.waitForFinished()) { qWarning() << "Failed to execute AppleScript."; } // Clean up tempFile.remove(); } void saveToClipboardMime(const QPixmap& capture, const QString& imageType) { QByteArray array; QBuffer buffer{ &array }; QImageWriter imageWriter{ &buffer, imageType.toUpper().toUtf8() }; if (imageType == "jpeg") { imageWriter.setQuality(ConfigHandler().jpegQuality()); } imageWriter.write(capture.toImage()); QPixmap formattedPixmap; bool isLoaded = formattedPixmap.loadFromData(reinterpret_cast(array.data()), array.size(), imageType.toUpper().toUtf8()); if (isLoaded) { auto* mimeData = new QMimeData(); #ifdef USE_WAYLAND_CLIPBOARD if (QGuiApplication::platformName() == "wayland") { mimeData->setImageData(formattedPixmap.toImage()); mimeData->setData(QStringLiteral("x-kde-force-image-copy"), QByteArray()); KSystemClipboard::instance()->setMimeData(mimeData, QClipboard::Clipboard); } else { mimeData->setData("image/" + imageType, array); QApplication::clipboard()->setMimeData(mimeData); } #else mimeData->setData("image/" + imageType, array); QApplication::clipboard()->setMimeData(mimeData); #endif } else { AbstractLogger::error() << QObject::tr("Error while saving to clipboard"); } } // If data is saved to the clipboard before the notification is sent via // dbus, the application freezes. void saveToClipboard(const QPixmap& capture) { // If we are able to properly save the file, save the file and copy to // clipboard. if ((ConfigHandler().saveAfterCopy()) && (!ConfigHandler().savePath().isEmpty())) { saveToFilesystem(capture, ConfigHandler().savePath(), QObject::tr("Capture saved to clipboard.")); } else { AbstractLogger() << QObject::tr("Capture saved to clipboard."); } if (ConfigHandler().useJpgForClipboard()) { #ifdef Q_OS_MACOS saveJpegToClipboardMacOS(capture); #else saveToClipboardMime(capture, "jpeg"); #endif } else { // Need to send message before copying to clipboard #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) if (DesktopInfo().waylandDetected()) { saveToClipboardMime(capture, "png"); } else { QApplication::clipboard()->setPixmap(capture); } #else QApplication::clipboard()->setPixmap(capture); #endif } } class ClipboardWatcherMimeData : public QMimeData { public: ClipboardWatcherMimeData(const QImage& img, QWidget* owner) : m_image(img) , m_owner(owner) {} protected: QStringList formats() const override { return { QStringLiteral("image/png"), QStringLiteral("application/x-qt-image") }; } QVariant retrieveData(const QString& mimeType, QMetaType type) const override { if (mimeType == QLatin1String("application/x-qt-image")) { notifyOwner(); return QVariant::fromValue(m_image); } if (mimeType == QLatin1String("image/png")) { QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); m_image.save(&buffer, "PNG"); notifyOwner(); return ba; } auto result = QMimeData::retrieveData(mimeType, type); if (result.isValid()) notifyOwner(); return result; } private: void notifyOwner() const { if (m_notified || m_owner.isNull()) return; m_notified = true; AbstractLogger::info() << QObject::tr("Capture saved to clipboard."); QPointer guard = m_owner; QTimer::singleShot(0, [guard]() { if (guard) guard->close(); }); } QImage m_image; mutable bool m_notified{ false }; QPointer m_owner; }; bool saveToClipboardGnomeWorkaround(const QPixmap& pixmap, QWidget* keepAlive) { auto* mimeData = new ClipboardWatcherMimeData(pixmap.toImage(), keepAlive); QClipboard* clipboard = QGuiApplication::clipboard(); clipboard->setMimeData(mimeData); keepAlive->hide(); // Safety net: force close after 500ms if compositor never fetches QTimer::singleShot(500, keepAlive, [keepAlive]() { qWarning() << "GNOME workaround timed out, compositor did not request " "clipboard data within 500ms. Force closing."; if (keepAlive) keepAlive->close(); }); return true; } bool saveToFilesystemGUI(const QPixmap& capture) { bool okay = false; ConfigHandler config; QString defaultSavePath = ConfigHandler().savePath(); if (defaultSavePath.isEmpty() || !QDir(defaultSavePath).exists() || !QFileInfo(defaultSavePath).isWritable()) { defaultSavePath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); } QString savePath = FileNameHandler().properScreenshotPath( defaultSavePath, ConfigHandler().saveAsFileExtension()); #if defined(Q_OS_MACOS) for (QWidget* widget : qApp->topLevelWidgets()) { QString className(widget->metaObject()->className()); if (0 == className.compare(CaptureWidget::staticMetaObject.className())) { widget->showNormal(); widget->hide(); break; } } #endif if (!config.savePathFixed()) { savePath = ShowSaveFileDialog(QObject::tr("Save screenshot"), savePath); } if (savePath == "") { return okay; } QFile file{ savePath }; if (file.open(QIODevice::WriteOnly)) { QString saveExtension; saveExtension = QFileInfo(savePath).suffix().toLower(); if (saveExtension == "jpg" || saveExtension == "jpeg") { okay = capture.save(&file, nullptr, ConfigHandler().jpegQuality()); } else { okay = capture.save(&file); } if (okay) { // Don't use QDir::separator() here, as Qt internally always uses // '/' QString pathNoFile = savePath.left(savePath.lastIndexOf('/')); ConfigHandler().setSavePath(pathNoFile); QString msg = QObject::tr("Capture saved as ") + savePath; AbstractLogger().attachNotificationPath(savePath) << msg; if (config.copyPathAfterSave()) { #ifdef Q_OS_WIN savePath.replace('/', '\\'); #endif FlameshotDaemon::copyToClipboard( savePath, QObject::tr("Path copied to clipboard as ") + savePath); } } else { QString msg = QObject::tr("Error trying to save as ") + savePath; if (file.error() != QFile::NoError) { msg += ": " + file.errorString(); } QMessageBox saveErrBox( QMessageBox::Warning, QObject::tr("Save Error"), msg); saveErrBox.setWindowIcon(QIcon(GlobalValues::iconPath())); saveErrBox.exec(); } } return okay; } ================================================ FILE: src/utils/screenshotsaver.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include class QPixmap; bool saveToFilesystem(const QPixmap& capture, const QString& path, const QString& messagePrefix = ""); QString ShowSaveFileDialog(const QString& title, const QString& directory); void saveToClipboardMime(const QPixmap& capture, const QString& imageType); void saveToClipboard(const QPixmap& capture); // GNOME Wayland: keeps the widget alive until clipboard data is fetched bool saveToClipboardGnomeWorkaround(const QPixmap& pixmap, QWidget* keepAlive); bool saveToFilesystemGUI(const QPixmap& capture); ================================================ FILE: src/utils/strfparse.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Jeremy Borgman #include "strfparse.h" namespace strfparse { std::vector split(std::string const& s, char delimiter) { std::vector tokens; std::string token; std::istringstream tokenStream(s); while (std::getline(tokenStream, token, delimiter)) { tokens.push_back(token); } return tokens; } std::vector create_specifier_list() { std::vector allowed_specifier{ 'Y', 'H', 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'F', 'g', 'G', 'h', 'H', 'I', 'j', 'm', 'M', 'n', 'p', 'r', 'R', 'S', 't', 'T', 'u', 'U', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z' }; return allowed_specifier; } std::string replace_all(std::string input, std::string const& to_find, std::string const& to_replace) { size_t pos = 0; while ((pos = input.find(to_find, pos)) != std::string::npos) { input.replace(pos, to_find.length(), to_replace); pos += to_replace.length(); } return input; } std::vector match_specifiers(std::string const& specifier, std::vector allowed_specifier) { std::vector spec_list; for (size_t i = 0; i < specifier.size() - 1; i++) { if (specifier[i] == '%') { spec_list.push_back(specifier[i + 1]); } } std::sort(spec_list.begin(), spec_list.end()); std::sort(allowed_specifier.begin(), allowed_specifier.end()); std::vector overlap; std::set_intersection(spec_list.begin(), spec_list.end(), allowed_specifier.begin(), allowed_specifier.end(), back_inserter(overlap)); return overlap; } std::string format_time_string(std::string const& specifier) { if (specifier.empty()) { return ""; } std::time_t t = std::time(nullptr); char buff[100]; auto allowed_specifier = create_specifier_list(); auto overlap = match_specifiers(specifier, allowed_specifier); // Create "Safe" string for strftime which is the specfiers delimited by * std::string lookup_string; for (auto const& e : overlap) { lookup_string.push_back('%'); lookup_string.push_back(e); lookup_string.push_back('*'); } std::strftime( buff, sizeof(buff), lookup_string.c_str(), std::localtime(&t)); std::map lookup_table; auto result = split(buff, '*'); for (size_t i = 0; i < result.size(); i++) { lookup_table.emplace(std::make_pair(overlap[i], result[i])); } // Sub into original string std::string delim = "%"; auto output_string = specifier; for (auto const& row : lookup_table) { auto to_find = delim + row.first; output_string = replace_all(output_string, to_find, row.second); } return output_string; } } ================================================ FILE: src/utils/strfparse.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Jeremy Borgman #include #include #include #include #include namespace strfparse { std::vector split(std::string const& s, char delimiter); std::vector create_specifier_list(); std::string replace_all(std::string input, std::string const& to_find, std::string const& to_replace); std::vector match_specifiers(std::string const& specifier, std::vector allowed_specifier); std::string format_time_string(std::string const& specifier); } ================================================ FILE: src/utils/systemnotification.cpp ================================================ #include "systemnotification.h" #include "src/core/flameshot.h" #include "src/utils/abstractlogger.h" #include "src/utils/confighandler.h" #include #include #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) #include #include #include #include #else #include "src/core/flameshotdaemon.h" #endif // work-around for snap, which cannot install icons into // the system folder, so instead the absolute path to the // icon (saved somewhere in /snap/flameshot/...) is passed #ifndef FLAMESHOT_ICON #define FLAMESHOT_ICON "flameshot" #endif SystemNotification::SystemNotification(QObject* parent) : QObject(parent) , m_interface(nullptr) { #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) if (!ConfigHandler().showDesktopNotification()) { return; } auto bus = QDBusConnection::sessionBus(); auto* connectionInterface = bus.interface(); auto service = QStringLiteral("org.freedesktop.Notifications"); auto path = QStringLiteral("/org/freedesktop/Notifications"); auto interface = QStringLiteral("org.freedesktop.Notifications"); if (connectionInterface->isServiceRegistered(service)) { m_interface = new QDBusInterface(service, path, interface, bus, this); } else { AbstractLogger::warning(AbstractLogger::Stderr | AbstractLogger::LogFile) << tr("No DBus System Notification service found"); } #endif } void SystemNotification::sendMessage(const QString& text, const QString& savePath) { sendMessage(text, tr("Flameshot Info"), savePath); } void SystemNotification::sendMessage(const QString& text, const QString& title, const QString& savePath, const int timeout) { if (!ConfigHandler().showDesktopNotification()) { return; } #if defined(Q_OS_MACOS) || defined(Q_OS_WIN) QMetaObject::invokeMethod( this, [&]() { // The call is queued to avoid recursive static initialization of // Flameshot and ConfigHandler. if (FlameshotDaemon::instance()) FlameshotDaemon::instance()->sendTrayNotification( text, title, timeout); }, Qt::QueuedConnection); #else if (nullptr != m_interface && m_interface->isValid()) { QList args; QVariantMap hintsMap; if (!savePath.isEmpty()) { QUrl fullPath = QUrl::fromLocalFile(savePath); // allows the notification to be dragged and dropped hintsMap[QStringLiteral("x-kde-urls")] = QStringList({ fullPath.toString() }); } args << (qAppName()) // appname << static_cast(0) // id << FLAMESHOT_ICON // icon << title // summary << text // body << QStringList() // actions << hintsMap // hints << timeout; // timeout m_interface->callWithArgumentList( QDBus::AutoDetect, QStringLiteral("Notify"), args); } #endif } ================================================ FILE: src/utils/systemnotification.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QDBusInterface; class SystemNotification : public QObject { Q_OBJECT public: explicit SystemNotification(QObject* parent = nullptr); void sendMessage(const QString& text, const QString& savePath = {}); void sendMessage(const QString& text, const QString& title, const QString& savePath, const int timeout = 5000); private: QDBusInterface* m_interface; }; ================================================ FILE: src/utils/valuehandler.cpp ================================================ #include "valuehandler.h" #include "capturetool.h" #include "colorpickerwidget.h" #include "confighandler.h" #include "screengrabber.h" #include #include #include #include #include #include #include #include // VALUE HANDLER QVariant ValueHandler::value(const QVariant& val) { if (!val.isValid() || !check(val)) { return fallback(); } else { return process(val); } } QVariant ValueHandler::fallback() { return {}; } QVariant ValueHandler::representation(const QVariant& val) { return val.toString(); } QString ValueHandler::expected() { return {}; } QVariant ValueHandler::process(const QVariant& val) { return val; } // BOOL Bool::Bool(bool def) : m_def(def) {} bool Bool::check(const QVariant& val) { QString str = val.toString(); if (str != "true" && str != "false") { return false; } return true; } QVariant Bool::fallback() { return m_def; } QString Bool::expected() { return QStringLiteral("true or false"); } // STRING String::String(QString def) : m_def(std::move(def)) {} bool String::check(const QVariant&) { return true; } QVariant String::fallback() { return m_def; } QString String::expected() { return QStringLiteral("string"); } // COLOR Color::Color(QColor def) : m_def(std::move(def)) {} bool Color::check(const QVariant& val) { QString str = val.toString(); #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) bool validColor = QColor::isValidColor(str); #else bool validColor = QColor::isValidColorName(str); #endif // Disable #RGB, #RRRGGGBBB and #RRRRGGGGBBBB formats that QColor supports return validColor && (str[0] != '#' || (str.length() != 4 && str.length() != 10 && str.length() != 13)); } QVariant Color::process(const QVariant& val) { QString str = val.toString(); QColor color(str); if (str.length() == 9 && str[0] == '#') { // Convert #RRGGBBAA (flameshot) to #AARRGGBB (QColor) int blue = color.blue(); color.setBlue(color.green()); color.setGreen(color.red()); color.setRed(color.alpha()); color.setAlpha(blue); } return color; } QVariant Color::fallback() { return m_def; } QVariant Color::representation(const QVariant& val) { QString str = val.toString(); QColor color(str); if (str.length() == 9 && str[0] == '#') { // Convert #AARRGGBB (QColor) to #RRGGBBAA (flameshot) int alpha = color.alpha(); color.setAlpha(color.red()); color.setRed(color.green()); color.setGreen(color.blue()); color.setBlue(alpha); } return color.name(); } QString Color::expected() { return QStringLiteral("color name or hex value"); } // BOUNDED INT BoundedInt::BoundedInt(int min, int max, int def) : m_min(min) , m_max(max) , m_def(def) {} bool BoundedInt::check(const QVariant& val) { QString str = val.toString(); bool conversionOk; int num = str.toInt(&conversionOk); return conversionOk && m_min <= num && num <= m_max; } QVariant BoundedInt::fallback() { return m_def; } QString BoundedInt::expected() { return QStringLiteral("number between %1 and %2").arg(m_min, m_max); } // LOWER BOUNDED INT LowerBoundedInt::LowerBoundedInt(int min, int def) : m_min(min) , m_def(def) {} bool LowerBoundedInt::check(const QVariant& val) { QString str = val.toString(); bool conversionOk; int num = str.toInt(&conversionOk); return conversionOk && num >= m_min; } QVariant LowerBoundedInt::fallback() { return m_def; } QString LowerBoundedInt::expected() { return QStringLiteral("number >= %1").arg(m_min); } // KEY SEQUENCE KeySequence::KeySequence(const QKeySequence& fallback) : m_fallback(fallback) {} bool KeySequence::check(const QVariant& val) { QString str = val.toString(); if (!str.isEmpty() && QKeySequence(str).toString().isEmpty()) { return false; } return true; } QVariant KeySequence::fallback() { return process(m_fallback); } QString KeySequence::expected() { return QStringLiteral("keyboard shortcut"); } QVariant KeySequence::representation(const QVariant& val) { QString str(val.toString()); if (QKeySequence(str) == QKeySequence(Qt::Key_Return)) { return QStringLiteral("Enter"); } return str; } QVariant KeySequence::process(const QVariant& val) { QString str(val.toString()); if (str == "Enter") { return QKeySequence(Qt::Key_Return).toString(); } if (str.length() > 0) { // Make the "main" key in sequence (last one) lower-case. str[str.length() - 1] = str[str.length() - 1].toLower(); } return str; } // EXISTING DIR bool ExistingDir::check(const QVariant& val) { if (!val.canConvert() || val.toString().isEmpty()) { return false; } QFileInfo info(val.toString()); return info.isDir() && info.exists(); } QVariant ExistingDir::fallback() { using SP = QStandardPaths; for (auto location : { SP::PicturesLocation, SP::HomeLocation, SP::TempLocation }) { QString path = SP::writableLocation(location); if (QFileInfo(path).isDir()) { return path; } } return {}; } QString ExistingDir::expected() { return QStringLiteral("existing directory"); } // FILENAME PATTERN bool FilenamePattern::check(const QVariant&) { return true; } QVariant FilenamePattern::fallback() { return ConfigHandler().filenamePatternDefault(); } QVariant FilenamePattern::process(const QVariant& val) { QString str = val.toString(); return !str.isEmpty() ? val : fallback(); } QString FilenamePattern::expected() { return QStringLiteral("please edit using the GUI"); } // BUTTON LIST using BType = CaptureTool::Type; using BList = QList; bool ButtonList::check(const QVariant& val) { // TODO stop using CTB using CTB = CaptureToolButton; auto allButtons = CTB::getIterableButtonTypes(); for (int btn : val.value>()) { if (!allButtons.contains(static_cast(btn))) { return false; } } return true; } // Helper void sortButtons(BList& buttons) { std::sort(buttons.begin(), buttons.end(), [](BType a, BType b) { return CaptureToolButton::getPriorityByButton(a) < CaptureToolButton::getPriorityByButton(b); }); } QVariant ButtonList::process(const QVariant& val) { auto intButtons = val.value>(); auto buttons = ButtonList::fromIntList(intButtons); sortButtons(buttons); return QVariant::fromValue(buttons); } QVariant ButtonList::fallback() { auto buttons = CaptureToolButton::getIterableButtonTypes(); buttons.removeOne(CaptureTool::TYPE_SIZEDECREASE); buttons.removeOne(CaptureTool::TYPE_SIZEINCREASE); sortButtons(buttons); return QVariant::fromValue(buttons); } QVariant ButtonList::representation(const QVariant& val) { auto intList = toIntList(val.value()); normalizeButtons(intList); return QVariant::fromValue(intList); } QString ButtonList::expected() { return QStringLiteral("please don't edit by hand"); } QList ButtonList::fromIntList(const QList& l) { QList buttons; buttons.reserve(l.size()); for (auto const i : l) { buttons << static_cast(i); } return buttons; } QList ButtonList::toIntList(const QList& l) { QList buttons; buttons.reserve(l.size()); for (auto const i : l) { buttons << static_cast(i); } return buttons; } bool ButtonList::normalizeButtons(QList& buttons) { QList listTypesInt = toIntList(CaptureToolButton::getIterableButtonTypes()); bool hasChanged = false; for (int i = 0; i < buttons.size(); i++) { if (!listTypesInt.contains(buttons.at(i))) { buttons.removeAt(i); hasChanged = true; } } return hasChanged; } // USER COLORS UserColors::UserColors(int min, int max) : m_min(min) , m_max(max) {} bool UserColors::check(const QVariant& val) { if (!val.isValid()) { return false; } if (!val.canConvert()) { return false; } for (const QString& str : val.toStringList()) { #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) if (!QColor::isValidColor(str) && str != "picker") { #else if (!QColor::isValidColorName(str) && str != "picker") { #endif return false; } } int sz = val.toStringList().size(); return sz >= m_min && sz <= m_max; } QVariant UserColors::process(const QVariant& val) { QStringList strColors = val.toStringList(); if (strColors.isEmpty()) { return fallback(); } QVector colors; colors.reserve(strColors.size()); for (const QString& str : strColors) { if (str != "picker") { colors.append(QColor(str)); } else { colors.append(QColor()); } } return QVariant::fromValue(colors); } QVariant UserColors::fallback() { if (ConfigHandler().predefinedColorPaletteLarge()) { return QVariant::fromValue( ColorPickerWidget::getDefaultLargeColorPalette()); } else { return QVariant::fromValue( ColorPickerWidget::getDefaultSmallColorPalette()); } } QString UserColors::expected() { return QStringLiteral( "list of colors(min %1 and max %2) separated by comma") .arg(m_min - 1, m_max - 1); } QVariant UserColors::representation(const QVariant& val) { auto colors = val.value>(); QStringList strColors; for (const auto& col : colors) { if (col.isValid()) { strColors.append(col.name(QColor::HexRgb)); } else { strColors.append(QStringLiteral("picker")); } } return QVariant::fromValue(strColors); } // SET SAVE FILE AS EXTENSION bool SaveFileExtension::check(const QVariant& val) { if (!val.canConvert() || val.toString().isEmpty()) { return false; } QString extension = val.toString(); if (extension.startsWith(".")) { extension.remove(0, 1); } QStringList imageFormatList; for (const auto& imageFormat : QImageWriter::supportedImageFormats()) imageFormatList.append(imageFormat); if (!imageFormatList.contains(extension)) { return false; } return true; } QVariant SaveFileExtension::process(const QVariant& val) { QString extension = val.toString(); if (extension.startsWith(".")) { extension.remove(0, 1); } return QVariant::fromValue(extension); } QString SaveFileExtension::expected() { return QStringLiteral("supported image extension"); } // REGION bool Region::check(const QVariant& val) { QVariant region = process(val); return region.isValid(); } #include // TODO remove after FIXME (see below) #include QVariant Region::process(const QVariant& val) { // Create a temporary QApplication if there is no global Qt application // instance at all. Creating one while a QCoreApplication already exists // is forbidden by Qt: the second constructor aborts early, but its // destructor still runs and corrupts global state (e.g. Wayland // connections), causing subsequent portal calls to hang. auto argv = std::make_unique(1); auto argc = std::make_unique(0); std::unique_ptr tempApp; if (!QCoreApplication::instance()) { tempApp = std::make_unique(*argc, argv.get()); } QString str = val.toString(); if (str == "all") { return ScreenGrabber().desktopGeometry(); } else if (str.startsWith("screen")) { bool ok; int number = str.mid(6).toInt(&ok); if (!ok || number < 0) { return {}; } return ScreenGrabber().screenGeometry(qApp->screens()[number]); } static const QRegularExpression regex( "(-{,1}\\d+)" // number (any sign) "[x,\\.\\s]" // separator ('x', ',', '.', or whitespace) "(-{,1}\\d+)" // number (any sign) "[\\+,\\.\\s]*" // separator ('+',',', '.', or whitespace) "(-{,1}\\d+)" // number (non-negative) "[\\+,\\.\\s]*" // separator ('+', ',', '.', or whitespace) "(-{,1}\\d+)" // number (non-negative) ); if (!regex.match(str).hasMatch()) { return {}; } int w, h, x, y; bool w_ok, h_ok, x_ok, y_ok; w = regex.match(str).captured(1).toInt(&w_ok); h = regex.match(str).captured(2).toInt(&h_ok); x = regex.match(str).captured(3).toInt(&x_ok); y = regex.match(str).captured(4).toInt(&y_ok); if (!(w_ok && h_ok && x_ok && y_ok)) { return {}; } return QRect(x, y, w, h).normalized(); } ================================================ FILE: src/utils/valuehandler.h ================================================ #pragma once #include "src/widgets/capture/capturetoolbutton.h" #include "src/widgets/colorpickerwidget.h" #include #include #include class QVariant; /** * @brief Handles the value of a configuration option (abstract class). * * Each configuration option is represented as a `QVariant`. If the option was * not specified in a config file, the `QVariant` will be invalid. * * Each option will usually be handled in three different ways: * - have its value checked for semantic errors (type, format, etc). * @see ValueHandler::check * - have its value (that was taken from the config file) adapted for proper * use. * @see ValueHandler::value * - provided a fallback value in case: the config does not explicitly specify * it, or the config contains an error and is globally falling back to * defaults. * @see ValueHandler::fallback. * - some options may want to be stored in the config file in a different way * than the default one provided by `QVariant`. * @see ValueHandler::representation * * @note Please see the documentation of the functions to learn when you should * override each. * */ class ValueHandler { public: /** * @brief Check the value semantically. * @param val The value that was read from the config file * @return Whether the value is correct * @note The function should presume that `val.isValid()` is true. */ virtual bool check(const QVariant& val) = 0; /** * @brief Adapt the value for proper use. * @param val The value that was read from the config file * @return The modified value * * If the value is invalid (unspecified in the config) or does not pass * `check`, the fallback will be returned. Otherwise the value is processed * by `process` and then returned. * * @note Cannot be overridden * @see fallback, process */ QVariant value(const QVariant& val); /** * @brief Fallback value (default value). */ virtual QVariant fallback(); /** * @brief Return the representation of the value in the config file. * * Override this if you want to write the value in a different format than * the one provided by `QVariant`. */ virtual QVariant representation(const QVariant& val); /** * @brief The expected value (descriptive). * Used when reporting configuration errors. */ virtual QString expected(); protected: /** * @brief Process a value, presuming it is a valid `QVariant`. * @param val The value that was read from the config file * @return The processed value * @note You will usually want to override this. In rare cases, you may want * to override `value`. */ virtual QVariant process(const QVariant& val); }; class Bool : public ValueHandler { public: Bool(bool def); bool check(const QVariant& val) override; QVariant fallback() override; QString expected() override; private: bool m_def; }; class String : public ValueHandler { public: String(QString def); bool check(const QVariant&) override; QVariant fallback() override; QString expected() override; private: QString m_def; }; class Color : public ValueHandler { public: Color(QColor def); bool check(const QVariant& val) override; QVariant process(const QVariant& val) override; QVariant fallback() override; QVariant representation(const QVariant& val) override; QString expected() override; private: QColor m_def; }; class BoundedInt : public ValueHandler { public: BoundedInt(int min, int max, int def); bool check(const QVariant& val) override; virtual QVariant fallback() override; QString expected() override; private: int m_min, m_max, m_def; }; class LowerBoundedInt : public ValueHandler { public: LowerBoundedInt(int min, int def); bool check(const QVariant& val) override; QVariant fallback() override; QString expected() override; private: int m_min, m_def; }; class KeySequence : public ValueHandler { public: KeySequence(const QKeySequence& fallback = {}); bool check(const QVariant& val) override; QVariant fallback() override; QString expected() override; QVariant representation(const QVariant& val) override; private: QKeySequence m_fallback; QVariant process(const QVariant& val) override; }; class ExistingDir : public ValueHandler { bool check(const QVariant& val) override; QVariant fallback() override; QString expected() override; }; class FilenamePattern : public ValueHandler { bool check(const QVariant&) override; QVariant fallback() override; QVariant process(const QVariant&) override; QString expected() override; }; class ButtonList : public ValueHandler { public: bool check(const QVariant& val) override; QVariant process(const QVariant& val) override; QVariant fallback() override; QVariant representation(const QVariant& val) override; QString expected() override; // UTILITY FUNCTIONS static QList fromIntList(const QList&); static QList toIntList(const QList& l); static bool normalizeButtons(QList& buttons); }; class UserColors : public ValueHandler { public: UserColors(int min, int max); bool check(const QVariant& val) override; QVariant process(const QVariant& val) override; QVariant fallback() override; QString expected() override; QVariant representation(const QVariant& val) override; private: int m_min, m_max; }; class SaveFileExtension : public ValueHandler { bool check(const QVariant& val) override; QVariant process(const QVariant& val) override; QString expected() override; }; class Region : public ValueHandler { public: bool check(const QVariant& val) override; private: QVariant process(const QVariant& val) override; }; ================================================ FILE: src/utils/waylandutils.cpp ================================================ #include "waylandutils.h" WaylandUtils::WaylandUtils() {} bool WaylandUtils::waylandDetected() {} ================================================ FILE: src/utils/waylandutils.h ================================================ #ifndef WAYLANDUTILS_H #define WAYLANDUTILS_H class WaylandUtils { public: WaylandUtils(); static bool waylandDetected(); private: }; #endif // WAYLANDUTILS_H ================================================ FILE: src/utils/winlnkfileparse.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "winlnkfileparse.h" #include #include #include #include #include #include #include #include WinLnkFileParser::WinLnkFileParser() { QStringList sListImgFileExt; for (const auto& ext : QImageWriter::supportedImageFormats()) { sListImgFileExt.append(ext); } this->getImageFileExtAssociates(sListImgFileExt); } DesktopAppData WinLnkFileParser::parseLnkFile(const QFileInfo& fiLnk, bool& ok) const { DesktopAppData res; ok = true; QFileInfo fiSymlink(fiLnk.symLinkTarget()); if (!fiSymlink.exists() || !fiSymlink.fileName().endsWith(".exe") || fiSymlink.baseName().contains("unins")) { ok = false; return res; } res.name = fiLnk.baseName(); res.exec = fiSymlink.absoluteFilePath(); static QFileIconProvider provider; res.icon = provider.icon(QFileInfo(fiSymlink.filePath())); if (m_GraphicAppsList.contains(fiSymlink.fileName())) { res.categories = QStringList() << "Graphics"; } else { res.categories = QStringList() << "Utility"; } for (const auto& app : m_appList) { if (app.exec == res.exec) { ok = false; break; } } if (res.exec.isEmpty() || res.name.isEmpty()) { ok = false; } return res; } int WinLnkFileParser::processDirectory(const QDir& dir) { QStringList sListMenuFilter; sListMenuFilter << "Accessibility" << "Administrative Tools" << "Setup" << "System Tools" << "Uninstall" << "Update" << "Updater" << "Windows PowerShell"; const QString sMenuFilter("\\b(" + sListMenuFilter.join('|') + ")\\b"); static const QRegularExpression regexfilter(sMenuFilter); bool ok; int length = m_appList.length(); // Go through all subfolders and *.lnk files QDirIterator it(dir.absolutePath(), { "*.lnk" }, QDir::NoFilter, QDirIterator::Subdirectories); while (it.hasNext()) { QFileInfo fiLnk(it.next()); if (!regexfilter.match(fiLnk.absoluteFilePath()).hasMatch()) { DesktopAppData app = parseLnkFile(fiLnk, ok); if (ok) { m_appList.append(app); } } } return m_appList.length() - length; } QVector WinLnkFileParser::getAppsByCategory( const QString& category) { QVector res; for (const DesktopAppData& app : std::as_const(m_appList)) { if (app.categories.contains(category)) { res.append(app); } } std::sort(res.begin(), res.end(), CompareAppByName()); return res; } QMap> WinLnkFileParser::getAppsByCategory( const QStringList& categories) { QMap> res; QVector tmpAppList; for (const QString& category : categories) { tmpAppList = getAppsByCategory(category); for (const DesktopAppData& app : std::as_const(tmpAppList)) { res[category].append(app); } } return res; } QString WinLnkFileParser::getAllUsersStartMenuPath() { QString sRet(""); WCHAR path[MAX_PATH]; HRESULT hr = SHGetFolderPathW(NULL, CSIDL_COMMON_PROGRAMS, NULL, 0, path); if (SUCCEEDED(hr)) { sRet = QDir(QString::fromWCharArray(path)).absolutePath(); } return sRet; } void WinLnkFileParser::getImageFileExtAssociates(const QStringList& sListImgExt) { const QString sReg("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\" "CurrentVersion\\Explorer\\FileExts\\.%1\\OpenWithList"); for (const auto& sExt : std::as_const(sListImgExt)) { QString sPath(sReg.arg(sExt)); QSettings registry(sPath, QSettings::NativeFormat); for (const auto& key : registry.allKeys()) { if (1 == key.size()) { // Keys for OpenWith apps are a, b, c, ... QString sVal = registry.value(key, "").toString(); if (sVal.endsWith(".exe") && !m_GraphicAppsList.contains(sVal)) { m_GraphicAppsList << sVal; } } } } } ================================================ FILE: src/utils/winlnkfileparse.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "desktopfileparse.h" #include #include #include #include class QDir; class QString; struct CompareAppByName { bool operator()(const DesktopAppData a, const DesktopAppData b) { return (a.name < b.name); } }; struct WinLnkFileParser { WinLnkFileParser(); DesktopAppData parseLnkFile(const QFileInfo& fiLnk, bool& ok) const; int processDirectory(const QDir& dir); static QString getAllUsersStartMenuPath(); QVector getAppsByCategory(const QString& category); QMap> getAppsByCategory( const QStringList& categories); private: void getImageFileExtAssociates(const QStringList& sListImgExt); QVector m_appList; QStringList m_GraphicAppsList; }; ================================================ FILE: src/widgets/CMakeLists.txt ================================================ add_subdirectory(panel) add_subdirectory(capture) # Required to generate MOC target_sources( flameshot PRIVATE infowindow.ui capturelauncher.ui capturelauncher.h draggablewidgetmaker.h imagelabel.h trayicon.h infowindow.h loadspinner.h notificationwidget.h orientablepushbutton.h colorpickerwidget.h capture/capturetoolobjects.h ) if (ENABLE_IMGUR) target_sources( flameshot PRIVATE uploadhistory.ui uploadlineitem.ui uploadhistory.h uploadlineitem.h imguploaddialog.h ) endif() target_sources( flameshot PRIVATE capturelauncher.cpp draggablewidgetmaker.cpp imagelabel.cpp trayicon.cpp infowindow.cpp loadspinner.cpp notificationwidget.cpp orientablepushbutton.cpp colorpickerwidget.cpp capture/capturetoolobjects.cpp ) if (ENABLE_IMGUR) target_sources( flameshot PRIVATE uploadhistory.cpp uploadlineitem.cpp imguploaddialog.cpp ) endif() if (NOT DISABLE_UPDATE_CHECKER) target_sources( flameshot PRIVATE updatenotificationwidget.h updatenotificationwidget.cpp ) endif() ================================================ FILE: src/widgets/capture/CMakeLists.txt ================================================ # Required to generate MOC target_sources( flameshot PRIVATE buttonhandler.h capturebutton.h capturetoolbutton.h capturewidget.h colorpicker.h hovereventfilter.h overlaymessage.h selectionwidget.h magnifierwidget.h notifierbox.h modificationcommand.h) target_sources( flameshot PRIVATE buttonhandler.cpp capturebutton.cpp capturetoolbutton.cpp capturewidget.cpp colorpicker.cpp hovereventfilter.cpp overlaymessage.cpp notifierbox.cpp selectionwidget.cpp magnifierwidget.cpp modificationcommand.cpp) ================================================ FILE: src/widgets/capture/buttonhandler.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "buttonhandler.h" #include "src/utils/globalvalues.h" #include #include // ButtonHandler is a handler for every active button. It makes easier to // manipulate the buttons as a unit. ButtonHandler::ButtonHandler(const QVector& v, QObject* parent) : QObject(parent) { setButtons(v); init(); } ButtonHandler::ButtonHandler(QObject* parent) : QObject(parent) { init(); } void ButtonHandler::hide() { for (CaptureToolButton* b : m_vectorButtons) { b->hide(); } } void ButtonHandler::show() { if (m_vectorButtons.isEmpty() || m_vectorButtons.first()->isVisible()) { return; } for (CaptureToolButton* b : m_vectorButtons) { b->animatedShow(); } } bool ButtonHandler::isVisible() const { bool ret = true; for (const CaptureToolButton* b : m_vectorButtons) { if (!b->isVisible()) { ret = false; break; } } return ret; } bool ButtonHandler::buttonsAreInside() const { return m_buttonsAreInside; } size_t ButtonHandler::size() const { return m_vectorButtons.size(); } // updatePosition updates the position of the buttons around the // selection area. Ignores the sides blocked by the end of the screen. // When the selection is too small, it works on a virtual selection with // the original in the center. void ButtonHandler::updatePosition(const QRect& selection) { resetRegionTrack(); const int vecLength = m_vectorButtons.size(); if (vecLength == 0) { return; } // Copy of the selection area for internal modifications m_selection = intersectWithAreas(selection); updateBlockedSides(); ensureSelectionMinimumSize(); // Indicates the actual button to be moved int elemIndicator = 0; while (elemIndicator < vecLength) { // Add them inside the area when there is no more space if (m_allSidesBlocked) { m_selection = selection; positionButtonsInside(elemIndicator); break; // the while } // Number of buttons per row column int buttonsPerRow = (m_selection.width() + m_separator) / (m_buttonExtendedSize); int buttonsPerCol = (m_selection.height() + m_separator) / (m_buttonExtendedSize); // Buttons to be placed in the corners int extraButtons = (vecLength - elemIndicator) - (buttonsPerRow + buttonsPerCol) * 2; int elemsAtCorners = extraButtons > 4 ? 4 : extraButtons; int maxExtra = 2; if (m_oneHorizontalBlocked) { maxExtra = 1; } else if (m_horizontalyBlocked) { maxExtra = 0; } int elemCornersTop = qBound(0, elemsAtCorners, maxExtra); elemsAtCorners -= elemCornersTop; int elemCornersBotton = qBound(0, elemsAtCorners, maxExtra); // Add buttons at the button of the selection if (!m_blockedBotton) { int addCounter = buttonsPerRow + elemCornersBotton; // Don't add more than we have addCounter = qBound(0, addCounter, vecLength - elemIndicator); QPoint center = QPoint(m_selection.center().x(), m_selection.bottom() + m_separator); if (addCounter > buttonsPerRow) { adjustHorizontalCenter(center); } // ElemIndicator, elemsAtCorners QVector positions = horizontalPoints(center, addCounter, true); moveButtonsToPoints(positions, elemIndicator); } // Add buttons to the right side of the selection if (!m_blockedRight && elemIndicator < vecLength) { int addCounter = buttonsPerCol; addCounter = qBound(0, addCounter, vecLength - elemIndicator); QPoint center = QPoint(m_selection.right() + m_separator, m_selection.center().y()); QVector positions = verticalPoints(center, addCounter, false); moveButtonsToPoints(positions, elemIndicator); } // Add buttons at the top of the selection if (!m_blockedTop && elemIndicator < vecLength) { int addCounter = buttonsPerRow + elemCornersTop; addCounter = qBound(0, addCounter, vecLength - elemIndicator); QPoint center = QPoint(m_selection.center().x(), m_selection.top() - m_buttonExtendedSize); if (addCounter == 1 + buttonsPerRow) { adjustHorizontalCenter(center); } QVector positions = horizontalPoints(center, addCounter, false); moveButtonsToPoints(positions, elemIndicator); } // Add buttons to the left side of the selection if (!m_blockedLeft && elemIndicator < vecLength) { int addCounter = buttonsPerCol; addCounter = qBound(0, addCounter, vecLength - elemIndicator); QPoint center = QPoint(m_selection.left() - m_buttonExtendedSize, m_selection.center().y()); QVector positions = verticalPoints(center, addCounter, true); moveButtonsToPoints(positions, elemIndicator); } // If there are elements for the next cycle, increase the size of the // base area if (elemIndicator < vecLength && !(m_allSidesBlocked)) { expandSelection(); } updateBlockedSides(); } } int ButtonHandler::calculateShift(int elements, bool reverse) const { int shift = 0; if (elements % 2 == 0) { shift = m_buttonExtendedSize * (elements / 2) - (m_separator / 2); } else { shift = m_buttonExtendedSize * ((elements - 1) / 2) + m_buttonBaseSize / 2; } if (!reverse) { shift -= m_buttonBaseSize; } return shift; } // horizontalPoints is an auxiliary method for the button position computation. // starts from a known center and keeps adding elements horizontally // and returns the computed positions. QVector ButtonHandler::horizontalPoints(const QPoint& center, const int elements, const bool leftToRight) const { QVector res; // Distance from the center to start adding buttons int shift = calculateShift(elements, leftToRight); int x = leftToRight ? center.x() - shift : center.x() + shift; QPoint i(x, center.y()); while (elements > res.length()) { res.append(i); leftToRight ? i.setX(i.x() + m_buttonExtendedSize) : i.setX(i.x() - m_buttonExtendedSize); } return res; } // verticalPoints is an auxiliary method for the button position computation. // starts from a known center and keeps adding elements vertically // and returns the computed positions. QVector ButtonHandler::verticalPoints(const QPoint& center, const int elements, const bool upToDown) const { QVector res; // Distance from the center to start adding buttons int shift = calculateShift(elements, upToDown); int y = upToDown ? center.y() - shift : center.y() + shift; QPoint i(center.x(), y); while (elements > res.length()) { res.append(i); upToDown ? i.setY(i.y() + m_buttonExtendedSize) : i.setY(i.y() - m_buttonExtendedSize); } return res; } QRect ButtonHandler::intersectWithAreas(const QRect& rect) { QRect res; for (const QRect& r : m_screenRegions) { QRect temp = rect.intersected(r); if (temp.height() * temp.width() > res.height() * res.width()) { res = temp; } } return res; } void ButtonHandler::init() { m_separator = GlobalValues::buttonBaseSize() / 4; } void ButtonHandler::resetRegionTrack() { m_buttonsAreInside = false; } void ButtonHandler::updateBlockedSides() { QRegion screenRegion{}; for (const QRect& rect : m_screenRegions) { screenRegion += rect; } const int EXTENSION = m_separator * 2 + m_buttonBaseSize; // Right QPoint pointA(m_selection.right() + EXTENSION, m_selection.bottom()); QPoint pointB(pointA.x(), m_selection.top()); m_blockedRight = !(screenRegion.contains(pointA) && screenRegion.contains(pointB)); // Left pointA.setX(m_selection.left() - EXTENSION); pointB.setX(pointA.x()); m_blockedLeft = !(screenRegion.contains(pointA) && screenRegion.contains(pointB)); // Bottom pointA = QPoint(m_selection.left(), m_selection.bottom() + EXTENSION); pointB = QPoint(m_selection.right(), pointA.y()); m_blockedBotton = !(screenRegion.contains(pointA) && screenRegion.contains(pointB)); // Top pointA.setY(m_selection.top() - EXTENSION); pointB.setY(pointA.y()); m_blockedTop = !(screenRegion.contains(pointA) && screenRegion.contains(pointB)); // Auxiliary m_oneHorizontalBlocked = (!m_blockedRight && m_blockedLeft) || (m_blockedRight && !m_blockedLeft); m_horizontalyBlocked = (m_blockedRight && m_blockedLeft); m_allSidesBlocked = (m_blockedBotton && m_horizontalyBlocked && m_blockedTop); } void ButtonHandler::expandSelection() { int& s = m_buttonExtendedSize; m_selection = m_selection + QMargins(s, s, s, s); m_selection = intersectWithAreas(m_selection); } void ButtonHandler::positionButtonsInside(int index) { // Position the buttons in the botton-center of the main but inside of the // selection. QRect mainArea = m_selection; mainArea = intersectWithAreas(mainArea); const int buttonsPerRow = (mainArea.width()) / (m_buttonExtendedSize); if (buttonsPerRow == 0) { return; } QPoint center = QPoint(mainArea.center().x(), mainArea.bottom() - m_buttonExtendedSize); while (m_vectorButtons.size() > index) { int addCounter = buttonsPerRow; addCounter = qBound(0, addCounter, m_vectorButtons.size() - index); QVector positions = horizontalPoints(center, addCounter, true); moveButtonsToPoints(positions, index); center.setY(center.y() - m_buttonExtendedSize); } m_buttonsAreInside = true; } void ButtonHandler::ensureSelectionMinimumSize() { // Detect if a side is smaller than a button in order to prevent collision // and redimension the base area to the base size of a single button per // side if (m_selection.width() < m_buttonBaseSize) { if (!m_blockedLeft) { m_selection.setX(m_selection.x() - (m_buttonBaseSize - m_selection.width()) / 2); } m_selection.setWidth(m_buttonBaseSize); } if (m_selection.height() < m_buttonBaseSize) { if (!m_blockedTop) { m_selection.setY(m_selection.y() - (m_buttonBaseSize - m_selection.height()) / 2); } m_selection.setHeight(m_buttonBaseSize); } } void ButtonHandler::moveButtonsToPoints(const QVector& points, int& index) { for (const QPoint& p : points) { auto* button = m_vectorButtons[index]; button->move(p); ++index; } } void ButtonHandler::adjustHorizontalCenter(QPoint& center) { if (m_blockedLeft) { center.setX(center.x() + m_buttonExtendedSize / 2); } else if (m_blockedRight) { center.setX(center.x() - m_buttonExtendedSize / 2); } } // setButtons redefines the buttons of the button handler void ButtonHandler::setButtons(const QVector& v) { if (v.isEmpty()) { return; } for (CaptureToolButton* b : m_vectorButtons) { delete (b); } m_vectorButtons = v; m_buttonBaseSize = GlobalValues::buttonBaseSize(); m_buttonExtendedSize = m_buttonBaseSize + m_separator; } bool ButtonHandler::contains(const QPoint& p) const { if (m_vectorButtons.isEmpty()) { return false; } QPoint first(m_vectorButtons.first()->pos()); QPoint last(m_vectorButtons.last()->pos()); bool firstIsTopLeft = (first.x() <= last.x() && first.y() <= last.y()); QPoint topLeft = firstIsTopLeft ? first : last; QPoint bottonRight = firstIsTopLeft ? last : first; topLeft += QPoint(-m_separator, -m_separator); bottonRight += QPoint(m_buttonExtendedSize, m_buttonExtendedSize); QRegion r(QRect(topLeft, bottonRight).normalized()); return r.contains(p); } void ButtonHandler::updateScreenRegions(const QVector& rects) { m_screenRegions = rects; } void ButtonHandler::updateScreenRegions(const QRect& rect) { m_screenRegions = { rect }; } ================================================ FILE: src/widgets/capture/buttonhandler.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "capturetoolbutton.h" #include #include #include class CaptureToolButton; class QRect; class QPoint; class ButtonHandler : public QObject { Q_OBJECT public: ButtonHandler(const QVector&, QObject* parent = nullptr); explicit ButtonHandler(QObject* parent = nullptr); void hideSectionUnderMouse(const QPoint& p); bool isVisible() const; bool buttonsAreInside() const; size_t size() const; void setButtons(const QVector&); bool contains(const QPoint& p) const; void updateScreenRegions(const QVector& rects); void updateScreenRegions(const QRect& rect); public slots: void updatePosition(const QRect& selection); void hide(); void show(); private: QVector horizontalPoints(const QPoint& center, const int elements, const bool leftToRight) const; QVector verticalPoints(const QPoint& center, const int elements, const bool upToDown) const; int calculateShift(int elements, bool reverse) const; QRect intersectWithAreas(const QRect& rect); QVector m_vectorButtons; QVector m_screenRegions; QRect m_selection; int m_separator; int m_buttonExtendedSize; int m_buttonBaseSize; bool m_buttonsAreInside; bool m_blockedRight; bool m_blockedLeft; bool m_blockedBotton; bool m_blockedTop; bool m_oneHorizontalBlocked; bool m_horizontalyBlocked; bool m_allSidesBlocked; // aux methods void init(); void resetRegionTrack(); void updateBlockedSides(); void expandSelection(); void positionButtonsInside(int index); void ensureSelectionMinimumSize(); void moveButtonsToPoints(const QVector& points, int& index); void adjustHorizontalCenter(QPoint& center); }; ================================================ FILE: src/widgets/capture/capturebutton.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "capturebutton.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include CaptureButton::CaptureButton(QWidget* parent) : QPushButton(parent) { init(); } CaptureButton::CaptureButton(const QString& text, QWidget* parent) : QPushButton(text, parent) { init(); } CaptureButton::CaptureButton(const QIcon& icon, const QString& text, QWidget* parent) : QPushButton(icon, text, parent) { init(); } void CaptureButton::init() { setCursor(Qt::ArrowCursor); setFocusPolicy(Qt::NoFocus); auto* dsEffect = new QGraphicsDropShadowEffect(this); dsEffect->setBlurRadius(5); dsEffect->setOffset(0); dsEffect->setColor(QColor(Qt::black)); setGraphicsEffect(dsEffect); } QString CaptureButton::globalStyleSheet() { return CaptureButton(nullptr).styleSheet(); } QString CaptureButton::styleSheet() const { QString baseSheet = "CaptureButton { border: none;" "padding: 3px 8px;" "background-color: %1; color: %4 }" "CaptureToolButton { border-radius: %3;" "padding: 0; }" "CaptureButton:hover { background-color: %2; }" "CaptureButton:pressed:!hover { " "background-color: %1; }"; // define color when mouse is hovering QColor contrast = ColorUtils::contrastColor(m_mainColor); // foreground color QColor color = ColorUtils::colorIsDark(m_mainColor) ? Qt::white : Qt::black; return baseSheet.arg(m_mainColor.name(), contrast.name(), QString::number(GlobalValues::buttonBaseSize() / 2), color.name()); } void CaptureButton::setColor(const QColor& c) { m_mainColor = c; setStyleSheet(styleSheet()); } QColor CaptureButton::m_mainColor; ================================================ FILE: src/widgets/capture/capturebutton.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class CaptureButton : public QPushButton { Q_OBJECT public: CaptureButton() = delete; CaptureButton(QWidget* parent = nullptr); CaptureButton(const QString& text, QWidget* parent = nullptr); CaptureButton(const QIcon& icon, const QString& text, QWidget* parent = nullptr); static QString globalStyleSheet(); QString styleSheet() const; void setColor(const QColor& c); private: static QColor m_mainColor; void init(); }; ================================================ FILE: src/widgets/capture/capturetoolbutton.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "capturetoolbutton.h" #include "src/tools/capturetool.h" #include "src/tools/toolfactory.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include #include #include #include // Button represents a single button of the capture widget, it can enable // multiple functionality. CaptureToolButton::CaptureToolButton(const CaptureTool::Type t, QWidget* parent) : CaptureButton(parent) , m_buttonType(t) , m_tool(nullptr) , m_emergeAnimation(nullptr) { initButton(); updateIcon(); } CaptureToolButton::~CaptureToolButton() { if (m_tool) { delete m_tool; m_tool = nullptr; } if (m_emergeAnimation) { delete m_emergeAnimation; m_emergeAnimation = nullptr; } } void CaptureToolButton::initButton() { if (m_tool) { delete m_tool; m_tool = nullptr; } m_tool = ToolFactory().CreateTool(m_buttonType, this); resize(GlobalValues::buttonBaseSize(), GlobalValues::buttonBaseSize()); setMask(QRegion(QRect(-1, -1, GlobalValues::buttonBaseSize() + 2, GlobalValues::buttonBaseSize() + 2), QRegion::Ellipse)); // Set a tooltip showing a shortcut in parentheses (if there is a shortcut) QString tooltip = m_tool->description(); QString shortcut = ConfigHandler().shortcut(QVariant::fromValue(m_buttonType).toString()); if (m_buttonType == CaptureTool::TYPE_COPY && ConfigHandler().copyOnDoubleClick()) { tooltip += QStringLiteral(" (%1Left Double-Click)") .arg(shortcut.isEmpty() ? QString() : shortcut + " or "); } else if (!shortcut.isEmpty()) { tooltip += QStringLiteral(" (%1)").arg(shortcut); } tooltip.replace("Return", "Enter"); setToolTip(tooltip); m_emergeAnimation = new QPropertyAnimation(this, "size", this); m_emergeAnimation->setEasingCurve(QEasingCurve::InOutQuad); m_emergeAnimation->setDuration(80); m_emergeAnimation->setStartValue(QSize(0, 0)); m_emergeAnimation->setEndValue( QSize(GlobalValues::buttonBaseSize(), GlobalValues::buttonBaseSize())); } void CaptureToolButton::updateIcon() { setIcon(icon()); setIconSize(size() * 0.6); } const QList& CaptureToolButton::getIterableButtonTypes() { return iterableButtonTypes; } // get icon returns the icon for the type of button QIcon CaptureToolButton::icon() const { return m_tool->icon(m_mainColor, true); } void CaptureToolButton::mousePressEvent(QMouseEvent* e) { activateWindow(); if (e->button() == Qt::LeftButton) { emit pressedButtonLeftClick(this); emit pressed(); } else if (e->button() == Qt::RightButton) { emit pressedButtonRightClick(this); emit pressed(); } } void CaptureToolButton::animatedShow() { if (!isVisible()) { show(); m_emergeAnimation->start(); connect(m_emergeAnimation, &QPropertyAnimation::finished, this, [this]() { updateIcon(); }); } } CaptureTool* CaptureToolButton::tool() const { return m_tool; } void CaptureToolButton::setColor(const QColor& c) { m_mainColor = c; CaptureButton::setColor(c); updateIcon(); } QColor CaptureToolButton::m_mainColor; static std::map buttonTypeOrder { { CaptureTool::TYPE_PENCIL, 0 }, { CaptureTool::TYPE_DRAWER, 1 }, { CaptureTool::TYPE_ARROW, 2 }, { CaptureTool::TYPE_SELECTION, 3 }, { CaptureTool::TYPE_RECTANGLE, 4 }, { CaptureTool::TYPE_CIRCLE, 5 }, { CaptureTool::TYPE_MARKER, 6 }, { CaptureTool::TYPE_TEXT, 7 }, { CaptureTool::TYPE_PIXELATE, 8 }, { CaptureTool::TYPE_INVERT, 9 }, { CaptureTool::TYPE_CIRCLECOUNT, 10 }, { CaptureTool::TYPE_MOVESELECTION, 12 }, { CaptureTool::TYPE_UNDO, 13 }, { CaptureTool::TYPE_REDO, 14 }, { CaptureTool::TYPE_COPY, 15 }, { CaptureTool::TYPE_SAVE, 16 }, #ifdef ENABLE_IMGUR { CaptureTool::TYPE_IMAGEUPLOADER, 17 }, #endif { CaptureTool::TYPE_ACCEPT, 18 }, #if !defined(Q_OS_MACOS) { CaptureTool::TYPE_OPEN_APP, 19 }, { CaptureTool::TYPE_EXIT, 20 }, { CaptureTool::TYPE_PIN, 21 }, #else { CaptureTool::TYPE_EXIT, 19 }, { CaptureTool::TYPE_PIN, 20 }, #endif { CaptureTool::TYPE_SIZEINCREASE, 22 }, { CaptureTool::TYPE_SIZEDECREASE, 23 }, }; int CaptureToolButton::getPriorityByButton(CaptureTool::Type b) { auto it = buttonTypeOrder.find(b); return it == buttonTypeOrder.cend() ? (int)buttonTypeOrder.size() : it->second; } QList CaptureToolButton::iterableButtonTypes = { CaptureTool::TYPE_PENCIL, CaptureTool::TYPE_DRAWER, CaptureTool::TYPE_ARROW, CaptureTool::TYPE_SELECTION, CaptureTool::TYPE_RECTANGLE, CaptureTool::TYPE_CIRCLE, CaptureTool::TYPE_MARKER, CaptureTool::TYPE_TEXT, CaptureTool::TYPE_CIRCLECOUNT, CaptureTool::TYPE_PIXELATE, CaptureTool::TYPE_INVERT, CaptureTool::TYPE_MOVESELECTION, CaptureTool::TYPE_UNDO, CaptureTool::TYPE_REDO, CaptureTool::TYPE_COPY, CaptureTool::TYPE_SAVE, CaptureTool::TYPE_EXIT, #ifdef ENABLE_IMGUR CaptureTool::TYPE_IMAGEUPLOADER, #endif #if !defined(Q_OS_MACOS) CaptureTool::TYPE_OPEN_APP, #endif CaptureTool::TYPE_PIN, CaptureTool::TYPE_SIZEINCREASE, CaptureTool::TYPE_SIZEDECREASE, CaptureTool::TYPE_ACCEPT, }; ================================================ FILE: src/widgets/capture/capturetoolbutton.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "capturebutton.h" #include "src/tools/capturetool.h" #include #include class QWidget; class QPropertyAnimation; class CaptureToolButton : public CaptureButton { Q_OBJECT public: explicit CaptureToolButton(const CaptureTool::Type, QWidget* parent = nullptr); ~CaptureToolButton(); static const QList& getIterableButtonTypes(); static int getPriorityByButton(CaptureTool::Type); QString name() const; QString description() const; QIcon icon() const; CaptureTool* tool() const; void setColor(const QColor& c); void animatedShow(); protected: void mousePressEvent(QMouseEvent* e) override; static QList iterableButtonTypes; CaptureTool* m_tool; signals: void pressedButtonLeftClick(CaptureToolButton*); void pressedButtonRightClick(CaptureToolButton*); private: CaptureToolButton(QWidget* parent = nullptr); CaptureTool::Type m_buttonType; QPropertyAnimation* m_emergeAnimation; static QColor m_mainColor; void initButton(); void updateIcon(); }; ================================================ FILE: src/widgets/capture/capturetoolobjects.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Yurii Puchkov & Contributors #include "capturetoolobjects.h" #define SEARCH_RADIUS_NEAR 3 #define SEARCH_RADIUS_FAR 5 #define SEARCH_RADIUS_TEXT_HANDICAP 5 CaptureToolObjects::CaptureToolObjects(QObject* parent) : QObject(parent) {} void CaptureToolObjects::append(const QPointer& captureTool) { if (!captureTool.isNull()) { m_captureToolObjects.append(captureTool->copy(captureTool->parent())); m_imageCache.clear(); } } void CaptureToolObjects::insert(int index, const QPointer& captureTool) { if (!captureTool.isNull() && index >= 0 && index <= m_captureToolObjects.size()) { m_captureToolObjects.insert(index, captureTool->copy(captureTool->parent())); m_imageCache.clear(); } } QPointer CaptureToolObjects::at(int index) { if (index >= 0 && index < m_captureToolObjects.size()) { return m_captureToolObjects[index]; } return nullptr; } void CaptureToolObjects::clear() { m_captureToolObjects.clear(); } QList> CaptureToolObjects::captureToolObjects() { return m_captureToolObjects; } int CaptureToolObjects::size() { return m_captureToolObjects.size(); } void CaptureToolObjects::removeAt(int index) { if (index >= 0 && index < m_captureToolObjects.size()) { m_captureToolObjects.removeAt(index); m_imageCache.clear(); } } int CaptureToolObjects::find(const QPoint& pos, QSize captureSize) { if (m_captureToolObjects.empty()) { return -1; } QPixmap pixmap(captureSize); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); // first attempt to find at exact position int radius = SEARCH_RADIUS_NEAR; int index = findWithRadius(painter, pixmap, pos, radius); if (-1 == index) { // second attempt to find at position with radius radius = SEARCH_RADIUS_FAR; pixmap.fill(Qt::transparent); index = findWithRadius(painter, pixmap, pos, radius); } return index; } int CaptureToolObjects::findWithRadius(QPainter& painter, QPixmap& pixmap, const QPoint& pos, int radius) { int index = m_captureToolObjects.size() - 1; bool useCache = true; m_imageCache.clear(); if (m_imageCache.size() != m_captureToolObjects.size() && index >= 0) { // TODO - is not optimal and cache will be used just after first tool // object selecting m_imageCache.clear(); useCache = false; } for (; index >= 0; --index) { int currentRadius = radius; QImage image; auto toolItem = m_captureToolObjects.at(index); if (useCache) { image = m_imageCache.at(index); } else { // create transparent image in memory and draw toolItem on it toolItem->drawSearchArea(painter, pixmap); // get color at mouse clicked position in area +/- currentRadius image = pixmap.toImage(); m_imageCache.insert(0, image); } if (toolItem->type() == CaptureTool::TYPE_TEXT) { if (currentRadius > SEARCH_RADIUS_NEAR) { // Text already has a big currentRadius and no need to search // with a bit bigger currentRadius than // SEARCH_RADIUS_TEXT_HANDICAP + SEARCH_RADIUS_NEAR continue; } // Text has spaces inside to need to take a bigger currentRadius for // text objects search currentRadius += SEARCH_RADIUS_TEXT_HANDICAP; } for (int x = pos.x() - currentRadius; x <= pos.x() + currentRadius; ++x) { for (int y = pos.y() - currentRadius; y <= pos.y() + currentRadius; ++y) { QRgb rgb = image.pixel(x, y); if (rgb != 0) { // object was found, return it index (layer index) return index; } } } } // no object at current pos found return -1; } CaptureToolObjects& CaptureToolObjects::operator=( const CaptureToolObjects& other) { // remove extra items for this if size is bigger while (this->m_captureToolObjects.size() > other.m_captureToolObjects.size()) { this->m_captureToolObjects.removeLast(); } int count = 0; for (const auto& item : other.m_captureToolObjects) { QPointer itemCopy = item->copy(item->parent()); if (count < this->m_captureToolObjects.size()) { this->m_captureToolObjects[count] = itemCopy; } else { this->m_captureToolObjects.append(itemCopy); } count++; } return *this; } ================================================ FILE: src/widgets/capture/capturetoolobjects.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021 Yurii Puchkov & Contributors #ifndef FLAMESHOT_CAPTURETOOLOBJECTS_H #define FLAMESHOT_CAPTURETOOLOBJECTS_H #include "src/tools/capturetool.h" #include #include class CaptureToolObjects : public QObject { public: explicit CaptureToolObjects(QObject* parent = nullptr); QList> captureToolObjects(); void append(const QPointer& captureTool); void insert(int index, const QPointer& captureTool); void removeAt(int index); void clear(); int size(); int find(const QPoint& pos, QSize captureSize); QPointer at(int index); CaptureToolObjects& operator=(const CaptureToolObjects& other); private: int findWithRadius(QPainter& painter, QPixmap& pixmap, const QPoint& pos, int radius = 0); // class members QList> m_captureToolObjects; QVector m_imageCache; }; #endif // FLAMESHOT_CAPTURETOOLOBJECTS_H ================================================ FILE: src/widgets/capture/capturewidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // Based on Lightscreen areadialog.cpp, Copyright 2017 Christian Kaiser // released under the GNU GPL2 // // Based on KDE's KSnapshot regiongrabber.cpp, revision 796531, Copyright 2007 // Luca Gugelmann released under the GNU LGPL // #include "capturewidget.h" #include "abstractlogger.h" #include "copytool.h" #include "src/config/cacheutils.h" #include "src/core/flameshot.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/screengrabber.h" #include "src/utils/screenshotsaver.h" #include "src/utils/systemnotification.h" #include "src/widgets/capture/colorpicker.h" #include "src/widgets/capture/hovereventfilter.h" #include "src/widgets/capture/modificationcommand.h" #include "src/widgets/capture/notifierbox.h" #include "src/widgets/capture/overlaymessage.h" #include "src/widgets/orientablepushbutton.h" #include "src/widgets/panel/sidepanelwidget.h" #include "src/widgets/panel/utilitypanel.h" #include #include #include #include #include #include #include #include #include #include #include #if !defined(DISABLE_UPDATE_CHECKER) #include "src/widgets/updatenotificationwidget.h" #endif #define MOUSE_DISTANCE_TO_START_MOVING 3 // CaptureWidget is the main component used to capture the screen. It contains // an area of selection with its respective buttons. // enableSaveWindow CaptureWidget::CaptureWidget(const CaptureRequest& req, bool fullScreen, QWidget* parent) : QWidget(parent) , m_toolSizeByKeyboard(0) , m_mouseIsClicked(false) , m_captureDone(false) , m_previewEnabled(true) , m_adjustmentButtonPressed(false) , m_configError(false) , m_configErrorResolved(false) #if !defined(DISABLE_UPDATE_CHECKER) , m_updateNotificationWidget(nullptr) #endif , m_lastMouseWheel(0) , m_activeButton(nullptr) , m_activeTool(nullptr) , m_activeToolIsMoved(false) , m_toolWidget(nullptr) , m_panel(nullptr) , m_sidePanel(nullptr) , m_colorPicker(nullptr) , m_selection(nullptr) , m_magnifier(nullptr) , m_xywhDisplay(false) , m_existingObjectIsChanged(false) , m_startMove(false) , m_clipboardWorkaroundDone(false) { m_undoStack.setUndoLimit(ConfigHandler().undoLimit()); m_context.circleCount = 1; // Base config of the widget m_eventFilter = new HoverEventFilter(this); connect(m_eventFilter, &HoverEventFilter::hoverIn, this, &CaptureWidget::childEnter); connect(m_eventFilter, &HoverEventFilter::hoverOut, this, &CaptureWidget::childLeave); connect(&m_xywhTimer, &QTimer::timeout, this, &CaptureWidget::xywhTick); // else xywhTick keeps triggering when not needed m_xywhTimer.setSingleShot(true); setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_QuitOnClose, false); m_opacity = m_config.contrastOpacity(); m_uiColor = m_config.uiColor(); m_contrastUiColor = m_config.contrastUiColor(); setMouseTracking(true); initContext(fullScreen, req); ScreenGrabber grabber; QScreen* selectedScreen = nullptr; #if (defined(Q_OS_WIN) || defined(Q_OS_MACOS)) // Top left of the whole set of screens QPoint topLeft(0, 0); #endif if (fullScreen) { bool ok = true; int preSelectedMonitor; if (req.hasSelectedMonitor()) { preSelectedMonitor = req.selectedMonitor(); } else { preSelectedMonitor = -1; } m_context.screenshot = grabber.grabEntireDesktop(ok, preSelectedMonitor); if (!ok) { // Error already logged in ScreenGrabber this->close(); } m_context.origScreenshot = m_context.screenshot; selectedScreen = grabber.getSelectedScreen(); #if defined(Q_OS_WIN) #if !defined(FLAMESHOT_DEBUG_CAPTURE) setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::SubWindow // Hides the taskbar icon ); #endif // Position the window at the selected screen's position // (or the topLeft of all screens if no specific screen was selected) if (selectedScreen) { move(selectedScreen->geometry().topLeft()); } else { for (QScreen* const screen : QGuiApplication::screens()) { QPoint topLeftScreen = screen->geometry().topLeft(); if (topLeftScreen.x() < topLeft.x()) { topLeft.setX(topLeftScreen.x()); } if (topLeftScreen.y() < topLeft.y()) { topLeft.setY(topLeftScreen.y()); } } move(topLeft); } // On Windows, account for DPR when sizing the window QSize windowSize = pixmap().size(); if (pixmap().devicePixelRatio() > 1.0) { windowSize = QSize(pixmap().width() / pixmap().devicePixelRatio(), pixmap().height() / pixmap().devicePixelRatio()); } resize(windowSize); if (selectedScreen != nullptr && windowHandle()) { windowHandle()->setScreen(selectedScreen); } #elif defined(Q_OS_MACOS) QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); move(currentScreen->geometry().x(), currentScreen->geometry().y()); resize(currentScreen->size()); // LINUX #else // Call cmake with -DFLAMESHOT_DEBUG_CAPTURE=ON to enable easier debugging #if !defined(FLAMESHOT_DEBUG_CAPTURE) setWindowFlags(Qt::BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool); #endif // Always display on the selected screen (not spanning entire desktop) if (selectedScreen == nullptr) { selectedScreen = QGuiApplication::primaryScreen(); } QRect screenGeom = selectedScreen->geometry(); move(screenGeom.topLeft()); resize(screenGeom.size()); if (selectedScreen != nullptr && windowHandle()) { windowHandle()->setScreen(selectedScreen); } #endif } QVector areas; if (m_context.fullscreen) { // Always display on a single screen, normalized to (0, 0) QScreen* screenForAreas = selectedScreen; if (!screenForAreas) { screenForAreas = QGuiAppCurrentScreen().currentScreen(); } if (!screenForAreas) { screenForAreas = QGuiApplication::primaryScreen(); } QRect r = screenForAreas ? screenForAreas->geometry() : QRect(); r.moveTo(0, 0); areas.append(r); } else { areas.append(rect()); } m_buttonHandler = new ButtonHandler(this); m_buttonHandler->updateScreenRegions(areas); m_buttonHandler->hide(); initButtons(); initSelection(); // button handler must be initialized before initShortcuts(); // must be called after initSelection // init magnify if (m_config.showMagnifier()) { m_magnifier = new MagnifierWidget( m_context.screenshot, m_uiColor, m_config.squareMagnifier(), this); } // Init color picker m_colorPicker = new ColorPicker(this); // Init notification widget m_notifierBox = new NotifierBox(this); initPanel(); // TODO: Make it more clear why this has moved. In Qt6 some timing related // to constructors / connect signals has changed so if initPanel is called // after the connect a SEGFAULT occurs connect(m_colorPicker, &ColorPicker::colorSelected, this, [this](const QColor& c) { m_context.mousePos = mapFromGlobal(QCursor::pos()); setDrawColor(c); }); m_colorPicker->hide(); // Init tool size sigslots connect(this, &CaptureWidget::toolSizeChanged, this, &CaptureWidget::onToolSizeChanged); m_notifierBox->hide(); connect(m_notifierBox, &NotifierBox::hidden, this, [this]() { // Show cursor if it was hidden while adjusting tool size updateCursor(); m_toolSizeByKeyboard = 0; onToolSizeChanged(m_context.toolSize); onToolSizeSettled(m_context.toolSize); }); m_config.checkAndHandleError(); if (m_config.hasError()) { m_configError = true; } connect( ConfigHandler::getInstance(), &ConfigHandler::error, this, [=, this]() { m_configError = true; m_configErrorResolved = false; OverlayMessage::instance()->update(); }); connect(ConfigHandler::getInstance(), &ConfigHandler::errorResolved, this, [=, this]() { m_configError = false; m_configErrorResolved = true; OverlayMessage::instance()->update(); }); // OverlayMessage is a child widget, so use widget-local coordinates // In fullscreen mode, use the normalized area; otherwise use widget rect QRect overlayArea = m_context.fullscreen && !areas.isEmpty() ? areas.first() : rect(); OverlayMessage::init(this, overlayArea); if (m_config.showHelp()) { initHelpMessage(); OverlayMessage::push(m_helpMessage); } initQuitPrompt(); updateCursor(); } CaptureWidget::~CaptureWidget() { #if defined(Q_OS_MACOS) for (QWidget* widget : qApp->topLevelWidgets()) { QString className(widget->metaObject()->className()); if (0 == className.compare(CaptureWidget::staticMetaObject.className())) { widget->showNormal(); widget->hide(); break; } } #endif if (m_captureDone) { auto lastRegion = m_selection->geometry(); const qreal scale = m_context.screenshot.devicePixelRatio(); lastRegion.setTop(lastRegion.top() * scale); lastRegion.setBottom(lastRegion.bottom() * scale); lastRegion.setLeft(lastRegion.left() * scale); lastRegion.setRight(lastRegion.right() * scale); setLastRegion(lastRegion); QRect geometry(m_context.selection); geometry.setTopLeft(geometry.topLeft() + m_context.widgetOffset); Flameshot::instance()->exportCapture( pixmap(), geometry, m_context.request); } else { emit Flameshot::instance()->captureFailed(); } } void CaptureWidget::initButtons() { auto allButtonTypes = CaptureToolButton::getIterableButtonTypes(); auto visibleButtonTypes = m_config.buttons(); if ((m_context.request.tasks() == CaptureRequest::NO_TASK) || (m_context.request.tasks() == CaptureRequest::PRINT_GEOMETRY)) { allButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); visibleButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); } else { // Remove irrelevant buttons from both lists for (auto* buttonList : { &allButtonTypes, &visibleButtonTypes }) { buttonList->removeOne(CaptureTool::TYPE_SAVE); buttonList->removeOne(CaptureTool::TYPE_COPY); #ifdef ENABLE_IMGUR buttonList->removeOne(CaptureTool::TYPE_IMAGEUPLOADER); #endif buttonList->removeOne(CaptureTool::TYPE_OPEN_APP); buttonList->removeOne(CaptureTool::TYPE_PIN); } } QVector vectorButtons; // Add all buttons but hide those that were disabled in the Interface config // This will allow keyboard shortcuts for those buttons to work for (CaptureTool::Type t : allButtonTypes) { auto* b = new CaptureToolButton(t, this); b->setColor(m_uiColor); b->hide(); // must be enabled for SelectionWidget's eventFilter to work correctly b->setAttribute(Qt::WA_NoMousePropagation); makeChild(b); switch (t) { case CaptureTool::TYPE_UNDO: case CaptureTool::TYPE_REDO: // nothing to do, just skip non-dynamic buttons with existing // hard coded slots break; default: // Set shortcuts for a tool QString shortcut = ConfigHandler().shortcut(QVariant::fromValue(t).toString()); if (!shortcut.isNull()) { auto shortcuts = newShortcut(shortcut, this, nullptr); for (auto* sc : shortcuts) { connect(sc, &QShortcut::activated, this, [=, this]() { setState(b); }); } } break; } m_tools[t] = b->tool(); connect(b->tool(), &CaptureTool::requestAction, this, &CaptureWidget::handleToolSignal); if (visibleButtonTypes.contains(t)) { connect(b, &CaptureToolButton::pressedButtonLeftClick, this, &CaptureWidget::handleButtonLeftClick); if (b->tool()->isSelectable()) { connect(b, &CaptureToolButton::pressedButtonRightClick, this, &CaptureWidget::handleButtonRightClick); } vectorButtons << b; } } m_buttonHandler->setButtons(vectorButtons); } void CaptureWidget::handleButtonRightClick(CaptureToolButton* b) { if (!b) { return; } // if button already selected, do not deselect it on right click if (!m_activeButton || m_activeButton != b) { setState(b); } if (!m_panel->isVisible()) { m_panel->show(); } } void CaptureWidget::handleButtonLeftClick(CaptureToolButton* b) { if (!b) { return; } setState(b); } void CaptureWidget::xywhTick() { m_xywhDisplay = false; update(); } void CaptureWidget::onDisplayGridChanged(bool display) { m_displayGrid = display; repaint(); } void CaptureWidget::onGridSizeChanged(int size) { m_gridSize = size; repaint(); } void CaptureWidget::startColorGrab() { if (m_sidePanel) { m_sidePanel->startColorGrab(); } } void CaptureWidget::showxywh() { m_xywhDisplay = true; update(); int timeout = m_config.showSelectionGeometryHideTime(); if (timeout != 0) { m_xywhTimer.start(timeout); } } void CaptureWidget::initHelpMessage() { QList> keyMap; keyMap << std::pair(tr("Mouse"), tr("Select screenshot area")); using CT = CaptureTool; for (auto toolType : { CT::TYPE_ACCEPT, CT::TYPE_SAVE, CT::TYPE_COPY }) { if (!m_tools.contains(toolType)) { continue; } auto* tool = m_tools[toolType]; QString shortcut = ConfigHandler().shortcut(QVariant::fromValue(toolType).toString()); shortcut.replace("Return", "Enter"); if (!shortcut.isEmpty()) { keyMap << std::pair(shortcut, tool->description()); } } keyMap << std::pair(tr("Mouse Wheel"), tr("Change tool size")); keyMap << std::pair(tr("Right Click"), tr("Show color picker")); keyMap << std::pair(ConfigHandler().shortcut("TYPE_TOGGLE_PANEL"), tr("Open side panel")); keyMap << std::pair(tr("Esc"), tr("Exit")); m_helpMessage = OverlayMessage::compileFromKeyMap(keyMap); } QPixmap CaptureWidget::pixmap() { return m_context.selectedScreenshotArea(); } // Finish whatever the current tool is doing, if there is a current active // tool. bool CaptureWidget::commitCurrentTool() { if (m_activeTool) { processPixmapWithTool(&m_context.screenshot, m_activeTool); if (m_activeTool->isValid() && !m_activeTool->editMode() && m_toolWidget) { pushToolToStack(); } if (m_toolWidget) { m_toolWidget->update(); } releaseActiveTool(); return true; } return false; } void CaptureWidget::initQuitPrompt() { m_quitPrompt = new QMessageBox; makeChild(m_quitPrompt); QString baseSheet = "QDialog { background-color: %1; }" "QLabel, QCheckBox { color: %2 }" "QPushButton { background-color: %1; color: %2 }"; QColor text = ColorUtils::colorIsDark(m_uiColor) ? Qt::white : Qt::black; QString styleSheet = baseSheet.arg(m_uiColor.name(), text.name()); m_quitPrompt->setStyleSheet(styleSheet); m_quitPrompt->setWindowTitle(tr("Quit Capture")); m_quitPrompt->setText(tr("Are you sure you want to quit capture?")); m_quitPrompt->setIcon(QMessageBox::Icon::Question); m_quitPrompt->setStandardButtons(QMessageBox::Yes | QMessageBox::No); m_quitPrompt->setDefaultButton(QMessageBox::No); auto* check = new QCheckBox(tr("Do not show this again")); m_quitPrompt->setCheckBox(check); // Call show() first, otherwise the correct geometry cannot be fetched // for centering the window on the screen m_quitPrompt->show(); QRect position = m_quitPrompt->frameGeometry(); QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); position.moveCenter(currentScreen->availableGeometry().center()); m_quitPrompt->move(position.topLeft()); m_quitPrompt->hide(); QObject::connect(check, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setShowQuitPrompt(!checked); }); } bool CaptureWidget::promptQuit() { return m_quitPrompt->exec() == QMessageBox::Yes; } void CaptureWidget::deleteToolWidgetOrClose() { if (m_activeButton != nullptr) { uncheckActiveTool(); } else if (m_panel->activeLayerIndex() >= 0) { // remove active tool selection m_panel->setActiveLayer(-1); } else if (m_panel->isVisible()) { // hide panel if visible m_panel->hide(); } else if (m_toolWidget) { // delete toolWidget if exists m_toolWidget->hide(); delete m_toolWidget; m_toolWidget = nullptr; } else if (m_colorPicker && m_colorPicker->isVisible()) { m_colorPicker->hide(); } else { // close CaptureWidget if (m_config.showQuitPrompt()) { // need to show prompt if (m_quitPrompt->isHidden() && promptQuit()) { close(); } } else { close(); } } } void CaptureWidget::releaseActiveTool() { if (m_activeTool) { if (m_activeTool->editMode()) { // Object shouldn't be deleted here because it is in the undo/redo // stack, just set current pointer to null m_activeTool->setEditMode(false); if (m_activeTool->isChanged()) { pushObjectsStateToUndoStack(); } } else { delete m_activeTool; } m_activeTool = nullptr; } if (m_toolWidget) { m_toolWidget->hide(); delete m_toolWidget; m_toolWidget = nullptr; } } void CaptureWidget::uncheckActiveTool() { // uncheck active tool m_panel->setToolWidget(nullptr); m_activeButton->setColor(m_uiColor); updateTool(activeButtonTool()); m_activeButton = nullptr; releaseActiveTool(); updateSelectionState(); updateCursor(); } void CaptureWidget::closeEvent(QCloseEvent* event) { #if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN)) /* GNOME copy problem workaround, copy operation seems to work only when there is a visible window to retrieve the data from. On GNOME, the GUI should handle the copy operation, not the daemon. */ const bool copyRequested = (m_context.request.tasks() & CaptureRequest::COPY); if (m_captureDone && copyRequested) { DesktopInfo desktopInfo; const bool needGnomeWorkaround = desktopInfo.waylandDetected() && desktopInfo.windowManager() == DesktopInfo::GNOME; if (needGnomeWorkaround && !m_clipboardWorkaroundDone) { event->ignore(); m_clipboardWorkaroundDone = true; m_context.request.removeTask(CaptureRequest::COPY); AbstractLogger::info() << "GNOME Wayland detected; keeping capture window alive until " "clipboard data is fetched."; saveToClipboardGnomeWorkaround(pixmap(), this); return; } } #endif QWidget::closeEvent(event); } void CaptureWidget::paintEvent(QPaintEvent* paintEvent) { Q_UNUSED(paintEvent) QPainter painter(this); if (!painter.isActive()) { return; } GeneralConf::xywh_position position = static_cast(m_config.showSelectionGeometry()); /* QPainter::save and restore is somewhat costly so we try to guess if we need to do it here. What that means is that if you add anything to the paintEvent and want to save/restore you should add a test to the below if statement -- also if you change any of the conditions that current trigger it you'll need to change here, too */ bool save = false; if (m_xywhDisplay || // clause 1: xywh display m_displayGrid || // clause 2: display grid (m_activeTool && m_mouseIsClicked) || // clause 3: tool/click (m_previewEnabled && activeButtonTool() && // clause 4: mouse preview m_activeButton->tool()->showMousePreview())) { painter.save(); save = true; } painter.drawPixmap(0, 0, m_context.screenshot); if (m_selection && m_xywhDisplay) { const QRect& selection = m_selection->geometry().normalized(); const qreal scale = m_context.screenshot.devicePixelRatio(); QRect xybox; QFontMetrics fm = painter.fontMetrics(); QString xy = QString("%1x%2+%3+%4") .arg(QString::number(static_cast(selection.width() * scale)), QString::number(static_cast(selection.height() * scale)), QString::number(static_cast(selection.left() * scale)), QString::number(static_cast(selection.top() * scale))); xybox = fm.boundingRect(xy); // the small numbers here are just margins so the text doesn't // smack right up to the box; they aren't critical and the box // size itself is tied to the font metrics xybox.adjust(0, 0, 10, 12); // in anticipation of making the position adjustable int x0, y0; // Move these to header switch (position) { case GeneralConf::xywh_top_left: x0 = selection.left(); y0 = selection.top(); break; case GeneralConf::xywh_bottom_left: x0 = selection.left(); y0 = selection.bottom() - xybox.height(); break; case GeneralConf::xywh_top_right: x0 = selection.right() - xybox.width(); y0 = selection.top(); break; case GeneralConf::xywh_bottom_right: x0 = selection.right() - xybox.width(); y0 = selection.bottom() - xybox.height(); break; case GeneralConf::xywh_center: default: x0 = selection.left() + (selection.width() - xybox.width()) / 2; y0 = selection.top() + (selection.height() - xybox.height()) / 2; } QColor uicolor = ConfigHandler().uiColor(); uicolor.setAlpha(200); painter.fillRect( x0, y0, xybox.width(), xybox.height(), QBrush(uicolor)); painter.setPen(ColorUtils::colorIsDark(uicolor) ? Qt::white : Qt::black); painter.drawText(x0, y0, xybox.width(), xybox.height(), Qt::AlignVCenter | Qt::AlignHCenter, xy); } if (m_displayGrid) { QColor uicolor = ConfigHandler().uiColor(); uicolor.setAlpha(100); painter.setPen(uicolor); painter.setBrush(QBrush(uicolor)); const auto scale{ m_context.screenshot.devicePixelRatio() }; auto topLeft = mapToGlobal(m_context.selection.topLeft() / scale); topLeft.rx() -= topLeft.x() % m_gridSize; topLeft.ry() -= topLeft.y() % m_gridSize; topLeft = mapFromGlobal(topLeft); const auto step{ m_gridSize / scale }; const auto radius{ 1 * scale }; for (int y = topLeft.y(); y < m_context.selection.bottom() / scale; y += step) { for (int x = topLeft.x(); x < m_context.selection.right() / scale; x += step) { painter.drawEllipse(x, y, radius, radius); } } } if (m_activeTool && m_mouseIsClicked) { m_activeTool->process(painter, m_context.screenshot); } else if (m_previewEnabled && activeButtonTool() && m_activeButton->tool()->showMousePreview()) { m_activeButton->tool()->paintMousePreview(painter, m_context); } if (save) painter.restore(); // draw inactive region drawInactiveRegion(&painter); if (!isActiveWindow()) { drawErrorMessage( tr("Flameshot has lost focus. Keyboard shortcuts won't " "work until you click somewhere."), &painter); } else if (m_configError) { drawErrorMessage(ConfigHandler().errorMessage(), &painter); } else if (m_configErrorResolved) { drawErrorMessage(tr("Configuration error resolved. Launch `flameshot " "gui` again to apply it."), &painter); } } void CaptureWidget::showColorPicker(const QPoint& pos) { // Try to select new object if current pos out of active object auto toolItem = activeToolObject(); if (!toolItem || (toolItem && !toolItem->boundingRect().contains(pos))) { selectToolItemAtPos(pos); } // save current state for undo/redo stack if (m_panel->activeLayerIndex() >= 0) { m_captureToolObjectsBackup = m_captureToolObjects; } // Call color picker m_colorPicker->move(pos.x() - m_colorPicker->width() / 2, pos.y() - m_colorPicker->height() / 2); m_colorPicker->raise(); m_colorPicker->show(); } bool CaptureWidget::startDrawObjectTool(const QPoint& pos) { if (activeButtonToolType() != CaptureTool::NONE && activeButtonToolType() != CaptureTool::TYPE_MOVESELECTION) { if (commitCurrentTool()) { return false; } m_activeTool = m_activeButton->tool()->copy(this); connect(this, &CaptureWidget::colorChanged, m_activeTool, &CaptureTool::onColorChanged); connect(this, &CaptureWidget::toolSizeChanged, m_activeTool, &CaptureTool::onSizeChanged); connect(m_activeTool, &CaptureTool::requestAction, this, &CaptureWidget::handleToolSignal); m_context.mousePos = m_displayGrid ? snapToGrid(pos) : pos; m_activeTool->drawStart(m_context); // TODO this is the wrong place to do this if (m_activeTool->type() == CaptureTool::TYPE_CIRCLECOUNT) { m_activeTool->setCount(m_context.circleCount++); } return true; } return false; } void CaptureWidget::pushObjectsStateToUndoStack() { m_undoStack.push(new ModificationCommand( this, m_captureToolObjects, m_captureToolObjectsBackup)); m_captureToolObjectsBackup.clear(); } int CaptureWidget::selectToolItemAtPos(const QPoint& pos) { // Try to select existing tool, "-1" - no active tool int activeLayerIndex = -1; auto selectionMouseSide = m_selection->getMouseSide(pos); if (m_activeButton.isNull() && m_captureToolObjects.captureToolObjects().size() > 0 && (selectionMouseSide == SelectionWidget::NO_SIDE || selectionMouseSide == SelectionWidget::CENTER)) { auto toolItem = activeToolObject(); if (!toolItem || (toolItem && !toolItem->boundingRect().contains(pos))) { activeLayerIndex = m_captureToolObjects.find(pos, size()); int oldToolSize = m_context.toolSize; m_panel->setActiveLayer(activeLayerIndex); drawObjectSelection(); if (oldToolSize != m_context.toolSize) { emit toolSizeChanged(m_context.toolSize); } } } return activeLayerIndex; } void CaptureWidget::mousePressEvent(QMouseEvent* e) { activateWindow(); m_startMove = false; m_startMovePos = QPoint(); m_mousePressedPos = e->pos(); m_activeToolOffsetToMouseOnStart = QPoint(); if (m_colorPicker->isVisible()) { updateCursor(); return; } // reset object selection if capture area selection is active if (m_selection->getMouseSide(e->pos()) != SelectionWidget::CENTER) { m_panel->setActiveLayer(-1); } if (e->button() == Qt::RightButton) { if (m_activeTool && m_activeTool->editMode()) { return; } showColorPicker(m_mousePressedPos); return; } else if (e->button() == Qt::LeftButton) { m_mouseIsClicked = true; // Click using a tool excluding tool MOVE if (startDrawObjectTool(m_mousePressedPos)) { // return if success return; } } // Commit current tool if it has edit widget and mouse click is outside // of it if (m_toolWidget && !m_toolWidget->geometry().contains(e->pos())) { commitCurrentTool(); m_panel->setToolWidget(nullptr); drawToolsData(); updateLayersPanel(); } selectToolItemAtPos(m_mousePressedPos); updateSelectionState(); updateCursor(); } void CaptureWidget::mouseDoubleClickEvent(QMouseEvent* event) { int activeLayerIndex = m_panel->activeLayerIndex(); if (activeLayerIndex != -1) { // Start object editing auto activeTool = m_captureToolObjects.at(activeLayerIndex); if (activeTool && activeTool->type() == CaptureTool::TYPE_TEXT) { m_activeTool = activeTool; m_mouseIsClicked = false; m_context.mousePos = *m_activeTool->pos(); m_captureToolObjectsBackup = m_captureToolObjects; m_activeTool->setEditMode(true); drawToolsData(); updateLayersPanel(); handleToolSignal(CaptureTool::REQ_ADD_CHILD_WIDGET); if (!m_activeTool.isNull()) { m_panel->setToolWidget(m_activeTool->configurationWidget()); } } } else if (m_selection->geometry().contains(event->pos())) { if ((event->button() == Qt::LeftButton) && (m_config.copyOnDoubleClick())) { CopyTool copyTool; connect(©Tool, &CopyTool::requestAction, this, &CaptureWidget::handleToolSignal); copyTool.pressed(m_context); qApp->processEvents(QEventLoop::ExcludeUserInputEvents); } } } void CaptureWidget::mouseMoveEvent(QMouseEvent* e) { if (m_magnifier) { if (!m_activeButton) { m_magnifier->show(); m_magnifier->update(); } else { m_magnifier->hide(); } } m_context.mousePos = e->pos(); if (e->buttons() != Qt::LeftButton) { updateTool(activeButtonTool()); updateCursor(); return; } // The rest assumes that left mouse button is clicked if (!m_activeButton && m_panel->activeLayerIndex() >= 0) { // Move existing object if (!m_startMove) { // Check for the minimal offset to start moving an object if (m_startMovePos.isNull()) { m_startMovePos = e->pos(); } if ((e->pos() - m_startMovePos).manhattanLength() > MOUSE_DISTANCE_TO_START_MOVING) { m_startMove = true; } } if (m_startMove) { QPointer activeTool = m_captureToolObjects.at(m_panel->activeLayerIndex()); if (m_activeToolOffsetToMouseOnStart.isNull()) { setCursor(Qt::ClosedHandCursor); m_activeToolOffsetToMouseOnStart = e->pos() - *activeTool->pos(); } if (!m_activeToolIsMoved) { // save state before movement for undo stack m_captureToolObjectsBackup = m_captureToolObjects; } m_activeToolIsMoved = true; // update the old region of the selection, margins are added to // ensure selection outline is updated too update(paddedUpdateRect(activeTool->boundingRect())); activeTool->move(e->pos() - m_activeToolOffsetToMouseOnStart); drawToolsData(); } } else if (m_activeTool) { // drawing with a tool if (m_adjustmentButtonPressed) { m_activeTool->drawMoveWithAdjustment(e->pos()); } else { m_activeTool->drawMove(m_displayGrid ? snapToGrid(e->pos()) : e->pos()); } // update drawing object updateTool(m_activeTool); // Hides the buttons under the mouse. If the mouse leaves, it shows // them. if (m_buttonHandler->buttonsAreInside()) { const bool containsMouse = m_buttonHandler->contains(m_context.mousePos); if (containsMouse) { m_buttonHandler->hide(); } else if (m_selection->isVisible()) { m_buttonHandler->show(); } } } updateCursor(); } void CaptureWidget::mouseReleaseEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton && m_colorPicker->isVisible()) { // Color picker if (m_colorPicker->isVisible() && m_panel->activeLayerIndex() >= 0 && m_context.color.isValid()) { pushObjectsStateToUndoStack(); } m_colorPicker->setNewColor(); m_colorPicker->hide(); if (!m_context.color.isValid()) { m_context.color = ConfigHandler().drawColor(); m_panel->show(); } } else if (m_mouseIsClicked) { if (m_activeTool) { // end draw/edit m_activeTool->drawEnd(m_context.mousePos); if (m_activeTool->isValid()) { pushToolToStack(); } else if (!m_toolWidget) { releaseActiveTool(); } } else { if (m_activeToolIsMoved) { m_activeToolIsMoved = false; pushObjectsStateToUndoStack(); } } } m_mouseIsClicked = false; m_activeToolIsMoved = false; updateSelectionState(); updateCursor(); } /** * Was updateThickness. * - Update tool mouse preview * - Show notifier box displaying the new thickness * - Update selected object thickness */ void CaptureWidget::setToolSize(int size) { int oldSize = m_context.toolSize; m_context.toolSize = qBound(1, size, maxToolSize); updateTool(activeButtonTool()); QScreen* topLeftScreen = QGuiAppCurrentScreen().currentScreen(); QPoint topLeft(0, 0); if (topLeftScreen) { topLeft = topLeftScreen->geometry().topLeft(); } else { QScreen* primary = QGuiApplication::primaryScreen(); if (primary) { topLeft = primary->geometry().topLeft(); } } int offset = m_notifierBox->width() / 4; m_notifierBox->move(mapFromGlobal(topLeft) + QPoint(offset, offset)); m_notifierBox->showMessage(QString::number(m_context.toolSize)); if (m_context.toolSize != oldSize) { emit toolSizeChanged(m_context.toolSize); } } void CaptureWidget::keyPressEvent(QKeyEvent* e) { // If the key is a digit, change the tool size bool ok; int digit = e->text().toInt(&ok); if (ok && ((e->modifiers() == Qt::NoModifier) || e->modifiers() == Qt::KeypadModifier)) { // digit received m_toolSizeByKeyboard = 10 * m_toolSizeByKeyboard + digit; setToolSize(m_toolSizeByKeyboard); if (m_context.toolSize != m_toolSizeByKeyboard) { // The tool size was out of range and was clipped by setToolSize m_toolSizeByKeyboard = 0; } } else { m_toolSizeByKeyboard = 0; } if (!m_selection->isVisible()) { return; } else if (e->key() == Qt::Key_Control) { m_adjustmentButtonPressed = true; updateCursor(); } else if (e->key() == Qt::Key_Enter) { // Make no difference for Return and Enter keys QCoreApplication::postEvent( this, new QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier)); } } void CaptureWidget::keyReleaseEvent(QKeyEvent* e) { if (e->key() == Qt::Key_Control) { m_adjustmentButtonPressed = false; updateCursor(); } } void CaptureWidget::wheelEvent(QWheelEvent* e) { /* Mouse scroll usually gives value 120, not more or less, just how many * times. * Touchpad gives the value 2 or more (usually 2-8), it doesn't give * too big values like mouse wheel on normal scrolling, so it is almost * impossible to scroll. It's easier to calculate number of requests and do * not accept events faster that one in 200ms. * */ int toolSizeOffset = 0; if (e->angleDelta().y() >= 60) { // mouse scroll (wheel) increment toolSizeOffset = 1; } else if (e->angleDelta().y() <= -60) { // mouse scroll (wheel) decrement toolSizeOffset = -1; } else { // touchpad scroll qint64 current = QDateTime::currentMSecsSinceEpoch(); if ((current - m_lastMouseWheel) > 200) { if (e->angleDelta().y() > 0) { toolSizeOffset = 1; } else if (e->angleDelta().y() < 0) { toolSizeOffset = -1; } m_lastMouseWheel = current; } else { return; } } setToolSize(m_context.toolSize + toolSizeOffset); } void CaptureWidget::resizeEvent(QResizeEvent* e) { QWidget::resizeEvent(e); m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); if (!m_context.fullscreen) { m_panel->setFixedHeight(height()); m_buttonHandler->updateScreenRegions(rect()); } } void CaptureWidget::moveEvent(QMoveEvent* e) { QWidget::moveEvent(e); m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); } void CaptureWidget::changeEvent(QEvent* e) { if (e->type() == QEvent::ActivationChange) { QPoint bottomRight = rect().bottomRight(); // Update the message in the bottom right corner. A rough estimate is // used for the update rect update(QRect(bottomRight - QPoint(1000, 200), bottomRight)); } } void CaptureWidget::initContext(bool fullscreen, const CaptureRequest& req) { m_context.color = m_config.drawColor(); m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); m_context.mousePos = mapFromGlobal(QCursor::pos()); m_context.toolSize = m_config.drawThickness(); m_context.fullscreen = fullscreen; // initialize m_context.request m_context.request = req; } void CaptureWidget::initPanel() { // Use widget-local coordinates (rect()) for all child widgets // Child widgets use parent-relative coordinate system, not global screen // coords QRect panelRect = rect(); if (ConfigHandler().showSidePanelButton()) { auto* panelToggleButton = new OrientablePushButton(tr("Tool Settings"), this); makeChild(panelToggleButton); panelToggleButton->setColor(m_uiColor); panelToggleButton->setOrientation( OrientablePushButton::VerticalBottomToTop); #if defined(Q_OS_MACOS) panelToggleButton->move( 0, static_cast(panelRect.height() / 2) - static_cast(panelToggleButton->width() / 2)); #else // panelRect is already adjusted for DPR, so centering calculations work // correctly panelToggleButton->move(panelRect.x(), panelRect.y() + panelRect.height() / 2 - panelToggleButton->width() / 2); #endif panelToggleButton->setCursor(Qt::ArrowCursor); (new DraggableWidgetMaker(this))->makeDraggable(panelToggleButton); connect(panelToggleButton, &QPushButton::clicked, this, &CaptureWidget::togglePanel); } m_panel = new UtilityPanel(this); m_panel->hide(); makeChild(m_panel); #if defined(Q_OS_MACOS) m_panel->setFixedWidth(static_cast(m_colorPicker->width() * 1.5)); m_panel->setFixedHeight(height()); #else // Panel uses widget-local coordinates (parent-relative) panelRect.setWidth(m_colorPicker->width() * 1.5); m_panel->setGeometry(panelRect); #endif connect(m_panel, &UtilityPanel::layerChanged, this, &CaptureWidget::updateActiveLayer); connect(m_panel, &UtilityPanel::moveUpClicked, this, &CaptureWidget::onMoveCaptureToolUp); connect(m_panel, &UtilityPanel::moveDownClicked, this, &CaptureWidget::onMoveCaptureToolDown); m_sidePanel = new SidePanelWidget(&m_context.screenshot, this); connect(m_sidePanel, &SidePanelWidget::colorChanged, this, &CaptureWidget::setDrawColor); connect(m_sidePanel, &SidePanelWidget::toolSizeChanged, this, &CaptureWidget::onToolSizeChanged); connect(this, &CaptureWidget::colorChanged, m_sidePanel, &SidePanelWidget::onColorChanged); connect(this, &CaptureWidget::toolSizeChanged, m_sidePanel, &SidePanelWidget::onToolSizeChanged); connect(m_sidePanel, &SidePanelWidget::togglePanel, m_panel, &UtilityPanel::toggle); connect( m_sidePanel, &SidePanelWidget::showPanel, m_panel, &UtilityPanel::show); connect( m_sidePanel, &SidePanelWidget::hidePanel, m_panel, &UtilityPanel::hide); connect(m_sidePanel, &SidePanelWidget::displayGridChanged, this, &CaptureWidget::onDisplayGridChanged); connect(m_sidePanel, &SidePanelWidget::gridSizeChanged, this, &CaptureWidget::onGridSizeChanged); // TODO replace with a CaptureWidget signal emit m_sidePanel->colorChanged(m_context.color); emit toolSizeChanged(m_context.toolSize); m_panel->pushWidget(m_sidePanel); // Fill undo/redo/history list widget m_panel->fillCaptureTools(m_captureToolObjects.captureToolObjects()); } #if !defined(DISABLE_UPDATE_CHECKER) void CaptureWidget::showAppUpdateNotification(const QString& appLatestVersion, const QString& appLatestUrl) { if (!ConfigHandler().checkForUpdates()) { // option check for updates disabled return; } if (nullptr == m_updateNotificationWidget) { m_updateNotificationWidget = new UpdateNotificationWidget(this, appLatestVersion, appLatestUrl); } #if defined(Q_OS_MACOS) int ax = (width() - m_updateNotificationWidget->width()) / 2; #else QRect helpRect; QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); if (currentScreen) { helpRect = currentScreen->geometry(); } else { helpRect = QGuiApplication::primaryScreen()->geometry(); } int ax = helpRect.left() + ((helpRect.width() - m_updateNotificationWidget->width()) / 2); #endif m_updateNotificationWidget->move(ax, 0); makeChild(m_updateNotificationWidget); m_updateNotificationWidget->show(); } #endif void CaptureWidget::initSelection() { // Be mindful of the order of statements, so that slots are called properly m_selection = new SelectionWidget(m_uiColor, this); QRect initialSelection = m_context.request.initialSelection(); connect(m_selection, &SelectionWidget::geometryChanged, this, [this]() { QRect constrainedToCaptureArea = m_selection->geometry().intersected(rect()); m_context.selection = extendedRect(constrainedToCaptureArea); m_buttonHandler->hide(); updateCursor(); updateSizeIndicator(); OverlayMessage::pop(); }); connect(m_selection, &SelectionWidget::geometrySettled, this, [this]() { if (m_selection->isVisibleTo(this)) { auto& req = m_context.request; if (req.tasks() & CaptureRequest::ACCEPT_ON_SELECT) { req.removeTask(CaptureRequest::ACCEPT_ON_SELECT); m_captureDone = true; close(); } m_buttonHandler->updatePosition(m_selection->geometry()); m_buttonHandler->show(); } else { m_buttonHandler->hide(); } }); connect(m_selection, &SelectionWidget::visibilityChanged, this, [this]() { if (!m_selection->isVisible() && !m_helpMessage.isEmpty()) { OverlayMessage::push(m_helpMessage); } }); if (!initialSelection.isNull()) { const qreal scale = m_context.screenshot.devicePixelRatio(); initialSelection.setTop(initialSelection.top() / scale); initialSelection.setBottom(initialSelection.bottom() / scale); initialSelection.setLeft(initialSelection.left() / scale); initialSelection.setRight(initialSelection.right() / scale); } m_selection->setGeometry(initialSelection); m_selection->setVisible(!initialSelection.isNull()); if (!initialSelection.isNull()) { m_context.selection = extendedRect(m_selection->geometry()); emit m_selection->geometrySettled(); } } void CaptureWidget::setState(CaptureToolButton* b) { if (!b) { return; } commitCurrentTool(); if (m_toolWidget && m_activeTool) { if (m_activeTool->isValid()) { pushToolToStack(); } else { releaseActiveTool(); } } if (m_activeButton != b) { auto backup = m_activeTool; // The tool is active during the pressed(). // This must be done in order to handle tool requests correctly. m_activeTool = b->tool(); m_activeTool->pressed(m_context); m_activeTool = backup; } if (b->tool()->isSelectable()) { if (m_activeButton != b) { if (m_activeButton) { m_activeButton->setColor(m_uiColor); } m_activeButton = b; m_activeButton->setColor(m_contrastUiColor); m_panel->setActiveLayer(-1); m_panel->setToolWidget(b->tool()->configurationWidget()); } else if (m_activeButton) { m_panel->clearToolWidget(); m_activeButton->setColor(m_uiColor); m_activeButton = nullptr; } m_context.toolSize = ConfigHandler().toolSize(activeButtonToolType()); emit toolSizeChanged(m_context.toolSize); updateCursor(); updateSelectionState(); updateTool(b->tool()); } } void CaptureWidget::handleToolSignal(CaptureTool::Request r) { switch (r) { case CaptureTool::REQ_CLOSE_GUI: close(); break; case CaptureTool::REQ_HIDE_GUI: hide(); break; case CaptureTool::REQ_UNDO_MODIFICATION: undo(); break; case CaptureTool::REQ_REDO_MODIFICATION: redo(); break; case CaptureTool::REQ_SHOW_COLOR_PICKER: // TODO break; case CaptureTool::REQ_CAPTURE_DONE_OK: m_captureDone = true; break; case CaptureTool::REQ_CLEAR_SELECTION: if (m_panel->activeLayerIndex() >= 0) { m_panel->setActiveLayer(-1); drawToolsData(false); } break; case CaptureTool::REQ_ADD_CHILD_WIDGET: if (!m_activeTool) { break; } if (m_toolWidget) { m_toolWidget->hide(); delete m_toolWidget; m_toolWidget = nullptr; } m_toolWidget = m_activeTool->widget(); if (m_toolWidget) { makeChild(m_toolWidget); m_toolWidget->move(m_context.mousePos); m_toolWidget->show(); m_toolWidget->setFocus(); } break; case CaptureTool::REQ_ADD_EXTERNAL_WIDGETS: if (!m_activeTool) { break; } else { QWidget* w = m_activeTool->widget(); w->setAttribute(Qt::WA_DeleteOnClose); w->activateWindow(); w->show(); Flameshot::instance()->setExternalWidget(true); } break; case CaptureTool::REQ_INCREASE_TOOL_SIZE: setToolSize(m_context.toolSize + 1); break; case CaptureTool::REQ_DECREASE_TOOL_SIZE: setToolSize(m_context.toolSize - 1); break; default: break; } } /** * Was setDrawThickness * - Update config options * - Update tool object thickness */ void CaptureWidget::onToolSizeChanged(int t) { m_context.toolSize = t; CaptureTool* tool = activeButtonTool(); if (tool && tool->showMousePreview()) { setCursor(Qt::BlankCursor); tool->onSizeChanged(t); } // update tool size of object being drawn if (m_activeTool != nullptr) { updateTool(m_activeTool); } // update tool size of selected object auto toolItem = activeToolObject(); if (toolItem) { // Change thickness toolItem->onSizeChanged(t); if (!m_existingObjectIsChanged) { m_captureToolObjectsBackup = m_captureToolObjects; m_existingObjectIsChanged = true; } drawToolsData(); updateTool(toolItem); } // Force a repaint to prevent artifacting this->repaint(); } void CaptureWidget::onToolSizeSettled(int size) { m_config.setToolSize(activeButtonToolType(), size); } void CaptureWidget::setDrawColor(const QColor& c) { m_context.color = c; if (m_context.color.isValid()) { ConfigHandler().setDrawColor(m_context.color); emit colorChanged(c); // Update mouse preview updateTool(activeButtonTool()); // change color for the active tool auto toolItem = activeToolObject(); if (toolItem) { // Change color toolItem->onColorChanged(c); drawToolsData(); } } } void CaptureWidget::updateActiveLayer(int layer) { // TODO - refactor this part, make all objects to work with // m_activeTool->isChanged() and remove m_existingObjectIsChanged if (m_activeTool && m_activeTool->type() == CaptureTool::TYPE_TEXT && m_activeTool->isChanged()) { commitCurrentTool(); } if (m_toolWidget) { // Release active tool if it is in the editing mode but not changed and // has editing widget (ex: text tool) releaseActiveTool(); } if (m_existingObjectIsChanged) { m_existingObjectIsChanged = false; pushObjectsStateToUndoStack(); } drawToolsData(); drawObjectSelection(); updateSelectionState(); } void CaptureWidget::onMoveCaptureToolUp(int captureToolIndex) { m_captureToolObjectsBackup = m_captureToolObjects; pushObjectsStateToUndoStack(); auto tool = m_captureToolObjects.at(captureToolIndex); m_captureToolObjects.removeAt(captureToolIndex); m_captureToolObjects.insert(captureToolIndex - 1, tool); updateLayersPanel(); } void CaptureWidget::onMoveCaptureToolDown(int captureToolIndex) { m_captureToolObjectsBackup = m_captureToolObjects; pushObjectsStateToUndoStack(); auto tool = m_captureToolObjects.at(captureToolIndex); m_captureToolObjects.removeAt(captureToolIndex); m_captureToolObjects.insert(captureToolIndex + 1, tool); updateLayersPanel(); } void CaptureWidget::selectAll() { m_selection->show(); m_selection->setGeometry(rect()); emit m_selection->geometrySettled(); m_buttonHandler->show(); updateSelectionState(); } void CaptureWidget::removeToolObject(int index) { --index; if (index >= 0 && index < m_captureToolObjects.size()) { // in case this tool is circle counter const CaptureTool::Type currentToolType = m_captureToolObjects.at(index)->type(); m_captureToolObjectsBackup = m_captureToolObjects; update( paddedUpdateRect(m_captureToolObjects.at(index)->boundingRect())); if (currentToolType == CaptureTool::TYPE_CIRCLECOUNT) { int removedCircleCount = m_captureToolObjects.at(index)->count(); --m_context.circleCount; // Decrement circle counter numbers starting from deleted circle for (int cnt = 0; cnt < m_captureToolObjects.size(); cnt++) { auto toolItem = m_captureToolObjects.at(cnt); if (toolItem->type() != CaptureTool::TYPE_CIRCLECOUNT) { continue; } auto circleTool = m_captureToolObjects.at(cnt); if (circleTool->count() >= removedCircleCount) { circleTool->setCount(circleTool->count() - 1); } } } m_captureToolObjects.removeAt(index); pushObjectsStateToUndoStack(); drawToolsData(); updateLayersPanel(); } } void CaptureWidget::initShortcuts() { newShortcut( QKeySequence(ConfigHandler().shortcut("TYPE_UNDO")), this, SLOT(undo())); newShortcut( QKeySequence(ConfigHandler().shortcut("TYPE_REDO")), this, SLOT(redo())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_TOGGLE_PANEL")), this, SLOT(togglePanel())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_GRAB_COLOR")), this, SLOT(startColorGrab())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_RESIZE_LEFT")), m_selection, SLOT(resizeLeft())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_RESIZE_RIGHT")), m_selection, SLOT(resizeRight())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_RESIZE_UP")), m_selection, SLOT(resizeUp())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_RESIZE_DOWN")), m_selection, SLOT(resizeDown())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_SYM_RESIZE_LEFT")), m_selection, SLOT(symResizeLeft())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_SYM_RESIZE_RIGHT")), m_selection, SLOT(symResizeRight())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_SYM_RESIZE_UP")), m_selection, SLOT(symResizeUp())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_SYM_RESIZE_DOWN")), m_selection, SLOT(symResizeDown())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_MOVE_LEFT")), m_selection, SLOT(moveLeft())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_MOVE_RIGHT")), m_selection, SLOT(moveRight())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_MOVE_UP")), m_selection, SLOT(moveUp())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_MOVE_DOWN")), m_selection, SLOT(moveDown())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_CANCEL")), this, SLOT(cancel())); newShortcut( QKeySequence(ConfigHandler().shortcut("TYPE_DELETE_CURRENT_TOOL")), this, SLOT(deleteCurrentTool())); newShortcut( QKeySequence(ConfigHandler().shortcut("TYPE_COMMIT_CURRENT_TOOL")), this, SLOT(commitCurrentTool())); newShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_SELECT_ALL")), this, SLOT(selectAll())); newShortcut(Qt::Key_Escape, this, SLOT(deleteToolWidgetOrClose())); } void CaptureWidget::deleteCurrentTool() { int oldToolSize = m_context.toolSize; m_panel->slotButtonDelete(true); drawObjectSelection(); if (oldToolSize != m_context.toolSize) { emit toolSizeChanged(m_context.toolSize); } } void CaptureWidget::updateSizeIndicator() { if (m_config.showSelectionGeometry()) { showxywh(); } if (m_sizeIndButton) { const QRect& selection = extendedSelection(); m_sizeIndButton->setText( QStringLiteral("%1\n%2").arg(selection.width(), selection.height())); } } void CaptureWidget::updateCursor() { if (m_colorPicker && m_colorPicker->isVisible()) { setCursor(Qt::ArrowCursor); } else if (m_activeButton != nullptr && activeButtonToolType() != CaptureTool::TYPE_MOVESELECTION) { setCursor(Qt::CrossCursor); } else if (m_selection->getMouseSide(mapFromGlobal(QCursor::pos())) != SelectionWidget::NO_SIDE) { setCursor(m_selection->cursor()); } else if (activeButtonToolType() == CaptureTool::TYPE_MOVESELECTION) { setCursor(Qt::OpenHandCursor); } else { setCursor(Qt::CrossCursor); } } void CaptureWidget::updateSelectionState() { auto toolType = activeButtonToolType(); if (toolType == CaptureTool::TYPE_MOVESELECTION) { m_selection->setIdleCentralCursor(Qt::OpenHandCursor); m_selection->setIgnoreMouse(false); } else { m_selection->setIdleCentralCursor(Qt::ArrowCursor); if (toolType == CaptureTool::NONE) { m_selection->setIgnoreMouse(m_panel->activeLayerIndex() != -1); } else { m_selection->setIgnoreMouse(true); } } } void CaptureWidget::updateTool(CaptureTool* tool) { if (!tool || !tool->showMousePreview()) { return; } static QRect oldPreviewRect, oldToolObjectRect; QRect previewRect(tool->mousePreviewRect(m_context)); previewRect += QMargins(previewRect.width(), previewRect.height(), previewRect.width(), previewRect.height()); QRect toolObjectRect = paddedUpdateRect(tool->boundingRect()); // old rects are united with current rects to handle sudden mouse movement update(previewRect); update(toolObjectRect); update(oldPreviewRect); update(oldToolObjectRect); oldPreviewRect = previewRect; oldToolObjectRect = toolObjectRect; } void CaptureWidget::updateLayersPanel() { m_panel->fillCaptureTools(m_captureToolObjects.captureToolObjects()); } void CaptureWidget::pushToolToStack() { // append current tool to the new state if (m_activeTool && m_activeButton) { disconnect(this, &CaptureWidget::colorChanged, m_activeTool, &CaptureTool::onColorChanged); disconnect(this, &CaptureWidget::toolSizeChanged, m_activeTool, &CaptureTool::onSizeChanged); if (m_panel->toolWidget()) { disconnect(m_panel->toolWidget(), nullptr, m_activeTool, nullptr); } // disable signal connect for updating layer because it may call this // function again on text objects m_panel->blockSignals(true); m_captureToolObjectsBackup = m_captureToolObjects; m_captureToolObjects.append(m_activeTool); pushObjectsStateToUndoStack(); releaseActiveTool(); drawToolsData(); updateLayersPanel(); // restore signal connection for updating layer m_panel->blockSignals(false); } } void CaptureWidget::drawToolsData(bool drawSelection) { // TODO refactor this for performance. The objects should not all be updated // at once every time QPixmap pixmapItem = m_context.origScreenshot; for (const auto& toolItem : m_captureToolObjects.captureToolObjects()) { processPixmapWithTool(&pixmapItem, toolItem); update(paddedUpdateRect(toolItem->boundingRect())); } m_context.screenshot = pixmapItem; if (drawSelection) { drawObjectSelection(); } } void CaptureWidget::drawObjectSelection() { auto toolItem = activeToolObject(); if (toolItem && !toolItem->editMode()) { QPainter painter(&m_context.screenshot); toolItem->drawObjectSelection(painter); // TODO move this elsewhere if (m_context.toolSize != toolItem->size()) { m_context.toolSize = toolItem->size(); } if (activeToolObject() && m_activeButton) { uncheckActiveTool(); } } } void CaptureWidget::processPixmapWithTool(QPixmap* pixmap, CaptureTool* tool) { QPainter painter(pixmap); painter.setRenderHint(QPainter::Antialiasing); tool->process(painter, *pixmap); } CaptureTool* CaptureWidget::activeButtonTool() const { if (m_activeButton == nullptr) { return nullptr; } return m_activeButton->tool(); } CaptureTool::Type CaptureWidget::activeButtonToolType() const { auto* activeTool = activeButtonTool(); if (activeTool == nullptr) { return CaptureTool::NONE; } return activeTool->type(); } QPoint CaptureWidget::snapToGrid(const QPoint& point) const { QPoint snapPoint = mapToGlobal(point); const auto scale{ m_context.screenshot.devicePixelRatio() }; snapPoint.setX((qRound(snapPoint.x() / double(m_gridSize)) * m_gridSize)); snapPoint.setY((qRound(snapPoint.y() / double(m_gridSize)) * m_gridSize)); return mapFromGlobal(snapPoint); } QPointer CaptureWidget::activeToolObject() { return m_captureToolObjects.at(m_panel->activeLayerIndex()); } void CaptureWidget::makeChild(QWidget* w) { w->setParent(this); w->installEventFilter(m_eventFilter); } void CaptureWidget::restoreCircleCountState() { int largest = 0; for (int cnt = 0; cnt < m_captureToolObjects.size(); cnt++) { auto toolItem = m_captureToolObjects.at(cnt); if (toolItem->type() != CaptureTool::TYPE_CIRCLECOUNT) { continue; } if (toolItem->count() > largest) { largest = toolItem->count(); } } m_context.circleCount = largest + 1; } /** * @brief Wrapper around `new QShortcut`, properly handling Enter/Return. */ QList CaptureWidget::newShortcut(const QKeySequence& key, QWidget* parent, const char* slot) { QList shortcuts; QString strKey = key.toString(); if (strKey.contains("Enter") || strKey.contains("Return")) { strKey.replace("Enter", "Return"); shortcuts << new QShortcut(strKey, parent, slot); strKey.replace("Return", "Enter"); shortcuts << new QShortcut(strKey, parent, slot); } else { shortcuts << new QShortcut(key, parent, slot); } return shortcuts; } void CaptureWidget::togglePanel() { m_panel->toggle(); } void CaptureWidget::childEnter() { m_previewEnabled = false; updateTool(activeButtonTool()); } void CaptureWidget::childLeave() { m_previewEnabled = true; updateTool(activeButtonTool()); } void CaptureWidget::setCaptureToolObjects( const CaptureToolObjects& captureToolObjects) { // Used for undo/redo m_captureToolObjects = captureToolObjects; drawToolsData(); updateLayersPanel(); drawObjectSelection(); } void CaptureWidget::undo() { if (m_activeTool && (m_activeTool->isChanged() || m_activeTool->editMode())) { // Remove selection on undo, at the same time commit current tool will // be called m_panel->setActiveLayer(-1); } // drawToolsData is called twice to update both previous and new regions // FIXME this is a temporary workaround drawToolsData(); m_undoStack.undo(); drawToolsData(); updateLayersPanel(); restoreCircleCountState(); } void CaptureWidget::redo() { // drawToolsData is called twice to update both previous and new regions // FIXME this is a temporary workaround drawToolsData(); m_undoStack.redo(); drawToolsData(); update(); updateLayersPanel(); restoreCircleCountState(); } void CaptureWidget::cancel() { if (m_activeButton != nullptr) { uncheckActiveTool(); } if (m_panel) { m_panel->setActiveLayer(-1); } if (m_toolWidget) { m_toolWidget->hide(); delete m_toolWidget; m_toolWidget = nullptr; } m_selection->hide(); emit m_selection->geometrySettled(); } QRect CaptureWidget::extendedSelection() const { if (m_selection == nullptr) { return {}; } QRect r = m_selection->geometry(); return extendedRect(r); } QRect CaptureWidget::extendedRect(const QRect& r) const { auto devicePixelRatio = m_context.screenshot.devicePixelRatio(); return { static_cast(r.left() * devicePixelRatio), static_cast(r.top() * devicePixelRatio), static_cast(r.width() * devicePixelRatio), static_cast(r.height() * devicePixelRatio) }; } QRect CaptureWidget::paddedUpdateRect(const QRect& r) const { if (r.isNull()) { return r; } else { return r + QMargins(20, 20, 20, 20); } } void CaptureWidget::drawErrorMessage(const QString& msg, QPainter* painter) { auto textRect = painter->fontMetrics().boundingRect(msg); int w = textRect.width(), h = textRect.height(); textRect = { size().width() - w - 10, size().height() - h - 5, w + 100, h + 100 }; QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); if (!textRect.contains(QCursor::pos(currentScreen))) { QColor textColor(Qt::white); painter->setPen(textColor); painter->drawText(textRect, msg); } } void CaptureWidget::drawInactiveRegion(QPainter* painter) { QColor overlayColor(0, 0, 0, m_opacity); painter->setBrush(overlayColor); QRect r; if (m_selection->isVisible()) { r = m_selection->geometry().normalized(); } QRegion grey(rect()); grey = grey.subtracted(r); painter->setClipRegion(grey); painter->drawRect(-1, -1, rect().width() + 1, rect().height() + 1); } ================================================ FILE: src/widgets/capture/capturewidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // Based on Lightscreen areadialog.h, Copyright 2017 Christian Kaiser // released under the GNU GPL2 // // Based on KDE's KSnapshot regiongrabber.cpp, revision 796531, Copyright 2007 // Luca Gugelmann released under the GNU LGPL // #pragma once #include "buttonhandler.h" #include "capturetoolbutton.h" #include "capturetoolobjects.h" #include "src/config/generalconf.h" #include "src/tools/capturecontext.h" #include "src/tools/capturetool.h" #include "src/utils/confighandler.h" #include "src/widgets/capture/magnifierwidget.h" #include "src/widgets/capture/selectionwidget.h" #include #include #include #include #include class QLabel; class QPaintEvent; class QResizeEvent; class QMouseEvent; class QShortcut; class QNetworkAccessManager; class QNetworkReply; class ColorPicker; class NotifierBox; class HoverEventFilter; #if !defined(DISABLE_UPDATE_CHECKER) class UpdateNotificationWidget; #endif class UtilityPanel; class SidePanelWidget; class CaptureWidget : public QWidget { Q_OBJECT public: explicit CaptureWidget(const CaptureRequest& req, bool fullScreen = true, QWidget* parent = nullptr); ~CaptureWidget(); QPixmap pixmap(); void setCaptureToolObjects(const CaptureToolObjects& captureToolObjects); #if !defined(DISABLE_UPDATE_CHECKER) void showAppUpdateNotification(const QString& appLatestVersion, const QString& appLatestUrl); #endif public slots: bool commitCurrentTool(); void deleteToolWidgetOrClose(); signals: void colorChanged(const QColor& c); void toolSizeChanged(int size); private slots: void undo(); void redo(); void cancel(); void togglePanel(); void childEnter(); void childLeave(); void deleteCurrentTool(); void setState(CaptureToolButton* b); void handleToolSignal(CaptureTool::Request r); void handleButtonLeftClick(CaptureToolButton* b); void handleButtonRightClick(CaptureToolButton* b); void setDrawColor(const QColor& c); void onToolSizeChanged(int size); void onToolSizeSettled(int size); void updateActiveLayer(int layer); void onMoveCaptureToolUp(int captureToolIndex); void onMoveCaptureToolDown(int captureToolIndex); void selectAll(); void xywhTick(); void onDisplayGridChanged(bool display); void onGridSizeChanged(int size); void startColorGrab(); public: void removeToolObject(int index = -1); void showxywh(); protected: void paintEvent(QPaintEvent* paintEvent) override; void mousePressEvent(QMouseEvent* mouseEvent) override; void mouseMoveEvent(QMouseEvent* mouseEvent) override; void mouseReleaseEvent(QMouseEvent* mouseEvent) override; void mouseDoubleClickEvent(QMouseEvent* event) override; void keyPressEvent(QKeyEvent* keyEvent) override; void keyReleaseEvent(QKeyEvent* keyEvent) override; void wheelEvent(QWheelEvent* wheelEvent) override; void resizeEvent(QResizeEvent* resizeEvent) override; void moveEvent(QMoveEvent* moveEvent) override; void changeEvent(QEvent* changeEvent) override; void closeEvent(QCloseEvent* event) override; private: void pushObjectsStateToUndoStack(); void releaseActiveTool(); void uncheckActiveTool(); int selectToolItemAtPos(const QPoint& pos); void showColorPicker(const QPoint& pos); bool startDrawObjectTool(const QPoint& pos); QPointer activeToolObject(); void initContext(bool fullscreen, const CaptureRequest& req); void initPanel(); void initSelection(); void initShortcuts(); void initButtons(); void initHelpMessage(); void initQuitPrompt(); void updateSizeIndicator(); void updateCursor(); void updateSelectionState(); void updateTool(CaptureTool* tool); void updateLayersPanel(); bool promptQuit(); void pushToolToStack(); void makeChild(QWidget* w); void restoreCircleCountState(); QList newShortcut(const QKeySequence& key, QWidget* parent, const char* slot); void setToolSize(int size); QRect extendedSelection() const; QRect extendedRect(const QRect& r) const; QRect paddedUpdateRect(const QRect& r) const; void drawErrorMessage(const QString& msg, QPainter* painter); void drawInactiveRegion(QPainter* painter); void drawToolsData(bool drawSelection = true); void drawObjectSelection(); void processPixmapWithTool(QPixmap* pixmap, CaptureTool* tool); CaptureTool* activeButtonTool() const; CaptureTool::Type activeButtonToolType() const; QPoint snapToGrid(const QPoint& point) const; //////////////////////////////////////// // Class members // Context information CaptureContext m_context; // Main ui color QColor m_uiColor; // Secondary ui color QColor m_contrastUiColor; // Outside selection opacity int m_opacity; int m_toolSizeByKeyboard; // utility flags bool m_mouseIsClicked; bool m_newSelection; bool m_movingSelection; bool m_captureDone; bool m_previewEnabled; bool m_adjustmentButtonPressed; bool m_configError; bool m_configErrorResolved; #if !defined(DISABLE_UPDATE_CHECKER) UpdateNotificationWidget* m_updateNotificationWidget; #endif quint64 m_lastMouseWheel; QPointer m_sizeIndButton; // Last pressed button QPointer m_activeButton; QPointer m_activeTool; bool m_activeToolIsMoved; QPointer m_toolWidget; QPointer m_quitPrompt; ButtonHandler* m_buttonHandler; UtilityPanel* m_panel; SidePanelWidget* m_sidePanel; ColorPicker* m_colorPicker; ConfigHandler m_config; NotifierBox* m_notifierBox; HoverEventFilter* m_eventFilter; SelectionWidget* m_selection; MagnifierWidget* m_magnifier; QString m_helpMessage; SelectionWidget::SideType m_mouseOverHandle; QMap m_tools; CaptureToolObjects m_captureToolObjects; CaptureToolObjects m_captureToolObjectsBackup; QPoint m_mousePressedPos; QPoint m_activeToolOffsetToMouseOnStart; // XYWH display position and timer bool m_xywhDisplay; QTimer m_xywhTimer; QUndoStack m_undoStack; bool m_existingObjectIsChanged; // For start moving after more than X offset QPoint m_startMovePos; bool m_startMove; // Grid bool m_displayGrid{ false }; int m_gridSize{ 10 }; bool m_clipboardWorkaroundDone{ false }; }; ================================================ FILE: src/widgets/capture/colorpicker.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "colorpicker.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include ColorPicker::ColorPicker(QWidget* parent) : ColorPickerWidget(parent) { setMouseTracking(true); ConfigHandler config; QColor drawColor = config.drawColor(); for (int i = 0; i < m_colorList.size(); ++i) { if (m_colorList.at(i) == drawColor) { m_selectedIndex = i; m_lastIndex = i; break; } } } void ColorPicker::setNewColor() { emit colorSelected(m_colorList.at(m_selectedIndex)); } void ColorPicker::mouseMoveEvent(QMouseEvent* e) { for (int i = 0; i < m_colorList.size(); ++i) { if (m_colorAreaList.at(i).contains(e->pos())) { m_selectedIndex = i; update(m_colorAreaList.at(i) + QMargins(10, 10, 10, 10)); update(m_colorAreaList.at(m_lastIndex) + QMargins(10, 10, 10, 10)); m_lastIndex = i; break; } } } void ColorPicker::showEvent(QShowEvent* event) { grabMouse(); } void ColorPicker::hideEvent(QHideEvent* event) { releaseMouse(); } ================================================ FILE: src/widgets/capture/colorpicker.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/widgets/colorpickerwidget.h" class ColorPicker : public ColorPickerWidget { Q_OBJECT public: explicit ColorPicker(QWidget* parent = nullptr); void setNewColor(); signals: void colorSelected(QColor c); protected: void showEvent(QShowEvent* event) override; void hideEvent(QHideEvent* event) override; void mouseMoveEvent(QMouseEvent* e) override; }; ================================================ FILE: src/widgets/capture/hovereventfilter.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // Based on Lightscreen areadialog.h, Copyright 2017 Christian Kaiser // released under the GNU GPL2 // // Based on KDE's KSnapshot regiongrabber.cpp, revision 796531, Copyright 2007 // Luca Gugelmann released under the GNU LGPL // #include "hovereventfilter.h" #include HoverEventFilter::HoverEventFilter(QObject* parent) : QObject(parent) {} bool HoverEventFilter::eventFilter(QObject* watched, QEvent* event) { QEvent::Type t = event->type(); switch (t) { case QEvent::Enter: emit hoverIn(watched); break; case QEvent::Leave: emit hoverOut(watched); break; default: break; } return false; } ================================================ FILE: src/widgets/capture/hovereventfilter.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // Based on Lightscreen areadialog.h, Copyright 2017 Christian Kaiser // released under the GNU GPL2 // // Based on KDE's KSnapshot regiongrabber.cpp, revision 796531, Copyright 2007 // Luca Gugelmann released under the GNU LGPL // #pragma once #include class HoverEventFilter : public QObject { Q_OBJECT public: explicit HoverEventFilter(QObject* parent = nullptr); signals: void hoverIn(QObject*); void hoverOut(QObject*); protected: bool eventFilter(QObject* watched, QEvent* event); }; ================================================ FILE: src/widgets/capture/magnifierwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "magnifierwidget.h" #include #include #include #include #include #include #include MagnifierWidget::MagnifierWidget(const QPixmap& p, const QColor& c, bool isSquare, QWidget* parent) : QWidget(parent) , m_color(c) , m_borderColor(c) , m_screenshot(p) , m_square(isSquare) { setFixedSize(parent->width(), parent->height()); setAttribute(Qt::WA_TransparentForMouseEvents); m_color.setAlpha(130); // add padding for circular magnifier QImage padded(p.width() + 2 * m_magPixels, p.height() + 2 * m_magPixels, QImage::Format_ARGB32); padded.fill(Qt::black); QPainter painter(&padded); painter.drawPixmap(m_magPixels, m_magPixels, p); m_paddedScreenshot.convertFromImage(padded); } void MagnifierWidget::paintEvent(QPaintEvent*) { QPainter p(this); if (!p.isActive()) { return; } if (m_square) { drawMagnifier(p); } else { drawMagnifierCircle(p); } } void MagnifierWidget::drawMagnifierCircle(QPainter& painter) { auto relativeCursor = QCursor::pos(); auto translated = QWidget::mapFromGlobal(relativeCursor); auto x = translated.x() + m_magPixels; auto y = translated.y() + m_magPixels; int magX = static_cast(x * m_devicePixelRatio - m_magPixels); int magY = static_cast(y * m_devicePixelRatio - m_magPixels); QRectF magniRect(magX, magY, m_pixels, m_pixels); qreal drawPosX = x + m_magOffset + m_pixels * magZoom / 2; if (drawPosX > width() - m_pixels * magZoom / 2) { drawPosX = x - m_magOffset - m_pixels * magZoom / 2; } qreal drawPosY = y + m_magOffset + m_pixels * magZoom / 2; if (drawPosY > height() - m_pixels * magZoom / 2) { drawPosY = y - m_magOffset - m_pixels * magZoom / 2; } QPointF drawPos(drawPosX, drawPosY); QRectF crossHairTop(drawPos.x() + magZoom * (-0.5), drawPos.y() - magZoom * (m_magPixels + 0.5), magZoom, magZoom * (m_magPixels)); QRectF crossHairRight(drawPos.x() + magZoom * (0.5), drawPos.y() + magZoom * (-0.5), magZoom * (m_magPixels), magZoom); QRectF crossHairBottom(drawPos.x() + magZoom * (-0.5), drawPos.y() + magZoom * (0.5), magZoom, magZoom * (m_magPixels)); QRectF crossHairLeft(drawPos.x() - magZoom * (m_magPixels + 0.5), drawPos.y() + magZoom * (-0.5), magZoom * (m_magPixels), magZoom); const auto frag = QPainter::PixmapFragment::create(drawPos, magniRect, magZoom, magZoom); painter.setRenderHint(QPainter::Antialiasing, true); QPainterPath path = QPainterPath(); path.addEllipse(drawPos, m_pixels * magZoom / 2, m_pixels * magZoom / 2); painter.setClipPath(path); painter.drawPixmapFragments( &frag, 1, m_paddedScreenshot, QPainter::OpaqueHint); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); for (const auto& rect : { crossHairTop, crossHairRight, crossHairBottom, crossHairLeft }) { painter.fillRect(rect, m_color); } QPen pen(m_borderColor); pen.setWidth(4); painter.setPen(pen); painter.drawEllipse( drawPos, m_pixels * magZoom / 2, m_pixels * magZoom / 2); } // https://invent.kde.org/graphics/spectacle/-/blob/master/src/QuickEditor/QuickEditor.cpp#L841 void MagnifierWidget::drawMagnifier(QPainter& painter) { auto relativeCursor = QCursor::pos(); auto translated = QWidget::mapFromGlobal(relativeCursor); auto x = translated.x(); auto y = translated.y(); int magX = static_cast(x * m_devicePixelRatio - m_magPixels); int offsetX = 0; if (magX < 0) { offsetX = magX; magX = 0; } else { const int maxX = m_screenshot.width() - m_pixels; if (magX > maxX) { offsetX = magX - maxX; magX = maxX; } } int magY = static_cast(y * m_devicePixelRatio - m_magPixels); int offsetY = 0; if (magY < 0) { offsetY = magY; magY = 0; } else { const int maxY = m_screenshot.height() - m_pixels; if (magY > maxY) { offsetY = magY - maxY; magY = maxY; } } QRectF magniRect(magX, magY, m_pixels, m_pixels); qreal drawPosX = x + m_magOffset + m_pixels * magZoom / 2; if (drawPosX > width() - m_pixels * magZoom / 2) { drawPosX = x - m_magOffset - m_pixels * magZoom / 2; } qreal drawPosY = y + m_magOffset + m_pixels * magZoom / 2; if (drawPosY > height() - m_pixels * magZoom / 2) { drawPosY = y - m_magOffset - m_pixels * magZoom / 2; } QPointF drawPos(drawPosX, drawPosY); QRectF crossHairTop(drawPos.x() + magZoom * (offsetX - 0.5), drawPos.y() - magZoom * (m_magPixels + 0.5), magZoom, magZoom * (m_magPixels + offsetY)); QRectF crossHairRight(drawPos.x() + magZoom * (0.5 + offsetX), drawPos.y() + magZoom * (offsetY - 0.5), magZoom * (m_magPixels - offsetX), magZoom); QRectF crossHairBottom(drawPos.x() + magZoom * (offsetX - 0.5), drawPos.y() + magZoom * (0.5 + offsetY), magZoom, magZoom * (m_magPixels - offsetY)); QRectF crossHairLeft(drawPos.x() - magZoom * (m_magPixels + 0.5), drawPos.y() + magZoom * (offsetY - 0.5), magZoom * (m_magPixels + offsetX), magZoom); QRectF crossHairBorder(drawPos.x() - magZoom * (m_magPixels + 0.5) - 1, drawPos.y() - magZoom * (m_magPixels + 0.5) - 1, m_pixels * magZoom + 2, m_pixels * magZoom + 2); const auto frag = QPainter::PixmapFragment::create(drawPos, magniRect, magZoom, magZoom); painter.fillRect(crossHairBorder, m_borderColor); painter.drawPixmapFragments(&frag, 1, m_screenshot, QPainter::OpaqueHint); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); for (const auto& rect : { crossHairTop, crossHairRight, crossHairBottom, crossHairLeft }) { painter.fillRect(rect, m_color); } } ================================================ FILE: src/widgets/capture/magnifierwidget.h ================================================ #pragma once #include class QPropertyAnimation; class MagnifierWidget : public QWidget { Q_OBJECT public: explicit MagnifierWidget(const QPixmap& p, const QColor& c, bool isSquare, QWidget* parent = nullptr); protected: void paintEvent(QPaintEvent*) override; private: const int m_magPixels = 8; const int m_magOffset = 16; const int magZoom = 10; const int m_pixels = 2 * m_magPixels + 1; const int m_devicePixelRatio = 1; bool m_square; QColor m_color; QColor m_borderColor; QPixmap m_screenshot; QPixmap m_paddedScreenshot; void drawMagnifier(QPainter& painter); void drawMagnifierCircle(QPainter& painter); }; ================================================ FILE: src/widgets/capture/modificationcommand.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "modificationcommand.h" #include "capturewidget.h" ModificationCommand::ModificationCommand( CaptureWidget* captureWidget, const CaptureToolObjects& captureToolObjects, const CaptureToolObjects& captureToolObjectsBackup) : m_captureWidget(captureWidget) { m_captureToolObjects = captureToolObjects; m_captureToolObjectsBackup = captureToolObjectsBackup; } void ModificationCommand::undo() { m_captureWidget->setCaptureToolObjects(m_captureToolObjectsBackup); } void ModificationCommand::redo() { m_captureWidget->setCaptureToolObjects(m_captureToolObjects); } ================================================ FILE: src/widgets/capture/modificationcommand.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "capturetoolobjects.h" #include #ifndef FLAMESHOT_MODIFICATIONCOMMAND_H #define FLAMESHOT_MODIFICATIONCOMMAND_H class CaptureWidget; class ModificationCommand : public QUndoCommand { public: ModificationCommand(CaptureWidget* captureWidget, const CaptureToolObjects& captureToolObjects, const CaptureToolObjects& captureToolObjectsBackup); virtual void undo() override; virtual void redo() override; private: CaptureToolObjects m_captureToolObjects; CaptureToolObjects m_captureToolObjectsBackup; CaptureWidget* m_captureWidget; }; #endif // FLAMESHOT_MODIFICATIONCOMMAND_H ================================================ FILE: src/widgets/capture/notifierbox.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "notifierbox.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include #include NotifierBox::NotifierBox(QWidget* parent) : QWidget(parent) { m_timer = new QTimer(this); m_timer->setSingleShot(true); m_timer->setInterval(600); connect(m_timer, &QTimer::timeout, this, &NotifierBox::hide); m_bgColor = ConfigHandler().uiColor(); m_foregroundColor = (ColorUtils::colorIsDark(m_bgColor) ? Qt::white : Qt::black); m_bgColor.setAlpha(180); const int size = (GlobalValues::buttonBaseSize() + GlobalValues::buttonBaseSize() / 2) * qApp->devicePixelRatio(); setFixedSize(QSize(size, size)); } void NotifierBox::enterEvent(QEnterEvent*) { hide(); } void NotifierBox::paintEvent(QPaintEvent*) { QPainter painter(this); if (!painter.isActive()) { return; } // draw Ellipse painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(m_bgColor, Qt::SolidPattern)); painter.setPen(QPen(Qt::transparent)); painter.drawEllipse(rect()); // Draw the text: painter.setPen(QPen(m_foregroundColor)); painter.drawText(rect(), Qt::AlignCenter, m_message); } void NotifierBox::showMessage(const QString& msg) { m_message = msg; update(); show(); m_timer->start(); } void NotifierBox::showColor(const QColor& color) { Q_UNUSED(color) m_message = QLatin1String(""); } void NotifierBox::hideEvent(QHideEvent* event) { emit hidden(); } ================================================ FILE: src/widgets/capture/notifierbox.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QTimer; class NotifierBox : public QWidget { Q_OBJECT public: explicit NotifierBox(QWidget* parent = nullptr); protected: void enterEvent(QEnterEvent*) override; virtual void paintEvent(QPaintEvent*) override; signals: void hidden(); public slots: void showMessage(const QString& msg); void showColor(const QColor& color); private: QTimer* m_timer; QString m_message; QColor m_bgColor; QColor m_foregroundColor; void hideEvent(QHideEvent* event) override; }; ================================================ FILE: src/widgets/capture/overlaymessage.cpp ================================================ #include "overlaymessage.h" #include "colorutils.h" #include "confighandler.h" #include #include #include #include #include #include OverlayMessage::OverlayMessage(QWidget* parent, const QRect& targetArea) : QLabel(parent) , m_targetArea(targetArea) { // NOTE: do not call the static functions from the constructor m_instance = this; m_messageStack.push(QString()); // Default message is empty setAttribute(Qt::WA_TransparentForMouseEvents); setAttribute(Qt::WA_AlwaysStackOnTop); setAlignment(Qt::AlignCenter); setTextFormat(Qt::RichText); m_fillColor = ConfigHandler().uiColor(); int opacity = ConfigHandler().contrastOpacity(); m_textColor = (ColorUtils::colorIsDark(m_fillColor) ? Qt::white : Qt::black); // map a background opacity range 0-255 to a fill opacity range 190-160 // we do this because an opaque background makes the box look opaque too m_fillColor.setAlpha(160 + (180 - 220) / (255.0 - 0) * (opacity - 255)); setStyleSheet( QStringLiteral("QLabel { color: %1; }").arg(m_textColor.name())); setMargin(QFontMetrics(qApp->font()).height() / 2); QWidget::hide(); } void OverlayMessage::init(QWidget* parent, const QRect& targetArea) { new OverlayMessage(parent, targetArea); } /** * @brief Push a message to the message stack. * @param msg Message text formatted as rich text */ void OverlayMessage::push(const QString& msg) { m_instance->m_messageStack.push(msg); m_instance->setText(m_instance->m_messageStack.top()); setVisibility(true); } void OverlayMessage::pop() { if (m_instance->m_messageStack.size() > 1) { m_instance->m_messageStack.pop(); } m_instance->setText(m_instance->m_messageStack.top()); setVisibility(m_instance->m_messageStack.size() > 1); } void OverlayMessage::setVisibility(bool visible) { m_instance->updateGeometry(); m_instance->setVisible(visible); } OverlayMessage* OverlayMessage::instance() { return m_instance; } void OverlayMessage::pushKeyMap(const QList>& map) { push(compileFromKeyMap(map)); } /** * @brief Compile a message from a set of shortcuts and descriptions. * @param map List of (shortcut, description) pairs */ QString OverlayMessage::compileFromKeyMap( const QList>& map) { QString str = QStringLiteral(""); for (const auto& pair : map) { str += QStringLiteral("" "" "" "") .arg(pair.first, pair.second); } str += QStringLiteral("
    %1   %2
    "); return str; } void OverlayMessage::paintEvent(QPaintEvent* e) { QPainter painter(this); if (!painter.isActive()) return; painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(m_fillColor, Qt::SolidPattern)); painter.setPen(QPen(m_textColor, 1.5)); float margin = painter.pen().widthF(); painter.drawRoundedRect( rect() - QMarginsF(margin, margin, margin, margin), 5, 5); return QLabel::paintEvent(e); } QRect OverlayMessage::boundingRect() const { QRect geom = QRect(QPoint(), sizeHint()); geom.moveCenter(m_targetArea.center()); return geom; } void OverlayMessage::updateGeometry() { setGeometry(boundingRect()); QLabel::updateGeometry(); } OverlayMessage* OverlayMessage::m_instance = nullptr; ================================================ FILE: src/widgets/capture/overlaymessage.h ================================================ #pragma once #include #include /** * @brief Overlay a message in capture mode. * * The message must be initialized by calling `init` before it can be used. That * can be done once per capture session. The class is a singleton. * * To change the active message call `push`. This will automatically show the * widget. Previous messages won't be forgotten and will be reactivated after * you call `pop`. You can show/hide the message using `setVisibility` (this * won't push/pop anything). * * @note You have to make sure that widgets pop the messages they pushed when * they are closed, to avoid potential bugs and resource leaks. */ class OverlayMessage : public QLabel { public: OverlayMessage() = delete; static void init(QWidget* parent, const QRect& targetArea); static void push(const QString& msg); static void pop(); static void setVisibility(bool visible); static OverlayMessage* instance(); static void pushKeyMap(const QList>& map); static QString compileFromKeyMap(const QList>& map); private: QStack m_messageStack; QRect m_targetArea; QColor m_fillColor, m_textColor; static OverlayMessage* m_instance; OverlayMessage(QWidget* parent, const QRect& center); void paintEvent(QPaintEvent*) override; QRect boundingRect() const; void updateGeometry(); }; ================================================ FILE: src/widgets/capture/selectionwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "selectionwidget.h" #include "capturetool.h" #include "capturetoolbutton.h" #include "src/utils/globalvalues.h" #include #include #include #include #include #include #include #define MARGIN (m_THandle.width()) SelectionWidget::SelectionWidget(QColor c, QWidget* parent) : QWidget(parent) , m_color(std::move(c)) , m_activeSide(NO_SIDE) , m_ignoreMouse(false) { // prevents this widget from consuming CaptureToolButton mouse events setAttribute(Qt::WA_TransparentForMouseEvents); parent->installEventFilter(this); m_animation = new QPropertyAnimation(this, "geometry", this); m_animation->setEasingCurve(QEasingCurve::InOutQuad); m_animation->setDuration(200); connect(m_animation, &QPropertyAnimation::finished, this, [this]() { emit geometrySettled(); }); int sideVal = GlobalValues::buttonBaseSize() * 0.6; int handleSide = sideVal / 2; const QRect areaRect(0, 0, sideVal, sideVal); const QRect handleRect(0, 0, handleSide, handleSide); m_TLHandle = m_TRHandle = m_BLHandle = m_BRHandle = m_LHandle = m_THandle = m_RHandle = m_BHandle = handleRect; m_TLArea = m_TRArea = m_BLArea = m_BRArea = areaRect; m_areaOffset = QPoint(-sideVal / 2, -sideVal / 2); m_handleOffset = QPoint(-handleSide / 2, -handleSide / 2); } /** * @brief Get the side where the mouse cursor is. * @param mousePos Mouse cursor position relative to the parent widget. */ SelectionWidget::SideType SelectionWidget::getMouseSide( const QPoint& mousePos) const { if (!isVisible()) { return NO_SIDE; } QPoint localPos = mapFromParent(mousePos); if (m_TLArea.contains(localPos)) { return TOPLEFT_SIDE; } else if (m_TRArea.contains(localPos)) { return TOPRIGHT_SIDE; } else if (m_BLArea.contains(localPos)) { return BOTTOMLEFT_SIDE; } else if (m_BRArea.contains(localPos)) { return BOTTOMRIGHT_SIDE; } else if (m_LArea.contains(localPos)) { return LEFT_SIDE; } else if (m_TArea.contains(localPos)) { return TOP_SIDE; } else if (m_RArea.contains(localPos)) { return RIGHT_SIDE; } else if (m_BArea.contains(localPos)) { return BOTTOM_SIDE; } else if (rect().contains(localPos)) { return CENTER; } else { return NO_SIDE; } } QVector SelectionWidget::handlerAreas() { QVector areas; areas << m_TLHandle << m_TRHandle << m_BLHandle << m_BRHandle << m_LHandle << m_THandle << m_RHandle << m_BHandle; return areas; } // helper function SelectionWidget::SideType getProperSide(SelectionWidget::SideType side, const QRect& r) { using SideType = SelectionWidget::SideType; int intSide = side; if (r.right() < r.left()) { intSide ^= SideType::LEFT_SIDE; intSide ^= SideType::RIGHT_SIDE; } if (r.bottom() < r.top()) { intSide ^= SideType::TOP_SIDE; intSide ^= SideType::BOTTOM_SIDE; } return (SideType)intSide; } void SelectionWidget::setIgnoreMouse(bool ignore) { m_ignoreMouse = ignore; updateCursor(); } /** * Set the cursor that will be active when the mouse is inside the selection and * the mouse is not clicked. */ void SelectionWidget::setIdleCentralCursor(const QCursor& cursor) { m_idleCentralCursor = cursor; } void SelectionWidget::setGeometryAnimated(const QRect& r) { if (isVisible()) { m_animation->setStartValue(geometry()); m_animation->setEndValue(r); m_animation->start(); } } void SelectionWidget::setGeometry(const QRect& r) { QWidget::setGeometry(r + QMargins(MARGIN, MARGIN, MARGIN, MARGIN)); updateCursor(); if (isVisible()) { emit geometryChanged(); } } QRect SelectionWidget::geometry() const { return QWidget::geometry() - QMargins(MARGIN, MARGIN, MARGIN, MARGIN); } QRect SelectionWidget::fullGeometry() const { return QWidget::geometry(); } QRect SelectionWidget::rect() const { return QWidget::rect() - QMargins(MARGIN, MARGIN, MARGIN, MARGIN); } bool SelectionWidget::eventFilter(QObject* obj, QEvent* event) { if (m_ignoreMouse && dynamic_cast(event)) { m_activeSide = NO_SIDE; unsetCursor(); } else if (event->type() == QEvent::MouseButtonRelease) { parentMouseReleaseEvent(static_cast(event)); } else if (event->type() == QEvent::MouseButtonPress) { parentMousePressEvent(static_cast(event)); } else if (event->type() == QEvent::MouseMove) { parentMouseMoveEvent(static_cast(event)); } return false; } void SelectionWidget::parentMousePressEvent(QMouseEvent* e) { if (e->button() != Qt::LeftButton) { return; } m_dragStartPos = e->pos(); m_activeSide = getMouseSide(e->pos()); } void SelectionWidget::parentMouseReleaseEvent(QMouseEvent* e) { // released outside of the selection area if (!getMouseSide(e->pos())) { hide(); } m_activeSide = NO_SIDE; updateCursor(); emit geometrySettled(); } void SelectionWidget::parentMouseMoveEvent(QMouseEvent* e) { updateCursor(); if (e->buttons() != Qt::LeftButton) { return; } SideType mouseSide = m_activeSide; if (!m_activeSide) { mouseSide = getMouseSide(e->pos()); } QPoint pos; if (!isVisible() || !mouseSide) { show(); m_activeSide = TOPLEFT_SIDE; pos = m_dragStartPos; setGeometry({ pos, pos }); } else { pos = e->pos(); } auto geom = geometry(); float aspectRatio = (float)geom.width() / (float)geom.height(); bool symmetryMod = qApp->keyboardModifiers() & Qt::ShiftModifier; bool preserveAspect = qApp->keyboardModifiers() & Qt::ControlModifier; QPoint newTopLeft = geom.topLeft(), newBottomRight = geom.bottomRight(); int oldLeft = newTopLeft.rx(), oldRight = newBottomRight.rx(), oldTop = newTopLeft.ry(), oldBottom = newBottomRight.ry(); int &newLeft = newTopLeft.rx(), &newRight = newBottomRight.rx(), &newTop = newTopLeft.ry(), &newBottom = newBottomRight.ry(); switch (mouseSide) { case TOPLEFT_SIDE: if (m_activeSide) { if (preserveAspect) { if ((float)(oldRight - pos.x()) / (float)(oldBottom - pos.y()) > aspectRatio) { /* width longer than expected width, hence increase * height to compensate for the aspect ratio */ newLeft = pos.x(); newTop = oldBottom - (int)(((float)(oldRight - pos.x())) / aspectRatio); } else { /* height longer than expected height, hence increase * width to compensate for the aspect ratio */ newTop = pos.y(); newLeft = oldRight - (int)(((float)(oldBottom - pos.y())) * aspectRatio); } } else { newTopLeft = pos; } } break; case BOTTOMRIGHT_SIDE: if (m_activeSide) { if (preserveAspect) { if ((float)(pos.x() - oldLeft) / (float)(pos.y() - oldTop) > aspectRatio) { newRight = pos.x(); newBottom = oldTop + (int)(((float)(pos.x() - oldLeft)) / aspectRatio); } else { newBottom = pos.y(); newRight = oldLeft + (int)(((float)(pos.y() - oldTop)) * aspectRatio); } } else { newBottomRight = pos; } } break; case TOPRIGHT_SIDE: if (m_activeSide) { if (preserveAspect) { if ((float)(pos.x() - oldLeft) / (float)(oldBottom - pos.y()) > aspectRatio) { newRight = pos.x(); newTop = oldBottom - (int)(((float)(pos.x() - oldLeft)) / aspectRatio); } else { newTop = pos.y(); newRight = oldLeft + (int)(((float)(oldBottom - pos.y())) * aspectRatio); } } else { newTop = pos.y(); newRight = pos.x(); } } break; case BOTTOMLEFT_SIDE: if (m_activeSide) { if (preserveAspect) { if ((float)(oldRight - pos.x()) / (float)(pos.y() - oldTop) > aspectRatio) { newLeft = pos.x(); newBottom = oldTop + (int)(((float)(oldRight - pos.x())) / aspectRatio); } else { newBottom = pos.y(); newLeft = oldRight - (int)(((float)(pos.y() - oldTop)) * aspectRatio); } } else { newBottom = pos.y(); newLeft = pos.x(); } } break; case LEFT_SIDE: if (m_activeSide) { newLeft = pos.x(); if (preserveAspect) { /* By default bottom edge moves when dragging sides, this * behavior feels natural */ newBottom = oldTop + (int)(((float)(oldRight - pos.x())) / aspectRatio); } } break; case RIGHT_SIDE: if (m_activeSide) { newRight = pos.x(); if (preserveAspect) { newBottom = oldTop + (int)(((float)(pos.x() - oldLeft)) / aspectRatio); } } break; case TOP_SIDE: if (m_activeSide) { newTop = pos.y(); if (preserveAspect) { /* By default right edge moves when dragging sides, this * behavior feels natural */ newRight = oldLeft + (int)(((float)(oldBottom - pos.y()) * aspectRatio)); } } break; case BOTTOM_SIDE: if (m_activeSide) { newBottom = pos.y(); if (preserveAspect) { newRight = oldLeft + (int)(((float)(pos.y() - oldTop) * aspectRatio)); } } break; default: if (m_activeSide) { move(this->pos() + pos - m_dragStartPos); m_dragStartPos = pos; /* do nothing special in case of preserveAspect */ } return; } // finalize geometry change if (m_activeSide) { if (symmetryMod) { QPoint deltaTopLeft = newTopLeft - geom.topLeft(); QPoint deltaBottomRight = newBottomRight - geom.bottomRight(); newTopLeft = geom.topLeft() + deltaTopLeft - deltaBottomRight; newBottomRight = geom.bottomRight() + deltaBottomRight - deltaTopLeft; } geom = { newTopLeft, newBottomRight }; setGeometry(geom.normalized()); m_activeSide = getProperSide(m_activeSide, geom); } m_dragStartPos = e->pos(); } void SelectionWidget::paintEvent(QPaintEvent*) { QPainter p(this); if (!p.isActive()) { return; } p.setPen(m_color); p.drawRect(rect() + QMargins(0, 0, -1, -1)); p.setRenderHint(QPainter::Antialiasing); p.setBrush(m_color); for (auto rectangle : handlerAreas()) { p.drawEllipse(rectangle); } } void SelectionWidget::resizeEvent(QResizeEvent*) { updateAreas(); if (isVisible()) { emit geometryChanged(); } } void SelectionWidget::moveEvent(QMoveEvent*) { updateAreas(); if (isVisible()) { emit geometryChanged(); } } void SelectionWidget::showEvent(QShowEvent*) { emit visibilityChanged(); } void SelectionWidget::hideEvent(QHideEvent*) { emit visibilityChanged(); } void SelectionWidget::updateColor(const QColor& c) { m_color = c; } void SelectionWidget::moveLeft() { setGeometryByKeyboard(geometry().adjusted(-1, 0, -1, 0)); } void SelectionWidget::moveRight() { setGeometryByKeyboard(geometry().adjusted(1, 0, 1, 0)); } void SelectionWidget::moveUp() { setGeometryByKeyboard(geometry().adjusted(0, -1, 0, -1)); } void SelectionWidget::moveDown() { setGeometryByKeyboard(geometry().adjusted(0, 1, 0, 1)); } void SelectionWidget::resizeLeft() { setGeometryByKeyboard(geometry().adjusted(0, 0, -1, 0)); } void SelectionWidget::resizeRight() { setGeometryByKeyboard(geometry().adjusted(0, 0, 1, 0)); } void SelectionWidget::resizeUp() { setGeometryByKeyboard(geometry().adjusted(0, 0, 0, -1)); } void SelectionWidget::resizeDown() { setGeometryByKeyboard(geometry().adjusted(0, 0, 0, 1)); } void SelectionWidget::symResizeLeft() { setGeometryByKeyboard(geometry().adjusted(1, 0, -1, 0)); } void SelectionWidget::symResizeRight() { setGeometryByKeyboard(geometry().adjusted(-1, 0, 1, 0)); } void SelectionWidget::symResizeUp() { setGeometryByKeyboard(geometry().adjusted(0, -1, 0, 1)); } void SelectionWidget::symResizeDown() { setGeometryByKeyboard(geometry().adjusted(0, 1, 0, -1)); } void SelectionWidget::updateAreas() { QRect r = rect(); m_TLArea.moveTo(r.topLeft() + m_areaOffset); m_TRArea.moveTo(r.topRight() + m_areaOffset); m_BLArea.moveTo(r.bottomLeft() + m_areaOffset); m_BRArea.moveTo(r.bottomRight() + m_areaOffset); m_LArea = QRect(m_TLArea.bottomLeft(), m_BLArea.topRight()); m_TArea = QRect(m_TLArea.topRight(), m_TRArea.bottomLeft()); m_RArea = QRect(m_TRArea.bottomLeft(), m_BRArea.topRight()); m_BArea = QRect(m_BLArea.topRight(), m_BRArea.bottomLeft()); m_TLHandle.moveTo(m_TLArea.center() + m_handleOffset); m_BLHandle.moveTo(m_BLArea.center() + m_handleOffset); m_TRHandle.moveTo(m_TRArea.center() + m_handleOffset); m_BRHandle.moveTo(m_BRArea.center() + m_handleOffset); m_LHandle.moveTo(m_LArea.center() + m_handleOffset); m_THandle.moveTo(m_TArea.center() + m_handleOffset); m_RHandle.moveTo(m_RArea.center() + m_handleOffset); m_BHandle.moveTo(m_BArea.center() + m_handleOffset); } void SelectionWidget::updateCursor() { SideType mouseSide = m_activeSide; if (!m_activeSide) { mouseSide = getMouseSide(parentWidget()->mapFromGlobal(QCursor::pos())); } switch (mouseSide) { case TOPLEFT_SIDE: setCursor(Qt::SizeFDiagCursor); break; case BOTTOMRIGHT_SIDE: setCursor(Qt::SizeFDiagCursor); break; case TOPRIGHT_SIDE: setCursor(Qt::SizeBDiagCursor); break; case BOTTOMLEFT_SIDE: setCursor(Qt::SizeBDiagCursor); break; case LEFT_SIDE: setCursor(Qt::SizeHorCursor); break; case RIGHT_SIDE: setCursor(Qt::SizeHorCursor); break; case TOP_SIDE: setCursor(Qt::SizeVerCursor); break; case BOTTOM_SIDE: setCursor(Qt::SizeVerCursor); break; default: if (m_activeSide) { setCursor(Qt::ClosedHandCursor); } else { setCursor(m_idleCentralCursor); return; } break; } } void SelectionWidget::setGeometryByKeyboard(const QRect& r) { static QTimer timer; QRect rectangle = r.intersected(parentWidget()->rect()); if (rectangle.width() <= 0) { rectangle.setWidth(1); } if (rectangle.height() <= 0) { rectangle.setHeight(1); } setGeometry(rectangle); connect(&timer, &QTimer::timeout, this, &SelectionWidget::geometrySettled, Qt::UniqueConnection); timer.start(400); } ================================================ FILE: src/widgets/capture/selectionwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QPropertyAnimation; class SelectionWidget : public QWidget { Q_OBJECT public: enum SideType { NO_SIDE = 0, TOP_SIDE = 0b0001, BOTTOM_SIDE = 0b0010, RIGHT_SIDE = 0b0100, LEFT_SIDE = 0b1000, TOPLEFT_SIDE = TOP_SIDE | LEFT_SIDE, BOTTOMLEFT_SIDE = BOTTOM_SIDE | LEFT_SIDE, TOPRIGHT_SIDE = TOP_SIDE | RIGHT_SIDE, BOTTOMRIGHT_SIDE = BOTTOM_SIDE | RIGHT_SIDE, CENTER = 0b10000, }; explicit SelectionWidget(QColor c, QWidget* parent = nullptr); SideType getMouseSide(const QPoint& mousePos) const; QVector handlerAreas(); void setIgnoreMouse(bool ignore); void setIdleCentralCursor(const QCursor& cursor); void setGeometryAnimated(const QRect& r); void setGeometry(const QRect& r); QRect geometry() const; QRect fullGeometry() const; QRect rect() const; protected: bool eventFilter(QObject*, QEvent*) override; void parentMousePressEvent(QMouseEvent* e); void parentMouseReleaseEvent(QMouseEvent* e); void parentMouseMoveEvent(QMouseEvent* e); void paintEvent(QPaintEvent*) override; void resizeEvent(QResizeEvent*) override; void moveEvent(QMoveEvent*) override; void showEvent(QShowEvent*) override; void hideEvent(QHideEvent*) override; signals: void animationEnded(); void geometryChanged(); void geometrySettled(); void visibilityChanged(); public slots: void updateColor(const QColor& c); void moveLeft(); void moveRight(); void moveUp(); void moveDown(); void resizeLeft(); void resizeRight(); void resizeUp(); void resizeDown(); void symResizeLeft(); void symResizeRight(); void symResizeUp(); void symResizeDown(); private: void updateAreas(); void updateCursor(); void setGeometryByKeyboard(const QRect& r); QPropertyAnimation* m_animation; QColor m_color; QPoint m_areaOffset; QPoint m_handleOffset; QPoint m_dragStartPos; SideType m_activeSide; QCursor m_idleCentralCursor; bool m_ignoreMouse; bool m_mouseStartMove; // naming convention for handles // T top, B bottom, R Right, L left // 2 letters: a corner // 1 letter: the handle on the middle of the corresponding side QRect m_TLHandle, m_TRHandle, m_BLHandle, m_BRHandle; QRect m_LHandle, m_THandle, m_RHandle, m_BHandle; QRect m_TLArea, m_TRArea, m_BLArea, m_BRArea; QRect m_LArea, m_TArea, m_RArea, m_BArea; }; ================================================ FILE: src/widgets/capturelauncher.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2018 Alejandro Sirgo Rica & Contributors #include "capturelauncher.h" #include "./ui_capturelauncher.h" #include "src/config/cacheutils.h" #include "src/core/flameshot.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/globalvalues.h" #include "src/utils/screengrabber.h" #include "src/utils/screenshotsaver.h" #include "src/widgets/imagelabel.h" #include #include #include // https://github.com/KDE/spectacle/blob/941c1a517be82bed25d1254ebd735c29b0d2951c/src/Gui/KSWidget.cpp // https://github.com/KDE/spectacle/blob/941c1a517be82bed25d1254ebd735c29b0d2951c/src/Gui/KSMainWindow.cpp CaptureLauncher::CaptureLauncher(QDialog* parent) : QDialog(parent) , ui(new Ui::CaptureLauncher) , m_countdownTimer(new QTimer(this)) , m_remainingSeconds(0) { qApp->installEventFilter(this); // see eventFilter() ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); setWindowIcon(QIcon(GlobalValues::iconPath())); bool ok; ui->captureType->insertItem( 1, tr("Rectangular Region"), CaptureRequest::GRAPHICAL_MODE); #if defined(Q_OS_MACOS) // Following to MacOS philosophy (one application cannot be displayed on // more than one display) ui->captureType->insertItem( 2, tr("Full Screen (Current Display)"), CaptureRequest::FULLSCREEN_MODE); #else ui->captureType->insertItem( 2, tr("Full Screen"), CaptureRequest::FULLSCREEN_MODE); const QList screens = QGuiApplication::screens(); for (int i = 0; i < screens.size(); ++i) { QScreen* screen = screens[i]; QRect geom = screen->geometry(); QString monitorText = tr("Monitor %1: %2 (%3x%4)") .arg(i + 1) .arg(screen->name()) .arg(geom.width()) .arg(geom.height()); ui->monitorSelection->addItem(monitorText, i); } // Select current screen by default QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); int currentIndex = screens.indexOf(currentScreen); if (currentIndex >= 0) { ui->monitorSelection->setCurrentIndex(currentIndex); } #endif #ifdef Q_OS_MACOS ui->monitorLabel->setVisible(false); ui->monitorSelection->setVisible(false); #else if (screens.size() <= 1) { ui->monitorLabel->setVisible(false); ui->monitorSelection->setVisible(false); } #endif ui->delayTime->setSpecialValueText(tr("No Delay")); ui->launchButton->setFocus(); ui->countdownLabel->setVisible(false); ui->countdownLabel->setStyleSheet( "QLabel { font-size: 24px; font-weight: bold;}"); ui->countdownLabel->setAlignment(Qt::AlignCenter); // Connect countdown timer connect(m_countdownTimer, &QTimer::timeout, this, &CaptureLauncher::updateCountdown); // Function to add or remove plural to seconds connect(ui->delayTime, static_cast(&QSpinBox::valueChanged), this, [this](int val) { QString suffix = val == 1 ? tr(" second") : tr(" seconds"); this->ui->delayTime->setSuffix(suffix); }); connect(ui->launchButton, &QPushButton::clicked, this, &CaptureLauncher::startCapture); connect(ui->captureType, QOverload::of(&QComboBox::currentIndexChanged), this, [this]() { auto mode = static_cast( ui->captureType->currentData().toInt()); if (mode == CaptureRequest::CaptureMode::GRAPHICAL_MODE) { ui->sizeLabel->show(); ui->screenshotX->show(); ui->screenshotY->show(); ui->screenshotWidth->show(); ui->screenshotHeight->show(); } else { ui->sizeLabel->hide(); ui->screenshotX->hide(); ui->screenshotY->hide(); ui->screenshotWidth->hide(); ui->screenshotHeight->hide(); } }); auto lastRegion = getLastRegion(); ui->screenshotX->setText(QString::number(lastRegion.x())); ui->screenshotY->setText(QString::number(lastRegion.y())); ui->screenshotWidth->setText(QString::number(lastRegion.width())); ui->screenshotHeight->setText(QString::number(lastRegion.height())); ui->screenshotWidth->setMaximumWidth(70); ui->screenshotHeight->setMaximumWidth(70); ui->screenshotX->setMaximumWidth(70); ui->screenshotY->setMaximumWidth(70); adjustSize(); show(); // Call show() first, otherwise the correct geometry cannot be fetched // for centering the window on the screen QRect position = frameGeometry(); QScreen* screen = QGuiAppCurrentScreen().currentScreen(); position.moveCenter(screen->availableGeometry().center()); move(position.topLeft()); } // HACK: // https://github.com/KDE/spectacle/blob/fa1e780b8bf3df3ac36c410b9ece4ace041f401b/src/Gui/KSMainWindow.cpp#L70 void CaptureLauncher::startCapture() { ui->launchButton->setEnabled(false); int delaySeconds = ui->delayTime->value(); if (delaySeconds > 0) { m_remainingSeconds = delaySeconds; ui->countdownLabel->setVisible(true); ui->countdownLabel->setText(QString::number(m_remainingSeconds)); m_countdownTimer->start(1000); } else { hide(); } auto const additionalDelayToHideUI = 600; auto const secondsToMilliseconds = 1000; auto mode = static_cast( ui->captureType->currentData().toInt()); CaptureRequest req( mode, additionalDelayToHideUI + delaySeconds * secondsToMilliseconds); if (mode == CaptureRequest::CaptureMode::GRAPHICAL_MODE) { req.setInitialSelection(QRect(ui->screenshotX->text().toInt(), ui->screenshotY->text().toInt(), ui->screenshotWidth->text().toInt(), ui->screenshotHeight->text().toInt())); } #ifndef Q_OS_MACOS int selectedMonitor = ui->monitorSelection->currentData().toInt(); req.setSelectedMonitor(selectedMonitor); #else req.setSelectedMonitor(-1); #endif connectCaptureSlots(); Flameshot::instance()->requestCapture(req); } void CaptureLauncher::connectCaptureSlots() const { connect(Flameshot::instance(), &Flameshot::captureTaken, this, &CaptureLauncher::onCaptureTaken); connect(Flameshot::instance(), &Flameshot::captureFailed, this, &CaptureLauncher::onCaptureFailed); } void CaptureLauncher::disconnectCaptureSlots() const { // Hack for MacOS // for some strange reasons MacOS sends multiple "captureTaken" signals // (random number, usually from 1 up to 20). // So now it enables signal on "Capture new screenshot" button and disables // on first success of fail. disconnect(Flameshot::instance(), &Flameshot::captureTaken, this, &CaptureLauncher::onCaptureTaken); disconnect(Flameshot::instance(), &Flameshot::captureFailed, this, &CaptureLauncher::onCaptureFailed); } void CaptureLauncher::onCaptureTaken(QPixmap const& screenshot) { // MacOS specific, more details in the function disconnectCaptureSlots() disconnectCaptureSlots(); m_countdownTimer->stop(); ui->countdownLabel->setVisible(false); auto mode = static_cast( ui->captureType->currentData().toInt()); if (mode == CaptureRequest::FULLSCREEN_MODE) { saveToFilesystemGUI(screenshot); } ui->launchButton->setEnabled(true); } void CaptureLauncher::onCaptureFailed() { // MacOS specific, more details in the function disconnectCaptureSlots() disconnectCaptureSlots(); m_countdownTimer->stop(); ui->countdownLabel->setVisible(false); show(); ui->launchButton->setEnabled(true); } void CaptureLauncher::updateCountdown() { m_remainingSeconds--; if (m_remainingSeconds > 0) { ui->countdownLabel->setText(QString::number(m_remainingSeconds)); } else { m_countdownTimer->stop(); ui->countdownLabel->setVisible(false); hide(); } } CaptureLauncher::~CaptureLauncher() { delete ui; } ================================================ FILE: src/widgets/capturelauncher.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2018 Alejandro Sirgo Rica & Contributors #pragma once #include #include QT_BEGIN_NAMESPACE namespace Ui { class CaptureLauncher; } QT_END_NAMESPACE class CaptureLauncher : public QDialog { Q_OBJECT public: explicit CaptureLauncher(QDialog* parent = nullptr); ~CaptureLauncher(); private: Ui::CaptureLauncher* ui; QTimer* m_countdownTimer; int m_remainingSeconds; void connectCaptureSlots() const; void disconnectCaptureSlots() const; void updateCountdown(); private slots: void startCapture(); void onCaptureTaken(QPixmap const& p); void onCaptureFailed(); }; ================================================ FILE: src/widgets/capturelauncher.ui ================================================ CaptureLauncher 0 0 0 0 Capture Launcher 4 4 4 4 4 true Capture Mode Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter -1 Area: QComboBox::SizeAdjustPolicy::AdjustToContents Delay: Monitor: 0 0 WxH+x+y seconds 0 999 0 0 0 0 0 0 0 0 0 0 Take new screenshot ================================================ FILE: src/widgets/colorpickerwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2022 Dearsh Oberoi #include "colorpickerwidget.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include ColorPickerWidget::ColorPickerWidget(QWidget* parent) : QWidget(parent) , m_selectedIndex(1) , m_lastIndex(1) { initColorPicker(); } const QVector& ColorPickerWidget::getDefaultSmallColorPalette() { return defaultSmallColorPalette; } const QVector& ColorPickerWidget::getDefaultLargeColorPalette() { return defaultLargeColorPalette; } void ColorPickerWidget::paintEvent(QPaintEvent* e) { QPainter painter(this); if (!painter.isActive()) return; painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QColor(Qt::black)); for (int i = 0; i < m_colorAreaList.size(); ++i) { if (e->region().contains(m_colorAreaList.at(i))) { painter.setClipRegion(e->region()); repaint(i, painter); } } } void ColorPickerWidget::repaint(int i, QPainter& painter) { // draw the highlight when we have to draw the selected color if (i == m_selectedIndex) { auto c = QColor(m_uiColor); c.setAlpha(155); painter.setBrush(c); c.setAlpha(100); painter.setPen(c); QRect highlight = m_colorAreaList.at(i); const int highlightThickness = 6; // makes the highlight and color circles concentric highlight.moveTo(highlight.x() - (highlightThickness / 2), highlight.y() - (highlightThickness / 2)); highlight.setHeight(highlight.height() + highlightThickness); highlight.setWidth(highlight.width() + highlightThickness); painter.drawRoundedRect(highlight, 100, 100); painter.setPen(QColor(Qt::black)); } // draw available colors if (m_colorList.at(i).isValid()) { // draw preset color painter.setBrush(QColor(m_colorList.at(i))); painter.drawRoundedRect(m_colorAreaList.at(i), 100, 100); } else { // draw rainbow (part) for custom color QRect lastRect = m_colorAreaList.at(i); int nStep = 1; int nSteps = lastRect.height() / nStep; // 0.02 - start rainbow color, 0.33 - end rainbow color from range: // 0.0 - 1.0 float h = 0.02f; for (int radius = nSteps; radius > 0; radius -= nStep * 2) { // calculate color float fHStep = (0.33 - h) / (nSteps / nStep / 2); QColor color = QColor::fromHslF(h, 0.95f, 0.5f); // set color and draw circle painter.setPen(color); painter.setBrush(color); painter.drawRoundedRect(lastRect, 100, 100); // set next color, circle geometry h += fHStep; lastRect.setX(lastRect.x() + nStep); lastRect.setY(lastRect.y() + nStep); lastRect.setHeight(lastRect.height() - nStep); lastRect.setWidth(lastRect.width() - nStep); painter.setPen(QColor(Qt::black)); } } } void ColorPickerWidget::updateSelection(int index) { m_selectedIndex = index; update(m_colorAreaList.at(index) + QMargins(10, 10, 10, 10)); update(m_colorAreaList.at(m_lastIndex) + QMargins(10, 10, 10, 10)); m_lastIndex = index; } void ColorPickerWidget::updateWidget() { m_colorAreaList.clear(); initColorPicker(); update(); } void ColorPickerWidget::initColorPicker() { ConfigHandler config; m_colorList = config.userColors(); m_colorAreaSize = GlobalValues::buttonBaseSize() * 0.6; // save the color values in member variables for faster access m_uiColor = config.uiColor(); // extraSize represents the extra space needed for the highlight of the // selected color. const int extraSize = 6; const double slope = 3; double radius = slope * m_colorList.size() + GlobalValues::buttonBaseSize(); setMinimumSize(radius * 2 + m_colorAreaSize + extraSize, radius * 2 + m_colorAreaSize + extraSize); resize(radius * 2 + m_colorAreaSize + extraSize, radius * 2 + m_colorAreaSize + extraSize); double degree = (double)360 / m_colorList.size(); double degreeAcum = 90; // this line is the radius of the circle which will be rotated to add // the color components. QLineF baseLine = QLineF(QPoint(radius + extraSize / 2, radius + extraSize / 2), QPoint(radius + extraSize / 2, extraSize / 2)); for (int i = 0; i < m_colorList.size(); ++i) { m_colorAreaList.append(QRect( baseLine.x2(), baseLine.y2(), m_colorAreaSize, m_colorAreaSize)); degreeAcum += degree; baseLine.setAngle(degreeAcum); } } QVector ColorPickerWidget::defaultSmallColorPalette = { QColor(), Qt::darkRed, Qt::red, Qt::yellow, Qt::green, Qt::darkGreen, Qt::cyan, Qt::blue, Qt::magenta, Qt::darkMagenta }; QVector ColorPickerWidget::defaultLargeColorPalette = { QColor(), Qt::white, Qt::red, Qt::green, Qt::blue, Qt::black, Qt::darkRed, Qt::darkGreen, Qt::darkBlue, Qt::darkGray, Qt::cyan, Qt::magenta, Qt::yellow, Qt::lightGray, Qt::darkCyan, Qt::darkMagenta, Qt::darkYellow }; ================================================ FILE: src/widgets/colorpickerwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2022 Dearsh Oberoi #pragma once #include class ColorPickerWidget : public QWidget { Q_OBJECT public: explicit ColorPickerWidget(QWidget* parent = nullptr); static const QVector& getDefaultSmallColorPalette(); static const QVector& getDefaultLargeColorPalette(); void updateWidget(); void updateSelection(int index); protected: void paintEvent(QPaintEvent* event) override; void repaint(int i, QPainter& painter); int m_colorAreaSize; int m_selectedIndex, m_lastIndex; QVector m_colorAreaList; QVector m_colorList; QColor m_uiColor; private: void initColorPicker(); static QVector defaultSmallColorPalette, defaultLargeColorPalette; }; ================================================ FILE: src/widgets/draggablewidgetmaker.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "draggablewidgetmaker.h" #include DraggableWidgetMaker::DraggableWidgetMaker(QObject* parent) : QObject(parent) {} void DraggableWidgetMaker::makeDraggable(QWidget* widget) { widget->installEventFilter(this); } bool DraggableWidgetMaker::eventFilter(QObject* obj, QEvent* event) { auto* widget = static_cast(obj); // based on https://stackoverflow.com/a/12221360/964478 switch (event->type()) { case QEvent::MouseButtonPress: { auto* mouseEvent = static_cast(event); m_isPressing = false; m_isDragging = false; if (mouseEvent->button() == Qt::LeftButton) { m_isPressing = true; m_mousePressPos = mouseEvent->globalPosition(); m_mouseMovePos = m_mousePressPos; } } break; case QEvent::MouseMove: { auto* mouseEvent = static_cast(event); if (m_isPressing) { QPointF widgetPos = widget->mapToGlobal(widget->pos()); QPointF eventPos = mouseEvent->globalPosition(); QPointF diff = eventPos - m_mouseMovePos; QPointF newPos = widgetPos + diff; widget->move(widget->mapFromGlobal(newPos.toPoint())); if (!m_isDragging) { QPointF totalMovedDiff = eventPos - m_mousePressPos; if (totalMovedDiff.manhattanLength() > 3) { m_isDragging = true; } } m_mouseMovePos = eventPos; } } break; case QEvent::MouseButtonRelease: { m_isPressing = false; if (m_isDragging) { m_isDragging = false; event->ignore(); return true; } } break; default: break; } return QObject::eventFilter(obj, event); } ================================================ FILE: src/widgets/draggablewidgetmaker.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include #include #include #include class DraggableWidgetMaker : public QObject { Q_OBJECT public: DraggableWidgetMaker(QObject* parent = nullptr); void makeDraggable(QWidget* widget); protected: bool eventFilter(QObject* obj, QEvent* event) override; private: bool m_isPressing = false; bool m_isDragging = false; QPointF m_mouseMovePos; QPointF m_mousePressPos; }; ================================================ FILE: src/widgets/imagelabel.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // This code is a modified version of the KDE software Spectacle // /src/Gui/KSImageWidget.cpp commit cbbd6d45f6426ccbf1a82b15fdf98613ccccbbe9 #include "imagelabel.h" ImageLabel::ImageLabel(QWidget* parent) : QLabel(parent) , m_pixmap(QPixmap()) { m_DSEffect = new QGraphicsDropShadowEffect(this); m_DSEffect->setBlurRadius(5); m_DSEffect->setOffset(0); m_DSEffect->setColor(QColor(Qt::black)); setGraphicsEffect(m_DSEffect); setCursor(Qt::OpenHandCursor); setAlignment(Qt::AlignCenter); setMinimumSize(size()); } void ImageLabel::setScreenshot(const QPixmap& pixmap) { m_pixmap = pixmap; const QString tooltip = QStringLiteral("%1x%2 px").arg(m_pixmap.width(), m_pixmap.height()); setToolTip(tooltip); setScaledPixmap(); } void ImageLabel::setScaledPixmap() { const qreal scale = qApp->devicePixelRatio(); QPixmap scaledPixmap = m_pixmap.scaled( size() * scale, Qt::KeepAspectRatio, Qt::SmoothTransformation); scaledPixmap.setDevicePixelRatio(scale); setPixmap(scaledPixmap); } // drag handlers void ImageLabel::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { m_dragStartPosition = event->pos(); setCursor(Qt::ClosedHandCursor); } } void ImageLabel::mouseReleaseEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { setCursor(Qt::OpenHandCursor); } } void ImageLabel::mouseMoveEvent(QMouseEvent* event) { if (!(event->buttons() & Qt::LeftButton)) { return; } if ((event->pos() - m_dragStartPosition).manhattanLength() < QGuiApplication::styleHints()->startDragDistance()) { return; } setCursor(Qt::OpenHandCursor); emit dragInitiated(); } // resize handler void ImageLabel::resizeEvent(QResizeEvent* event) { Q_UNUSED(event) setScaledPixmap(); } ================================================ FILE: src/widgets/imagelabel.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // This code is a modified version of the KDE software Spectacle // /src/Gui/KSImageWidget.h commit cbbd6d45f6426ccbf1a82b15fdf98613ccccbbe9 #pragma once #include #include #include #include #include #include #include #include class ImageLabel : public QLabel { Q_OBJECT public: explicit ImageLabel(QWidget* parent = nullptr); void setScreenshot(const QPixmap& pixmap); signals: void dragInitiated(); protected: void mousePressEvent(QMouseEvent* event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent* event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent* event) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent* event) Q_DECL_OVERRIDE; private: void setScaledPixmap(); QGraphicsDropShadowEffect* m_DSEffect; QPixmap m_pixmap; QPoint m_dragStartPosition; }; ================================================ FILE: src/widgets/imguploaddialog.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "imguploaddialog.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include #include #include #include ImgUploadDialog::ImgUploadDialog(QDialog* parent) : QDialog(parent) { setAttribute(Qt::WA_DeleteOnClose); setMinimumSize(400, 120); setWindowIcon(QIcon(GlobalValues::iconPath())); setWindowTitle(tr("Upload Confirmation")); layout = new QVBoxLayout(this); m_uploadLabel = new QLabel(tr("Do you want to upload this capture?"), this); layout->addWidget(m_uploadLabel); buttonBox = new QDialogButtonBox(QDialogButtonBox::Yes | QDialogButtonBox::No); connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); layout->addWidget(buttonBox); m_uploadWithoutConfirmation = new QCheckBox(tr("Upload without confirmation"), this); m_uploadWithoutConfirmation->setToolTip(tr("Upload without confirmation")); connect(m_uploadWithoutConfirmation, &QCheckBox::clicked, [](bool checked) { ConfigHandler().setUploadWithoutConfirmation(checked); }); layout->addWidget(m_uploadWithoutConfirmation); } ================================================ FILE: src/widgets/imguploaddialog.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QCheckBox; class QLabel; class QDialogButtonBox; class QVBoxLayout; class ImgUploadDialog : public QDialog { Q_OBJECT public: explicit ImgUploadDialog(QDialog* parent = nullptr); private: QCheckBox* m_uploadWithoutConfirmation; QLabel* m_uploadLabel; QDialogButtonBox* buttonBox; QVBoxLayout* layout; }; ================================================ FILE: src/widgets/infowindow.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021-2022 Jeremy Borgman & Contributors #include "infowindow.h" #include "./ui_infowindow.h" #include "src/core/flameshotdaemon.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/globalvalues.h" #include #include InfoWindow::InfoWindow(QWidget* parent) : QWidget(parent) , ui(new Ui::InfoWindow) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); ui->IconSVG->setPixmap(QPixmap(GlobalValues::iconPath())); ui->VersionDetails->setText(GlobalValues::versionInfo()); ui->OperatingSystemDetails->setText(generateKernelString()); connect( ui->CopyInfoButton, &QPushButton::clicked, this, &InfoWindow::copyInfo); show(); // Call show() first, otherwise the correct geometry cannot be fetched for // centering the window on the screen QRect position = frameGeometry(); QScreen* screen = QGuiAppCurrentScreen().currentScreen(); position.moveCenter(screen->availableGeometry().center()); move(position.topLeft()); } InfoWindow::~InfoWindow() { delete ui; } void InfoWindow::keyPressEvent(QKeyEvent* event) { if (event->key() == Qt::Key_Escape) { close(); } } QString generateKernelString() { QString kernelVersion = QSysInfo::kernelType() + ": " + QSysInfo::kernelVersion() + "\n" + QSysInfo::productType() + ": " + QSysInfo::productVersion(); return kernelVersion; } void InfoWindow::copyInfo() { FlameshotDaemon::copyToClipboard(GlobalValues::versionInfo() + "\n" + generateKernelString()); } ================================================ FILE: src/widgets/infowindow.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2021-2022 Jeremy Borgman & Contributors #pragma once #include QT_BEGIN_NAMESPACE namespace Ui { class InfoWindow; } QT_END_NAMESPACE class InfoWindow : public QWidget { Q_OBJECT public: explicit InfoWindow(QWidget* parent = nullptr); ~InfoWindow(); private: Ui::InfoWindow* ui; protected: void keyPressEvent(QKeyEvent* event); private slots: void copyInfo(); }; QString generateKernelString(); ================================================ FILE: src/widgets/infowindow.ui ================================================ InfoWindow 0 0 182 262 About :/img/app/flameshot.png:/img/app/flameshot.png Icon Qt::AlignCenter 75 true true License Qt::AlignCenter Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse GPLv3+ Qt::AlignCenter Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Qt::Vertical 20 40 75 true true Version Qt::AlignCenter Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Flameshot v Qt::AlignCenter Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse OS Info Qt::AlignCenter Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Copy Info ================================================ FILE: src/widgets/loadspinner.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "loadspinner.h" #include #include #include #include #define OFFSET 5 LoadSpinner::LoadSpinner(QWidget* parent) : QWidget(parent) , m_span(0) , m_growing(true) { setAttribute(Qt::WA_TranslucentBackground); const int size = QFontMetrics(qApp->font()).height() * 8; setFixedSize(size, size); updateFrame(); // init timer m_timer = new QTimer(this); connect(m_timer, &QTimer::timeout, this, &LoadSpinner::rotate); m_timer->setInterval(30); } void LoadSpinner::setColor(const QColor& c) { m_color = c; } void LoadSpinner::setWidth(int w) { setFixedSize(w, w); updateFrame(); } void LoadSpinner::setHeight(int h) { setFixedSize(h, h); updateFrame(); } void LoadSpinner::start() { m_timer->start(); } void LoadSpinner::stop() { m_timer->stop(); } void LoadSpinner::paintEvent(QPaintEvent*) { QPainter painter(this); if (!painter.isActive()) return; painter.setRenderHint(QPainter::Antialiasing, true); auto pen = QPen(m_color); pen.setWidth(height() / 10); painter.setPen(pen); painter.setOpacity(0.2); painter.drawArc(m_frame, 0, 5760); painter.setOpacity(1.0); painter.drawArc(m_frame, (m_startAngle * 16), (m_span * 16)); } void LoadSpinner::rotate() { const int advance = 3; const int grow = 8; if (m_growing) { m_startAngle = (m_startAngle + advance) % 360; m_span += grow; if (m_span > 260) { m_growing = false; } } else { m_startAngle = (m_startAngle + grow) % 360; m_span = m_span + advance - grow; if (m_span < 10) { m_growing = true; } } update(); } void LoadSpinner::updateFrame() { m_frame = QRect(OFFSET, OFFSET, width() - OFFSET * 2, height() - OFFSET * 2); } ================================================ FILE: src/widgets/loadspinner.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class LoadSpinner : public QWidget { Q_OBJECT public: explicit LoadSpinner(QWidget* parent = nullptr); void setColor(const QColor& c); void setWidth(int w); void setHeight(int h); void start(); void stop(); protected: void paintEvent(QPaintEvent*); private slots: void rotate(); private: QColor m_color; QTimer* m_timer; int m_startAngle = 0; int m_span = 180; bool m_growing; QRect m_frame; void updateFrame(); }; ================================================ FILE: src/widgets/notificationwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "notificationwidget.h" #include #include #include #include #include #include NotificationWidget::NotificationWidget(QWidget* parent) : QWidget(parent) { m_timer = new QTimer(this); m_timer->setSingleShot(true); m_timer->setInterval(7000); connect(m_timer, &QTimer::timeout, this, &NotificationWidget::animatedHide); m_content = new QFrame(); m_layout = new QVBoxLayout(); m_label = new QLabel(m_content); m_label->hide(); m_showAnimation = new QPropertyAnimation(m_content, "geometry", this); m_showAnimation->setDuration(300); m_hideAnimation = new QPropertyAnimation(m_content, "geometry", this); m_hideAnimation->setDuration(300); connect( m_hideAnimation, &QPropertyAnimation::finished, m_label, &QLabel::hide); auto* mainLayout = new QVBoxLayout(); setLayout(mainLayout); mainLayout->addWidget(m_content); m_layout->addWidget(m_label, 0, Qt::AlignHCenter); m_content->setLayout(m_layout); setFixedHeight(40); } void NotificationWidget::showMessage(const QString& msg) { m_label->setText(msg); m_label->show(); animatedShow(); } void NotificationWidget::animatedShow() { m_showAnimation->setStartValue(QRect(0, 0, width(), 0)); m_showAnimation->setEndValue(QRect(0, 0, width(), height())); m_showAnimation->start(); m_timer->start(); } void NotificationWidget::animatedHide() { m_hideAnimation->setStartValue(QRect(0, 0, width(), height())); m_hideAnimation->setEndValue(QRect(0, 0, width(), 0)); m_hideAnimation->start(); } ================================================ FILE: src/widgets/notificationwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include class QLabel; class QTimer; class QPropertyAnimation; class QVBoxLayout; class QFrame; class NotificationWidget : public QWidget { Q_OBJECT public: explicit NotificationWidget(QWidget* parent = nullptr); void showMessage(const QString& msg); private: QLabel* m_label; QPropertyAnimation* m_showAnimation; QPropertyAnimation* m_hideAnimation; QVBoxLayout* m_layout; QFrame* m_content; QTimer* m_timer; void animatedShow(); void animatedHide(); }; ================================================ FILE: src/widgets/orientablepushbutton.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // Based on https://stackoverflow.com/a/53135675/964478 #include "orientablepushbutton.h" #include #include #include OrientablePushButton::OrientablePushButton(QWidget* parent) : CaptureButton(parent) {} OrientablePushButton::OrientablePushButton(const QString& text, QWidget* parent) : CaptureButton(text, parent) {} OrientablePushButton::OrientablePushButton(const QIcon& icon, const QString& text, QWidget* parent) : CaptureButton(icon, text, parent) {} QSize OrientablePushButton::sizeHint() const { QSize sh = QPushButton::sizeHint(); if (m_orientation != OrientablePushButton::Horizontal) { sh.transpose(); } return sh; } void OrientablePushButton::paintEvent(QPaintEvent* event) { Q_UNUSED(event) QStylePainter painter(this); if (!painter.isActive()) return; QStyleOptionButton option; initStyleOption(&option); if (m_orientation == OrientablePushButton::VerticalTopToBottom) { painter.rotate(90); painter.translate(0, -1 * width()); option.rect = option.rect.transposed(); } else if (m_orientation == OrientablePushButton::VerticalBottomToTop) { painter.rotate(-90); painter.translate(-1 * height(), 0); option.rect = option.rect.transposed(); } painter.drawControl(QStyle::CE_PushButton, option); } OrientablePushButton::Orientation OrientablePushButton::orientation() const { return m_orientation; } void OrientablePushButton::setOrientation( OrientablePushButton::Orientation orientation) { m_orientation = orientation; } ================================================ FILE: src/widgets/orientablepushbutton.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors // Based on https://stackoverflow.com/a/53135675/964478 #pragma once #include "capture/capturebutton.h" #include class OrientablePushButton : public CaptureButton { Q_OBJECT public: enum Orientation { Horizontal, VerticalTopToBottom, VerticalBottomToTop }; OrientablePushButton(QWidget* parent = nullptr); OrientablePushButton(const QString& text, QWidget* parent = nullptr); OrientablePushButton(const QIcon& icon, const QString& text, QWidget* parent = nullptr); QSize sizeHint() const; OrientablePushButton::Orientation orientation() const; void setOrientation(OrientablePushButton::Orientation orientation); protected: void paintEvent(QPaintEvent* event); private: Orientation m_orientation = Horizontal; }; ================================================ FILE: src/widgets/panel/CMakeLists.txt ================================================ # Required to generate MOC target_sources(flameshot PRIVATE sidepanelwidget.h utilitypanel.h colorgrabwidget.h) target_sources(flameshot PRIVATE sidepanelwidget.cpp utilitypanel.cpp colorgrabwidget.cpp) ================================================ FILE: src/widgets/panel/colorgrabwidget.cpp ================================================ #include "colorgrabwidget.h" #include "sidepanelwidget.h" #include "colorutils.h" #include "confighandler.h" #include "overlaymessage.h" #include "src/core/qguiappcurrentscreen.h" #include #include #include #include #include #include #include #include // Width (= height) and zoom level of the widget before the user clicks #define WIDTH1 77 #define ZOOM1 11 // Width (= height) and zoom level of the widget after the user clicks #define WIDTH2 165 #define ZOOM2 15 // NOTE: WIDTH1(2) should be divisible by ZOOM1(2) for best precision. // WIDTH1 should be odd so the cursor can be centered on a pixel. ColorGrabWidget::ColorGrabWidget(QPixmap* p, QWidget* parent) : QWidget(parent) , m_pixmap(p) , m_mousePressReceived(false) , m_extraZoomActive(false) , m_magnifierActive(false) { if (p == nullptr) { throw std::logic_error("Pixmap must not be null"); } setAttribute(Qt::WA_DeleteOnClose); // We don't need this widget to receive mouse events because we use // eventFilter on other objects that do setAttribute(Qt::WA_TransparentForMouseEvents); setAttribute(Qt::WA_QuitOnClose, false); // On Windows: don't activate the widget so CaptureWidget remains active setAttribute(Qt::WA_ShowWithoutActivating); setWindowFlags(Qt::BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); setMouseTracking(true); } void ColorGrabWidget::startGrabbing() { // NOTE: grabMouse() would prevent move events being received // With this method we just need to make sure that mouse press and release // events get consumed before they reach their target widget. // This is undone in the destructor. qApp->setOverrideCursor(Qt::CrossCursor); qApp->installEventFilter(this); OverlayMessage::pushKeyMap( { { tr("Enter or Left Click"), tr("Accept color") }, { tr("Hold Left Click"), tr("Precisely select color") }, { tr("Space or Right Click"), tr("Toggle magnifier") }, { tr("Esc"), tr("Cancel") } }); } QColor ColorGrabWidget::color() { return m_color; } bool ColorGrabWidget::eventFilter(QObject*, QEvent* event) { // Consume shortcut events and handle key presses from whole app if (event->type() == QEvent::KeyPress || event->type() == QEvent::Shortcut) { QKeySequence key = event->type() == QEvent::KeyPress ? static_cast(event)->key() : static_cast(event)->key(); if (key == Qt::Key_Escape) { emit grabAborted(); finalize(); } else if (key == Qt::Key_Return || key == Qt::Key_Enter) { emit colorGrabbed(m_color); finalize(); } else if (key == Qt::Key_Space && !m_extraZoomActive) { setMagnifierActive(!m_magnifierActive); } return true; } else if (event->type() == QEvent::MouseMove) { // NOTE: This relies on the fact that CaptureWidget tracks mouse moves if (m_extraZoomActive && !geometry().contains(cursorPos())) { setExtraZoomActive(false); return true; } if (!m_extraZoomActive && !m_magnifierActive) { // This fixes an issue when the mouse leaves the zoom area before // the widget even appears. hide(); } if (!m_extraZoomActive) { // Update only before the user clicks the mouse, after the mouse // press the widget remains static. updateWidget(); } // Hide overlay message when cursor is over it OverlayMessage* overlayMsg = OverlayMessage::instance(); overlayMsg->setVisibility( !overlayMsg->geometry().contains(cursorPos())); m_color = getColorAtPoint(cursorPos()); emit colorUpdated(m_color); return true; } else if (event->type() == QEvent::MouseButtonPress) { m_mousePressReceived = true; auto* e = static_cast(event); if (e->buttons() == Qt::RightButton) { setMagnifierActive(!m_magnifierActive); } else if (e->buttons() == Qt::LeftButton) { setExtraZoomActive(true); } return true; } else if (event->type() == QEvent::MouseButtonRelease) { if (!m_mousePressReceived) { // Do not consume event if it corresponds to the mouse press that // triggered the color grabbing in the first place. This prevents // focus issues in the capture widget when the color grabber is // closed. return false; } auto* e = static_cast(event); if (e->button() == Qt::LeftButton && m_extraZoomActive) { emit colorGrabbed(getColorAtPoint(cursorPos())); finalize(); } return true; } else if (event->type() == QEvent::MouseButtonDblClick) { return true; } return false; } void ColorGrabWidget::paintEvent(QPaintEvent*) { QPainter painter(this); if (!painter.isActive()) return; painter.drawImage(QRectF(0, 0, width(), height()), m_previewImage); } void ColorGrabWidget::showEvent(QShowEvent*) { updateWidget(); } QPoint ColorGrabWidget::cursorPos() const { return QCursor::pos(QGuiAppCurrentScreen().currentScreen()); } /// @note The point is in screen coordinates. QColor ColorGrabWidget::getColorAtPoint(const QPoint& p) const { if (m_extraZoomActive && geometry().contains(p)) { QPoint point = mapFromGlobal(p); // we divide coordinate-wise to avoid rounding to nearest return m_previewImage.pixel( QPoint(point.x() / ZOOM2, point.y() / ZOOM2)); } QPoint point = p; #if defined(Q_OS_MACOS) QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); if (currentScreen) { point = QPoint((p.x() - currentScreen->geometry().x()) * currentScreen->devicePixelRatio(), (p.y() - currentScreen->geometry().y()) * currentScreen->devicePixelRatio()); } #endif QPixmap pixel = m_pixmap->copy(QRect(point, point)); return pixel.toImage().pixel(0, 0); } void ColorGrabWidget::setExtraZoomActive(bool active) { m_extraZoomActive = active; if (!active && !m_magnifierActive) { hide(); } else { if (!isVisible()) { QTimer::singleShot(250, this, [this]() { show(); }); } else { QTimer::singleShot(250, this, [this]() { updateWidget(); }); } } } void ColorGrabWidget::setMagnifierActive(bool active) { m_magnifierActive = active; setVisible(active); } void ColorGrabWidget::updateWidget() { int width = m_extraZoomActive ? WIDTH2 : WIDTH1; float zoom = m_extraZoomActive ? ZOOM2 : ZOOM1; // Set window size and move its center to the mouse cursor QRect rect(0, 0, width, width); auto realCursorPos = cursorPos(); auto adjustedCursorPos = realCursorPos; #if defined(Q_OS_MACOS) QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); if (currentScreen) { adjustedCursorPos = QPoint((realCursorPos.x() - currentScreen->geometry().x()) * currentScreen->devicePixelRatio(), (realCursorPos.y() - currentScreen->geometry().y()) * currentScreen->devicePixelRatio()); } #endif rect.moveCenter(cursorPos()); setGeometry(rect); // Store a pixmap containing the zoomed-in section around the cursor QRect sourceRect(0, 0, width / zoom, width / zoom); sourceRect.moveCenter(adjustedCursorPos); m_previewImage = m_pixmap->copy(sourceRect).toImage(); // Repaint update(); } void ColorGrabWidget::finalize() { qApp->removeEventFilter(this); qApp->restoreOverrideCursor(); OverlayMessage::pop(); close(); } ================================================ FILE: src/widgets/panel/colorgrabwidget.h ================================================ #ifndef COLORGRABWIDGET_H #define COLORGRABWIDGET_H #include class SidePanelWidget; class OverlayMessage; class ColorGrabWidget : public QWidget { Q_OBJECT public: ColorGrabWidget(QPixmap* p, QWidget* parent = nullptr); void startGrabbing(); QColor color(); signals: void colorUpdated(const QColor& color); void colorGrabbed(const QColor& color); void grabAborted(); private: bool eventFilter(QObject* obj, QEvent* event) override; void paintEvent(QPaintEvent* e) override; void showEvent(QShowEvent* event) override; QPoint cursorPos() const; QColor getColorAtPoint(const QPoint& point) const; void setExtraZoomActive(bool active); void setMagnifierActive(bool active); void updateWidget(); void finalize(); QPixmap* m_pixmap; QImage m_previewImage; QColor m_color; bool m_mousePressReceived; bool m_extraZoomActive; bool m_magnifierActive; }; #endif // COLORGRABWIDGET_H ================================================ FILE: src/widgets/panel/sidepanelwidget.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "sidepanelwidget.h" #include "colorgrabwidget.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/colorutils.h" #include "src/utils/pathinfo.h" #include "utilitypanel.h" #include #include #include #include #include #include #include #include #include #if defined(Q_OS_MACOS) #include #endif SidePanelWidget::SidePanelWidget(QPixmap* p, QWidget* parent) : QWidget(parent) , m_layout(new QVBoxLayout(this)) , m_pixmap(p) { if (parent != nullptr) { parent->installEventFilter(this); } auto* colorLayout = new QGridLayout(); // Create Active Tool Size auto* toolSizeHBox = new QHBoxLayout(); auto* activeToolSizeText = new QLabel(tr("Active tool size: ")); m_toolSizeSpin = new QSpinBox(this); m_toolSizeSpin->setRange(1, maxToolSize); m_toolSizeSpin->setSingleStep(1); m_toolSizeSpin->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); toolSizeHBox->addWidget(activeToolSizeText); toolSizeHBox->addWidget(m_toolSizeSpin); m_toolSizeSlider = new QSlider(Qt::Horizontal); m_toolSizeSlider->setRange(1, maxToolSize); m_toolSizeSlider->setValue(m_toolSize); m_toolSizeSlider->setMinimumWidth(minSliderWidth); colorLayout->addLayout(toolSizeHBox, 0, 0); colorLayout->addWidget(m_toolSizeSlider, 1, 0); // Create Active Color auto* colorHBox = new QHBoxLayout(); auto* colorText = new QLabel(tr("Active Color: ")); m_colorLabel = new QLabel(); m_colorLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); colorHBox->addWidget(colorText); colorHBox->addWidget(m_colorLabel); colorLayout->addLayout(colorHBox, 2, 0); m_layout->addLayout(colorLayout); m_colorWheel = new color_widgets::ColorWheel(this); m_colorWheel->setColor(m_color); m_colorHex = new QLineEdit(this); m_colorHex->setAlignment(Qt::AlignCenter); QColor background = this->palette().window().color(); bool isDark = ColorUtils::colorIsDark(background); QString modifier = isDark ? PathInfo::whiteIconPath() : PathInfo::blackIconPath(); QIcon grabIcon(modifier + "colorize.svg"); m_colorGrabButton = new QPushButton(grabIcon, tr("Grab Color")); m_layout->addWidget(m_colorGrabButton); m_layout->addWidget(m_colorWheel); m_layout->addWidget(m_colorHex); QHBoxLayout* gridHBoxLayout = new QHBoxLayout(this); m_gridCheck = new QCheckBox(tr("Display grid"), this); m_gridSizeSpin = new QSpinBox(this); m_gridSizeSpin->setRange(5, 50); m_gridSizeSpin->setSingleStep(5); m_gridSizeSpin->setValue(10); m_gridSizeSpin->setDisabled(true); m_gridSizeSpin->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); gridHBoxLayout->addWidget(m_gridCheck); gridHBoxLayout->addWidget(m_gridSizeSpin); m_layout->addLayout(gridHBoxLayout); // tool size sigslots connect(m_toolSizeSpin, static_cast(&QSpinBox::valueChanged), this, &SidePanelWidget::toolSizeChanged); connect(m_toolSizeSlider, &QSlider::valueChanged, this, &SidePanelWidget::toolSizeChanged); connect(this, &SidePanelWidget::toolSizeChanged, this, &SidePanelWidget::onToolSizeChanged); // color hex editor sigslots connect(m_colorHex, &QLineEdit::editingFinished, this, [=, this]() { #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) if (!QColor::isValidColor(m_colorHex->text())) { #else if (!QColor::isValidColorName(m_colorHex->text())) { #endif m_colorHex->setText(m_color.name(QColor::HexRgb)); } else { emit colorChanged(m_colorHex->text()); } }); // color grab button sigslots connect(m_colorGrabButton, &QPushButton::pressed, this, &SidePanelWidget::startColorGrab); // color wheel sigslots // re-emit ColorWheel::colorSelected as SidePanelWidget::colorChanged connect(m_colorWheel, &color_widgets::ColorWheel::colorSelected, this, &SidePanelWidget::colorChanged); // Grid feature connect(m_gridCheck, &QCheckBox::clicked, this, [=, this](bool b) { this->m_gridSizeSpin->setEnabled(b); emit this->displayGridChanged(b); }); connect(m_gridSizeSpin, qOverload(&QSpinBox::valueChanged), this, &SidePanelWidget::gridSizeChanged); } void SidePanelWidget::onColorChanged(const QColor& color) { m_color = color; updateColorNoWheel(color); m_colorWheel->setColor(color); } void SidePanelWidget::onToolSizeChanged(int t) { m_toolSize = qBound(0, t, maxToolSize); m_toolSizeSlider->setValue(m_toolSize); m_toolSizeSpin->setValue(m_toolSize); } void SidePanelWidget::startColorGrab() { m_revertColor = m_color; m_colorGrabber = new ColorGrabWidget(m_pixmap); connect(m_colorGrabber, &ColorGrabWidget::colorUpdated, this, &SidePanelWidget::onTemporaryColorUpdated); connect(m_colorGrabber, &ColorGrabWidget::colorGrabbed, this, &SidePanelWidget::onColorGrabFinished); connect(m_colorGrabber, &ColorGrabWidget::grabAborted, this, &SidePanelWidget::onColorGrabAborted); emit hidePanel(); m_colorGrabber->startGrabbing(); } void SidePanelWidget::onColorGrabFinished() { finalizeGrab(); m_color = m_colorGrabber->color(); emit colorChanged(m_color); } void SidePanelWidget::onColorGrabAborted() { finalizeGrab(); // Restore color that was selected before we started grabbing onColorChanged(m_revertColor); } void SidePanelWidget::onTemporaryColorUpdated(const QColor& color) { updateColorNoWheel(color); } void SidePanelWidget::finalizeGrab() { emit showPanel(); } void SidePanelWidget::updateColorNoWheel(const QColor& c) { m_colorLabel->setStyleSheet( QStringLiteral("QLabel { background-color : %1; }").arg(c.name())); m_colorHex->setText(c.name(QColor::HexRgb)); } bool SidePanelWidget::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::ShortcutOverride) { // Override Escape shortcut from CaptureWidget auto* e = static_cast(event); if (e->key() == Qt::Key_Escape && m_colorHex->hasFocus()) { m_colorHex->clearFocus(); e->accept(); return true; } } else if (event->type() == QEvent::MouseButtonPress) { // Clicks outside of the Color Hex editor m_colorHex->clearFocus(); } return QWidget::eventFilter(obj, event); } void SidePanelWidget::hideEvent(QHideEvent* event) { QWidget::hideEvent(event); m_colorHex->clearFocus(); } ================================================ FILE: src/widgets/panel/sidepanelwidget.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "QtColorWidgets/color_wheel.hpp" #include #include class QVBoxLayout; class QPushButton; class QLabel; class QLineEdit; class ColorGrabWidget; class QColorPickingEventFilter; class QSlider; class QCheckBox; constexpr int maxToolSize = 50; constexpr int minSliderWidth = 100; class SidePanelWidget : public QWidget { Q_OBJECT friend class QColorPickingEventFilter; public: explicit SidePanelWidget(QPixmap* p, QWidget* parent = nullptr); signals: void colorChanged(const QColor& color); void toolSizeChanged(int size); void togglePanel(); void showPanel(); void hidePanel(); void displayGridChanged(bool display); void gridSizeChanged(int size); public slots: void onToolSizeChanged(int tool); void onColorChanged(const QColor& color); void startColorGrab(); private slots: void onColorGrabFinished(); void onColorGrabAborted(); void onTemporaryColorUpdated(const QColor& color); private: void finalizeGrab(); void updateColorNoWheel(const QColor& color); bool eventFilter(QObject* obj, QEvent* event) override; void hideEvent(QHideEvent* event) override; QVBoxLayout* m_layout; QPushButton* m_colorGrabButton; ColorGrabWidget* m_colorGrabber{}; color_widgets::ColorWheel* m_colorWheel; QLabel* m_colorLabel; QLineEdit* m_colorHex; QPixmap* m_pixmap; QColor m_color; QColor m_revertColor; QSpinBox* m_toolSizeSpin; QSlider* m_toolSizeSlider; int m_toolSize{}; QCheckBox* m_gridCheck{ nullptr }; QSpinBox* m_gridSizeSpin{ nullptr }; }; ================================================ FILE: src/widgets/panel/utilitypanel.cpp ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "utilitypanel.h" #include "capturewidget.h" #include #include #include #include #include #include UtilityPanel::UtilityPanel(CaptureWidget* captureWidget) : QWidget(captureWidget) , m_captureWidget(captureWidget) , m_internalPanel(nullptr) , m_upLayout(nullptr) , m_bottomLayout(nullptr) , m_layout(nullptr) , m_showAnimation(nullptr) , m_hideAnimation(nullptr) , m_layersLayout(nullptr) , m_captureTools(nullptr) , m_buttonDelete(nullptr) , m_buttonMoveUp(nullptr) , m_buttonMoveDown(nullptr) { initInternalPanel(); setAttribute(Qt::WA_TransparentForMouseEvents); setCursor(Qt::ArrowCursor); m_showAnimation = new QPropertyAnimation(m_internalPanel, "geometry", this); m_showAnimation->setEasingCurve(QEasingCurve::InOutQuad); m_showAnimation->setDuration(300); m_hideAnimation = new QPropertyAnimation(m_internalPanel, "geometry", this); m_hideAnimation->setEasingCurve(QEasingCurve::InOutQuad); m_hideAnimation->setDuration(300); connect(m_hideAnimation, &QPropertyAnimation::finished, m_internalPanel, &QWidget::hide); #if (defined(Q_OS_WIN) || defined(Q_OS_MACOS)) move(0, 0); #endif hide(); } QWidget* UtilityPanel::toolWidget() const { return m_toolWidget; } void UtilityPanel::setToolWidget(QWidget* widget) { if (m_toolWidget != nullptr) { m_toolWidget->hide(); m_toolWidget->setParent(this); m_toolWidget->deleteLater(); } if (widget != nullptr) { m_toolWidget = widget; m_toolWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); m_upLayout->addWidget(widget); } } void UtilityPanel::clearToolWidget() { if (m_toolWidget != nullptr) { m_toolWidget->deleteLater(); } } void UtilityPanel::pushWidget(QWidget* widget) { m_layout->insertWidget(m_layout->count() - 1, widget); } void UtilityPanel::show() { if (!m_internalPanel->isHidden()) { return; } setAttribute(Qt::WA_TransparentForMouseEvents, false); m_showAnimation->setStartValue(QRect(-width(), 0, 0, height())); m_showAnimation->setEndValue(QRect(0, 0, width(), height())); m_internalPanel->show(); m_showAnimation->start(); #if (defined(Q_OS_WIN) || defined(Q_OS_MACOS)) move(0, 0); #endif QWidget::show(); } void UtilityPanel::hide() { if (m_internalPanel->isHidden()) { return; } setAttribute(Qt::WA_TransparentForMouseEvents); m_hideAnimation->setStartValue(QRect(0, 0, width(), height())); m_hideAnimation->setEndValue(QRect(-width(), 0, 0, height())); m_hideAnimation->start(); m_internalPanel->hide(); QWidget::hide(); } void UtilityPanel::toggle() { if (m_internalPanel->isHidden()) { show(); } else { hide(); } } void UtilityPanel::initInternalPanel() { m_internalPanel = new QScrollArea(this); m_internalPanel->setAttribute(Qt::WA_NoMousePropagation); auto* widget = new QWidget(); m_internalPanel->setWidget(widget); m_internalPanel->setWidgetResizable(true); m_layout = new QVBoxLayout(); m_upLayout = new QVBoxLayout(); m_bottomLayout = new QVBoxLayout(); m_layersLayout = new QVBoxLayout(); m_layout->addLayout(m_upLayout); m_layout->addLayout(m_bottomLayout); m_bottomLayout->addLayout(m_layersLayout); widget->setLayout(m_layout); QColor bgColor = palette().window().color(); bgColor.setAlphaF(0.0); m_internalPanel->setStyleSheet( QStringLiteral("QScrollArea {background-color: %1}").arg(bgColor.name())); m_internalPanel->hide(); m_captureTools = new QListWidget(this); connect(m_captureTools, &QListWidget::currentRowChanged, this, &UtilityPanel::onCurrentRowChanged); auto* layersButtons = new QHBoxLayout(); m_layersLayout->addLayout(layersButtons); m_layersLayout->addWidget(m_captureTools); bool isDark = ColorUtils::colorIsDark(bgColor); QString coloredIconPath = isDark ? PathInfo::whiteIconPath() : PathInfo::blackIconPath(); m_buttonDelete = new QPushButton(this); m_buttonDelete->setIcon(QIcon(coloredIconPath + "delete.svg")); m_buttonDelete->setMinimumWidth(m_buttonDelete->height()); m_buttonDelete->setDisabled(true); m_buttonMoveUp = new QPushButton(this); m_buttonMoveUp->setIcon(QIcon(coloredIconPath + "move_up.svg")); m_buttonMoveUp->setMinimumWidth(m_buttonMoveUp->height()); m_buttonMoveUp->setDisabled(true); m_buttonMoveDown = new QPushButton(this); m_buttonMoveDown->setIcon(QIcon(coloredIconPath + "move_down.svg")); m_buttonMoveDown->setMinimumWidth(m_buttonMoveDown->height()); m_buttonMoveDown->setDisabled(true); layersButtons->addWidget(m_buttonDelete); layersButtons->addWidget(m_buttonMoveUp); layersButtons->addWidget(m_buttonMoveDown); layersButtons->addStretch(); connect(m_buttonDelete, &QPushButton::clicked, this, &UtilityPanel::slotButtonDelete); connect(m_buttonMoveUp, &QPushButton::clicked, this, &UtilityPanel::slotUpClicked); connect(m_buttonMoveDown, &QPushButton::clicked, this, &UtilityPanel::slotDownClicked); // Bottom auto* closeButton = new QPushButton(this); closeButton->setText(tr("Close")); connect(closeButton, &QPushButton::clicked, this, &UtilityPanel::toggle); m_bottomLayout->addWidget(closeButton); } void UtilityPanel::fillCaptureTools( const QList>& captureToolObjects) { int currentSelection = m_captureTools->currentRow(); m_captureTools->clear(); m_captureTools->addItem(tr("")); for (auto toolItem : captureToolObjects) { auto* item = new QListWidgetItem( toolItem->icon(QColor(Qt::white), false), toolItem->info()); m_captureTools->addItem(item); } if (currentSelection >= 0 && currentSelection < m_captureTools->count()) { m_captureTools->setCurrentRow(currentSelection); } } void UtilityPanel::setActiveLayer(int index) { Q_ASSERT(index >= -1); m_captureTools->setCurrentRow(index + 1); } int UtilityPanel::activeLayerIndex() { return m_captureTools->currentRow() >= 0 ? m_captureTools->currentRow() - 1 : -1; } void UtilityPanel::onCurrentRowChanged(int currentRow) { m_buttonDelete->setDisabled(currentRow <= 0); m_buttonMoveDown->setDisabled(currentRow == 0 || currentRow + 1 == m_captureTools->count()); m_buttonMoveUp->setDisabled(currentRow <= 1); emit layerChanged(activeLayerIndex()); } void UtilityPanel::slotUpClicked(bool clicked) { Q_UNUSED(clicked); // subtract 1 because there's in m_captureTools as [0] element int toolRow = m_captureTools->currentRow() - 1; m_captureTools->setCurrentRow(toolRow); emit moveUpClicked(toolRow); } void UtilityPanel::slotDownClicked(bool clicked) { Q_UNUSED(clicked); // subtract 1 because there's in m_captureTools as [0] element int toolRow = m_captureTools->currentRow() - 1; m_captureTools->setCurrentRow(toolRow + 2); emit moveDownClicked(toolRow); } void UtilityPanel::slotButtonDelete(bool clicked) { Q_UNUSED(clicked) int currentRow = m_captureTools->currentRow(); if (currentRow > 0) { m_captureWidget->removeToolObject(currentRow); if (currentRow >= m_captureTools->count()) { currentRow = m_captureTools->count() - 1; } } else { currentRow = 0; } m_captureTools->setCurrentRow(currentRow); } bool UtilityPanel::isVisible() const { return !m_internalPanel->isHidden(); } ================================================ FILE: src/widgets/panel/utilitypanel.h ================================================ // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #pragma once #include "src/tools/capturetool.h" #include #include class QVBoxLayout; class QPropertyAnimation; class QScrollArea; class QPushButton; class QListWidget; class QPushButton; class CaptureWidget; class UtilityPanel : public QWidget { Q_OBJECT public: explicit UtilityPanel(CaptureWidget* captureWidget); [[nodiscard]] QWidget* toolWidget() const; void setToolWidget(QWidget* weight); void clearToolWidget(); void pushWidget(QWidget* widget); void fillCaptureTools( const QList>& captureToolObjectsHistory); void setActiveLayer(int index); int activeLayerIndex(); bool isVisible() const; signals: void layerChanged(int layer); void moveUpClicked(int currentRow); void moveDownClicked(int currentRow); public slots: void toggle(); void hide(); void show(); void slotButtonDelete(bool clicked); void onCurrentRowChanged(int currentRow); private slots: void slotUpClicked(bool clicked); void slotDownClicked(bool clicked); private: void initInternalPanel(); QPointer m_toolWidget; QScrollArea* m_internalPanel; QVBoxLayout* m_upLayout; QVBoxLayout* m_bottomLayout; QVBoxLayout* m_layout; QPropertyAnimation* m_showAnimation; QPropertyAnimation* m_hideAnimation; QVBoxLayout* m_layersLayout; QListWidget* m_captureTools; QPushButton* m_buttonDelete; QPushButton* m_buttonMoveUp; QPushButton* m_buttonMoveDown; CaptureWidget* m_captureWidget; }; ================================================ FILE: src/widgets/trayicon.cpp ================================================ #include "trayicon.h" #include "src/core/capturerequest.h" #include "src/core/flameshot.h" #include "src/core/flameshotdaemon.h" #include "src/core/qguiappcurrentscreen.h" #include "src/utils/globalvalues.h" #include "src/utils/confighandler.h" #include #include #include #include #include #include #include #if defined(Q_OS_MACOS) #include #endif TrayIcon::TrayIcon(QObject* parent) : QSystemTrayIcon(parent) , m_screenMenu(nullptr) { initMenu(); initScreenMenu(); setToolTip(QStringLiteral("Flameshot")); #if defined(Q_OS_MACOS) // Because of the following issues on MacOS "Catalina": // https://bugreports.qt.io/browse/QTBUG-86393 // https://developer.apple.com/forums/thread/126072 auto currentMacOsVersion = QOperatingSystemVersion::current(); if (currentMacOsVersion >= QOperatingSystemVersion::MacOSBigSur) { setContextMenu(m_menu); } #else setContextMenu(m_menu); #endif QIcon icon = QIcon::fromTheme("flameshot-tray", QIcon(GlobalValues::trayIconPath())); #if defined(Q_OS_MACOS) if (currentMacOsVersion >= QOperatingSystemVersion::MacOSBigSur) { icon.setIsMask(true); } #endif setIcon(icon); #if defined(Q_OS_MACOS) if (currentMacOsVersion < QOperatingSystemVersion::MacOSBigSur) { // Because of the following issues on MacOS "Catalina": // https://bugreports.qt.io/browse/QTBUG-86393 // https://developer.apple.com/forums/thread/126072 auto trayIconActivated = [this](QSystemTrayIcon::ActivationReason r) { if (m_menu->isVisible()) { m_menu->hide(); } else { m_menu->popup(QCursor::pos()); } }; connect(this, &QSystemTrayIcon::activated, this, trayIconActivated); } #else connect(this, &TrayIcon::activated, this, [this](ActivationReason r) { if (r == Trigger) { startGuiCapture(); } }); #endif #ifdef Q_OS_WIN // Ensure proper removal of tray icon when program quits on Windows. connect(qApp, &QCoreApplication::aboutToQuit, this, &TrayIcon::hide); #endif show(); // TODO needed? if (ConfigHandler().showStartupLaunchMessage()) { showMessage( "Flameshot", QObject::tr( "Hello, I'm here! Click icon in the tray to take a screenshot or " "click with a right button to see more options."), icon, 3000); } connect(ConfigHandler::getInstance(), &ConfigHandler::fileChanged, this, [this]() { updateCaptureActionShortcut(); }); } TrayIcon::~TrayIcon() { delete m_menu; } #if !defined(DISABLE_UPDATE_CHECKER) QAction* TrayIcon::appUpdates() { return m_appUpdates; } #endif void TrayIcon::initMenu() { m_menu = new QMenu(); m_captureAction = new QAction(tr("&Take Screenshot"), this); updateCaptureActionShortcut(); connect(m_captureAction, &QAction::triggered, this, [this]() { #if defined(Q_OS_MACOS) auto currentMacOsVersion = QOperatingSystemVersion::current(); if (currentMacOsVersion >= QOperatingSystemVersion::MacOSBigSur) { startGuiCapture(); } else { // It seems it is not relevant for MacOS BigSur (Wait 400 ms to hide // the QMenu) QTimer::singleShot(400, this, [this]() { startGuiCapture(); }); } #else // Wait 400 ms to hide the QMenu QTimer::singleShot(400, this, [this]() { startGuiCapture(); }); #endif }); m_launcherAction = new QAction(tr("&Open Launcher"), this); connect(m_launcherAction, &QAction::triggered, Flameshot::instance(), &Flameshot::launcher); auto* configAction = new QAction(tr("&Configuration"), this); connect(configAction, &QAction::triggered, Flameshot::instance(), &Flameshot::config); m_infoAction = new QAction(tr("&About"), this); connect(m_infoAction, &QAction::triggered, Flameshot::instance(), &Flameshot::info); #if !defined(DISABLE_UPDATE_CHECKER) m_appUpdates = new QAction(tr("Check for updates"), this); connect(m_appUpdates, &QAction::triggered, FlameshotDaemon::instance(), &FlameshotDaemon::checkForUpdates); connect(FlameshotDaemon::instance(), &FlameshotDaemon::newVersionAvailable, this, [this](const QVersionNumber& version) { if (ConfigHandler().checkForUpdates()) { QString newVersion = tr("Download version %1").arg(version.toString()); m_appUpdates->setText(newVersion); m_appUpdates->setVisible(true); // hack to work around menu not updating when the text / // visibility is modified Force menu refresh by removing and // re-adding the action m_menu->removeAction(m_appUpdates); m_menu->insertAction(m_infoAction, m_appUpdates); } }); updateCheckUpdatesMenuVisibility(); #endif QAction* quitAction = new QAction(tr("&Quit"), this); connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); #ifdef ENABLE_IMGUR // recent screenshots QAction* recentAction = new QAction(tr("&Latest Uploads"), this); connect(recentAction, &QAction::triggered, Flameshot::instance(), &Flameshot::history); #endif auto* openSavePathAction = new QAction(tr("&Open Save Path"), this); connect(openSavePathAction, &QAction::triggered, Flameshot::instance(), &Flameshot::openSavePath); m_menu->addAction(m_captureAction); m_menu->addAction(m_launcherAction); m_menu->addSeparator(); #ifdef ENABLE_IMGUR m_menu->addAction(recentAction); #endif m_menu->addAction(openSavePathAction); m_menu->addSeparator(); m_menu->addAction(configAction); m_menu->addSeparator(); #if !defined(DISABLE_UPDATE_CHECKER) m_menu->addAction(m_appUpdates); #endif m_menu->addAction(m_infoAction); m_menu->addSeparator(); m_menu->addAction(quitAction); } void TrayIcon::updateCaptureActionShortcut() { #if defined(Q_OS_MACOS) if (!m_captureAction) { return; } QString shortcut = ConfigHandler().shortcut("TAKE_SCREENSHOT"); m_captureAction->setShortcut(QKeySequence(shortcut)); #endif } #if !defined(DISABLE_UPDATE_CHECKER) void TrayIcon::updateCheckUpdatesMenuVisibility() { if (m_appUpdates == nullptr) { return; } bool autoCheckEnabled = ConfigHandler().checkForUpdates(); if (autoCheckEnabled) { // When auto-check is enabled, hide the menu item initially // It will be shown when a new version is available via a callback m_appUpdates->setVisible(false); } else { m_appUpdates->setVisible(true); m_appUpdates->setText(tr("Check for updates")); } } #endif void TrayIcon::initScreenMenu() { #ifndef Q_OS_MACOS const QList screens = QGuiApplication::screens(); if (screens.size() <= 1) { return; } m_screenMenu = new QMenu(tr("Select Screen")); QList actions = m_menu->actions(); int index = actions.indexOf(m_launcherAction); if (index >= 0 && index + 1 < actions.size()) { m_menu->insertMenu(actions[index + 1], m_screenMenu); } else { m_menu->addMenu(m_screenMenu); } QScreen* currentScreen = QGuiAppCurrentScreen().currentScreen(); int currentIndex = screens.indexOf(currentScreen); for (int i = 0; i < screens.size(); ++i) { QScreen* screen = screens[i]; QRect geom = screen->geometry(); QString screenDescription = tr("Monitor %1: %2 (%3x%4)") .arg(i + 1) .arg(screen->name()) .arg(geom.width()) .arg(geom.height()); QAction* screenAction = m_screenMenu->addAction(screenDescription); connect(screenAction, &QAction::triggered, this, [this, i]() { // Wait and hide the menu QTimer::singleShot( 100, this, [this, i]() { startGuiCaptureOnScreen(i); }); }); } #endif } void TrayIcon::startGuiCapture() { auto* widget = Flameshot::instance()->gui(); #if !defined(DISABLE_UPDATE_CHECKER) FlameshotDaemon::instance()->showUpdateNotificationIfAvailable(widget); #endif } void TrayIcon::startGuiCaptureOnScreen(int screenIndex) { CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, 400); req.setSelectedMonitor(screenIndex); Flameshot::instance()->requestCapture(req); } ================================================ FILE: src/widgets/trayicon.h ================================================ #include #pragma once class QAction; class TrayIcon : public QSystemTrayIcon { Q_OBJECT public: TrayIcon(QObject* parent = nullptr); virtual ~TrayIcon(); #if !defined(DISABLE_UPDATE_CHECKER) QAction* appUpdates(); #endif private: void initTrayIcon(); void initMenu(); void initScreenMenu(); void updateCaptureActionShortcut(); #if !defined(DISABLE_UPDATE_CHECKER) void updateCheckUpdatesMenuVisibility(); #endif void startGuiCapture(); void startGuiCaptureOnScreen(int screenIndex); QMenu* m_menu; QMenu* m_screenMenu; QAction* m_captureAction; QAction* m_launcherAction; QAction* m_infoAction; #if !defined(DISABLE_UPDATE_CHECKER) QAction* m_appUpdates; #endif }; ================================================ FILE: src/widgets/updatenotificationwidget.cpp ================================================ // // Created by yuriypuchkov on 09.12.2020. // #include "updatenotificationwidget.h" #include "src/utils/confighandler.h" #include #include #include #include #include #include #include #include #include UpdateNotificationWidget::UpdateNotificationWidget( QWidget* parent, const QString& appLatestVersion, QString appLatestUrl) : QWidget(parent) , m_appLatestVersion(appLatestVersion) , m_appLatestUrl(std::move(appLatestUrl)) , m_layout(nullptr) { setMinimumSize(400, 100); initInternalPanel(); setAttribute(Qt::WA_TransparentForMouseEvents); setCursor(Qt::ArrowCursor); m_showAnimation = new QPropertyAnimation(m_internalPanel, "geometry", this); m_showAnimation->setEasingCurve(QEasingCurve::InOutQuad); m_showAnimation->setDuration(300); m_hideAnimation = new QPropertyAnimation(m_internalPanel, "geometry", this); m_hideAnimation->setEasingCurve(QEasingCurve::InOutQuad); m_hideAnimation->setDuration(300); connect(m_hideAnimation, &QPropertyAnimation::finished, m_internalPanel, &QWidget::hide); setAppLatestVersion(appLatestVersion); } void UpdateNotificationWidget::show() { setAttribute(Qt::WA_TransparentForMouseEvents, false); m_showAnimation->setStartValue(QRect(0, -height(), width(), height())); m_showAnimation->setEndValue(QRect(0, 0, width(), height())); m_internalPanel->show(); m_showAnimation->start(); QWidget::show(); } void UpdateNotificationWidget::hide() { setAttribute(Qt::WA_TransparentForMouseEvents); m_hideAnimation->setStartValue(QRect(0, 0, width(), height())); m_hideAnimation->setEndValue(QRect(0, -height(), 0, height())); m_hideAnimation->start(); m_internalPanel->hide(); QWidget::hide(); } void UpdateNotificationWidget::setAppLatestVersion(const QString& latestVersion) { m_appLatestVersion = latestVersion; QString newVersion = tr("New Flameshot version %1 is available").arg(latestVersion); m_notification->setText(newVersion); } void UpdateNotificationWidget::laterButton() { hide(); } void UpdateNotificationWidget::ignoreButton() { ConfigHandler().setIgnoreUpdateToVersion(m_appLatestVersion); hide(); } void UpdateNotificationWidget::updateButton() { // Store URL before closing widgets QString url = m_appLatestUrl; hide(); if (parentWidget()) { parentWidget()->close(); } // Open URL after closing widgets QDesktopServices::openUrl(QUrl(url)); } void UpdateNotificationWidget::initInternalPanel() { m_internalPanel = new QScrollArea(this); m_internalPanel->setAttribute(Qt::WA_NoMousePropagation); auto* widget = new QWidget(); m_internalPanel->setWidget(widget); m_internalPanel->setWidgetResizable(true); QColor bgColor = palette().window().color(); bgColor.setAlphaF(0.0); m_internalPanel->setStyleSheet( QStringLiteral("QScrollArea {background-color: %1}").arg(bgColor.name())); m_internalPanel->hide(); // m_layout = new QVBoxLayout(); widget->setLayout(m_layout); // caption m_notification = new QLabel(m_appLatestVersion, this); m_layout->addWidget(m_notification); // buttons layout auto* buttonsLayout = new QHBoxLayout(); auto* bottonsSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding); buttonsLayout->addSpacerItem(bottonsSpacer); m_layout->addLayout(buttonsLayout); // ignore auto* ignoreBtn = new QPushButton(tr("Ignore"), this); buttonsLayout->addWidget(ignoreBtn); connect(ignoreBtn, &QPushButton::clicked, this, &UpdateNotificationWidget::ignoreButton); // later auto* laterBtn = new QPushButton(tr("Later"), this); buttonsLayout->addWidget(laterBtn); connect(laterBtn, &QPushButton::clicked, this, &UpdateNotificationWidget::laterButton); // update auto* updateBtn = new QPushButton(tr("Update"), this); buttonsLayout->addWidget(updateBtn); connect(updateBtn, &QPushButton::clicked, this, &UpdateNotificationWidget::updateButton); } ================================================ FILE: src/widgets/updatenotificationwidget.h ================================================ // // Created by yuriypuchkov on 09.12.2020. // #ifndef FLAMESHOT_UPDATENOTIFICATIONWIDGET_H #define FLAMESHOT_UPDATENOTIFICATIONWIDGET_H #include #include class QVBoxLayout; class QPropertyAnimation; class QScrollArea; class QPushButton; class QLabel; class UpdateNotificationWidget : public QWidget { Q_OBJECT public: explicit UpdateNotificationWidget(QWidget* parent, const QString& appLatestVersion, QString appLatestUrl); void setAppLatestVersion(const QString& latestVersion); void hide(); void show(); public slots: void ignoreButton(); void laterButton(); void updateButton(); private: void initInternalPanel(); // class members QString m_appLatestVersion; QString m_appLatestUrl; QVBoxLayout* m_layout; QLabel* m_notification; QScrollArea* m_internalPanel; QPropertyAnimation* m_showAnimation; QPropertyAnimation* m_hideAnimation; }; #endif // FLAMESHOT_UPDATENOTIFICATIONWIDGET_H ================================================ FILE: src/widgets/uploadhistory.cpp ================================================ #include "uploadhistory.h" #include "./ui_uploadhistory.h" #include "src/tools/imgupload/imguploadermanager.h" #include "src/utils/confighandler.h" #include "src/utils/history.h" #include "uploadlineitem.h" #include #include #include void scaleThumbnail(QPixmap& pixmap) { if (pixmap.height() / HISTORYPIXMAP_MAX_PREVIEW_HEIGHT >= pixmap.width() / HISTORYPIXMAP_MAX_PREVIEW_WIDTH) { pixmap = pixmap.scaledToHeight(HISTORYPIXMAP_MAX_PREVIEW_HEIGHT, Qt::SmoothTransformation); } else { pixmap = pixmap.scaledToWidth(HISTORYPIXMAP_MAX_PREVIEW_WIDTH, Qt::SmoothTransformation); } } void clearHistoryLayout(QLayout* layout) { while (layout->count() != 0) { delete layout->takeAt(0); } } UploadHistory::UploadHistory(QWidget* parent) : QWidget(parent) , ui(new Ui::UploadHistory) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); } void UploadHistory::loadHistory() { clearHistoryLayout(ui->historyContainer); History history = History(); QList historyFiles = history.history(); if (historyFiles.isEmpty()) { setEmptyMessage(); } else { for (const auto& fileName : historyFiles) { addLine(history.path(), fileName); } } } void UploadHistory::setEmptyMessage() { auto* buttonEmpty = new QPushButton; buttonEmpty->setText(tr("Screenshots history is empty")); buttonEmpty->setMinimumSize(1, HISTORYPIXMAP_MAX_PREVIEW_HEIGHT); connect( buttonEmpty, &QPushButton::clicked, this, [=, this]() { this->close(); }); ui->historyContainer->addWidget(buttonEmpty); } void UploadHistory::addLine(const QString& path, const QString& fileName) { QString fullFileName = path + fileName; History history; HistoryFileName unpackFileName = history.unpackFileName(fileName); QString url = ImgUploaderManager(this).url() + unpackFileName.file; // load pixmap QPixmap pixmap; pixmap.load(fullFileName, "png"); scaleThumbnail(pixmap); // get file info auto fileInfo = QFileInfo(fullFileName); QString lastModified = fileInfo.lastModified().toString("yyyy-MM-dd\nhh:mm:ss"); auto* line = new UploadLineItem( this, pixmap, lastModified, url, fullFileName, unpackFileName); connect(line, &UploadLineItem::requestedDeletion, this, [=, this]() { if (ui->historyContainer->count() <= 1) { setEmptyMessage(); } delete line; }); ui->historyContainer->addWidget(line); } UploadHistory::~UploadHistory() { delete ui; } ================================================ FILE: src/widgets/uploadhistory.h ================================================ #ifndef UPLOADHISTORY_H #define UPLOADHISTORY_H #include QT_BEGIN_NAMESPACE namespace Ui { class UploadHistory; } QT_END_NAMESPACE void clearHistoryLayout(QLayout* layout); void scaleThumbnail(QPixmap& input); class UploadHistory : public QWidget { Q_OBJECT public: explicit UploadHistory(QWidget* parent = nullptr); ~UploadHistory(); void loadHistory(); public slots: private: void setEmptyMessage(); void addLine(QString const&, QString const&); Ui::UploadHistory* ui; }; #endif // UPLOADHISTORY_H ================================================ FILE: src/widgets/uploadhistory.ui ================================================ UploadHistory 0 0 823 479 Upload History :/img/app/flameshot.png:/img/app/flameshot.png Qt::ScrollBarAlwaysOn true 0 0 781 453 ================================================ FILE: src/widgets/uploadlineitem.cpp ================================================ #include "uploadlineitem.h" #include "./ui_uploadlineitem.h" #include "src/core/flameshotdaemon.h" #include "src/tools/imgupload/imguploadermanager.h" #include "src/utils/confighandler.h" #include "src/utils/history.h" #include "src/widgets/notificationwidget.h" #include #include #include #include #include void removeCacheFile(QString const& fullFileName) { QFile file(fullFileName); if (file.exists()) { file.remove(); } } UploadLineItem::UploadLineItem(QWidget* parent, QPixmap const& preview, QString const& timestamp, QString const& url, QString const& fullFileName, HistoryFileName const& unpackFileName) : QWidget(parent) , ui(new Ui::UploadLineItem) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); ui->imagePreview->setPixmap(preview); ui->uploadTimestamp->setText(timestamp); connect(ui->copyUrl, &QPushButton::clicked, this, [=, this]() { FlameshotDaemon::copyToClipboard(url); }); connect(ui->openBrowser, &QPushButton::clicked, this, [=, this]() { QDesktopServices::openUrl(QUrl(url)); }); connect(ui->deleteImage, &QPushButton::clicked, this, [=, this]() { if (ConfigHandler().historyConfirmationToDelete() && QMessageBox::No == QMessageBox::question( this, tr("Confirm to delete"), tr("Are you sure you want to delete a screenshot from the " "latest uploads and server?"), QMessageBox::Yes | QMessageBox::No)) { return; } ImgUploaderBase* imgUploaderBase = ImgUploaderManager(this).uploader(unpackFileName.type); imgUploaderBase->deleteImage(unpackFileName.file, unpackFileName.token); removeCacheFile(fullFileName); emit requestedDeletion(); }); } UploadLineItem::~UploadLineItem() { delete ui; } ================================================ FILE: src/widgets/uploadlineitem.h ================================================ #ifndef UPLOADLINEITEM_H #define UPLOADLINEITEM_H #include struct HistoryFileName; QT_BEGIN_NAMESPACE namespace Ui { class UploadLineItem; } QT_END_NAMESPACE void removeCacheFile(QString const& fullFileName); class UploadLineItem : public QWidget { Q_OBJECT public: UploadLineItem(QWidget* parent, QPixmap const& preview, QString const& timestamp, QString const& url, QString const& fullFileName, HistoryFileName const& unpackFileName); ~UploadLineItem(); signals: void requestedDeletion(); private: Ui::UploadLineItem* ui; }; #endif // UPLOADLINEITEM_H ================================================ FILE: src/widgets/uploadlineitem.ui ================================================ UploadLineItem 0 0 665 168 665 300 Form QLayout::SetMaximumSize 0 0 250 0 250 16777215 TextLabel Qt::Horizontal 40 20 timestamp 0 0 Copy URL 0 0 Open In Browser 0 0 :/img/material/black/delete.svg:/img/material/black/delete.svg Qt::Vertical 20 40 ================================================ FILE: src/windows-cli.cpp ================================================ #include #include std::wstring joinArgs(int argc, wchar_t* argv[]) { std::wstring result; for (int i = 1; i < argc; ++i) { if (i > 1) { result += L" "; } result += argv[i]; } return result; } void CallFlameshot(const std::wstring args, bool wait) { // generate full path for flameshot executable wchar_t path[MAX_PATH]; int pathLength = GetModuleFileNameW(NULL, path, MAX_PATH); std::wstring pathstring(path); // Find the last backslash to isolate the filename size_t lastBackslash = pathstring.find_last_of(L'\\'); std::wstring directory = (lastBackslash != std::wstring::npos) ? pathstring.substr(0, lastBackslash + 1) : L""; // generate command string // note: binary path placed within quotes in case of spaces in path int cmdSize = 32 + sizeof(directory) + sizeof(args); wchar_t* cmd = (wchar_t*)malloc(sizeof(wchar_t) * cmdSize); swprintf(cmd, cmdSize, L"\"%s\\flameshot.exe\" %s", directory.c_str(), args.c_str()); // call subprocess FILE* stream = _wpopen(cmd, L"r"); free(cmd); if (wait) { if (stream) { const int MAX_BUFFER = 2048; char buffer[MAX_BUFFER]; while (!feof(stream)) { if (fgets(buffer, MAX_BUFFER, stream) != NULL) { std::cout << buffer; } } } _pclose(stream); } return; } // Console 'wrapper' for flameshot on windows int wmain(int argc, wchar_t* argv[]) { // if no args, do not wait for stdout if (argc == 1) { std::cout << "Starting flameshot in daemon mode" << std::endl; CallFlameshot(L"", false); } else { std::wstring argString = joinArgs(argc, argv); CallFlameshot(argString, true); } std::cout.flush(); return 0; } ================================================ FILE: tests/action_options.sh ================================================ #!/usr/bin/env sh # Tests for final action options with various flameshot commands # Arguments: # 1. path to tested flameshot executable # Dependencies: # - display command (imagemagick) # HOW TO USE: # - Start the script with path to tested flameshot executable as the first # argument # # - Read messages from stdout and see if flameshot sends the right notifications # # Some commands will pin screenshots to the screen. Check if that is happening # correctly. NOTE: the screen command will pin one screenshot over your entire # screen, so don't be confused by that. # # - When the flameshot gui is tested, follow the instructions from the system # notifications # # - Some tests may ask you for confirmation in the CLI before continuing. # - Whenever the --raw option is tested, the `display` command is used to open # the image from stdout in a window. Just close that window. # FLAMESHOT="$1" [ -z "$FLAMESHOT" ] && FLAMESHOT="flameshot" # --raw >/dev/null is a hack that makes the subcommand wait for the daemon to # finish the pending action flameshot() { command "$FLAMESHOT" "$@" --raw >/tmp/img.png } # Print the given command and run it cmd() { echo "$*" >&2 "$@" sleep 1 } notify() { if [ "$FLAMESHOT_PLATFORM" = "MAC" ] then osascript - "$1" <&2 && read ____ } # NOTE: Upload option is intentionally not tested # flameshot full & screen # ┗━━━━━━━━━━━━━━━━━━━━━━━━┛ for subcommand in full screen do cmd flameshot "$subcommand" --path /tmp/ cmd flameshot "$subcommand" --clipboard cmd command "$FLAMESHOT" "$subcommand" --raw | display_img [ "$subcommand" = "full" ] && sleep 1 echo done echo "The next command will pin a screenshot over your entire screen." echo "Make sure to close it afterwards" echo "Press Enter to continue..." read ____ flameshot screen --pin sleep 1 # flameshot gui # ┗━━━━━━━━━━━━━━━┛ wait_for_key notify "GUI Test 1: --path" #"Make a selection, then accept" cmd flameshot gui --path /tmp/ wait_for_key notify "GUI Test 2: Clipboard" "Make a selection, then accept" cmd flameshot gui --clipboard wait_for_key notify "GUI Test 3: Print geometry" "Make a selection, then accept" cmd command "$FLAMESHOT" gui --print-geometry wait_for_key notify "GUI Test 4: Pin" "Make a selection, then accept" cmd flameshot gui --pin wait_for_key notify "GUI Test 5: Print raw" "Make a selection, then accept" cmd command "$FLAMESHOT" gui --raw | display_img wait_for_key notify "GUI Test 6: Copy on select" "Make a selection, flameshot will close automatically" cmd flameshot gui --clipboard --accept-on-select wait_for_key notify "GUI Test 7: File dialog on select" "After selecting, a file dialog will open" cmd flameshot gui --accept-on-select # All options except for --print-geometry (incompatible with --raw) wait_for_key notify "GUI Test 8: All actions except print-geometry" "Just make a selection" cmd command "$FLAMESHOT" gui -p /tmp/ -c -r --pin | display_img echo '>> All tests done.' ================================================ FILE: tests/path_option.sh ================================================ #!/usr/bin/env sh # Before running the script make sure a flameshot daemon with a matching version # is running # The first argument to this script is a path to the flameshot executable [ -n "$1" ] && flameshot="$1" || flameshot='flameshot' # TODO Before proper stderr logging is implemented, you will have to look at the # system notifications rm -rf /tmp/flameshot_path_test 2>/dev/null mkdir -p /tmp/flameshot_path_test cd /tmp/flameshot_path_test echo ">> Nonexistent directory. This command should give an invalid path error." "$flameshot" screen -p blah/blah sleep 2 echo ">> The output file is specified relative to PWD" "$flameshot" screen -p relative.png sleep 2 echo ">> Absolute paths work too" "$flameshot" screen -p /tmp/flameshot_path_test/absolute.png sleep 2 mkdir subdir echo ">> Redundancy in the path will be removed" "$flameshot" screen -p /tmp/flameshot_path_test/subdir/..///redundancy_removed.png sleep 2 echo ">> If the destination is a directory, the file name is generated from strf from the config" "$flameshot" screen -p ./ sleep 2 echo ">> If the output file has no suffix, it will be added (png)" "$flameshot" screen -p /tmp/flameshot_path_test/without_suffix sleep 2 echo ">> Other suffixes are supported, and the image format will match it" "$flameshot" screen -p /tmp/flameshot_path_test/jpg_suffix.jpg sleep 2 echo ">> If the destination path exists, it will have _NUM appended to the base name" "$flameshot" screen -p /tmp/flameshot_path_test/absolute.png sleep 2 echo ">> Same thing again but without specifying a suffix" "$flameshot" screen -p /tmp/flameshot_path_test/absolute sleep 2