Compare commits

..

1 Commits

Author SHA1 Message Date
Markus Gans 749ec9d5c4 interim-release 2019-10-08 15:20:02 +02:00
333 changed files with 45941 additions and 94124 deletions

View File

@ -1,15 +1,11 @@
exclude: exclude:
- /debian/.* - /fonts/.*
- /doc/.* - /scripts/.*
- /examples/.* - /doc/.*
- /fonts/.* - /build.sh
- /icon/.* - /ltmain.sh
- /logo/.* component_depth: 1
- /m4/.*
- /scripts/.*
- /build.sh
- /ltmain.sh
component_depth: 3
languages: languages:
- cpp - cpp
- script

View File

@ -1,15 +0,0 @@
---
engines:
duplication:
enabled: true
exclude_paths:
- 'fonts/**'
- 'test/**'
exclude_paths:
- 'debian/**'
- 'doc/**'
- 'icon/**'
- 'logo/**'
- 'm4/**'
- 'scripts/**'

View File

@ -1,4 +1,4 @@
PROJECT_NAME = "FINAL CUT" PROJECT_NAME = "The Final Cut"
EXCLUDE = debian, doc, icon, logo, m4, scripts, examples EXCLUDE = debian, doc, icon, logo, m4, scripts, examples
EXCLUDE_PATTERNS = */test/* EXCLUDE_PATTERNS = */test/*

View File

@ -1,37 +0,0 @@
# EditorConfig helps maintain consistent coding styles
# for multiple developers working on the same project
# across various editors and IDEs.
#
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length=72
[ChangeLog]
trim_trailing_whitespace = false
[*.txt]
trim_trailing_whitespace = false
[*.md]
trim_trailing_whitespace = false
# Domain-Specific Properties
[*.h]
curly_bracket_next_line = true
spaces_around_operators = true
indent_brace_style = Allman
[*.cpp]
curly_bracket_next_line = true
spaces_around_operators = true
indent_brace_style = Allman

View File

@ -1,38 +0,0 @@
---
name: Bug report
about: Create a bug report
title: ''
labels: bug
assignees: ''
---
## Describe the bug
Give a detailed description of what the bug is.
## How to reproduce the bug?
Explain step-by-step the procedure to reproduce this behavior.
## What behavior did you expect?
Describe what you would expect instead.
## In which environment did the bug occur?
* Which operating system do you use?<br />
Linux, FreeBSD, NetBSD, OpenBSD, macOS, Cygwin, or Solaris
* Which distribution do you use?
* On which CPU architecture did you test?
* Which compiler in which version did you use?
* Which terminal do you use?
* What does the environment variable $TERM contain?

View File

@ -1,32 +0,0 @@
---
name: Feature request
about: Make a suggestion for this project
title: ''
labels: enhancement
assignees: ''
---
## Feature Request
**Do you want to solve a problem with your feature request? Please describe it.**
Describe clearly and precisely what the problem is.
Example: I have an issue when [...]
**Your desired solution**
Describe clearly and concisely what you want to reach.
**Alternatives you have considered**
Describe clearly and concisely the other solutions you considered.
**Additional context**
Add additional context or screenshots to your feature request here.

View File

@ -1,53 +0,0 @@
name: "ARM build"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: ubuntu-latest
name: Build on ${{ matrix.arch }}
# Run steps on a matrix of 3 arch/distro combinations
strategy:
matrix:
include:
- arch: aarch64
- arch: armv7
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Before_install
run: |
lsb_release -a
uname -a
whoami
tty || echo
pwd
- name: Install dependencies via apt-get
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get -y install \
ca-certificates \
gcc \
g++ \
gpm \
libgpm-dev \
libcppunit-dev \
autoconf-archive
- name: Build
run: |
autoreconf -v --install --force
./configure --prefix=/usr
make -j10

View File

@ -1,74 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
name: "CodeQL analysis"
on:
push:
branches: [main]
pull_request:
# The branches below must be a subset of the branches above
branches: [main]
schedule:
- cron: '0 7 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Override automatic language detection by changing the below list
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
language: ['cpp']
# Learn more...
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
- name: Build dependencies
run: sudo apt-get install autoconf-archive
- name: Create configure file
run: autoreconf -v --install --force
- name: Create makefiles
run: ./configure --prefix=/usr CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic"
- name: Build
run: make V=1 -j10
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@ -1,57 +0,0 @@
name: "Code coverage"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
analyze:
runs-on: ubuntu-latest
env:
COVERALLS_REPO_TOKEN: "${{ secrets.COVERALLS_REPO_TOKEN }}"
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Before_install
run: |
lsb_release -a
uname -a
whoami
tty || echo
pwd
- name: Install dependencies via apt-get
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get -y install \
ca-certificates \
gcc \
g++ \
gpm \
libgpm-dev \
libcppunit-dev \
autoconf-archive
- name: Download coderalls
run: pip install --user cpp-coveralls
- name: Download codecov
run: sudo pip install codecov
- name: Build with with gcov
run: script -e -c "./build.sh coverage"
- name: Coveralls
run: coveralls --gcov-options '\-lp' -e debian -e doc -e icon -e logo -e m4 -e scripts -e examples
- name: Codecov
run: bash <(curl -s https://codecov.io/bash)

View File

@ -1,86 +0,0 @@
name: "Coverity Scan"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
analyze:
# Ubuntu 16.04 LTS will be removed on September 20, 2021
runs-on: ubuntu-16.04
#runs-on: ubuntu-18.04
env:
COVERITY_SCAN_BRANCH_PATTERN: "${{ github.ref}}"
COVERITY_SCAN_NOTIFICATION_EMAIL: "guru.mail@muenster.de"
COVERITY_SCAN_PROJECT_NAME: "${{ github.repository }}"
# Set in repo settings -> secrets -> repository secrets
COVERITY_SCAN_TOKEN: "${{ secrets.COVERITY_SCAN_TOKEN }}"
CURRENT_REF: "${{ github.ref }}"
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Before_install
run: |
lsb_release -a
uname -a
whoami
tty || echo
pwd
- name: Download coverity scan build tool
run: |
wget -q https://scan.coverity.com/download/cxx/linux64 \
--post-data "token=$COVERITY_SCAN_TOKEN&project=gansm%2Ffinalcut" \
-O cov-analysis-linux64.tar.gz
mkdir cov-analysis-linux64
tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64
- name: Install dependencies via apt-get
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get -y install \
ca-certificates \
gcc \
g++ \
gpm \
libgpm-dev \
libcppunit-dev \
autoconf-archive
- name: Build with cov-build
run: |
export PATH=`pwd`/cov-analysis-linux64/bin:$PATH
cat cov-int/scm_log.txt || echo
autoreconf -v --install --force
./configure --prefix=/usr \
CPPFLAGS="-DDEBUG" \
CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" \
--with-unit-test
cov-build --dir cov-int make V=1 -j10
- name: Submit the result to Coverity Scan
run: |
tar czvf finalcut.tgz cov-int
curl \
--form token=$COVERITY_SCAN_TOKEN \
--form email=$COVERITY_SCAN_NOTIFICATION_EMAIL \
--form file=@finalcut.tgz \
--form version="main" \
--form description="Build submitted via github action" \
https://scan.coverity.com/builds?project=gansm%2Ffinalcut
- name: Make unit test
run: |
script -e -c "make check" && RET=$? || RET=$?
cat test/*.log || echo
echo "Exit status: $RET"
exit "$RET"

View File

@ -1,45 +0,0 @@
name: "Cygwin build"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: windows-latest
name: Build on ${{ matrix.platform }}
strategy:
matrix:
platform: [x86, x64]
steps:
- name: Install Cygwin
uses: egor-tensin/setup-cygwin@v3
with:
platform: ${{ matrix.platform }}
install-dir: C:\cygwin
packages: git grep make libncurses-devel gcc-core gcc-g++ automake autoconf autoconf-archive libtool pkgconf cppunit
- name: Test on Cygwin environment
run: |
uname -a
whoami
pwd
cygcheck -c -d # Show installed Cygwin packages
g++ --version
mkdir src && cd src
git clone git://github.com/gansm/finalcut.git
cd finalcut || echo "The source code directory was not found!"
autoreconf --force --install --verbose --warnings=all
automake --add-missing --copy
./configure --prefix=/usr
make -j10
shell: C:\cygwin\bin\bash.exe --login '{0}'
env:
SHELLOPTS: igncr

View File

@ -1,36 +0,0 @@
name: "FreeBSD build"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: macos-10.15
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Test on FreeBSD 12.2
uses: cross-platform-actions/action@v0.0.1
with:
operating_system: freebsd
version: 12.2
shell: bash
run: |
uname -a
freebsd-version
whoami
pwd
sudo pkg update
sudo pkg install -y lang/gcc devel/autotools autotools automake autoconf autoconf-archive libtool pkgconf devel/ncurses devel/cppunit cppunit
g++ --version
autoreconf -v --install --force
./configure --prefix=/usr
make -j10

View File

@ -1,37 +0,0 @@
name: "macOS build"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: macos-latest
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Before_install
run: |
uname -a
g++ --version
whoami
pwd
- name: Install dependencies via homebrew
run: |
brew update
brew install automake
brew install autoconf-archive
- name: Build
run: |
autoreconf -v --install --force
./configure --prefix=/usr
make -j10

View File

@ -1,38 +0,0 @@
name: "OpenBSD build"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: macos-10.15
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Test on OpenBSD 6.8
uses: cross-platform-actions/action@v0.0.1
with:
operating_system: openbsd
version: 6.8
shell: bash
run: |
uname -a
whoami
pwd
# http://ftp.openbsd.org/pub/OpenBSD/6.8/packages/amd64/
sudo pkg_add gcc-8.4.0 g++-8.4.0 automake-1.16.2 autoconf-2.69p3 autoconf-archive libtool pkgconf cppunit
export CXX=eg++
export AUTOCONF_VERSION=2.69
export AUTOMAKE_VERSION=1.16
eg++ --version
autoreconf -v --install --force
./configure --prefix=/usr
make -j10

View File

@ -1,33 +0,0 @@
name: "Solaris build"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: macos-latest
steps:
- name: Repository checkout
uses: actions/checkout@v2
- name: Test on Solaris 11.4
uses: vmactions/solaris-vm@v0.0.3
with:
prepare: pkgutil -y -i gcc5g++ automake autoconf autoconf_archive libtool pkgconfig libcppunit1_12_1 libcppunit_dev
run: |
uname -a
whoami
pwd
cat /etc/release
PATH=/opt/csw/bin:$PATH
export PATH
autoreconf -v --install --force
./configure --prefix=/usr
make

View File

@ -1,61 +0,0 @@
name: "SonarCloud analysis"
on:
push:
branches: [ main, actions-test ]
pull_request:
branches: [ main, actions-test ]
schedule:
- cron: '0 7 * * 2'
jobs:
build:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
SONAR_TOKEN: "${{ secrets.SONAR_TOKEN }}"
steps:
- name: Repository checkout
uses: actions/checkout@v2
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Before_install
run: |
lsb_release -a
uname -a
whoami
tty || echo
pwd
- name: Install dependencies via apt-get
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get -y install \
ca-certificates \
gcc \
g++ \
gpm \
wget \
unzip \
libgpm-dev \
libcppunit-dev \
autoconf-archive
- name: Build with SonarCloud
run: |
wget -q "https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip"
unzip -q "build-wrapper-linux-x86.zip" -d "/tmp" || echo
LATEST_VERSION=$(wget -O- https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/ 2>/dev/null | grep 'linux.zip"' | cut -d\" -f2 | tail -n1)
wget -q "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/$LATEST_VERSION"
unzip -q "$LATEST_VERSION" -d "/tmp" || echo
echo "sonar.host.url=https://sonarcloud.io" >> /tmp/sonar-scanner-*/conf/sonar-scanner.properties
mkdir /tmp/sonar-cache
autoreconf -v --install --force
./configure --prefix=/usr
/tmp/build-wrapper-linux-x86/build-wrapper-linux-x86-64 --out-dir bw-output make all
/tmp/sonar-scanner-4.6.2.2472-linux/bin/sonar-scanner

7
.gitignore vendored
View File

@ -32,17 +32,13 @@ Makefile.in
/missing /missing
/stamp-h1 /stamp-h1
/test-driver /test-driver
src/.depend
src/.deps/ src/.deps/
src/.libs/ src/.libs/
examples/.deps/ examples/.deps/
examples/.libs/ examples/.libs/
examples/calculator examples/calculator
examples/dialog examples/dialog
examples/busy
examples/event-log
examples/string-operations examples/string-operations
examples/background-color
examples/opti-move examples/opti-move
examples/termcap examples/termcap
examples/hello examples/hello
@ -53,15 +49,12 @@ examples/windows
examples/term-attributes examples/term-attributes
examples/transparent examples/transparent
examples/input-dialog examples/input-dialog
examples/fullwidth-character
examples/7segment
examples/choice examples/choice
examples/listbox examples/listbox
examples/listview examples/listview
examples/checklist examples/checklist
examples/treeview examples/treeview
examples/mandelbrot examples/mandelbrot
examples/rotozoomer
examples/keyboard examples/keyboard
examples/mouse examples/mouse
examples/timer examples/timer

View File

@ -1,13 +0,0 @@
extraction:
cpp:
prepare:
packages:
- autoconf-archive
configure:
command:
- autoreconf -v --install --force
- ./configure --prefix=/usr CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic"
index:
build_command:
- make V=1 -j10

94
.travis.yml Normal file
View File

@ -0,0 +1,94 @@
language: cpp
dist: trusty
sudo: required
compiler:
- gcc
addons:
apt:
packages:
- autotools-dev
- automake
- autoconf
- autoconf-archive
- libtool
- libglib2.0-dev
- libncurses5-dev
- gpm
- libgpm-dev
- gperf
- libcppunit-dev
env:
global:
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key
- secure: |-
wvCvMaIm7LoSyWHmpRXvJIetdMnJKsLLxuon6r6BSfpyimoz5FIMEhNhfSt2psv8tJHZgN
/FcMcLhnTuTMIjvtlEtb3syfHDaNs7S2q3rm6LCmuIUU4ECAwAorkMQbXcyh5rgPlDMDiw
CyBE8O1yFQebAFxRoP181+0uI2IiIP/8EW3P5PDSQzds+9fnnwrFS+OeBoUZfxT0F2kj2f
kMXZN4+KmeVIrkqtj8hlRcicLgBPm4hrK5IEUcFLtAbzPj72wkV1duiYG6kqDsATmzMK0m
5EuMhQ/nL/rbSjhrcRZzPFQ7P31ToSwg1I6cyhMjyXSbpwdppZ/RSwTpqDCdq9l4bDDmvI
qizdwYZKcDtyHxm4Zl/LZKwWDsGEelcmuJKfdu+QuTgInGNlqulmDykvbsrk9jTimIzHTb
F8TOn9IpANlTWmvunGeOarvR9qJReZcwSMq41hdMbsUdHiC1arZjKvINcPVuwikzaNq4iA
te6mtSdrfdx1wLxQ6ZYNgKd9hz+uUTlBYl80hkATmq0NPnPQw2KzyG9E6nLrKOy2M0ozO8
bL/epiiMBKJ37X1UcRU4WZYq+peLME8EefcPcXOSWNLwJtR7mtON8uMBrLL9CWmRMFD5Hy
lQYALW2DhCnDBROKB3gxB/VkBGFNE0IPGeDtBGbLqDtKWPQoL125I=
matrix:
include:
#
# Coverity Scan
#
- os: linux
env:
- TEST="Coverity Scan"
addons:
coverity_scan:
project:
name: gansm/finalcut
description: Build submitted via Travis CI
notification_email: guru.mail@muenster.de
build_command_prepend: "autoreconf -v --install --force && ./configure --prefix=/usr CPPFLAGS='-DDEBUG' CXXFLAGS='-g -O0 -DDEBUG' --with-unit-test && make clean"
build_command: "make V=1 -j10"
branch_pattern: master
before_install:
- lsb_release -a
- uname -a
- whoami
- sudo apt-get install gpm libgpm-dev libcppunit-dev
script:
- autoreconf -v --install --force
- ./configure --prefix=/usr CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG" --with-unit-test
- make V=1 -j10
- make check
- cat test/*.log
#
# Coveralls
#
- os: linux
env:
- TEST="Coveralls"
before_install:
- lsb_release -a
- uname -a
- pip install --user cpp-coveralls
script:
- ./build.sh coverage
after_success:
- coveralls --gcov-options '\-lp' -e debian -e doc -e icon -e logo -e m4 -e scripts -e examples
#
# macOS
#
- os: osx
env:
- TEST="macOS"
before_install:
- uname -a
script:
- autoreconf -v --install --force
- ./configure --prefix=/usr
- make -j10

View File

@ -1,11 +0,0 @@
# Code of Conduct
The FINAL CUT Project aims to be a welcoming place and we ask that everyone
who interacts with the project and the larger community treat each other
with dignity and respect. Individuals who do not behave in this manner will
be warned and asked to adjust their behavior; in extreme cases, individuals
could get excluded from the project.
Examples of inappropriate behavior include profane, offensive, or
prejudicial language directed at another person, vandalism, or spam.

633
ChangeLog
View File

@ -1,638 +1,9 @@
2021-06-26 Markus Gans <guru.mail@muenster.de>
* Global non-constant variables are now encapsulated in classes
2021-06-19 Markus Gans <guru.mail@muenster.de>
* Moving the creator methods from FTerm to its own class
2021-06-16 Markus Gans <guru.mail@muenster.de>
* Converted the internal timer from timeval
to std::chrono::time_point<system_clock>
2021-06-06 Markus Gans <guru.mail@muenster.de>
* Bug fixing in FString and FTermDetection
* FTermDetection now has clean code by using FString instead of char*
* Replace std::strlen with stringLength
2021-06-03 Markus Gans <guru.mail@muenster.de>
* Some FString optimizations
2021-05-30 Markus Gans <guru.mail@muenster.de>
* FString internally changed from wchar_t* to std::wstring
2021-05-24 Markus Gans <guru.mail@muenster.de>
* Using std::string for the attribute buffer
2021-05-22 Markus Gans <guru.mail@muenster.de>
* Convert FOptiMove from char[] to std::string
2021-05-13 Markus Gans <guru.mail@muenster.de>
* Prevent duplicate widget in the close widget list
2021-05-07 Markus Gans <guru.mail@muenster.de>
* Some pointers were replaced by references
2021-05-04 Markus Gans <guru.mail@muenster.de>
* Prevent flickering when resizing terminals or redrawing
the screen via ctrl-l
2021-05-02 Markus Gans <guru.mail@muenster.de>
* Bugfix for sending multiple SIGWINCH signals from
gnome-terminal under Wayland
2021-05-01 Markus Gans <guru.mail@muenster.de>
* Replace some std::bind with lambda functions
2021-04-30 Markus Gans <guru.mail@muenster.de>
* Fixes Linux console bug from February 20, 2021
2021-04-27 Markus Gans <guru.mail@muenster.de>
* Code optimization at widget focus
2021-04-24 Markus Gans <guru.mail@muenster.de>
* Fixed mutex deadlock in FLogger
2021-04-21 Markus Gans <guru.mail@muenster.de>
* Fixes the detection of the terminal size after a SIGWINCH signal
2021-04-18 Markus Gans <guru.mail@muenster.de>
* Decoupling the FWidget and FWindow classes from FVTerm
* Avoid redrawing widgets when show() is called multiple times
* Readjustment of the root widget when the terminal size is changed
2021-04-11 Markus Gans <guru.mail@muenster.de>
* Better support for kitty terminals
2021-03-31 Markus Gans <guru.mail@muenster.de>
* argv is now stored internally as a std::vector container
2021-03-30 Markus Gans <guru.mail@muenster.de>
* Stops terminal refresh during dialog resizing until all
child widgets have been redrawn
2021-03-28 Markus Gans <guru.mail@muenster.de>
* Widget now have the virtual method initLayout() to set
the widget layouts automatically before the first drawing
on the terminal is done. Also texts in full-width characters,
whose character width is determined automatically, should be
calculated here.
2021-03-15 Markus Gans <guru.mail@muenster.de>
* Dynamic adjustment of the terminal refresh rate between
5 and 60 Hz
2021-03-09 Markus Gans <guru.mail@muenster.de>
* Implementation of an own padding print method for sending
control codes to the terminal
2021-02-28 Markus Gans <guru.mail@muenster.de>
* Removing the termcap library from the header files so
that FINAL CUT programs are not affected by the preprocessor
#define macros.
Many thanks to Zhenyu Zhang for this optimization suggestion
2021-02-24 Markus Gans <guru.mail@muenster.de>
* Fixed the incorrect display on terminals without
UTF-8 character encoding
2021-02-20 Markus Gans <guru.mail@muenster.de>
* Optimize terminal output buffer queue with differencing
for strings, and control characters and control sequences
2021-02-09 Markus Gans <guru.mail@muenster.de>
* Added support for combined unicode characters
* Added a unit test for the FTermBuffer class
* Added a unit test for the FTterm functions
2020-12-31 Markus Gans <guru.mail@muenster.de>
* Refactoring to scoped enumerations
2020-11-18 Markus Gans <guru.mail@muenster.de>
* The terminal update rate is now limited to 60 Hz
2020-11-14 Markus Gans <guru.mail@muenster.de>
* Version 0.7.1
* Bugfix: The cursor position was not changed anymore
if there was no change to the content
* Forcing a direct update for faster terminal output
2020-11-07 Markus Gans <guru.mail@muenster.de>
* Version 0.7.0
2020-11-04 Markus Gans <guru.mail@muenster.de>
* Elimination of unnecessary terminal flushes
2020-11-03 Markus Gans <guru.mail@muenster.de>
* Use FIONREAD to get the number of characters available
for reading on stdin
2020-11-02 Markus Gans <guru.mail@muenster.de>
* Non-blocking reading before timeout after keystroke
* Every fourth event processing causes a terminal flush
* Call of TIOCLINUX only in the Linux console
2020-11-01 Markus Gans <guru.mail@muenster.de>
* Now FINAL CUT queues keyboard and mouse input to speed up
the processing of widget events
2020-10-22 Markus Gans <guru.mail@muenster.de>
* Repair terminal update skipping
2020-10-20 Markus Gans <guru.mail@muenster.de>
* For fast mouse movements the keyboard interval was increased
from 13.3 to 30 Hz
2020-10-19 Markus Gans <guru.mail@muenster.de>
* Optimize the terminal output speed
2020-10-17 Markus Gans <guru.mail@muenster.de>
* Fixes unit test segfault
2020-10-11 Markus Gans <guru.mail@muenster.de>
* Solaris build fix
* Added saving and restoring xterm titles to the stack
for vte terminals
* Menu key - activates the menu bar
* Shift-Menu - opens the dialog menu
2020-10-08 Markus Gans <guru.mail@muenster.de>
* Better keyboard support for urxvt terminals
* Screen reports (like Secondary DA) are now read directly
* Report Cursor Position (DECXCPR) support
* FListView and FListBox now have direct access to the list of client
elements via data()
2020-10-05 Markus Gans <guru.mail@muenster.de>
* Now hides the input cursor when a widget gets hidden
2020-10-04 Markus Gans <guru.mail@muenster.de>
* Replaces some C-style arrays with std::array
* Now you can use the arrow keys to move a window into the visible area
* Removes FData memory leak in FListBoxItem and FListViewItem
2020-09-27 Markus Gans <guru.mail@muenster.de>
* An explanation of the widget tree was added to the document
of the first steps
2020-09-26 Markus Gans <guru.mail@muenster.de>
* FData improvements
* The number of FObject children can now be limited with
setMaxChildren()
* FApplication can now have no more than one child widget
2020-09-25 Markus Gans <guru.mail@muenster.de>
* std::clog now streams everything to the FLogger object
* Added a unit test for the FData class
2020-09-23 Markus Gans <guru.mail@muenster.de>
* Bugfix: empty FString() + wchar_t
2020-09-22 Markus Gans <guru.mail@muenster.de>
* Bugfix in FDialog::setSize(): Automatic size adjustment and
simultaneous widget movement are now possible.
2020-09-18 Markus Gans <guru.mail@muenster.de>
* The generic data type FDataPtr is now deprecated and was
completely replaced by the template class FData
2020-09-11 Markus Gans <guru.mail@muenster.de>
* Fixes a problem with mouse input in Cygwin in non-blocking read mode
2020-09-08 Markus Gans <guru.mail@muenster.de>
* Speed up the reaction time of the gpm mouse
* FListView now correctly adjusts the size of the scrollbar,
when expanding and collapsing by double-clicking
2020-08-30 Markus Gans <guru.mail@muenster.de>
* Adding Windows Terminal detection
2020-08-15 Markus Gans <guru.mail@muenster.de>
* The call of the function setNonBlockingRead() resulted in
a high CPU load in idle mode.
Thanks to Pavel Stehule for reporting this problem.
2020-08-11 Markus Gans <guru.mail@muenster.de>
* New callback backend was implemented. Callback functions with any
number of arguments are now possible.
2020-07-19 Markus Gans <guru.mail@muenster.de>
* API: Some method name changes:
FObject::delOwnTimer() -> FObject::delOwnTimers()
FObject::delAllTimer() -> FObject::delAllTimers()
FWidget::delCallbacks() -> FWidget::delAllCallbacks()
2020-07-08 Markus Gans <guru.mail@muenster.de>
* New data wrapper class FData
2020-07-06 Markus Gans <guru.mail@muenster.de>
* Add a document that describes how to create user themes
2020-06-11 Markus Gans <guru.mail@muenster.de>
* New widget FBusyIndicator to indicate background activity
* Added example/busy to demonstrate the functionality of this widget
2020-06-07 Markus Gans <guru.mail@muenster.de>
* The --log-file parameter stores log output to any file. The file
can be viewed directly on another terminal with "tail -f".
2020-06-06 Markus Gans <guru.mail@muenster.de>
* Now, the terminal is not initialized before the method show()
is called. Or you force it explicitly via the FApplication object.
* Simplification of FMouse::createMouseObject()
2020-05-30 Markus Gans <guru.mail@muenster.de>
* With the two new methods FApplication::setDarkTheme() and
FApplication::setDefaultTheme() you can now change the theme
within an application. An example can be found in examples/ui
via the menu items "View" -> "Dark mode".
2020-05-29 Markus Gans <guru.mail@muenster.de>
* Adding a dark theme. Can be activated with the --dark-theme parameter.
2020-05-28 Markus Gans <guru.mail@muenster.de>
* FColorPalette now also uses polymorphism, so you can now
easily create your own color palette theme
2020-05-26 Markus Gans <guru.mail@muenster.de>
* FWidgetColors now uses polymorphism, so you can now easily
create your own widget color theme
* FApplication has got the new virtual method processExternalUserEvent()
for user code
2020-05-24 Markus Gans <guru.mail@muenster.de>
* New class FStringStream implements input and output operations
on FString based streams
* Fixed memory leak in FString move assignment operator
2020-05-21 Markus Gans <guru.mail@muenster.de>
* Fixed the event queue in FApplication
2020-05-16 Markus Gans <guru.mail@muenster.de>
* More direct access to the static FTerm functions
2020-05-13 Markus Gans <guru.mail@muenster.de>
* The new class FLogger for logging, which can be redirected
to different I/O channels
* Adding the event-log example to show the logging functionality
2020-05-02 Markus Gans <guru.mail@muenster.de>
* Transfer of all termcap functions into the FTermcap class
2020-04-28 Markus Gans <guru.mail@muenster.de>
* Adding the missing method getClientSize()
* Static code for the special built-in key sequences
2020-04-15 Markus Gans <guru.mail@muenster.de>
* Better support of general arrow keys
* Improved event handling code
2020-04-13 Markus Gans <guru.mail@muenster.de>
* Several small code improvements
2020-04-09 Markus Gans <guru.mail@muenster.de>
* A dialog can now be displayed without a framing border.
Many thanks to basedtho for this tip
2020-03-22 Markus Gans <guru.mail@muenster.de>
* A small benchmakt test was added to the Rotozoomer example
2020-03-08 Markus Gans <guru.mail@muenster.de>
* A rotozoomer example was added to demonstrate the drawing speed
of FINAL CUT
2020-03-07 Markus Gans <guru.mail@muenster.de>
* Fixes keyboard input buffer problem when opening a modal dialog
* Exit the move-resize-mode when the close confirmation dialog
is displayed
2020-03-05 Markus Gans <guru.mail@muenster.de>
* Unbuffered reading of keystrokes for better latency
* Mouse adjustments when resizing an rxvt terminal
2020-02-25 Markus Gans <guru.mail@muenster.de>
* New command line switch "--no-terminal-data-request" to disable
font and title determination
2020-02-19 Markus Gans <guru.mail@muenster.de>
* Some small code improvements
* SGRoptimizer improved
2020-02-16 Markus Gans <guru.mail@muenster.de>
* Printing a FStyle object allows you to change video attributes
2020-02-13 Markus Gans <guru.mail@muenster.de>
* Rename setTransShadow() to setColorOverlay()
2020-02-11 Markus Gans <guru.mail@muenster.de>
* Fix collapse() and expand() in FListViewItem()
2020-02-09 Markus Gans <guru.mail@muenster.de>
* Adding a tty check for stdin
* An application structure diagram was added to the document
of the first steps
2020-02-04 Markus Gans <guru.mail@muenster.de>
* Fix in FListViewIterator
* Add screenshorts to the first steps document
2020-02-02 Markus Gans <guru.mail@muenster.de>
* The methods clear() and remove() were added to FListView
* Add some const type qualifiers
* A small GNU autoconf-archive check
2020-01-12 Markus Gans <guru.mail@muenster.de>
* Add a "widget layout" chapter to the first steps document
2020-01-09 Markus Gans <guru.mail@muenster.de>
* With setText() and clearText() the text in the edit line can be changed
without changing the content of the combo box
* The setCurrentItem() method was added to the FComboBox widget class.
Thanks cybin for the sample code
2020-01-03 Markus Gans <guru.mail@muenster.de>
* Illustrations to explain the widget layout
2019-12-31 Markus Gans <guru.mail@muenster.de>
* The new SGRoptimizer class allows several consecutive parameters
from the SGR (Select Graphic Rendition) attributes to be combined
into one
2019-12-23 Markus Gans <guru.mail@muenster.de>
* Correction for height and width alignment in adjustSize()
* Better setSize() implementation in some widgets
2019-12-20 Markus Gans <guru.mail@muenster.de>
* Fixed the drawing of FLabel widget with the default size
of 1×1 character.
Thanks to terranpro for reporting this issue
2019-12-16 Markus Gans <guru.mail@muenster.de>
* New widget class FComboBox to provide a dropdown list
with an input field
2019-11-17 Markus Gans <guru.mail@muenster.de>
* Revision of FString number input stream
2019-11-16 Markus Gans <guru.mail@muenster.de>
* New widget class FSpinBox to provide spin boxes
2019-11-06 Markus Gans <guru.mail@muenster.de>
* Improved display of the NewFont midline
2019-11-03 Markus Gans <guru.mail@muenster.de>
* Newfont specialization for 8x16 and 9x16 pixel character
* Fixes the display of reverse characters on the 16 color
Linux console
2019-10-28 Markus Gans <guru.mail@muenster.de>
* Unicode support for 8x16graph font
2019-10-20 Markus Gans <guru.mail@muenster.de>
* New method setInputType() in FLineEdit that allows to obscure
password entries
* FAcceleratorList reimplemented as non-pointer
2019-10-15 Markus Gans <guru.mail@muenster.de>
* Version 0.6.0
2019-10-13 Markus Gans <guru.mail@muenster.de>
* Compile fix for Cygwin and Linux on arm architectures
* A small color palette optimization
* Corrected east asian ambiguous character width for OpenBSD, NetBSD,
FreeBSD and Solaris
2019-10-05 Markus Gans <guru.mail@muenster.de>
* Internal redesign of the callback call
* Mapping of key functions in an associative container to simplify
onKeyPress() in FListBox, FListView, FTextView and FScrollView
2019-10-01 Markus Gans <guru.mail@muenster.de>
* Replacing null-terminated wide strings with FString objects
* Fix for getColumnWidth() with newfont character
2019-09-29 Markus Gans <guru.mail@muenster.de>
* Streaming into an FTextView() object
* Fixes the streaming of empty FString objects into a stream with
a width > 0
* The FString operator [] now returns a null character ('\0')
if the position is equal to the string length
2019-09-28 Markus Gans <guru.mail@muenster.de>
* Support for displaying full-width characters (2 columns wide)
on the terminal. This is particularly important for the correct
display of CJK characters
2019-09-16 Markus Gans <guru.mail@muenster.de>
* Improve FStartOptions implementation
2019-09-08 Markus Gans <guru.mail@muenster.de>
* Remove the lines of the #pragma pack() directive from the code
because they caused a misaligned address
2019-09-06 Markus Gans <guru.mail@muenster.de>
* Outsourcing the initialization data to a separate struct
2019-09-04 Markus Gans <guru.mail@muenster.de>
* The Cygwin and Linux console do not use cp437 character encoding
by default anymore
2019-09-01 Markus Gans <guru.mail@muenster.de>
* Removing public + protected data members from classes
2019-08-25 Markus Gans <guru.mail@muenster.de>
* More use of direct initializations
2019-08-18 Markus Gans <guru.mail@muenster.de>
* Solved problem detecting terminal size on quick changes
* Update VTerm information only in case of changes
* Fixes print() << FPoint() behavior in FScrollView
2019-08-11 Markus Gans <guru.mail@muenster.de>
* FRect has now got a scaleBy() method
* Convert drawBorder() to a non-member function using FRect
* Converts getHotkeyPos() for sharing into a non-member function
2019-08-10 Markus Gans <guru.mail@muenster.de>
* Pitch and duration of system speaker can now be changed
on OpenBSD
2019-08-07 Markus Gans <guru.mail@muenster.de>
* Fixes the Cygwin build
2019-08-04 Markus Gans <guru.mail@muenster.de>
* Reduce the number of interface parameters
2019-07-31 Markus Gans <guru.mail@muenster.de>
* Unit test for the move assignment operator and move constructor
in FPoint, FSize and FRect
2019-07-28 Markus Gans <guru.mail@muenster.de>
* FreeBSD can now change the frequency and duration
of the pc speaker signal
* Added a unit test for the FTermFreeBSD class to test
the FreeBSD console
2019-07-21 Markus Gans <guru.mail@muenster.de>
* Reduce include entries in the header files
2019-07-14 Markus Gans <guru.mail@muenster.de>
* Reduces the use of raw loops
* Add a unit test for FTermOpenBSD to test the OpenBSD
and NetBSD console
2019-06-30 Markus Gans <guru.mail@muenster.de>
* Expanding the unit test for FTermLinux
* Update the cp437 unicode map
* Reducing the special cases for Solaris
2019-06-19 Markus Gans <guru.mail@muenster.de>
* Add a unit test for FTermLinux with a Linux console emulation
and a dedicated FSystem test instance
2019-06-12 Markus Gans <guru.mail@muenster.de>
* Fixes problem with scroll bar view after first draw
2019-06-02 Markus Gans <guru.mail@muenster.de>
* Avoid drawing the scroll bars if the widget is non-visible
2019-05-27 Markus Gans <guru.mail@muenster.de>
* Use the Singleton design pattern to get a single object instance
via FTerm
2019-05-26 Marek Habersack <grendel@twistedcode.net>
* Fix a segfault when processing input to empty FListView
2019-05-17 Markus Gans <guru.mail@muenster.de>
* Move system calls to the new class FSystem
2019-04-27 Markus Gans <guru.mail@muenster.de>
* Add the reserve() method to FListBox to increase the capacity
of the list
* Use shrink_to_fit() to save memory space
2019-03-24 Markus Gans <guru.mail@muenster.de>
* Add a "scroll view" chapter to the first steps document
2019-02-28 Markus Gans <guru.mail@muenster.de>
* Add an lambda expression callback example to the first steps document
2019-02-24 Markus Gans <guru.mail@muenster.de>
* FLineEdit now has the ability to define a character input filter
via regular expression (regex)
* Now FLineEdit can define a maximum character length for the input
* The cursor position can now be set directly in FLineEdit
* Added the 7-segment example to demonstrate the use of FTermBuffer
and FLineEdit input filters
2019-02-07 Markus Gans <guru.mail@muenster.de>
* Add a "dynamic layout" chapter into the first steps document
2019-01-30 Markus Gans <guru.mail@muenster.de>
* Printing an FColorPair object can change the foreground and
background color
2019-01-27 Markus Gans <guru.mail@muenster.de>
* The print command can now have an FPoint object as a parameter
to set the cursor position
* Refactoring of the FProgressbar drawing methods
2019-01-24 Markus Gans <guru.mail@muenster.de>
* Refactoring of some methods in FVTerm and FDialog
2019-01-21 Markus Gans <guru.mail@muenster.de>
* More accurate interfaces through the strict use of FPoint()
and FSize()
2019-01-16 Markus Gans <guru.mail@muenster.de>
* New class FSize for storing dimensions
2019-01-12 Markus Gans <guru.mail@muenster.de>
* Refactoring FFileDialog::fileOpenChooser
* Refactoring FFileDialog::fileSaveChooser
* Refactoring FListBox::init()
* Refactoring FListView::init()
* Refactoring FTextView::init()
* Refactoring FTermXTerminal::resetXTermForeground()
* Refactoring FTermXTerminal::resetXTermBackground()
* Refactoring FTermXTerminal::resetXTermCursorColor()
* Refactoring FTermXTerminal::resetXTermMouseForeground()
* Refactoring FTermXTerminal::resetXTermMouseBackground()
* Refactoring FTermXTerminal::resetXTermHighlightBackground()
2019-01-11 Markus Gans <guru.mail@muenster.de>
* Generalize hide() method
2019-01-09 Markus Gans <guru.mail@muenster.de>
* Improvement in widget focusing
* Better widget visibility handling with the methods hide() and show()
2019-01-05 Markus Gans <guru.mail@muenster.de>
* Use of initializer_list for FListBox, FListView and FTextView
2019-01-04 Markus Gans <guru.mail@muenster.de>
* Use the final specifier
2019-01-03 Markus Gans <guru.mail@muenster.de>
* Improved PC encoding for Cygwin and Linux
* Integration of an output filter to replace missing characters
* Better Linux console support for UTF-8 encoding
(Default is PC charset encoding)
* Better background color for all terminals with a fixed color palette
2018-12-31 Markus Gans <guru.mail@muenster.de>
* Use the override specifier
2018-12-30 Markus Gans <guru.mail@muenster.de>
* Cygwin compiled fix for C++11
2018-12-29 Markus Gans <guru.mail@muenster.de>
* Text scrolling in FTextView was broken since February 17th!
* Replace redundant FString code with templates
2018-12-28 Markus Gans <guru.mail@muenster.de>
* Add the assignment operator (=) for FButton to set the button text
* Corrected shortening of overlong texts in the title bar of FDialog
* Add a "signals and callbacks" chapter into the first steps document
2018-12-25 Markus Gans <guru.mail@muenster.de>
* Add a "event processing" chapter into the first steps document
2018-12-24 Markus Gans <guru.mail@muenster.de>
* Events can not only be sent to FWidgets, but also to FObjects
* New event FUserEvent for user-defined events
2018-12-19 Markus Gans <guru.mail@muenster.de>
* Use of smart pointers
* Add a "memory management" chapter into the first steps document
2018-12-17 Markus Gans <guru.mail@muenster.de>
* Improve FButton mouse click animation
* Minor data type corrections
* Reactivate the event queue
2018-12-15 Markus Gans <guru.mail@muenster.de>
* Use of the C++11 auto specifier in the program code
* Code reduction by using of range-based for loop
* The example program for video attributes now replaces
the switch statement with a vector of lambda expressions
2018-12-09 Markus Gans <guru.mail@muenster.de>
* Better handling of the scroll bar maximum
* Deactivate copy constructor and assignment operator with "= delete"
* Use nullptr instead of 0 to initialize a pointer values
2018-12-06 Markus Gans <guru.mail@muenster.de>
* Easier handling of fc::SpecialCharacter
2018-12-01 Markus Gans <guru.mail@muenster.de> 2018-12-01 Markus Gans <guru.mail@muenster.de>
* Switched to the language standard C++11 * Improved wheel mouse support
* Use delegated constructors and in-class default member initializers
2018-12-01 Markus Gans <guru.mail@muenster.de>
* Improved gpm wheel mouse support
* Fix compile in optimization level 2 for newer gcc * Fix compile in optimization level 2 for newer gcc
2018-11-27 Markus Gans <guru.mail@muenster.de> 2018-11-27 Markus Gans <guru.mail@muenster.de>
* Correct vertical scroll bar position after sorting in FListView * Correct vertical scrollbar position after sorting in FListView
2018-11-25 Markus Gans <guru.mail@muenster.de> 2018-11-25 Markus Gans <guru.mail@muenster.de>
* Version 0.5.0 * Version 0.5.0

View File

@ -1,103 +0,0 @@
# Contributing
Thank you for your interest in FINAL CUT!
We welcome contributions of all kinds, including patches to code and
documentation, bug reports, or just neat feedback. If you ever think that
something could be better or different, please give us feedback on it. Do
you have problems with FINAL CUT, or are you looking for support in using
the library in your project? Feel free to open a new issue if there is not
already one on your topic. If you have problems with an application that
uses FINAL CUT and have no idea of the cause, please contact the author
first.
Github hosts the source code of FINAL CUT. You can make a local copy from
the repository using git clone:
```bash
> git clone git://github.com/gansm/finalcut.git
```
## Submitting patches
The FINAL CUT project accepts both
[GitHub pull requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)
and patches that reach me via other channels. GitHub pull requests are
preferred. Please follow our [coding style](doc/coding-style.txt) standard.
### Explain your work
When submitting a patch, you should include a description of the problem
you are trying to solve, how you solved it, and why you chose the solution
you implemented. When you submit a bug fix, it is often helpful to include
a reproducible description for the problem in your explanation. Important
would be instructions on how to test the error and verify its elimination.
### Test your code
Run the FINAL CUT unit tests if you have installed
[CppUnit](https://freedesktop.org/wiki/Software/cppunit/).
Proceed as follows:
The easy way
```bash
> make distclean
> ./build.sh unit-test
```
or
```bash
> make distclean
> ./configure --prefix=/usr CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" --with-unit-test
> make test
```
If you have created uncovered code, I would be very grateful for
complementary test code in the existing unit tests.
## Issue Tracking
We currently use the
[issue tracker on Github](https://github.com/gansm/finalcut/issues).
## How to help
### What FINAL CUT needs
* We want your feedback, your opinion, your advice, and to hear what you
think!
* Help make FINAL CUT better known. Tell others about this project. A large
user base also means a better and more stable codebase.
* Help maintain and improve the library.
* Write unit tests for untested code.
### What would be helpful
* **Improve documentation:** <br />
Fix typos or grammar mistakes. Revise sections that need improvement or
add missing sections.
* **Translations into other languages:** <br />
For many people, reading the documentary in their native language will
certainly make getting started with FINAL CUT much easier and more
attractive.
* **Better tests:** <br />
High code coverage gives us a stable base that prevents breaking code due
to a small patch.
* **Publication in repositories:** <br />
Advocate for the inclusion of FINAL CUT in your preferred distribution.
* **Support for other platforms:** <br />
There are still platforms on which FINAL CUT is not yet executable.
* **Do you like to help other people?** <br />
Answer questions in open issues or help moderate discussion forums or
other communication channels.
Please help us make the FINAL CUT widget toolkit the best library for
text-based user interfaces.

View File

@ -1,5 +1,5 @@
#---------------------------------------------------------------------- #----------------------------------------------------------------------
# Makefile.am - FINAL CUT terminal programming library # Makefile.am - The Final Cut terminal programming library
#---------------------------------------------------------------------- #----------------------------------------------------------------------
AUTOMAKE_OPTIONS = foreign AUTOMAKE_OPTIONS = foreign
@ -19,7 +19,3 @@ docdir = ${datadir}/doc/${PACKAGE}
doc_DATA = AUTHORS COPYING COPYING.LESSER ChangeLog doc_DATA = AUTHORS COPYING COPYING.LESSER ChangeLog
test: check test: check
uninstall-hook:
if test -d ${docdir}; then rmdir ${docdir}; fi

243
README.md
View File

@ -1,26 +1,24 @@
![FINAL CUT](logo/svg/finalcut-logo.svg) ![FINAL CUT](logo/svg/finalcut-logo.svg)
============================================
# Library for creating terminal applications with text-based widgets ### Building and code analysis
*Latest release:*<br />
&#160;&#160;&#160;&#160;&#160;[![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) <br />
*Travis CI:*<br />
&#160;&#160;&#160;&#160;&#160;[![Build Status](https://travis-ci.org/gansm/finalcut.svg?branch=master)](https://travis-ci.org/gansm/finalcut) <br />
*Coverity Scan:*<br />
&#160;&#160;&#160;&#160;&#160;[![Coverity Scan Status](https://scan.coverity.com/projects/6508/badge.svg)](https://scan.coverity.com/projects/6508) <br />
*LGTM:*<br />
&#160;&#160;&#160;&#160;&#160;[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/gansm/finalcut.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/gansm/finalcut/context:cpp) <br />
*Class Reference:*<br />
&#160;&#160;&#160;&#160;&#160;[![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html)
FINAL CUT is a C++ class library and widget toolkit with full [mouse](doc/mouse-control.md#title-bar-actions-on-mouse-clicks) support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen. ### Description
The FINAL CUT is a C++ class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen.
The structure of the Qt framework was originally the inspiration for the C++ class design of FINAL CUT. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on. The structure of the Qt framework was originally the inspiration for the C++ class design of FINAL CUT. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
## Building and code analysis ### Installation
| | Badge |
|-------------------:|:------|
| *Latest release* | [![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) |
| *License* | [![license](https://img.shields.io/github/license/gansm/finalcut.svg?colorA=#333)](COPYING) |
| *Class Reference* | [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html) |
| *Travis CI* | [![Build Status](https://travis-ci.com/gansm/finalcut.svg?branch=main)](https://travis-ci.com/gansm/finalcut)
| *Coverity Scan* | [![Coverity Scan Status](https://img.shields.io/coverity/scan/6508.svg)](https://scan.coverity.com/projects/6508 )|
| *LGTM* | [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/gansm/finalcut.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/gansm/finalcut/context:cpp) |
| *SonarCloud* | [![Quality gate](https://sonarcloud.io/api/project_badges/measure?project=gansm_finalcut&metric=alert_status)](https://sonarcloud.io/dashboard?id=gansm_finalcut) |
| *CodeFactor* | [![CodeFactor](https://www.codefactor.io/repository/github/gansm/finalcut/badge)](https://www.codefactor.io/repository/github/gansm/finalcut) |
## Installation
```bash ```bash
> git clone git://github.com/gansm/finalcut.git > git clone git://github.com/gansm/finalcut.git
> cd finalcut > cd finalcut
@ -30,8 +28,7 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
> su -c "make install" > su -c "make install"
``` ```
## Supported platforms ### Supported platforms
* Linux * Linux
* FreeBSD * FreeBSD
* NetBSD * NetBSD
@ -40,76 +37,86 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
* Cygwin * Cygwin
* Solaris * Solaris
## First steps ### First steps
See the [first steps](doc/first-steps.md#first-steps-with-the-final-cut-widget-toolkit) documentation for information on how to use the library. [How to use the library](doc/first-steps.md#first-steps-with-the-final-cut-widget-toolkit)
## Some screenshots ### Screenshots
The FFileDialog widget with incremental file name search: The FFileDialog widget:
![FFileDialog](doc/fileopen-dialog.png) ![FFileDialog](doc/fileopen-dialog.png)
The FINAL CUT FProgressbar widget:
The Final Cut FProgressbar widget:
![FProgressbar](doc/progress-bar.png) ![FProgressbar](doc/progress-bar.png)
Scrollable text in the FTextView widget: Scrollable text in the FTextView widget:
![FTextView](doc/textview.png) ![FTextView](doc/textview.png)
The Mandelbrot set example: The Mandelbrot set example:
![Mandelbrot set](doc/Mandelbrot.png) ![Mandelbrot set](doc/Mandelbrot.png)
## newfont
newfont
-------
A [graphical text font](fonts/) for X11 and the Linux console. A [graphical text font](fonts/) for X11 and the Linux console.
![ui example in newfont mode](doc/newfont1.png) ![ui example in newfont mode](doc/newfont1.png)
Newfont drive symbols: Newfont drive symbols:
![drive symbols](doc/newfont2.png) ![drive symbols](doc/newfont2.png)
The calculator example in newfont mode: The calculator example in newfont mode:
![calculator](doc/calculator.png) ![calculator](doc/calculator.png)
## Benchmark
Here you can find a test for [measuring the character speed](doc/benchmark.md#benchmark) in the terminal. Virtual terminal
----------------
## Virtual terminal It uses a virtual terminal to print the character via an update method on the screen.
The virtual windows are an overlying layer to realizing window movements.
FINAL CUT uses a virtual terminal to print character via an update method on the screen. It provides (as an overlying layer) virtual windows for the realization of window movements. The update methods only transfer differences to the virtual terminal or physical screen. The update method transmits only the changes to the virtual terminal or the screen.
<pre style="line-height: 1 !important;"> <pre style="line-height: 1 !important;">
print(...) print(...)
printf(...) printf(...)
│ ╔════════════════════════[ vterm ]════════════════════════╗ ════════════════════════[ vterm ]════════════════════════╗
│ ║createVTerm() ║ │ ║createVTerm() ║
│ ║ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║ │ ║ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║
│ ║ ║ │ ║ ║
│ ║ │ restoreVTerm(x,y,w,h) │ ║ │ ║ │ restoreVTerm(x,y,w,h) │ ║
│ ┌───────╨────[ vwin ]────────────┐ ║ │ ║ ║
│ │createArea(area) │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║ │ ║ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║
│ ║ ║
│ ┌───────╨─────[ vwin ]─────────────┐ ║
│ │createArea(area) │ ║
│ │ │ ║ │ │ │ ║
│ │ │ ║ │ │ │ ║
└──┼────────► putArea(area) ────► ║ └───┼─────────────► ──────► updateVTerm(area) ────► ║
│ │ ║
│ putArea(x,y,area) ────► ║
│ │ ║
│ ◄──── getArea(x,y,area) ║
│ │ ║ │ │ ║
│ putArea(x,y,area) ║
│ ────────────────────► ║
│ getArea(x,y,area) ║
│ ◄──────────────────── ║
│ │ ║ │ │ ║
│ │ ║ │ │ ║
│ resizeArea(area)│ ║ │ resizeArea(area)│ ║
└───────╥────────────────────────┘ ║ └───────╥──────────────────────────┘ ║
║ ║
║ ║
║ ║ ║ ║
║ │ resizeVTerm()║ ║ │ resizeVTerm()║
╚═══════▼═════════════════════════════════════════════════╝ ═══▼═══════════════════════════════════════════════════════╝
│ putVTerm() │ putVTerm()
└──────────────────► updateTerminalLine(y) └──────────────────► updateTerminalLine(y)
@ -119,8 +126,10 @@ printf(...)
│ output_buffer │ │ output_buffer │
└───────────────┘ └───────────────┘
│ flushOutputBuffer() │ flush_out()
│ and putchar(char) │ +
│ Fputchar(char)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▌ ▐ ▌ ▐
@ -133,98 +142,81 @@ printf(...)
▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀
</pre> </pre>
## Class digramm
Class digramm
-------------
<pre style="line-height: 1 !important;"> <pre style="line-height: 1 !important;">
1┌────────────┐ 1┌──────────────┐
┌-----------┤ FTermLinux │
: └────────────┘
: 1┌──────────────┐
┌-----------┤ FTermFreeBSD │ ┌-----------┤ FTermFreeBSD │
: └──────────────┘ : └──────────────┘
: 1┌──────────────┐ : 1┌──────────────┐ ┌───────────┐
┌-----------┤ FTermOpenBSD │ ┌-----------┤ FTermOpenBSD │ ┌────┤ FKeyEvent │
: └──────────────┘ : └──────────────┘ │ └───────────┘
: 1┌────────────────┐ ┌───────────┐
┌-----------┤ FTermDetection │ ┌────┤ FKeyEvent │
: └────────────────┘ │ └───────────┘
: 1┌────────────────┐ │ ┌─────────────┐ : 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermcapQuirks │ ├────┤ FMouseEvent │ ┌-----------┤ FTermDetection │ ├────┤ FMouseEvent │
: └────────────────┘ │ └─────────────┘ : └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐ : 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermXTerminal │ ├────┤ FWheelEvent │ ┌-----------┤ FTermcapQuirks │ ├────┤ FWheelEvent │
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermXTerminal │ ├────┤ FFocusEvent │
: └────────────────┘ │ └─────────────┘ : └────────────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐ : 1┌──────────┐ │ ┌─────────────┐
┌-----------┤ FTermcap │ ├────┤ FFocusEvent │ ┌-----------┤ FTermcap │ ├────┤ FAccelEvent │
: └──────────┘ │ └─────────────┘ : └──────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐ : 1┌──────────┐ │ ┌─────────────
┌-----------┤ FTermios │ ├────┤ FAccelEvent │ ┌-----------┤ FTermios │ ├────┤ FResizeEvent │
: └──────────┘ │ └─────────────┘ : └──────────┘ │ └─────────────
: 1┌───────────────┐ │ ┌────────────── : 1┌───────────────┐ │ ┌────────────┐
┌-----------┤ FColorPalette │ ├────┤ FResizeEvent │ ┌-----------┤ FColorPalette │ ├────┤ FShowEvent │
: └───────────────┘ │ └────────────── : └───────────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌────────────┐ : 1┌───────────┐ │ ┌────────────┐
┌-----------┤ FOptiMove │ ├────┤ FShowEvent │ ┌-----------┤ FOptiMove │ ├────┤ FHideEvent │
: └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌────────────┐
┌-----------┤ FOptiAttr │ ├────┤ FHideEvent │
: └───────────┘ │ └────────────┘ : └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌─────────────┐ : 1┌───────────┐ │ ┌─────────────┐
┌-----------┤ FKeyboard │ ├────┤ FCloseEvent │ ┌-----------┤ FOptiAttr │ ├────┤ FCloseEvent │
: └───────────┘ │ └─────────────┘ : └───────────┘ │ └─────────────┘
: 1┌───────────────┐ │ ┌─────────────┐ : 1┌───────────┐ │ ┌─────────────┐
┌-----------┤ FMouseControl │ ├────┤ FTimerEvent │ ┌-----------┤ FKeyboard │ ├────┤ FTimerEvent │
: └───────────────┘ │ └─────────────┘ : └───────────┘ │ └─────────────┘
: 1┌─────────┐ │ ┌────────────┐1 1┌───────┐ : 1┌───────────────┐ │
┌-----------┤ FSystem │ ├────┤ FUserEvent ├------┤ FData │ ┌-----------┤ FMouseControl │ │ ┌──────────────┐
: └─────────┘ │ └────────────┘ └───────┘ : └───────────────┘ │ ┌────┤ FApplication │
: *┌─────────┐ │ ┌──────┐ ┌─────────┐ : *┌─────────┐ │ │ └──────────────┘
: ┌--------┤ FString │ │ │ FLog │◄──┤ FLogger │ : ┌--------┤ FString │ │ │ ┌─────────┐
: : └─────────┘ │ └──┬───┘ └─────────┘ : : └─────────┘ │ ├────┤ FButton │
: : *┌───────────────┐ │ :1 : : *┌────────┐ │ │ └─────────┘
: ┌--------┤ FStringStream │ │ ┌──┴───────────┐
: : └───────────────┘ │ ┌────┤ FApplication │
: : *┌────────┐ │ │ └──────────────┘
: ┌--------┤ FPoint │ │ │ ┌────────┐ : ┌--------┤ FPoint │ │ │ ┌────────┐
: : └────────┘ │ ├────┤ FLabel │ : : └────────┘ │ ├────┤ FLabel │
: : *┌───────┐ │ │ └────────┘ : : *┌───────┐ │ │ └────────┘
: ┌--------┤ FRect │ │ │ ┌───────────┐ : ┌--------┤ FRect │ │ │ ┌───────────┐
: : └───────┘ │ ├────┤ FLineEdit │ : : └───────┘ │ ├────┤ FLineEdit │
: : *┌───────┐ │ │ └───────────┘ :1 :1 │ │ └───────────┘
: ┌--------┤ FSize │ │ │ ┌──────────┐ ┌─┴──┴──┐ │ │ ┌──────────────┐ ┌──────────────┐
: : └───────┘ │ ├────┤ FSpinBox │ │ FTerm │ │ ├────┤ FButtonGroup │ ┌──┤ FRadioButton │
:1 :1 │ │ └──────────┘ └───┬───┘ ┌────────┐ │ │ └──────────────┘ │ └──────────────┘
┌─┴──┴──┐ │ │ ┌─────────┐ :1 │ FEvent │◄─────┘ │ ┌───────────────┐ │ ┌───────────┐
│ FTerm │ │ ├────┤ FButton │ ┌───┴────┐ └────┬───┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
└───┬───┘ ┌────────┐ │ │ └─────────┘ │ FVTerm │◄──┐ :1 │ └───────────────┘ │ └───────────┘
:1 │ FEvent │◄─────┘ │ ┌──────────────┐ ┌──────────────┐ └────────┘ │ ┌────┴────┐ │ ┌──────────────┐ │ ┌─────────┐
┌───┴────┐ └────┬───┘ ├────┤ FButtonGroup │ ┌──┤ FRadioButton │ ├────┤ FWidget │◄───────┼────┤ FProgressbar │ └──┤ FSwitch │
│ FVTerm │◄──┐ :1 │ └──────────────┘ │ └──────────────┘ ┌─────────┐ │ └─────────┘ │ └──────────────┘ └─────────┘
└────────┘ │ ┌────┴────┐ │ ┌───────────────┐ │ ┌───────────┐ │ FObject │◄──┘ │ ┌────────────┐
├────┤ FWidget │◄───────┼────┤ FToggleButton │◄─┼──┤ FCheckBox │ └─────────┘ ├────┤ FScrollbar │
┌─────────┐ │ └────┬────┘ │ └───────────────┘ │ └───────────┘
│ FObject │◄──┘ :1 │ ┌──────────────┐ │ ┌─────────┐
└─────────┘ ┌──────┴────────┐ ├────┤ FProgressbar │ └──┤ FSwitch │
│ FWidgetColors │ │ └──────────────┘ └─────────┘
└───────────────┘ │ ┌────────────┐
├────┤ FScrollbar │
│ └────────────┘ │ └────────────┘
│ ┌───────────┐ │ ┌───────────┐
├────┤ FTextView │ ├────┤ FTextView │
│ └───────────┘ │ └───────────┘
│ ┌───────────┐1 1┌──────────────────┐ │ ┌──────────┐1 *┌──────────────┐
├────┤ FComboBox ├------┤ FDropDownListBox │ ├────┤ FListBox ├-------┤ FListBoxItem │
│ └───────────┘ └──────────────────┘ │ └──────────┘ └──────────────┘
┌─────────────┐1 │ ┌──────────┐1 *┌──────────────┐1 ┌─────────────┐1 │ 1┌───────────┐1 *┌───────────────┐
│ FTermBuffer ├----------------------├────┤ FListBox ├-------┤ FListBoxItem ├--┐ │ FTermBuffer ├----------------------├────┤ FListView ├------┤ FListViewItem │
└─────────────┘ │ └──────────┘ └──────────────┘ : └─────────────┘ │ └───────────┘ └───────────────┘
│ 1┌───────────┐1 *┌───────────────┐ : │ ┌─────────────┐
├────┤ FListView ├------┤ FListViewItem │ : ├────┤ FScrollView │
│ └───────────┘ └────────┬──────┘ : │ └─────────────┘
│ ┌─────────────┐ :1 :
├────┤ FScrollView │ ┌───┴───┐1 :
│ └─────────────┘ │ FData ├----┘
│ └───────┘
│ ┌────────────┐1 *┌────────────┐ │ ┌────────────┐1 *┌────────────┐
│ ┌──┤ FStatusBar ├-----┤ FStatusKey │ │ ┌──┤ FStatusBar ├-----┤ FStatusKey │
│ │ └────────────┘ └────────────┘ │ │ └────────────┘ └────────────┘
@ -235,9 +227,9 @@ printf(...)
└──┬──┬───┘ └─────────┘ │ ┌─────────────┐ └──┬──┬───┘ └─────────┘ │ ┌─────────────┐
▲ ▲ └──┤ FMessageBox │ ▲ ▲ └──┤ FMessageBox │
│ │ └─────────────┘ │ │ └─────────────┘
│ │ ┌──────────┐ ┌────────────────┐ │ │ ┌──────────┐
│ └──────┤ FToolTip │◄─┤ FBusyIndicator │ │ └──────┤ FToolTip │
│ └──────────┘ └────────────────┘ │ └──────────┘
└───────────────┐ ┌──────────┐ └───────────────┐ ┌──────────┐
│ ┌───┤ FMenuBar │ │ ┌───┤ FMenuBar │
┌───────────┐ └──────┤ └──────────┘ ┌───────────┐ └──────┤ └──────────┘
@ -256,14 +248,17 @@ printf(...)
└────────────────┘ └────────────────┘
</pre> </pre>
## Frequently Asked Questions License
-------
GNU Lesser General Public License Version 3
For general questions about FINAL CUT, likely the answer is already included in the [FAQ](doc/faq.md#frequently-asked-questions). Frequently Asked Questions
--------------------------
## Please send bug reports to If you have any problems, please read the
[FAQ](doc/faq.md#frequently-asked-questions)
before you give up.
Please send bug reports to
--------------------------
https://github.com/gansm/finalcut/issues https://github.com/gansm/finalcut/issues
## License
GNU Lesser General Public License Version 3 <a href="https://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img width="200" align="right" src="https://camo.githubusercontent.com/726b87cc2ebaf8c40716842ff509c5f874381c8e/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f332f33622f4c47504c76335f4c6f676f2e737667" alt="LGPLv3" data-canonical-src="https://upload.wikimedia.org/wikipedia/commons/3/3b/LGPLv3_Logo.svg"></a>

View File

@ -1,12 +0,0 @@
# Security policy
## Dealing with security vulnerabilities
There is no separate process for handling security vulnerabilities in FINAL CUT. Security vulnerabilities are fixed and published like all other bugs. Nevertheless, from the moment they are brought to our attention, we try to close them as soon as possible.
## Reporting a security vulnerability
Preferably report a vulnerability via email to "guru.mail" + "@" + "muenster.de" or open an issue in the GitHub repository, the latter meaning that you made the vulnerability public before it was fixed.
If you already have a solution for the security problem, please submit a pull request.

View File

@ -35,7 +35,7 @@ then
autoreconf --install --force autoreconf --install --force
else else
echo "Build failed, please install autoconf first" echo "Build failed, please install autoconf first"
exit 255 exit -1
fi fi
fi fi
fi fi
@ -43,10 +43,10 @@ fi
# Build commands # Build commands
case "$1" in case "$1" in
"--release"|"release") "--release"|"release")
if ! ./configure --prefix="$PREFIX" CXXFLAGS="-O3" # "-flto -fno-rtti" if ! ./configure --prefix="$PREFIX" CXXFLAGS="-O2" # "-O3 -fno-rtti"
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
@ -54,15 +54,15 @@ case "$1" in
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic" if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -pedantic"
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
"--fulldebug"|"fulldebug") "--fulldebug"|"fulldebug")
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -fstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy -ftree-loop-distribute-patterns -Wmemset-transposed-args -Wno-format-nonliteral" if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -fstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy"
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
@ -70,7 +70,7 @@ case "$1" in
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -pg -O0 -DDEBUG -W -Wall -pedantic" if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -pg -O0 -DDEBUG -W -Wall -pedantic"
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
@ -78,23 +78,23 @@ case "$1" in
if ! ./configure --prefix="$PREFIX" --with-profiler if ! ./configure --prefix="$PREFIX" --with-profiler
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
"--unit-test"|"unit-test") "--unit-test"|"unit-test")
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" --with-unit-test if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG" --with-unit-test
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
"--coverage"|"coverage") "--coverage"|"coverage")
if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -DUNIT_TEST" --with-unit-test --with-gcov if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG" --with-unit-test --with-gcov
then then
echo "${RED}Configure failed!${NORMAL}" 1>&2 echo "${RED}Configure failed!${NORMAL}" 1>&2
exit 255 exit -1
fi fi
;; ;;
@ -139,7 +139,6 @@ if [ "$1" = "--unit-test" ] \
|| [ "$1" = "--coverage" ] \ || [ "$1" = "--coverage" ] \
|| [ "$1" = "coverage" ] || [ "$1" = "coverage" ]
then then
rm test/*.log 2>/dev/null
cd test && make check-TESTS cd test && make check-TESTS
cat ./*.log 2>/dev/null cat ./*.log 2>/dev/null
cd .. || exit cd .. || exit

View File

@ -1,5 +0,0 @@
coverage:
status:
project: on
patch: off

View File

@ -1,10 +1,10 @@
#---------------------------------------------------------------------- #----------------------------------------------------------------------
# configure.ac - FINAL CUT library # configure.ac - the Final Cut library
#---------------------------------------------------------------------- #----------------------------------------------------------------------
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_INIT([finalcut], [0.7.2]) AC_INIT([finalcut], [0.5.1])
AC_CONFIG_HEADER([config.h]) AC_CONFIG_HEADER([config.h])
AX_PREFIX_CONFIG_H([src/include/final/fconfig.h], [F]) AX_PREFIX_CONFIG_H([src/include/final/fconfig.h], [F])
AC_CONFIG_SRCDIR([src/fobject.cpp]) AC_CONFIG_SRCDIR([src/fobject.cpp])
@ -13,9 +13,6 @@ AM_INIT_AUTOMAKE
AC_PROG_CC AC_PROG_CC
AC_PROG_CXX AC_PROG_CXX
m4_pattern_forbid([^AX_CHECK_COMPILE_FLAG\b],
[Macro AX_CHECK_COMPILE_FLAG not found. Please install GNU autoconf-archive])
# Checks for header files. # Checks for header files.
AC_HEADER_STDC AC_HEADER_STDC
AC_CHECK_HEADERS( \ AC_CHECK_HEADERS( \
@ -49,14 +46,13 @@ AC_CHECK_FUNCS( \
vsnprintf ) vsnprintf )
# Checks for 'tgetent' # Checks for 'tgetent'
AC_SEARCH_LIBS([tgetent], [terminfo mytinfo termlib termcap tinfo ncurses curses]) AC_SEARCH_LIBS([tgetent], [termcap tinfo curses ncurses])
# Checks for 'tparm' # Checks for 'tparm'
AC_SEARCH_LIBS([tparm], [terminfo mytinfo termlib termcap tinfo ncurses curses]) AC_SEARCH_LIBS([tparm], [termcap tinfo curses ncurses])
# Checks for libtool # Checks for libtool
AC_ENABLE_SHARED AC_ENABLE_SHARED
AC_ENABLE_STATIC AC_ENABLE_STATIC
AC_LANG([C++])
LT_INIT([dlopen]) LT_INIT([dlopen])
LT_LANG([C++]) LT_LANG([C++])
LT_OUTPUT LT_OUTPUT
@ -64,7 +60,7 @@ LT_OUTPUT
### This defines the version number of the installed .so files ### This defines the version number of the installed .so files
### Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B) ### Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
### using libtool's versioning system. ### using libtool's versioning system.
AC_SUBST(SO_VERSION, ["7:2:7"]) AC_SUBST(SO_VERSION, ["5:1:5"])
AC_SUBST([LIBTOOL_DEPS]) AC_SUBST([LIBTOOL_DEPS])
@ -79,19 +75,15 @@ AC_CONFIG_FILES([Makefile
finalcut.spec finalcut.spec
finalcut.pc]) finalcut.pc])
# Check for C++11 support
AX_CHECK_COMPILE_FLAG([[-std=c++11]],,
[AC_MSG_ERROR([compiler did not accept -std=c++11])])
# use GPM (General Purpose Mouse) # use GPM (General Purpose Mouse)
AC_ARG_WITH([gpm], AC_ARG_WITH([gpm],
[AS_HELP_STRING([--without-gpm], [Disable GPM mouse support])], [AS_HELP_STRING([--without-gpm], [Disable GPM mouse support])],
[], [with_gpm=no],
[with_gpm=yes]) [with_gpm=yes])
if test "x$with_gpm" != "xno" if test "x$with_gpm" = "xyes"
then then
AC_CHECK_LIB([gpm], AC_CHECK_LIB([gpm],
[Gpm_Open], [main],
[AC_DEFINE([HAVE_LIBGPM], 1, [Define to 1 if GPM mouse is enabled]) [AC_DEFINE([HAVE_LIBGPM], 1, [Define to 1 if GPM mouse is enabled])
LIBS="$LIBS -lgpm"]) LIBS="$LIBS -lgpm"])
fi fi
@ -99,9 +91,9 @@ fi
# profiling # profiling
AC_ARG_WITH([profiler], AC_ARG_WITH([profiler],
[AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])], [AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])],
[], [with_profiler=yes],
[with_profiler=no]) [with_profiler=no])
if test "x$with_profiler" != "xno" if test "x$with_profiler" = "xyes"
then then
AC_CHECK_LIB([profiler], AC_CHECK_LIB([profiler],
[ProfilerFlush], [ProfilerFlush],
@ -111,24 +103,26 @@ fi
# unit test # unit test
AC_ARG_WITH([unit-test], AC_ARG_WITH([unit-test],
[AS_HELP_STRING([--with-unit-test], [build unit tests])], [AS_HELP_STRING([--with-unit-test], [build unit tests])],
[], [with_unit_test=yes],
[with_unit_test=no]) [with_unit_test=no])
if test "x$with_unit_test" != "xno" if test "x$with_unit_test" = "xyes"
then then
AC_MSG_NOTICE(enabled cppunit test) AC_MSG_NOTICE(enabled cppunit test)
PKG_CHECK_MODULES(CPPUNIT, AM_PATH_CPPUNIT([1.12.0],
[cppunit > 1.12.0]) [],
[AC_MSG_ERROR([*** CppUnit not found! ***])])
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "1"]) AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "1"])
else else
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "0"]) AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "0"])
fi fi
# code coverage # code coverage
AC_ARG_WITH([gcov], AC_ARG_WITH([gcov],
[AS_HELP_STRING([--with-gcov], [build for code coverage testing])], [AS_HELP_STRING([--with-gcov], [build for code coverage testing])],
[], [with_gcov=yes],
[with_gcov=no]) [with_gcov=no])
if test "x$with_gcov" != "xno" if test "x$with_gcov" = "xyes"
then then
AC_CHECK_LIB([gcov], AC_CHECK_LIB([gcov],
[main], [main],

18
debian/changelog vendored
View File

@ -1,21 +1,3 @@
finalcut (0.7.1) unstable; urgency=low
* Release (version 0.7.1)
-- Markus Gans <guru.mail@muenster.de> Sat, 14 Nov 2020 20:07:39 +0100
finalcut (0.7.0) unstable; urgency=low
* Release (version 0.7.0)
-- Markus Gans <guru.mail@muenster.de> Sat, 07 Nov 2020 11:24:39 +0100
finalcut (0.6.0) unstable; urgency=low
* Release (version 0.6.0)
-- Markus Gans <guru.mail@muenster.de> Mon, 14 Oct 2019 01:49:57 +0100
finalcut (0.5.0) unstable; urgency=low finalcut (0.5.0) unstable; urgency=low
* Release (version 0.5.0) * Release (version 0.5.0)

31
debian/control vendored
View File

@ -19,15 +19,18 @@ Architecture: any
Pre-Depends: ${misc:Pre-Depends} Pre-Depends: ${misc:Pre-Depends}
Multi-Arch: same Multi-Arch: same
Depends: Depends:
, ${shlibs:Depends} ${shlibs:Depends}
, ${misc:Depends} , ${misc:Depends}
Suggests: Suggests:
fonts-libfinal coreutils
, coreutils
, ncurses-term , ncurses-term
, grep
, sed
, vim-common , vim-common
, gzip
, xfonts-utils
Description: Shared library for the final cut widget toolkit Description: Shared library for the final cut widget toolkit
FINAL CUT is a class library and widget toolkit with full mouse The Final Cut is a class library and widget toolkit with full mouse
support for creating a text-based user interface. The library supports support for creating a text-based user interface. The library supports
the programmer to develop an application for the text console. It allows the programmer to develop an application for the text console. It allows
the simultaneous handling of multiple windows on the screen. the simultaneous handling of multiple windows on the screen.
@ -50,7 +53,7 @@ Depends:
, libtinfo-dev , libtinfo-dev
, libncurses5-dev , libncurses5-dev
Description: Developer's library for the final cut widget toolkit Description: Developer's library for the final cut widget toolkit
FINAL CUT is a class library and widget toolkit with full mouse The Final Cut is a class library and widget toolkit with full mouse
support for creating a text-based user interface. The library supports support for creating a text-based user interface. The library supports
the programmer to develop an application for the text console. It allows the programmer to develop an application for the text console. It allows
the simultaneous handling of multiple windows on the screen. the simultaneous handling of multiple windows on the screen.
@ -74,7 +77,7 @@ Depends:
, libtinfo-dev , libtinfo-dev
, libncurses5-dev , libncurses5-dev
Description: Test and example programs for the final cut widget toolkit Description: Test and example programs for the final cut widget toolkit
FINAL CUT is a class library and widget toolkit with full mouse The Final Cut is a class library and widget toolkit with full mouse
support for creating a text-based user interface. The library supports support for creating a text-based user interface. The library supports
the programmer to develop an application for the text console. It allows the programmer to develop an application for the text console. It allows
the simultaneous handling of multiple windows on the screen. the simultaneous handling of multiple windows on the screen.
@ -85,19 +88,3 @@ Description: Test and example programs for the final cut widget toolkit
. .
This package contains programs that demonstrate the possibilities of This package contains programs that demonstrate the possibilities of
the final cut library. the final cut library.
Package: fonts-libfinal
Architecture: all
Multi-Arch: foreign
Section: fonts
Depends:
${misc:Depends}
, xfonts-utils
Suggests:
xserver | xfs
, grep
, sed
, gzip
Description: X11 bitmap font for FINAL CUT
Special X11 bitmap font used by FINAL CUT to display graphic objects.

6
debian/copyright vendored
View File

@ -7,13 +7,13 @@ Copyright: 2017, Markus Gans <guru.mail@muenster.de>
License: LGPL-3 License: LGPL-3
License: LGPL-3 License: LGPL-3
FINAL CUT is free software: you can redistribute it and/or modify The Final Cut is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
. .
FINAL CUT is distributed in the hope that it will be useful, but The Final Cut is distributed in the hope that it will be useful,
WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. GNU Lesser General Public License for more details.
. .

View File

@ -1,9 +0,0 @@
AUTHORS
COPYING
COPYING.LESSER
fonts/newfont.txt
doc/newfont-8x16.txt
doc/newfont-9x16.txt
doc/newfont1.png
doc/newfont2.png
doc/calculator.png

View File

@ -1,3 +0,0 @@
fonts/8x16graph.pcf.gz /usr/share/fonts/X11/misc/
fonts/xfonts-finalcut-newfont.alias /etc/X11/fonts/misc/
fonts/40-finalcut-newfont.conf usr/share/fontconfig/conf.avail

View File

@ -1 +0,0 @@
usr/share/fontconfig/conf.avail/40-finalcut-newfont.conf etc/fonts/conf.d/40-finalcut-newfont.conf

View File

@ -1,36 +1,11 @@
AUTHORS
COPYING
COPYING.LESSER
ChangeLog
README.md
doc/benchmark.md
doc/calculator.png
doc/calendar-draft.png doc/calendar-draft.png
doc/class-diagram.txt doc/class-diagram.txt
doc/class_template.cpp
doc/class_template.h
doc/coding-style.txt
doc/console_codes-manual.sh doc/console_codes-manual.sh
doc/console_ioctl-manual.sh doc/console_ioctl-manual.sh
doc/faq.md
doc/fileopen-dialog.png doc/fileopen-dialog.png
doc/final-cut-application-structure.svg
doc/final-cut-widget-tree.svg
doc/first-steps_callback-function.cpp.png
doc/first-steps_callback-lambda.cpp.png
doc/first-steps_callback-method.cpp.png
doc/first-steps_dialog.cpp.png
doc/first-steps_emit-signal.cpp.png
doc/first-steps.md
doc/first-steps_memory.cpp.png
doc/first-steps_scrollview.cpp.png
doc/first-steps_size-adjustment.cpp.png
doc/first-steps_timer.cpp.png
doc/first-steps_user-event.cpp.png
doc/framebuffer.txt
doc/Mandelbrot.png
doc/mouse-control.md
doc/ncurses.supp doc/ncurses.supp
doc/newfont1.png
doc/newfont2.png
doc/progress-bar.png doc/progress-bar.png
doc/readme.txt doc/readme.txt
doc/coding-style.txt doc/coding-style.txt
@ -38,20 +13,6 @@ doc/terminfo-capabilities.sh
doc/terminfo-manual.sh doc/terminfo-manual.sh
doc/textview.png doc/textview.png
doc/TODO doc/TODO
doc/user-theme-bee-palette.svg
doc/user-theme-fc16-dark-palette.svg
doc/user-theme-fc16-palette.svg
doc/user-theme-fc8-palette.svg
doc/user-theme.md
doc/user-theme.png
doc/user-theme-vga-palette.svg
doc/vga.txt
doc/virtual-terminal.txt
doc/vt100_line_drawing_graphics.png doc/vt100_line_drawing_graphics.png
doc/widget-coordinates.svg doc/virtual-terminal.txt
doc/widget-geometry.svg
doc/widget-lengths.svg
doc/xgraphics doc/xgraphics
doc/xterm.txt
fonts/newfont.txt

View File

@ -1,5 +1,4 @@
doc/readme.txt usr/lib/libfinal/examples examples/.libs/* usr/share/doc/libfinal-examples/examples
examples/.libs/* usr/lib/libfinal/examples examples/*.cpp usr/share/doc/libfinal-examples/examples
examples/*.cpp usr/lib/libfinal/examples examples/Makefile.clang usr/share/doc/libfinal-examples/examples
examples/Makefile.clang usr/lib/libfinal/examples examples/Makefile.gcc usr/share/doc/libfinal-examples/examples
examples/Makefile.gcc usr/lib/libfinal/examples

View File

@ -1,2 +1 @@
usr/lib/libfinal/examples usr/share/doc/libfinal-examples/examples usr/share/doc/libfinal-examples/examples/Makefile.gcc usr/share/doc/libfinal-examples/examples/Makefile
usr/lib/libfinal/examples/Makefile.gcc usr/lib/libfinal/examples/Makefile

View File

@ -1,5 +0,0 @@
AUTHORS
COPYING
COPYING.LESSER
ChangeLog
doc/readme.txt

View File

@ -1,2 +1,3 @@
usr/lib/*/lib*.so usr/lib/*/lib*.so
usr/lib/*/lib*.so.* usr/lib/*/lib*.so.*

View File

@ -1 +1 @@
libfinal 0 libfinal0 (>= 0.7.2) libfinal 0 libfinal0 (>= 0.5.1)

8450
debian/libfinal0.symbols vendored

File diff suppressed because it is too large Load Diff

2
debian/rules vendored
View File

@ -19,8 +19,6 @@ include /usr/share/dpkg/default.mk
# main packaging script based on dh7 syntax # main packaging script based on dh7 syntax
%: %:
sed -i 's/doc\///g' README.md
test -f fonts/fonts.alias && cp fonts/fonts.alias fonts/xfonts-finalcut-newfont.alias || true
dh $@ --with autotools-dev dh $@ --with autotools-dev
# debmake generated override targets # debmake generated override targets

View File

@ -1,43 +1,18 @@
#---------------------------------------------------------------------- #----------------------------------------------------------------------
# Makefile.am - FINAL CUT library # Makefile.am - the Final Cut library
#---------------------------------------------------------------------- #----------------------------------------------------------------------
docdir = ${datadir}/doc/${PACKAGE} docdir = ${datadir}/doc/${PACKAGE}
EXTRA_DIST = \ EXTRA_DIST = \
benchmark.md \
build_openbsd.txt \
build_solaris.txt \
calendar-draft.png \ calendar-draft.png \
calculator.png \
class-diagram.txt \ class-diagram.txt \
class_template.cpp \
class_template.h \
console_codes-manual.sh \ console_codes-manual.sh \
console_ioctl-manual.sh \ console_ioctl-manual.sh \
faq.md \
fileopen-dialog.png \ fileopen-dialog.png \
final-cut-application-structure.svg \
final-cut-widget-tree.svg \
first-steps.md \
first-steps_callback-function.cpp.png \
first-steps_callback-lambda.cpp.png \
first-steps_callback-method.cpp.png \
first-steps_dialog.cpp.png \
first-steps_emit-signal.cpp.png \
first-steps_memory.cpp.png \
first-steps_scrollview.cpp.png \
first-steps_size-adjustment.cpp.png \
first-steps_timer.cpp.png \
first-steps_user-event.cpp.png \
framebuffer.txt \
Mandelbrot.png \
mouse-control.md \
ncurses.supp \ ncurses.supp \
newfont1.png \ newfont1.png \
newfont2.png \ newfont2.png \
newfont-8x16.txt \
newfont-9x16.txt \
progress-bar.png \ progress-bar.png \
readme.txt \ readme.txt \
coding-style.txt \ coding-style.txt \
@ -45,56 +20,19 @@ EXTRA_DIST = \
terminfo-manual.sh \ terminfo-manual.sh \
textview.png \ textview.png \
TODO \ TODO \
user-theme.md \
user-theme.png \
user-theme-bee-palette.svg \
user-theme-fc16-dark-palette.svg \
user-theme-fc16-palette.svg \
user-theme-fc8-palette.svg \
user-theme-vga-palette.svg \
vga.txt \
vt100_line_drawing_graphics.png \ vt100_line_drawing_graphics.png \
virtual-terminal.txt \ virtual-terminal.txt \
widget-coordinates.svg \
widget-geometry.svg \
widget-lengths.svg \
xterm.txt \
xgraphics xgraphics
doc_DATA = \ doc_DATA = \
benchmark.md \
build_openbsd.txt \
build_solaris.txt \
calendar-draft.png \ calendar-draft.png \
calculator.png \
class-diagram.txt \ class-diagram.txt \
class_template.cpp \
class_template.h \
console_codes-manual.sh \ console_codes-manual.sh \
console_ioctl-manual.sh \ console_ioctl-manual.sh \
faq.md \
fileopen-dialog.png \ fileopen-dialog.png \
final-cut-application-structure.svg \
final-cut-widget-tree.svg \
first-steps.md \
first-steps_callback-function.cpp.png \
first-steps_callback-lambda.cpp.png \
first-steps_callback-method.cpp.png \
first-steps_dialog.cpp.png \
first-steps_emit-signal.cpp.png \
first-steps_memory.cpp.png \
first-steps_scrollview.cpp.png \
first-steps_size-adjustment.cpp.png \
first-steps_timer.cpp.png \
first-steps_user-event.cpp.png \
framebuffer.txt \
Mandelbrot.png \
mouse-control.md \
ncurses.supp \ ncurses.supp \
newfont1.png \ newfont1.png \
newfont2.png \ newfont2.png \
newfont-8x16.txt \
newfont-9x16.txt \
progress-bar.png \ progress-bar.png \
readme.txt \ readme.txt \
coding-style.txt \ coding-style.txt \
@ -102,19 +40,6 @@ doc_DATA = \
terminfo-manual.sh \ terminfo-manual.sh \
textview.png \ textview.png \
TODO \ TODO \
user-theme.md \
user-theme.png \
user-theme-bee-palette.svg \
user-theme-fc16-dark-palette.svg \
user-theme-fc16-palette.svg \
user-theme-fc8-palette.svg \
user-theme-vga-palette.svg \
vga.txt \
vt100_line_drawing_graphics.png \ vt100_line_drawing_graphics.png \
virtual-terminal.txt \ virtual-terminal.txt \
widget-coordinates.svg \
widget-geometry.svg \
widget-lengths.svg \
xterm.txt \
xgraphics xgraphics

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,30 +0,0 @@
Benchmark
=========
The Rotozoomer example can perform a benchmark run with the parameter "-b" to determine the FINAL CUT character speed in the terminal.
[![rotozoomer-benchmark](https://asciinema.org/a/316531.svg)](https://asciinema.org/a/316531?size=medium&autoplay=1)
Speed tests
-----------
| Terminal | Size | Time | Loops | Frame rate |
|--------------------|-------|---------|-------|------------|
| XTerm | 80x24 | 2.693ms | 314 | 116.598fps |
| PuTTY | 80x24 | 2.711ms | 314 | 115.824fps |
| Mintty | 80x24 | 2.799ms | 314 | 112.182fps |
| Cygwin (cmd) | 80x24 | 2.99ms | 314 | 105.016fps |
| rxvt-cygwin-native | 80x24 | 2.836ms | 314 | 110.719fps |
| rxvt | 80x24 | 3.064ms | 314 | 102.480fps |
| rxvt-unicode | 80x24 | 2.853ms | 314 | 110.059fps |
| Tera Term | 80x24 | 3.154ms | 314 | 99.5561fps |
| Konsole | 80x24 | 2.727ms | 314 | 115.144fps |
| GNOME-Terminal | 80x24 | 2.683ms | 314 | 117.033fps |
| Linux console | 80x25 | 2.757ms | 314 | 113.891fps |
| FreeBSD console | 80x25 | 2.726ms | 314 | 115.187fps |
| NetBSD console | 80x25 | 2.747ms | 314 | 114.306fps |
| OpenBSD console | 80x25 | 2.751ms | 314 | 114.140fps |
| Solaris console | 80x34 | 3.072ms | 314 | 102.213fps |

View File

@ -1,24 +0,0 @@
Build FINAL CUT with the clang c++ compiler
-------------------------------------------
openbsd# CXX=clang++ ./build.sh
Build FINAL CUT with eg++
-------------------------
openbsd# CXX=eg++ ./build.sh
Install egcc on OpenBSD
-----------------------
openbsd# pkg_add g++
quirks-3.124 signed on 2019-04-15T12:10:16Z
Ambiguous: choose package for g++
a 0: <None>
1: g++-4.9.4p18
2: g++-8.3.0
Your choice: 2
g++-8.3.0:gcc-libs-8.3.0: ok
g++-8.3.0:gmp-6.1.2p3: ok
g++-8.3.0:mpfr-3.1.5.2p0: ok
g++-8.3.0:libmpc-0.9p2: ok
g++-8.3.0:gcc-8.3.0: ok
g++-8.3.0: ok

View File

@ -1,12 +0,0 @@
Install gcc5g++ on Solaris
https://www.opencsw.org/packages/gcc5g++/
pkgadd -d http://get.opencsw.org/now
/opt/csw/bin/pkgutil -U
/opt/csw/bin/pkgutil -y -i gcc5g++
/usr/sbin/pkgchk -L CSWgcc5g++ # list files
PATH=/opt/csw/bin:$PATH

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,95 +1,76 @@
══════════════════════════════════════════════════════════════════════════════ ══════════════════════════════════════════════════════════════════════════════
Class digramm Class digramm
══════════════════════════════════════════════════════════════════════════════ ══════════════════════════════════════════════════════════════════════════════
1┌────────────┐ 1┌──────────────┐
┌-----------┤ FTermLinux │
: └────────────┘
: 1┌──────────────┐
┌-----------┤ FTermFreeBSD │ ┌-----------┤ FTermFreeBSD │
: └──────────────┘ : └──────────────┘
: 1┌──────────────┐ : 1┌──────────────┐ ┌───────────┐
┌-----------┤ FTermOpenBSD │ ┌-----------┤ FTermOpenBSD │ ┌────┤ FKeyEvent │
: └──────────────┘ : └──────────────┘ │ └───────────┘
: 1┌────────────────┐ ┌───────────┐
┌-----------┤ FTermDetection │ ┌────┤ FKeyEvent │
: └────────────────┘ │ └───────────┘
: 1┌────────────────┐ │ ┌─────────────┐ : 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermcapQuirks │ ├────┤ FMouseEvent │ ┌-----------┤ FTermDetection │ ├────┤ FMouseEvent │
: └────────────────┘ │ └─────────────┘ : └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐ : 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermXTerminal │ ├────┤ FWheelEvent │ ┌-----------┤ FTermcapQuirks │ ├────┤ FWheelEvent │
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermXTerminal │ ├────┤ FFocusEvent │
: └────────────────┘ │ └─────────────┘ : └────────────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐ : 1┌──────────┐ │ ┌─────────────┐
┌-----------┤ FTermcap │ ├────┤ FFocusEvent │ ┌-----------┤ FTermcap │ ├────┤ FAccelEvent │
: └──────────┘ │ └─────────────┘ : └──────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐ : 1┌──────────┐ │ ┌─────────────
┌-----------┤ FTermios │ ├────┤ FAccelEvent │ ┌-----------┤ FTermios │ ├────┤ FResizeEvent │
: └──────────┘ │ └─────────────┘ : └──────────┘ │ └─────────────
: 1┌───────────────┐ │ ┌────────────── : 1┌───────────────┐ │ ┌────────────┐
┌-----------┤ FColorPalette │ ├────┤ FResizeEvent │ ┌-----------┤ FColorPalette │ ├────┤ FShowEvent │
: └───────────────┘ │ └────────────── : └───────────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌────────────┐ : 1┌───────────┐ │ ┌────────────┐
┌-----------┤ FOptiMove │ ├────┤ FShowEvent │ ┌-----------┤ FOptiMove │ ├────┤ FHideEvent │
: └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌────────────┐
┌-----------┤ FOptiAttr │ ├────┤ FHideEvent │
: └───────────┘ │ └────────────┘ : └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌─────────────┐ : 1┌───────────┐ │ ┌─────────────┐
┌-----------┤ FKeyboard │ ├────┤ FCloseEvent │ ┌-----------┤ FOptiAttr │ ├────┤ FCloseEvent │
: └───────────┘ │ └─────────────┘ : └───────────┘ │ └─────────────┘
: 1┌───────────────┐ │ ┌─────────────┐ : 1┌───────────┐ │ ┌─────────────┐
┌-----------┤ FMouseControl │ ├────┤ FTimerEvent │ ┌-----------┤ FKeyboard │ ├────┤ FTimerEvent │
: └───────────────┘ │ └─────────────┘ : └───────────┘ │ └─────────────┘
: 1┌─────────┐ │ ┌────────────┐1 1┌───────┐ : 1┌───────────────┐ │
┌-----------┤ FSystem │ ├────┤ FUserEvent ├------┤ FData │ ┌-----------┤ FMouseControl │ │ ┌──────────────┐
: └─────────┘ │ └────────────┘ └───────┘ : └───────────────┘ │ ┌────┤ FApplication │
: *┌─────────┐ │ ┌──────┐ ┌─────────┐ : *┌─────────┐ │ │ └──────────────┘
: ┌--------┤ FString │ │ │ FLog │◄──┤ FLogger │ : ┌--------┤ FString │ │ │ ┌─────────┐
: : └─────────┘ │ └──┬───┘ └─────────┘ : : └─────────┘ │ ├────┤ FButton │
: : *┌───────────────┐ │ :1 : : *┌────────┐ │ │ └─────────┘
: ┌--------┤ FStringStream │ │ ┌──┴───────────┐
: : └───────────────┘ │ ┌────┤ FApplication │
: : *┌────────┐ │ │ └──────────────┘
: ┌--------┤ FPoint │ │ │ ┌────────┐ : ┌--------┤ FPoint │ │ │ ┌────────┐
: : └────────┘ │ ├────┤ FLabel │ : : └────────┘ │ ├────┤ FLabel │
: : *┌───────┐ │ │ └────────┘ : : *┌───────┐ │ │ └────────┘
: ┌--------┤ FRect │ │ │ ┌───────────┐ : ┌--------┤ FRect │ │ │ ┌───────────┐
: : └───────┘ │ ├────┤ FLineEdit │ : : └───────┘ │ ├────┤ FLineEdit │
: : *┌───────┐ │ │ └───────────┘ :1 :1 │ │ └───────────┘
: ┌--------┤ FSize │ │ │ ┌──────────┐ ┌─┴──┴──┐ │ │ ┌──────────────┐ ┌──────────────┐
: : └───────┘ │ ├────┤ FSpinBox │ │ FTerm │ │ ├────┤ FButtonGroup │ ┌──┤ FRadioButton │
:1 :1 │ │ └──────────┘ └───┬───┘ ┌────────┐ │ │ └──────────────┘ │ └──────────────┘
┌─┴──┴──┐ │ │ ┌─────────┐ :1 │ FEvent │◄─────┘ │ ┌───────────────┐ │ ┌───────────┐
│ FTerm │ │ ├────┤ FButton │ ┌───┴────┐ └────┬───┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
└───┬───┘ ┌────────┐ │ │ └─────────┘ │ FVTerm │◄──┐ :1 │ └───────────────┘ │ └───────────┘
:1 │ FEvent │◄─────┘ │ ┌──────────────┐ ┌──────────────┐ └────────┘ │ ┌────┴────┐ │ ┌──────────────┐ │ ┌─────────┐
┌───┴────┐ └────┬───┘ ├────┤ FButtonGroup │ ┌──┤ FRadioButton │ ├────┤ FWidget │◄───────┼────┤ FProgressbar │ └──┤ FSwitch │
│ FVTerm │◄──┐ :1 │ └──────────────┘ │ └──────────────┘ ┌─────────┐ │ └─────────┘ │ └──────────────┘ └─────────┘
└────────┘ │ ┌────┴────┐ │ ┌───────────────┐ │ ┌───────────┐ │ FObject │◄──┘ │ ┌────────────┐
├────┤ FWidget │◄───────┼────┤ FToggleButton │◄─┼──┤ FCheckBox │ └─────────┘ ├────┤ FScrollbar │
┌─────────┐ │ └────┬────┘ │ └───────────────┘ │ └───────────┘
│ FObject │◄──┘ :1 │ ┌──────────────┐ │ ┌─────────┐
└─────────┘ ┌──────┴────────┐ ├────┤ FProgressbar │ └──┤ FSwitch │
│ FWidgetColors │ │ └──────────────┘ └─────────┘
└───────────────┘ │ ┌────────────┐
├────┤ FScrollbar │
│ └────────────┘ │ └────────────┘
│ ┌───────────┐ │ ┌───────────┐
├────┤ FTextView │ ├────┤ FTextView │
│ └───────────┘ │ └───────────┘
│ ┌───────────┐1 1┌──────────────────┐ │ ┌──────────┐1 *┌──────────────┐
├────┤ FComboBox ├------┤ FDropDownListBox │ ├────┤ FListBox ├-------┤ FListBoxItem │
│ └───────────┘ └──────────────────┘ │ └──────────┘ └──────────────┘
┌─────────────┐1 │ ┌──────────┐1 *┌──────────────┐1 ┌─────────────┐1 │ 1┌───────────┐1 *┌───────────────┐
│ FTermBuffer ├----------------------├────┤ FListBox ├-------┤ FListBoxItem ├--┐ │ FTermBuffer ├----------------------├────┤ FListView ├------┤ FListViewItem │
└─────────────┘ │ └──────────┘ └──────────────┘ : └─────────────┘ │ └───────────┘ └───────────────┘
│ 1┌───────────┐1 *┌───────────────┐ : │ ┌─────────────┐
├────┤ FListView ├------┤ FListViewItem │ : ├────┤ FScrollView │
│ └───────────┘ └────────┬──────┘ : │ └─────────────┘
│ ┌─────────────┐ :1 :
├────┤ FScrollView │ ┌───┴───┐1 :
│ └─────────────┘ │ FData ├----┘
│ └───────┘
│ ┌────────────┐1 *┌────────────┐ │ ┌────────────┐1 *┌────────────┐
│ ┌──┤ FStatusBar ├-----┤ FStatusKey │ │ ┌──┤ FStatusBar ├-----┤ FStatusKey │
│ │ └────────────┘ └────────────┘ │ │ └────────────┘ └────────────┘
@ -100,9 +81,9 @@
└──┬──┬───┘ └─────────┘ │ ┌─────────────┐ └──┬──┬───┘ └─────────┘ │ ┌─────────────┐
▲ ▲ └──┤ FMessageBox │ ▲ ▲ └──┤ FMessageBox │
│ │ └─────────────┘ │ │ └─────────────┘
│ │ ┌──────────┐ ┌────────────────┐ │ │ ┌──────────┐
│ └──────┤ FToolTip │◄─┤ FBusyIndicator │ │ └──────┤ FToolTip │
│ └──────────┘ └────────────────┘ │ └──────────┘
└───────────────┐ ┌──────────┐ └───────────────┐ ┌──────────┐
│ ┌───┤ FMenuBar │ │ ┌───┤ FMenuBar │
┌───────────┐ └──────┤ └──────────┘ ┌───────────┐ └──────┤ └──────────┘
@ -119,3 +100,4 @@
└──────────┘ │ ┌────────────────┐* : └──────────┘ │ ┌────────────────┐* :
└──┤ FRadioMenuItem ├---┘ └──┤ FRadioMenuItem ├---┘
└────────────────┘ └────────────────┘

View File

@ -1,17 +1,17 @@
/*********************************************************************** /***********************************************************************
* fclassname.cpp - [brief description] * * fclassname.cpp - [brief description] *
* * * *
* This file is part of the FINAL CUT widget toolkit * * This file is part of the Final Cut widget toolkit *
* * * *
* Copyright [year] [Maintainer] * * Copyright [year] [Maintainer] *
* * * *
* FINAL CUT is free software; you can redistribute it and/or modify * * The Final Cut is free software; you can redistribute it and/or *
* it under the terms of the GNU Lesser General Public License as * * modify it under the terms of the GNU Lesser General Public License *
* published by the Free Software Foundation; either version 3 of * * as published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. * * the License, or (at your option) any later version. *
* * * *
* FINAL CUT is distributed in the hope that it will be useful, but * * The Final Cut is distributed in the hope that it will be useful, *
* WITHOUT ANY WARRANTY; without even the implied warranty of * * but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. * * GNU Lesser General Public License for more details. *
* * * *

View File

@ -1,17 +1,17 @@
/*********************************************************************** /***********************************************************************
* fclassname.h - [brief description] * * fclassname.h - [brief description] *
* * * *
* This file is part of the FINAL CUT widget toolkit * * This file is part of the Final Cut widget toolkit *
* * * *
* Copyright [year] [Maintainer] * * Copyright [year] [Maintainer] *
* * * *
* FINAL CUT is free software; you can redistribute it and/or modify * * The Final Cut is free software; you can redistribute it and/or *
* it under the terms of the GNU Lesser General Public License as * * modify it under the terms of the GNU Lesser General Public License *
* published by the Free Software Foundation; either version 3 of * * as published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. * * the License, or (at your option) any later version. *
* * * *
* FINAL CUT is distributed in the hope that it will be useful, but * * The Final Cut is distributed in the hope that it will be useful, *
* WITHOUT ANY WARRANTY; without even the implied warranty of * * but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. * * GNU Lesser General Public License for more details. *
* * * *
@ -44,6 +44,9 @@ namespace finalcut
// class FClassName // class FClassName
//---------------------------------------------------------------------- //----------------------------------------------------------------------
#pragma pack(push)
#pragma pack(1)
class FClassName class FClassName
{ {
public: public:
@ -56,15 +59,9 @@ class FClassName
// Constructors // Constructors
FClassName(); FClassName();
// Disable copy constructor
FClassName (const FClassName&) = delete;
// Destructor // Destructor
~FClassName(); ~FClassName();
// Disable copy assignment operator (=)
FClassName& operator = (const FClassName&) = delete;
// Overloaded operators // Overloaded operators
// Accessors // Accessors
@ -79,7 +76,7 @@ class FClassName
// Callback methods // Callback methods
// Data members // Data Members
protected: protected:
// Typedefs and Enumerations // Typedefs and Enumerations
@ -96,13 +93,19 @@ class FClassName
// Callback methods // Callback methods
// Data members // Data Members
private: private:
// Typedefs and Enumerations // Typedefs and Enumerations
// Constants // Constants
// Disable copy constructor
FClassName (const FClassName&);
// Disable assignment operator (=)
FClassName& operator = (const FClassName&);
// Accessors // Accessors
// Inquiries // Inquiries
@ -113,11 +116,12 @@ class FClassName
// Callback methods // Callback methods
// Data members // Data Members
// Friend class // Friend class
};
};
#pragma pack(pop)
// FClassName inline functions // FClassName inline functions
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -126,3 +130,4 @@ class FClassName
#endif // FCLASSNAME_H #endif // FCLASSNAME_H

View File

@ -7,18 +7,9 @@ Formatting
* A new line should begin after 72 (max. 80) characters * A new line should begin after 72 (max. 80) characters
* Use 2 spaces indent. Do not use tabs! * Use 2 spaces indent. Do not use tabs!
* Leave a space after the keywords if, switch, while, do, for, and return * Leave a space after the keywords if, switch, while, do, for, and return
* Conditions are placed in parentheses with spaces -> if ( a > 5 )
* Use one blank line before and after a for, if, switch, * Use one blank line before and after a for, if, switch,
while, do..while code block while, do..while code block
* In parameter lists, leave a space after each comma * In parameter lists, leave a space after each comma
* Starting curly brace "{" in a new line
Naming
------
* class name: UpperCamelCase
* Function: lowerCamelCase
* Callback function: cb_lowerCamelCase (beginning with "cb_" as prefix)
* Variable: lower_case_underscored
Class declaration order Class declaration order
----------------------- -----------------------

View File

@ -6,7 +6,7 @@ Frequently Asked Questions
What is FINAL CUT? What is FINAL CUT?
------------------ ------------------
FINAL CUT is a [C++](https://en.wikipedia.org/wiki/C%2B%2B) class library The Final Cut is a [C++](https://en.wikipedia.org/wiki/C%2B%2B) class library
and a widget toolkit with full mouse support for creating a text-based user and a widget toolkit with full mouse support for creating a text-based user
interface. It's based on the Termcap library and has its own cursor interface. It's based on the Termcap library and has its own cursor
optimization and window management. optimization and window management.
@ -85,7 +85,6 @@ You need three things:
* autoconf * autoconf
* autoconf-archive * autoconf-archive
* libtool * libtool
* pkg-config
3. Development packages for following libraries: 3. Development packages for following libraries:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,220 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="74.630997mm"
viewBox="0 0 101.5 74.630997"
width="101.5mm"
version="1.1"
id="svg61"
sodipodi:docname="final-cut-application-structure.svg"
inkscape:version="0.92.1 r15371">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1984"
id="namedview35"
showgrid="false"
inkscape:zoom="2.8893731"
inkscape:cx="331.13905"
inkscape:cy="54.29145"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="g23" />
<metadata
id="metadata67">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs65" />
<linearGradient
id="a"
gradientUnits="userSpaceOnUse"
x1="33.698196"
x2="34.111275"
y1="296.49637"
y2="222.78156">
<stop
offset="0"
stop-color="#dbdbdc"
id="stop2"
style="stop-color:#e8a7a7;stop-opacity:1" />
<stop
offset="1"
stop-color="#fff"
id="stop4" />
</linearGradient>
<g
transform="translate(0,-222.36897)"
id="g59">
<g
id="g23"
style="stroke:#000000;fill:none"
transform="translate(-0.00447221)">
<rect
height="74.20752"
ry="2.5604739"
stroke-miterlimit="1.5"
width="65.967117"
x="0.2115"
y="222.58098"
id="rect7"
style="fill:#f6f8fa;fill-opacity:1;stroke-width:0.42300001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5" />
<path
d="M 7.8726193,233.11525 H 66.187848"
id="path9"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001;stroke-linecap:square;stroke-linejoin:bevel" />
<path
d="M 7.8726193,243.73006 H 66.187848"
id="path11"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001" />
<path
d="M 7.8726193,254.34488 H 66.187848"
id="path13"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001" />
<path
d="M 7.8726193,264.95969 H 66.187848"
id="path15"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001" />
<path
d="M 0.19656226,275.5745 H 66.187852"
id="path17"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001" />
<path
d="M 0.19656226,286.18931 H 66.187852"
id="path19"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001" />
<path
d="M 7.9427453,275.5745 V 233.11525"
id="path21"
inkscape:connector-curvature="0"
style="fill:none;stroke-width:0.42300001;stroke-linecap:square;stroke-linejoin:bevel" />
</g>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;stroke-width:0.26458299;stroke-opacity:0"
x="33.420082"
y="229.02936"
id="text27">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;stroke-width:0.26458299;stroke-opacity:0"
x="33.420082"
y="229.02936"
id="tspan25">Application</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#052867;fill-opacity:1;stroke-width:0.42300001;stroke-opacity:0"
x="33.219879"
y="282.35825"
id="text31">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;fill:#052867;fill-opacity:1;stroke-width:0.42300001;stroke-opacity:0"
x="33.219879"
y="282.35825"
id="tspan29">Standard C/C++ Library</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#052867;fill-opacity:1;stroke-width:0.42300001;stroke-opacity:0"
x="33.220379"
y="293.15323"
id="text35">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;fill:#052867;fill-opacity:1;stroke-width:0.42300001;stroke-opacity:0"
x="33.220379"
y="293.15323"
id="tspan33">Operating System</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#083c99;stroke-width:0.42300001;stroke-opacity:0"
x="37.113426"
y="240.10773"
id="text39">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;fill:#083c99;stroke-width:0.42300001;stroke-opacity:0"
x="37.113426"
y="240.10773"
id="tspan37">Widgets</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#083c99;stroke-width:0.42300001;stroke-opacity:0"
x="37.113487"
y="250.53276"
id="text43">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;fill:#083c99;stroke-width:0.42300001;stroke-opacity:0"
x="37.113487"
y="250.53276"
id="tspan41">Virtual Terminal</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;stroke-width:0.42300001;stroke-opacity:0"
x="37.113487"
y="261.55215"
id="text47">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;stroke-width:0.42300001;stroke-opacity:0"
x="37.113487"
y="261.55215"
id="tspan45">Termcap</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill-opacity:0.99858398;stroke-width:0.42300001;stroke-opacity:0"
x="37.11351"
y="271.62482"
id="text51">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;fill-opacity:0.99858398;stroke-width:0.42300001;stroke-opacity:0"
x="37.11351"
y="271.62482"
id="tspan49">Terminal</tspan>
</text>
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#083c99;stroke-width:0.26458299;stroke-opacity:0"
x="86.416771"
y="245.48337"
id="text55">
<tspan
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;fill:#083c99;stroke-width:0.26458299;stroke-opacity:0"
x="86.416771"
y="245.48337"
id="tspan53">FINAL CUT</tspan>
</text>
<g
aria-label="}"
transform="scale(0.99731046,1.0026968)"
style="font-style:normal;font-variant:normal;font-weight:200;font-stretch:condensed;font-size:22.67463493px;line-height:125%;font-family:'Fira Sans Condensed';-inkscape-font-specification:'Fira Sans Condensed, Ultra-Light Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458329px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text4545">
<path
d="m 68.105817,232.32133 v 0.56687 c 1.22443,0 1.655248,0.61222 1.655248,1.90467 v 6.21285 c 0,1.4285 0.476168,1.83665 1.496526,2.06339 -1.020358,0.22675 -1.496526,0.63489 -1.496526,2.06339 v 6.21285 c 0,1.29246 -0.430818,1.90467 -1.655248,1.90467 v 0.56687 c 1.473851,0 2.312813,-0.74826 2.312813,-2.47154 v -6.30355 c 0,-1.20175 0.521516,-1.60989 1.541875,-1.60989 v -0.72559 c -1.020359,0 -1.541875,-0.40815 -1.541875,-1.6099 v -6.30355 c 0,-1.72327 -0.838962,-2.47154 -2.312813,-2.47154 z"
style="font-style:normal;font-variant:normal;font-weight:200;font-stretch:condensed;font-size:22.67463493px;font-family:'Fira Sans Condensed';-inkscape-font-specification:'Fira Sans Condensed, Ultra-Light Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458329px"
id="path4547"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,324 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="65.484894mm"
viewBox="0 0 149.86537 65.484895"
width="149.86537mm"
version="1.1"
id="svg109">
<metadata
id="metadata115">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs113" />
<marker
id="a"
orient="auto"
overflow="visible"
refX="0"
refY="0">
<path
d="m0 0 5-5-17.5 5 17.5 5z"
fill-rule="evenodd"
stroke="#000"
stroke-width="1pt"
transform="matrix(-.4 0 0 -.4 -4 0)"
id="path2" />
</marker>
<marker
id="b"
orient="auto"
overflow="visible"
refX="0"
refY="0">
<path
d="m0 0 5-5-17.5 5 17.5 5z"
fill-rule="evenodd"
stroke="#000"
stroke-width="1pt"
transform="matrix(-.4 0 0 -.4 -4 0)"
id="path5" />
</marker>
<marker
id="c"
orient="auto"
overflow="visible"
refX="0"
refY="0">
<path
d="m0 0 5-5-17.5 5 17.5 5z"
fill-rule="evenodd"
stroke="#000"
stroke-width="1pt"
transform="matrix(-.4 0 0 -.4 -4 0)"
id="path8" />
</marker>
<marker
id="d"
orient="auto"
overflow="visible"
refX="0"
refY="0">
<path
d="m0 0 5-5-17.5 5 17.5 5z"
fill-rule="evenodd"
stroke="#000"
stroke-width="1pt"
transform="matrix(-.4 0 0 -.4 -4 0)"
id="path11" />
</marker>
<marker
id="e"
orient="auto"
overflow="visible"
refX="0"
refY="0">
<path
d="m0 0 5-5-17.5 5 17.5 5z"
fill-rule="evenodd"
stroke="#000"
stroke-width="1pt"
transform="matrix(-.4 0 0 -.4 -4 0)"
id="path14" />
</marker>
<g
style="stroke-width:1.20796704"
id="g57">
<g
transform="matrix(0.82806766,0,0,0.82760652,18.811674,-210.24741)"
id="g23">
<path
style="fill:#f9f9f9;stroke:#000000;stroke-width:0.51105303;stroke-linecap:round;stroke-linejoin:round"
d="m 7.868146,254.29825 h 57.783382 v 10.66144 H 7.868146 Z"
id="path17" />
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
x="37.113487"
y="261.55215"
id="text21">
<tspan
style="stroke-width:0.51097"
x="37.113487"
y="261.55215"
id="tspan19">FApplication</tspan>
</text>
</g>
<g
transform="matrix(0.82806766,0,0,0.82760652,25.151866,-0.203308)"
id="g31">
<path
style="fill:#f9f9f9;stroke:#000000;stroke-width:0.51105303;stroke-linecap:round;stroke-linejoin:round"
d="M 15.875,19.022009 H 42.333334 V 29.683451 H 15.875 Z"
id="path25" />
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
x="29.24534"
y="26.275915"
id="text29">
<tspan
style="stroke-width:0.51097"
x="29.24534"
y="26.275915"
id="tspan27">FDialog</tspan>
</text>
</g>
<g
transform="matrix(0.82806766,0,0,0.82760652,38.120716,15.124655)"
id="g39">
<path
style="fill:#f9f9f9;stroke:#000000;stroke-width:0.51105303;stroke-linecap:round;stroke-linejoin:round"
d="M 15.875,19.022009 H 42.333334 V 29.683451 H 15.875 Z"
id="path33" />
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
x="29.24534"
y="26.275915"
id="text37">
<tspan
style="stroke-width:0.51097"
x="29.24534"
y="26.275915"
id="tspan35">FDialog</tspan>
</text>
</g>
<g
transform="matrix(0.82806766,0,0,0.82760652,12.006292,15.124655)"
id="g47">
<path
style="fill:#f9f9f9;stroke:#000000;stroke-width:0.51105303;stroke-linecap:round;stroke-linejoin:round"
d="M 15.875,19.022009 H 42.333334 V 29.683451 H 15.875 Z"
id="path41" />
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
x="29.24534"
y="26.275915"
id="text45">
<tspan
style="stroke-width:0.51097"
x="29.24534"
y="26.275915"
id="tspan43">FLabel</tspan>
</text>
</g>
<g
transform="matrix(0.82806766,0,0,0.82760652,25.151866,-0.203308)"
id="g55">
<path
style="fill:#f9f9f9;stroke:#000000;stroke-width:0.51105303;stroke-linecap:round;stroke-linejoin:round"
d="M 31.75,56.063679 H 58.208334 V 66.725121 H 31.75 Z"
id="path49" />
<text
style="font-weight:bold;font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
x="45.120338"
y="63.317585"
id="text53">
<tspan
style="stroke-width:0.51097"
x="45.120338"
y="63.317585"
id="tspan51">FListBox</tspan>
</text>
</g>
</g>
<text
style="font-style:italic;font-weight:bold;font-size:4.08859491px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.42300001;stroke-opacity:0"
transform="scale(1.0002786,0.99972148)"
x="62.287796"
y="65.409096"
id="text61">
<tspan
x="62.287796"
y="65.409096"
id="tspan59">etc.</tspan>
</text>
<path
d="m49.251306 9.2100164v5.7870836"
fill="none"
marker-end="url(#a)"
stroke="#000"
stroke-width=".423069"
id="path63" />
<path
d="m42.679299 24.537976v5.779196"
fill="none"
marker-end="url(#b)"
stroke="#000"
stroke-width=".423069"
id="path65" />
<path
d="m55.736511 24.537898v5.779196"
fill="none"
marker-end="url(#c)"
stroke="#000"
stroke-width=".423069"
id="path67" />
<path
d="m62.369882 39.865938v5.548839"
fill="none"
marker-end="url(#d)"
stroke="#000"
stroke-width=".423069"
id="path69" />
<path
d="m62.369882 55.193909v5.548839"
fill="none"
marker-end="url(#e)"
stroke="#000"
stroke-width=".423069"
id="path71" />
<g
style="font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
transform="matrix(0.82806766,0,0,0.82760652,25.151866,-0.203308)"
id="g89">
<text
x="-23.01368"
y="8.7182531"
id="text75">
<tspan
x="-23.01368"
y="8.7182531"
id="tspan73">Parent:</tspan>
</text>
<text
x="-24.412582"
y="27.239086"
id="text79">
<tspan
x="-24.412582"
y="27.239086"
id="tspan77">Child:</tspan>
</text>
<text
x="-20.59841"
y="44.796837"
id="text83">
<tspan
x="-20.59841"
y="44.796837"
id="tspan81">Subchild:</tspan>
</text>
<text
x="-15.852447"
y="63.317669"
id="text87">
<tspan
x="-15.852447"
y="63.317669"
id="tspan85">Sub-subchild:</tspan>
</text>
</g>
<g
style="font-size:4.93888903px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;letter-spacing:0;word-spacing:0;text-anchor:middle;fill:#1a1a1a;stroke-width:0.51097;stroke-opacity:0"
transform="matrix(0.82806766,0,0,0.82760652,107.7173,-0.203308)"
id="g107">
<text
x="-5.0208001"
y="8.7182531"
id="text93">
<tspan
x="-5.0208001"
y="8.7182531"
id="tspan91">Application widget (= 1)</tspan>
</text>
<text
x="-12.021867"
y="27.239086"
id="text97">
<tspan
x="-12.021868"
y="27.239086"
id="tspan95">Main widget (= 1)</tspan>
</text>
<text
x="5.9180651"
y="44.796837"
id="text101">
<tspan
x="5.918066"
y="44.796837"
id="tspan99">Widget(s) of the main widget (≥ 0)</tspan>
</text>
<text
x="10.413227"
y="63.317669"
id="text105">
<tspan
x="10.413226"
y="63.317669"
id="tspan103">Widget(s) from the parent widget (≥ 0)</tspan>
</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.5 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

View File

@ -1,7 +1,7 @@
Framebuffer Framebuffer
=========== ===========
FINAL CUT determines the used number of bits per pixel (bpp) The Final Cut determines the used number of bits per pixel (bpp)
for Linux framebuffer console to determine whether 16 (or more) for Linux framebuffer console to determine whether 16 (or more)
different background colors can be displayed. Therefore your user different background colors can be displayed. Therefore your user
needs read-access to the framebuffer device (/dev/fb0 or /dev/fb/0). needs read-access to the framebuffer device (/dev/fb0 or /dev/fb/0).

View File

@ -1,29 +0,0 @@
Title bar actions on mouse clicks
=================================
The FINAL CUT title bar of dialog windows has different behaviors on mouse clicks.
Clicking on the title bar
-------------------------
* A left-click activates and raises the window. After that, you can drag the window with the mouse.
* A middle-click activates and lower the window.
* A right-click activates the window and keeps its current position in the window stack.
* A double-click maximizes or restores the window size for a resizable dialog.
Clicking the title bar buttons
------------------------------
* Single-clicking on the title bar menu button opens the title bar menu.
* Double-clicking on the title bar menu button closes the dialog.
* Single-clicking on the zoom button maximizes the window size.
* Single-clicking on the unzoom button restores the window size.
Dialog resize corner
--------------------
If you click and drag the left mouse button in the lower right corner of the window, you can change the size of a resizable dialog.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 769 B

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 843 B

After

Width:  |  Height:  |  Size: 788 B

View File

@ -1,8 +1,8 @@
---------------------------------------------------------------------- ----------------------------------------------------------------------
FINAL CUT The Final Cut
---------------------------------------------------------------------- ----------------------------------------------------------------------
The FINAL CUT is a C++ class library and widget toolkit with full mouse The Final Cut is a C++ class library and widget toolkit with full mouse
support for creating a text-based user interface. The library supports support for creating a text-based user interface. The library supports
the programmer to develop an application for the text console. It allows the programmer to develop an application for the text console. It allows
the simultaneous handling of multiple text windows on the screen. the simultaneous handling of multiple text windows on the screen.
@ -12,50 +12,3 @@ the C++ class design of FINAL CUT. It provides common controls like
dialog boxes, push buttons, check boxes, radio buttons, input lines, dialog boxes, push buttons, check boxes, radio buttons, input lines,
list boxes, status bars and so on. list boxes, status bars and so on.
Installation
------------
> git clone git://github.com/gansm/finalcut.git
> cd finalcut
> autoreconf --install --force
> ./configure --prefix=/usr
> make
> su -c "make install"
Supported platforms
-------------------
* Linux
* FreeBSD
* NetBSD
* OpenBSD
* macOS
* Cygwin
* Solaris
First steps
-----------
See the first-steps.md documentation for information on how to use
the library.
License
-------
GNU Lesser General Public License Version 3
Frequently Asked Questions
--------------------------
For general questions about FINAL CUT, likely the answer is already included in the faq.md.
Download
--------
You can find the latest version at https://github.com/gansm/finalcut
Please send bug reports to
--------------------------
https://github.com/gansm/finalcut/issues

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,330 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="43.074867"
viewBox="0 0 509.50272 43.074862"
width="509.50272"
version="1.1"
id="user-theme-own-palette"
sodipodi:docname="user-theme-own-palette.svg"
inkscape:version="0.92.1 r15371">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1984"
id="namedview21"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="8.3138663"
inkscape:cx="31.395854"
inkscape:cy="8.1120765"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="user-theme-own-palette"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-bbox="true" />
<metadata
id="metadata">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs53" />
<rect
id="Black"
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="0.25" />
<rect
id="Blue"
style="fill:#23212c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="32.380764" />
<rect
id="Green"
style="fill:#26937c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="64.511536" />
<rect
id="Cyan"
style="fill:#cfb3a8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="96.642288" />
<rect
id="Red"
style="fill:#ba1a1a;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="128.77304" />
<rect
id="Magenta"
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="160.90382" />
<rect
id="Brown"
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="193.03458" />
<rect
id="LightGray"
style="fill:#fffbe4;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="225.16534" />
<rect
id="DarkGray"
style="fill:#3a3637;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="257.29608" />
<rect
id="LightBlue"
style="fill:#a5a5b1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="289.42688" />
<rect
id="LightGreen"
style="fill:#5eeb5c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="321.55765" />
<rect
id="LightCyan"
style="fill:#62bff8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="353.68842" />
<rect
id="LightRed"
style="fill:#ee4444;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="385.81915" />
<rect
id="LightMagenta"
style="fill:#e9adff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="417.94992" />
<rect
id="Yellow"
style="fill:#f8efa6;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="450.08069" />
<rect
id="White"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="482.21146" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="13.822153"
y="42.771538"
id="0"><tspan
sodipodi:role="line"
id="tspan4501"
x="13.822153"
y="42.771538">0</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="46.455204"
y="42.852036"
id="1"><tspan
sodipodi:role="line"
id="tspan4633"
x="46.455204"
y="42.852036">1</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="78.20282"
y="42.852036"
id="2"><tspan
sodipodi:role="line"
id="tspan4635"
x="78.20282"
y="42.852036">2</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="110.20156"
y="42.771538"
id="3"><tspan
sodipodi:role="line"
id="tspan4637"
x="110.20156"
y="42.771538">3</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="142.32588"
y="42.852036"
id="4"><tspan
sodipodi:role="line"
id="tspan4639"
x="142.32588"
y="42.852036">4</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="174.3343"
y="42.687824"
id="5"><tspan
sodipodi:role="line"
id="tspan4641"
x="174.3343"
y="42.687824">5</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="206.51335"
y="42.771538"
id="6"><tspan
sodipodi:role="line"
id="tspan4643"
x="206.51335"
y="42.771538">6</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="238.70207"
y="42.768318"
id="7"><tspan
sodipodi:role="line"
id="tspan4645"
x="238.70207"
y="42.768318">7</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="270.84891"
y="42.768318"
id="8"><tspan
sodipodi:role="line"
id="tspan4647"
x="270.84891"
y="42.768318">8</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="303.04733"
y="42.768318"
id="9"><tspan
sodipodi:role="line"
id="tspan4649"
x="303.04733"
y="42.768318">9</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="334.8851"
y="42.771538"
id="10"><tspan
sodipodi:role="line"
id="tspan4651"
x="334.8851"
y="42.771538">10</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="367.76285"
y="42.852036"
id="11"><tspan
sodipodi:role="line"
id="tspan4653"
x="367.76285"
y="42.852036">11</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="399.15305"
y="42.852036"
id="12"><tspan
sodipodi:role="line"
id="tspan4663"
x="399.15305"
y="42.852036">12</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="431.2355"
y="42.771538"
id="13"><tspan
sodipodi:role="line"
id="tspan4665"
x="431.2355"
y="42.771538">13</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="463.23425"
y="42.852036"
id="14"><tspan
sodipodi:role="line"
id="tspan4667"
x="463.23425"
y="42.852036">14</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="495.41333"
y="42.771538"
id="15"><tspan
sodipodi:role="line"
id="tspan4669"
x="495.41333"
y="42.771538">15</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,330 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="43.074867"
viewBox="0 0 509.50272 43.074862"
width="509.50272"
version="1.1"
id="user-theme-own-palette"
sodipodi:docname="user-theme-own-palette.svg"
inkscape:version="0.92.1 r15371">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1984"
id="namedview21"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="8.3138663"
inkscape:cx="31.395854"
inkscape:cy="8.1120765"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="user-theme-own-palette"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-bbox="true" />
<metadata
id="metadata">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs53" />
<rect
id="Black"
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="0.25" />
<rect
id="Blue"
style="fill:#4158b3;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="32.380764" />
<rect
id="Green"
style="fill:#187818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="64.511536" />
<rect
id="Cyan"
style="fill:#4e6672;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="96.642288" />
<rect
id="Red"
style="fill:#a54040;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="128.77304" />
<rect
id="Magenta"
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="160.90382" />
<rect
id="Brown"
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="193.03458" />
<rect
id="LightGray"
style="fill:#dcdcdc;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="225.16534" />
<rect
id="DarkGray"
style="fill:#273339;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="257.29608" />
<rect
id="LightBlue"
style="fill:#b0b0b8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="289.42688" />
<rect
id="LightGreen"
style="fill:#5eeb5c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="321.55765" />
<rect
id="LightCyan"
style="fill:#62bff8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="353.68842" />
<rect
id="LightRed"
style="fill:#dd5145;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="385.81915" />
<rect
id="LightMagenta"
style="fill:#e9adff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="417.94992" />
<rect
id="Yellow"
style="fill:#fbe867;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="450.08069" />
<rect
id="White"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="482.21146" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="13.822153"
y="42.771538"
id="0"><tspan
sodipodi:role="line"
id="tspan4501"
x="13.822153"
y="42.771538">0</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="46.455204"
y="42.852036"
id="1"><tspan
sodipodi:role="line"
id="tspan4633"
x="46.455204"
y="42.852036">1</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="78.20282"
y="42.852036"
id="2"><tspan
sodipodi:role="line"
id="tspan4635"
x="78.20282"
y="42.852036">2</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="110.20156"
y="42.771538"
id="3"><tspan
sodipodi:role="line"
id="tspan4637"
x="110.20156"
y="42.771538">3</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="142.32588"
y="42.852036"
id="4"><tspan
sodipodi:role="line"
id="tspan4639"
x="142.32588"
y="42.852036">4</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="174.3343"
y="42.687824"
id="5"><tspan
sodipodi:role="line"
id="tspan4641"
x="174.3343"
y="42.687824">5</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="206.51335"
y="42.771538"
id="6"><tspan
sodipodi:role="line"
id="tspan4643"
x="206.51335"
y="42.771538">6</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="238.70207"
y="42.768318"
id="7"><tspan
sodipodi:role="line"
id="tspan4645"
x="238.70207"
y="42.768318">7</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="270.84891"
y="42.768318"
id="8"><tspan
sodipodi:role="line"
id="tspan4647"
x="270.84891"
y="42.768318">8</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="303.04733"
y="42.768318"
id="9"><tspan
sodipodi:role="line"
id="tspan4649"
x="303.04733"
y="42.768318">9</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="334.8851"
y="42.771538"
id="10"><tspan
sodipodi:role="line"
id="tspan4651"
x="334.8851"
y="42.771538">10</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="367.76285"
y="42.852036"
id="11"><tspan
sodipodi:role="line"
id="tspan4653"
x="367.76285"
y="42.852036">11</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="399.15305"
y="42.852036"
id="12"><tspan
sodipodi:role="line"
id="tspan4663"
x="399.15305"
y="42.852036">12</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="431.2355"
y="42.771538"
id="13"><tspan
sodipodi:role="line"
id="tspan4665"
x="431.2355"
y="42.771538">13</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="463.23425"
y="42.852036"
id="14"><tspan
sodipodi:role="line"
id="tspan4667"
x="463.23425"
y="42.852036">14</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="495.41333"
y="42.771538"
id="15"><tspan
sodipodi:role="line"
id="tspan4669"
x="495.41333"
y="42.771538">15</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,330 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="43.074867"
viewBox="0 0 509.50272 43.074862"
width="509.50272"
version="1.1"
id="user-theme-own-palette"
sodipodi:docname="user-theme-own-palette.svg"
inkscape:version="0.92.1 r15371">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1984"
id="namedview21"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="8.3138663"
inkscape:cx="31.395854"
inkscape:cy="8.1120765"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="user-theme-own-palette"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-bbox="true" />
<metadata
id="metadata">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs53" />
<rect
id="Black"
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="0.25" />
<rect
id="Blue"
style="fill:#103b9e;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="32.380764" />
<rect
id="Green"
style="fill:#187818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="64.511536" />
<rect
id="Cyan"
style="fill:#556acf;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="96.642288" />
<rect
id="Red"
style="fill:#ba1a1a;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="128.77304" />
<rect
id="Magenta"
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="160.90382" />
<rect
id="Brown"
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="193.03458" />
<rect
id="LightGray"
style="fill:#bcbcbc;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="225.16534" />
<rect
id="DarkGray"
style="fill:#505050;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="257.29608" />
<rect
id="LightBlue"
style="fill:#80a4ec;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="289.42688" />
<rect
id="LightGreen"
style="fill:#5eeb5c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="321.55765" />
<rect
id="LightCyan"
style="fill:#62bff8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="353.68842" />
<rect
id="LightRed"
style="fill:#ee4444;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="385.81915" />
<rect
id="LightMagenta"
style="fill:#e9adff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="417.94992" />
<rect
id="Yellow"
style="fill:#fbe867;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="450.08069" />
<rect
id="White"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="482.21146" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="13.822153"
y="42.771538"
id="0"><tspan
sodipodi:role="line"
id="tspan4501"
x="13.822153"
y="42.771538">0</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="46.455204"
y="42.852036"
id="1"><tspan
sodipodi:role="line"
id="tspan4633"
x="46.455204"
y="42.852036">1</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="78.20282"
y="42.852036"
id="2"><tspan
sodipodi:role="line"
id="tspan4635"
x="78.20282"
y="42.852036">2</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="110.20156"
y="42.771538"
id="3"><tspan
sodipodi:role="line"
id="tspan4637"
x="110.20156"
y="42.771538">3</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="142.32588"
y="42.852036"
id="4"><tspan
sodipodi:role="line"
id="tspan4639"
x="142.32588"
y="42.852036">4</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="174.3343"
y="42.687824"
id="5"><tspan
sodipodi:role="line"
id="tspan4641"
x="174.3343"
y="42.687824">5</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="206.51335"
y="42.771538"
id="6"><tspan
sodipodi:role="line"
id="tspan4643"
x="206.51335"
y="42.771538">6</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="238.70207"
y="42.768318"
id="7"><tspan
sodipodi:role="line"
id="tspan4645"
x="238.70207"
y="42.768318">7</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="270.84891"
y="42.768318"
id="8"><tspan
sodipodi:role="line"
id="tspan4647"
x="270.84891"
y="42.768318">8</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="303.04733"
y="42.768318"
id="9"><tspan
sodipodi:role="line"
id="tspan4649"
x="303.04733"
y="42.768318">9</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="334.8851"
y="42.771538"
id="10"><tspan
sodipodi:role="line"
id="tspan4651"
x="334.8851"
y="42.771538">10</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="367.76285"
y="42.852036"
id="11"><tspan
sodipodi:role="line"
id="tspan4653"
x="367.76285"
y="42.852036">11</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="399.15305"
y="42.852036"
id="12"><tspan
sodipodi:role="line"
id="tspan4663"
x="399.15305"
y="42.852036">12</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="431.2355"
y="42.771538"
id="13"><tspan
sodipodi:role="line"
id="tspan4665"
x="431.2355"
y="42.771538">13</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="463.23425"
y="42.852036"
id="14"><tspan
sodipodi:role="line"
id="tspan4667"
x="463.23425"
y="42.852036">14</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="495.41333"
y="42.771538"
id="15"><tspan
sodipodi:role="line"
id="tspan4669"
x="495.41333"
y="42.771538">15</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,194 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="43.074867"
viewBox="0 0 252.45662 43.074862"
width="252.45662"
version="1.1"
id="user-theme-own-palette"
sodipodi:docname="user-theme-fc8-palette.svg"
inkscape:version="0.92.1 r15371">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1984"
id="namedview21"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="10.738479"
inkscape:cx="126.22831"
inkscape:cy="21.537433"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="user-theme-own-palette"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-bbox="true" />
<metadata
id="metadata">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs53" />
<rect
id="Black"
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="0.25" />
<rect
id="Blue"
style="fill:#103b9e;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="32.380764" />
<rect
id="Green"
style="fill:#187818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="64.511536" />
<rect
id="Cyan"
style="fill:#a0b2b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="96.642288" />
<rect
id="Red"
style="fill:#b21818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="128.77304" />
<rect
id="Magenta"
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="160.90382" />
<rect
id="Brown"
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="193.03458" />
<rect
id="LightGray"
style="fill:#e0e0e0;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="225.16534" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="13.822153"
y="42.771538"
id="0"><tspan
sodipodi:role="line"
id="tspan4501"
x="13.822153"
y="42.771538">0</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="46.455204"
y="42.852036"
id="1"><tspan
sodipodi:role="line"
id="tspan4633"
x="46.455204"
y="42.852036">1</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="78.20282"
y="42.852036"
id="2"><tspan
sodipodi:role="line"
id="tspan4635"
x="78.20282"
y="42.852036">2</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="110.20156"
y="42.771538"
id="3"><tspan
sodipodi:role="line"
id="tspan4637"
x="110.20156"
y="42.771538">3</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="142.32588"
y="42.852036"
id="4"><tspan
sodipodi:role="line"
id="tspan4639"
x="142.32588"
y="42.852036">4</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="174.3343"
y="42.687824"
id="5"><tspan
sodipodi:role="line"
id="tspan4641"
x="174.3343"
y="42.687824">5</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="206.51335"
y="42.771538"
id="6"><tspan
sodipodi:role="line"
id="tspan4643"
x="206.51335"
y="42.771538">6</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="238.70207"
y="42.768318"
id="7"><tspan
sodipodi:role="line"
id="tspan4645"
x="238.70207"
y="42.768318">7</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -1,330 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="43.074867"
viewBox="0 0 509.50272 43.074862"
width="509.50272"
version="1.1"
id="user-theme-vga-palette"
sodipodi:docname="user-theme-vga-palette.svg"
inkscape:version="0.92.1 r15371">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="1984"
id="namedview21"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="8.3138663"
inkscape:cx="31.395854"
inkscape:cy="8.1120765"
inkscape:window-x="0"
inkscape:window-y="55"
inkscape:window-maximized="1"
inkscape:current-layer="user-theme-vga-palette"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-bbox="true" />
<metadata
id="metadata">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs53" />
<rect
id="Black"
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="0.25" />
<rect
id="Blue"
style="fill:#0000aa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="32.380764" />
<rect
id="Green"
style="fill:#00aa00;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="64.511536" />
<rect
id="Cyan"
style="fill:#00aaaa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="96.642288" />
<rect
id="Red"
style="fill:#aa0000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="128.77304" />
<rect
id="Magenta"
style="fill:#aa00aa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="160.90382" />
<rect
id="Brown"
style="fill:#aa5500;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="193.03458" />
<rect
id="LightGray"
style="fill:#aaaaaa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="225.16534" />
<rect
id="DarkGray"
style="fill:#555555;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="257.29608" />
<rect
id="LightBlue"
style="fill:#5555ff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="289.42688" />
<rect
id="LightGreen"
style="fill:#55ff55;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="321.55765" />
<rect
id="LightCyan"
style="fill:#55ffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="353.68842" />
<rect
id="LightRed"
style="fill:#ff5555;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="385.81915" />
<rect
id="LightMagenta"
style="fill:#ff55ff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="417.94992" />
<rect
id="Yellow"
style="fill:#ffff55;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="450.08069" />
<rect
id="White"
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
height="27.725"
width="27.041273"
y="0.25"
x="482.21146" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="13.822153"
y="42.771538"
id="0"><tspan
sodipodi:role="line"
id="tspan4501"
x="13.822153"
y="42.771538">0</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="46.455204"
y="42.852036"
id="1"><tspan
sodipodi:role="line"
id="tspan4633"
x="46.455204"
y="42.852036">1</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="78.20282"
y="42.852036"
id="2"><tspan
sodipodi:role="line"
id="tspan4635"
x="78.20282"
y="42.852036">2</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="110.20156"
y="42.771538"
id="3"><tspan
sodipodi:role="line"
id="tspan4637"
x="110.20156"
y="42.771538">3</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="142.32588"
y="42.852036"
id="4"><tspan
sodipodi:role="line"
id="tspan4639"
x="142.32588"
y="42.852036">4</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="174.3343"
y="42.687824"
id="5"><tspan
sodipodi:role="line"
id="tspan4641"
x="174.3343"
y="42.687824">5</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="206.51335"
y="42.771538"
id="6"><tspan
sodipodi:role="line"
id="tspan4643"
x="206.51335"
y="42.771538">6</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="238.70207"
y="42.768318"
id="7"><tspan
sodipodi:role="line"
id="tspan4645"
x="238.70207"
y="42.768318">7</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="270.84891"
y="42.768318"
id="8"><tspan
sodipodi:role="line"
id="tspan4647"
x="270.84891"
y="42.768318">8</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="303.04733"
y="42.768318"
id="9"><tspan
sodipodi:role="line"
id="tspan4649"
x="303.04733"
y="42.768318">9</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="334.8851"
y="42.771538"
id="10"><tspan
sodipodi:role="line"
id="tspan4651"
x="334.8851"
y="42.771538">10</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="367.76285"
y="42.852036"
id="11"><tspan
sodipodi:role="line"
id="tspan4653"
x="367.76285"
y="42.852036">11</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="399.15305"
y="42.852036"
id="12"><tspan
sodipodi:role="line"
id="tspan4663"
x="399.15305"
y="42.852036">12</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="431.2355"
y="42.771538"
id="13"><tspan
sodipodi:role="line"
id="tspan4665"
x="431.2355"
y="42.771538">13</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="463.23425"
y="42.852036"
id="14"><tspan
sodipodi:role="line"
id="tspan4667"
x="463.23425"
y="42.852036">14</tspan></text>
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
x="495.41333"
y="42.771538"
id="15"><tspan
sodipodi:role="line"
id="tspan4669"
x="495.41333"
y="42.771538">15</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,448 +0,0 @@
User Themes
===========
FINAL CUT supports color themes. That makes it possible to change the color
of all elements of a widget in the program. Also, you can adjust the color
palette to your preferences. If you want to switch back to the default
themes, you can always call the method `FApplication::setDefaultTheme()`
or `FApplication::setDarkTheme()` for the dark theme.
Widget Color Theme
------------------
FINAL CUT uses a default color scheme that the user can override in a
derived class of `FWidgetColors`. All widget colors are redefined in the
constructor by the method `setColorTheme()`.
```cpp
class myWidgetColors final : public finalcut::FWidgetColors
{
public:
myWidgetColors()
{
myWidgetColors::setColorTheme();
}
~myWidgetColors() override
{ }
finalcut::FString getClassName() const override
{
return "myWidgetColors";
}
void myWidgetColors() override
{
... // Color definitions
}
};
```
For setting the widget colors, it is recommended to call the method
`FWidget::setColorTheme()` via the `FApplication` object to create a
new instance of the theme and assign it to the application.
```cpp
finalcut::FApplication app(argc, argv);
app.setColorTheme<myWidgetColors>();
```
In the following example, we will create the `BeeColorTheme`. For this
purpose, we will first create an include file that can be easily included
later in your application.
**File:** *widget-color-theme.h*
```cpp
#ifndef WIDGETCOLORTHEME_H
#define WIDGETCOLORTHEME_H
class BeeColorTheme final : public finalcut::FWidgetColors
{
public:
BeeColorTheme()
{
BeeColorTheme::setColorTheme();
}
~BeeColorTheme() override
{ }
finalcut::FString getClassName() const override
{
return "BeeColorTheme";
}
void setColorTheme() override
{
term_fg = finalcut::FColor::Black;
term_bg = finalcut::FColor::LightBlue;
list_fg = finalcut::FColor::Black;
list_bg = finalcut::FColor::LightGray;
selected_list_fg = finalcut::FColor::LightRed;
selected_list_bg = finalcut::FColor::LightGray;
dialog_fg = finalcut::FColor::Black;
dialog_resize_fg = finalcut::FColor::Red;
dialog_emphasis_fg = finalcut::FColor::Blue;
dialog_bg = finalcut::FColor::LightGray;
error_box_fg = finalcut::FColor::Black;
error_box_emphasis_fg = finalcut::FColor::Red;
error_box_bg = finalcut::FColor::Yellow;
tooltip_fg = finalcut::FColor::Black;
tooltip_bg = finalcut::FColor::Yellow;
shadow_fg = finalcut::FColor::Black;
shadow_bg = finalcut::FColor::LightGray;
current_element_focus_fg = finalcut::FColor::White;
current_element_focus_bg = finalcut::FColor::Green;
current_element_fg = finalcut::FColor::LightGray;
current_element_bg = finalcut::FColor::DarkGray;
current_inc_search_element_fg = finalcut::FColor::Brown;
selected_current_element_focus_fg = finalcut::FColor::LightRed;
selected_current_element_focus_bg = finalcut::FColor::Green;
selected_current_element_fg = finalcut::FColor::LightRed;
selected_current_element_bg = finalcut::FColor::DarkGray;
label_fg = finalcut::FColor::Black;
label_bg = finalcut::FColor::LightGray;
label_inactive_fg = finalcut::FColor::LightGray;
label_inactive_bg = finalcut::FColor::DarkGray;
label_hotkey_fg = finalcut::FColor::Red;
label_hotkey_bg = finalcut::FColor::LightGray;
label_emphasis_fg = finalcut::FColor::Blue;
label_ellipsis_fg = finalcut::FColor::DarkGray;
inputfield_active_focus_fg = finalcut::FColor::LightGray;
inputfield_active_focus_bg = finalcut::FColor::Green;
inputfield_active_fg = finalcut::FColor::Black;
inputfield_active_bg = finalcut::FColor::Cyan ;
inputfield_inactive_fg = finalcut::FColor::Black;
inputfield_inactive_bg = finalcut::FColor::LightGray;
toggle_button_active_focus_fg = finalcut::FColor::White;
toggle_button_active_focus_bg = finalcut::FColor::Green;
toggle_button_active_fg = finalcut::FColor::Black;
toggle_button_active_bg = finalcut::FColor::LightGray;
toggle_button_inactive_fg = finalcut::FColor::DarkGray;
toggle_button_inactive_bg = finalcut::FColor::LightGray;
button_active_focus_fg = finalcut::FColor::White;
button_active_focus_bg = finalcut::FColor::Green;
button_active_fg = finalcut::FColor::Black;
button_active_bg = finalcut::FColor::Cyan;
button_inactive_fg = finalcut::FColor::Cyan;
button_inactive_bg = finalcut::FColor::LightGray;
button_hotkey_fg = finalcut::FColor::Red;
titlebar_active_fg = finalcut::FColor::White;
titlebar_active_bg = finalcut::FColor::Blue;
titlebar_inactive_fg = finalcut::FColor::LightGray;
titlebar_inactive_bg = finalcut::FColor::DarkGray;
titlebar_button_fg = finalcut::FColor::Black;
titlebar_button_bg = finalcut::FColor::LightGray;
titlebar_button_focus_fg = finalcut::FColor::LightGray;
titlebar_button_focus_bg = finalcut::FColor::Black;
menu_active_focus_fg = finalcut::FColor::White;
menu_active_focus_bg = finalcut::FColor::Blue;
menu_active_fg = finalcut::FColor::Black;
menu_active_bg = finalcut::FColor::Yellow;
menu_inactive_fg = finalcut::FColor::Cyan;
menu_inactive_bg = finalcut::FColor::Yellow;
menu_hotkey_fg = finalcut::FColor::Red;
menu_hotkey_bg = finalcut::FColor::Yellow;
statusbar_fg = finalcut::FColor::White;
statusbar_bg = finalcut::FColor::DarkGray;
statusbar_hotkey_fg = finalcut::FColor::LightRed;
statusbar_hotkey_bg = finalcut::FColor::DarkGray;
statusbar_separator_fg = finalcut::FColor::Black;
statusbar_active_fg = finalcut::FColor::White;
statusbar_active_bg = finalcut::FColor::Green;
statusbar_active_hotkey_fg = finalcut::FColor::LightRed;
statusbar_active_hotkey_bg = finalcut::FColor::Green;
scrollbar_fg = finalcut::FColor::Black;
scrollbar_bg = finalcut::FColor::Green;
scrollbar_button_fg = finalcut::FColor::Black;
scrollbar_button_bg = finalcut::FColor::Green;
scrollbar_button_inactive_fg = finalcut::FColor::Cyan;
scrollbar_button_inactive_bg = finalcut::FColor::LightGray;
progressbar_fg = finalcut::FColor::Green;
progressbar_bg = finalcut::FColor::DarkGray;
}
};
#endif // WIDGETCOLORTHEME_H
```
Color Palette Theme
-------------------
FINAL CUT has four color tables for the 16 standard colors in the terminal.
These are a redefinition of the 16 ANSI colors. You can address the colors
via indexes values from 0 to 15. They correspond to the following colors:
| Index | Color name |
|:------:|:-------------------------------|
| 0 | finalcut::FColor::Black |
| 1 | finalcut::FColor::Blue |
| 2 | finalcut::FColor::Green |
| 3 | finalcut::FColor::Cyan |
| 4 | finalcut::FColor::Red |
| 5 | finalcut::FColor::Magenta |
| 6 | finalcut::FColor::Brown |
| 7 | finalcut::FColor::LightGray |
| 8 | finalcut::FColor::DarkGray |
| 9 | finalcut::FColor::LightBlue |
| 10 | finalcut::FColor::LightGreen |
| 11 | finalcut::FColor::LightCyan |
| 12 | finalcut::FColor::LightRed |
| 13 | finalcut::FColor::LightMagenta |
| 14 | finalcut::FColor::Yellow |
| 15 | finalcut::FColor::White |
You can define your color as an 8-bit value based on its red, green, and
blue components. To create a color palette, create a derived class of
`FColorPalette`. The constructor gets as argument the function to set
a palette color. This function must have the following structure:
```cpp
setPalette(finalcut::FColor index, int red, int green, int blue);
```
A possible implementation could look as follows:
```cpp
class myColorPalette final : public finalcut::FColorPalette
{
public:
explicit myColorPalette (const FSetPalette& f)
: FColorPalette(f)
{ }
~myColorPalette()
{ }
finalcut::FString getClassName() const override
{
return "myColorPalette";
}
void setColorPalette() override
{
... // Palette definitions
}
void resetColorPalette() override
{
setVGAdefaultPalette();
}
};
```
To set the colors of a palette theme, you should use the method
`FTerm::setColorPaletteTheme()`. This method creates a new instance and
saves it in the `FTerm` object.
```cpp
finalcut::FTerm::setColorPaletteTheme<myColorPalette>();
```
The standard VGA palette is part of the `FColorPalette` class. To set it,
use the method `setVGAdefaultPalette()`. You can use it to reset the color
palette of terminals that cannot reset to default values with escape
sequences.
<figure class="image">
<img src="user-theme-vga-palette.svg" alt="VGA palette">
<figcaption>Figure 1. VGA palette</figcaption>
</figure>
<br /><br />
The FINAL CUT eight-color palette `default8ColorPalette` is optimized for
the eight-color widget theme `default8ColorTheme`. It is for terminals
that cannot display more than eight colors.
<figure class="image">
<img src="user-theme-fc8-palette.svg" alt="FINAL CUT 8-color palette">
<figcaption>Figure 2. FINAL CUT 8-color palette</figcaption>
</figure>
<br /><br />
The FINAL CUT palette `default16ColorPalette` is the default 16-color
palette. It is optimized for the widget color theme `default16ColorTheme`.
<figure class="image">
<img src="user-theme-fc16-palette.svg" alt="FINAL CUT 16-color palette">
<figcaption>Figure 3. FINAL CUT 16-color palette</figcaption>
</figure>
<br /><br />
The second 16-color palette in FINAL CUT is for the dark theme. It was
adjusted for the widget color themes `default8ColorDarkTheme` and
`default16ColorDarkTheme`.
<figure class="image">
<img src="user-theme-fc16-dark-palette.svg" alt="FINAL CUT 16-color dark palette">
<figcaption>Figure 4. FINAL CUT 16-color dark palette</figcaption>
</figure>
<br /><br />
In the following example, we want to create the palette them
`BeeColorPalette`. For this purpose, we generate an include file again,
in which we implement the new palette class.
<figure class="image">
<img src="user-theme-bee-palette.svg" alt="Bee palette">
<figcaption>Figure 6. Bee palette</figcaption>
</figure>
<br /><br />
**File:** *color-palette-theme.h*
```cpp
#ifndef BEECOLORPALETTE_H
#define BEECOLORPALETTE_H
class BeeColorPalette final : public finalcut::FColorPalette
{
public:
explicit BeeColorPalette (const FSetPalette& f)
: FColorPalette(f)
{ }
~BeeColorPalette()
{ }
finalcut::FString getClassName() const override
{
return "BeeColorPalette";
}
void setColorPalette() override
{
setPalette (finalcut::FColor::Black, 0x00, 0x00, 0x00);
setPalette (finalcut::FColor::Blue, 0x23, 0x21, 0x2c);
setPalette (finalcut::FColor::Green, 0x26, 0x93, 0x7c);
setPalette (finalcut::FColor::Cyan, 0xcf, 0xb3, 0xa8);
setPalette (finalcut::FColor::Red, 0xba, 0x1a, 0x1a);
setPalette (finalcut::FColor::Magenta, 0xb2, 0x18, 0xb2);
setPalette (finalcut::FColor::Brown, 0xe8, 0x87, 0x1f);
setPalette (finalcut::FColor::LightGray, 0xff, 0xfb, 0xe4);
setPalette (finalcut::FColor::DarkGray, 0x3a, 0x36, 0x37);
setPalette (finalcut::FColor::LightBlue, 0xa5, 0xa5, 0xb1);
setPalette (finalcut::FColor::LightGreen, 0x5e, 0xeb, 0x5c);
setPalette (finalcut::FColor::LightCyan, 0x62, 0xbf, 0xf8);
setPalette (finalcut::FColor::LightRed, 0xee, 0x44, 0x44);
setPalette (finalcut::FColor::LightMagenta, 0xe9, 0xad, 0xff);
setPalette (finalcut::FColor::Yellow, 0xf8, 0xef, 0xa6);
setPalette (finalcut::FColor::White, 0xff, 0xff, 0xff);
}
void resetColorPalette() override
{
setVGAdefaultPalette();
}
};
#endif // BEECOLORPALETTE_H
```
Use of Themes
-------------
If you include the two include files above in your application, you can use
the widget color theme and the color palette theme. In the main function of
your application, the object instances of both classes are created and set.
<figure class="image">
<img src="user-theme.png" alt="User theme example">
<figcaption>Figure 7. User theme example</figcaption>
</figure>
<br /><br />
**File:** *theme.cpp*
```cpp
#include <final/final.h>
#include "widget-color-theme.h"
#include "color-palette-theme.h"
using namespace finalcut;
class dialogWidget final : public FDialog
{
public:
explicit dialogWidget (FWidget* parent = nullptr)
: FDialog{"Theming test application", parent}
{
Input.setLabelText("File name:");
Input.setLabelOrientation(FLineEdit::LabelOrientation::Above);
Input.setStatusbarMessage("Enter a file name");
Browse.addCallback
(
"clicked",
this, &dialogWidget::cb_FileBrowse
);
Apply.setStatusbarMessage("Apply settings");
Quit.setStatusbarMessage("Exit the program");
Quit.addCallback
(
"clicked",
finalcut::getFApplication(),
&finalcut::FApplication::cb_exitApp,
this
);
Open.addCallback
(
"clicked",
this, &dialogWidget::cb_FileBrowse
);
}
private:
void initLayout()
{
setGeometry (FPoint{15, 5}, FSize{50, 9});
Input.setGeometry (FPoint{2, 2}, FSize{39, 1});
Browse.setGeometry (FPoint{43, 2}, FSize{4, 1});
Apply.setGeometry (FPoint{24, 5}, FSize{10, 1});
Quit.setGeometry (FPoint{37, 5}, FSize{10, 1});
FDialog::initLayout();
}
void cb_FileBrowse()
{
auto filename = FFileDialog::fileOpenChooser(this);
if ( ! filename.isEmpty() )
{
Input.setText(filename);
Input.redraw();
}
}
FMenuBar Menubar{this};
FMenu File{"&File", &Menubar};
FMenuItem New{"&New", &File};
FMenuItem Open{"&Open...", &File};
FMenu Edit{"&Edit", &Menubar};
FMenuItem Undo{"&Undo", &Edit};
FMenu Help{"&Help", &Menubar};
FMenuItem About{"&About", &Help};
FStatusBar Statusbar{this};
FLineEdit Input{"input...", this};
FButton Browse{"..", this};
FButton Apply{"&Apply", this};
FButton Quit{"&Quit", this};
};
int main (int argc, char* argv[])
{
FApplication app(argc, argv);
// Set the widget color theme
app.setColorTheme<BeeColorTheme>();
// Set the color palette theme
FTerm::setColorPaletteTheme<BeeColorPalette>();
dialogWidget dialog(&app);
FWidget::setMainWidget(&dialog);
dialog.show();
return app.exec();
}
```
After entering the source code in *theme.cpp* you can compile
the above program with gcc:
```bash
g++ theme.cpp -o theme -O2 -lfinal -std=c++11
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,517 +0,0 @@
3C0h: Attribute Controller: Address register
bit 0-4 Address of data register to write to port 3C0h or read from port 3C1h
(Reads only on VGA).
5 If set screen output is enabled and the palette can not be modified,
if clear screen output is disabled and the palette can be modified.
Port 3C0h is special in that it is both address and data-write register.
Data reads happen from port 3C1h. An internal flip-flop remembers whether it
is currently acting as address or data register.
Accesses to the attribute controller must be separated by at least 250ns.
Reading port 3dAh will reset the flip-flop to address mode.
3C0h index 0-Fh (r/W): Attribute: Palette
bit 0 (EGA) Primary Blue
1 (EGA) Primary Green
2 (EGA) Primary Red
3 (EGA) Secondary Blue
4 (EGA) Secondary Green
5 (EGA) Secondary Red
0-5 (VGA) Index into the 256 color DAC table.
May be modified by 3C0h index 10h and 14h.
3C0h index 10h (r/W): Attribute: Mode Control Register
bit 0 Graphics mode if set, Alphanumeric mode else.
1 Monochrome mode if set, color mode else.
2 9-bit wide characters if set.
The 9th bit of characters C0h-DFh will be the same as
the 8th bit. Otherwise it will be the background color.
3 If set Attribute bit 7 is blinking, else high intensity.
5 (VGA Only) If set the PEL panning register (3C0h index 13h) is
temporarily set to 0 from when the line compare causes a wrap around
until the next vertical retrace when the register is automatically
reloaded with the old value, else the PEL panning register ignores
line compares.
6 (VGA Only) If set pixels are 8 bits wide. Used in 256 color modes.
7 (VGA Only) If set bit 4-5 of the index into the DAC table are taken
from port 3C0h index 14h bit 0-1, else the bits in the palette
register are used.
3C0h index 11h (r/W): Attribute: Overscan Color Register.
bit 0-5 Color of screen border. Color is defined as in the palette registers.
Note: The EGA requires the Overscan color to be 0 in high resolution modes.
3C0h index 12h (r/W): Attribute: Color Plane Enable Register
bit 0 Bit plane 0 is enabled if set.
1 Bit plane 1 is enabled if set.
2 Bit plane 2 is enabled if set.
3 Bit plane 3 is enabled if set.
4-5 Video Status MUX. Diagnostics use only.
Two attribute bits appear on bits 4 and 5 of the Input
Status Register 1 (3dAh).
Value EGA VGA
0 Red/Blue Bit 2/Bit 0
1 Blue'/Green Bit 5/Bit 4
2 Red'/Green' Bit 3/Bit 1
3 Bit 7/Bit 6
3C0h index 13h (r/W): Attribute: Horizontal PEL Panning Register
bit 0-3 Indicates number of pixels to shift the display left
Value 9bit textmode 256color mode Other modes
0 1 0 0
1 2 n/a 1
2 3 1 2
3 4 n/a 3
4 5 2 4
5 6 n/a 5
6 7 3 6
7 8 n/a 7
8 0 n/a n/a
3C0h index 14h (r/W): Attribute: Color Select Register (VGA Only)
bit 0-1 If 3C0h index 10h bit 7 is set these 2 bits are used as bits 4-5 of
the index into the DAC table.
2-3 These 2 bits are used as bit 6-7 of the index into the DAC table
except in 256 color mode.
Note: this register does not affect 256 color modes.
3C2h (R): Input Status #0 Register
bit 4 Status of the switch selected by the Miscellaneous Output
Register 3C2h bit 2-3. Switch high if set.
5 (EGA Only) Pin 19 of the Feature Connector (FEAT0) is high if set
6 (EGA Only) Pin 17 of the Feature Connector (FEAT1) is high if set
7 (EGA Only ??) If set IRQ 2 has happened due to Vertical Retrace.
Should be cleared by IRQ 2 interrupt routine by clearing port 3d4h
index 11h bit 4.
3C2h (W): Miscellaneous Output Register
bit 0 If set Color Emulation. Base Address=3Dxh else Mono Emulation. Base
Address=3Bxh.
1 Enable CPU Access to video memory if set
2-3 Clock Select
0: 14MHz(EGA) 25MHz(VGA)
1: 16MHz(EGA) 28MHz(VGA)
2: External(EGA) Reserved(VGA)
4 (EGA Only) Disable internal video drivers if set
5 When in Odd/Even modes Select High 64k bank if set
6 Horizontal Sync Polarity. Negative if set
7 Vertical Sync Polarity. Negative if set
Bit 6-7 indicates the number of lines on the display:
0=200(EGA) Reserved(VGA)
1= 400(VGA)
2=350(EGA) 350(VGA)
3= 480(VGA).
Note: Set to all zero on a hardware reset.
Note: On the VGA this register can be read from port 3CCh.
3C3h (W): Video Subsystem Enable Register
bit 0 Enables the VGA display if set
3C4h index 0 (r/W): Sequencer: Reset
bit 0 (EGA) Asynchronous Reset if clear
0 (VGA) Synchronous Reset just as bit 1
1 Synchronous Reset if clear
3C4h index 1 (r/W): Sequencer: Clocking Mode
bit 0 If set character clocks are 8 dots wide, else 9.
1 (EGA Only) If set the CRTC uses 2/5 of the clock cycles, else 4/5.
2 If set loads video serializers every other character
clock cycle, else every one.
3 If set the Dot Clock is Master Clock/2, else same as
Master Clock (See 3C2h bit 2-3). (Doubles pixels).
4 (VGA Only) If set loads video serializers every fourth character
clock cycle, else every one.
5 (VGA Only) if set turns off screen and gives all memory cycles to the
CPU interface.
3C4h index 2 (r/W): Sequencer: Map Mask Register
bit 0 Enable writes to plane 0 if set
1 Enable writes to plane 1 if set
2 Enable writes to plane 2 if set
3 Enable writes to plane 3 if set
3C4h index 3 (r/W): Sequencer: Character Map Select Register
bit 0-1 (EGA) Selects EGA Character Map (0..3) if bit 3 of the character
attribute is clear.
2-3 (EGA) Selects EGA Character Map (0..3) if bit 3 of the character
attribute is set.
0,1,4 (VGA) Selects VGA Character Map (0..7) if bit 3 of the character
attribute is clear.
2,3,5 (VGA) Selects VGA Character Map (0..7) if bit 3 of the character
attribute is set.
Note: Character Maps are placed at:
Map no. (EGA/VGA) Map no. (VGA)
0 0k 4 8k
1 16k 5 24k
2 32k 6 40k
3 48k 7 56k
3C4h index 4 (r/W): Sequencer: Memory Mode Register
bit 0 Set if in an alphanumeric mode, clear in graphics modes.
1 Set if more than 64kbytes on the adapter.
2 Enables Odd/Even addressing mode if set. Odd/Even mode places all odd
bytes in plane 1&3, and all even bytes in plane 0&2.
3 (VGA Only) If set address bit 0-1 selects video memory planes
(256 color mode), rather than the Map Mask and Read Map Select
Registers.
3C4h index 7 (R/W): Sequencer Horizontal Character Counter Reset Register.
(VGA Only)
Note: Undocumented by IBM. May not be available in all clones.
A write to this register will cause the Horizontal Character Counter
to be held reset (=0) until a write happens to any of the Sequencer
registers index 0..6.
The Vertical Line counter is clocked by a signal derived from the
Horizontal Display Enable (which does not occur if the Horizontal
Character Counter is held reset).
Thus a write to index 7 during Vertical Retrace can stop the display
timing and allow software to start the next frame reasonably
synchronous to an external event.
3C6h (R/W): PEL Mask (VGA Only)
bit 0-7 This register is anded with the palette index sent for each dot.
Should be set to FFh.
3C7h (R): DAC State Register (VGA Only)
bit 0-1 0 indicates the DAC is in Read Mode and 3 indicates write mode.
3C7h (W): PEL Address Read Mode (VGA Only)
bit 0-7 The PEL data register (0..255) to be read from 3C9h.
Note: After reading the 3 bytes at 3C9h this register will increment,
pointing to the next data register.
3C8h (R/W): PEL Address Write Mode (VGA Only)
bit 0-7 The PEL data register (0..255) to be written to 3C9h.
Note: After writing the 3 bytes at 3C9h this register will increment, pointing
to the next data register.
3C9h (R/W): PEL Data Register (VGA Only)
bit 0-5 Color value
Note: Each read or write of this register will cycle through first the
registers for Red, Blue and Green, then increment the appropriate
address register, thus the entire palette can be loaded by writing 0 to
the PEL Address Write Mode register 3C8h and then writing all 768 bytes
of the palette to this register.
3CAh (R): Feature Control Register (VGA Only)
Bit 3 Vertical Sync Select. If set Vertical Sync to the monitor is the
logical OR of the vertical sync and the vertical display enable.
Note: This register is written to port 3dAh and read from 3CAh.
3CAh (W): Graphics 2 Position (EGA Only)
bit 0-1 Select which bit planes should be controlled by Graphics Controller
#2. Always set to 1.
3CCh (R): Miscellaneous Output Register (VGA Only)
bit 0 If set Color Emulation. Base Address=3Dxh else Mono Emulation. Base
Address=3Bxh.
1 Enable CPU Access to video memory if set
2-3 Clock Select. 0= 25MHz, 1= 28MHz, 2= Reserved
5 When in Odd/Even modes Select High 64k bank if set
6 Horizontal Sync Polarity. Negative if set
7 Vertical Sync Polarity. Negative if set
Bit 6-7 indicates the number of lines on the display:
0=Reserved, 1=400, 2=350, 3=480.
Note: This register is written to port 3C2h and read from port 3CCh.
3CCh (W): Graphics 1 Position (EGA Only)
bit 0-1 Select which bit planes should be controlled by Graphics Controller
#1. Always set to 0.
3CEh index 0 (r/W): Graphics: Set/Reset Register
bit 0 If in Write Mode 0 and bit 0 of 3CEh index 1 is set a write to
display memory will set all the bits in plane 0 of the byte to this
bit, if the corresponding bit is set in the Map Mask Register (3CEh
index 8).
1 Same for plane 1 and bit 1 of 3CEh index 1.
2 Same for plane 2 and bit 2 of 3CEh index 1.
3 Same for plane 3 and bit 3 of 3CEh index 1.
3CEh index 1 (r/W): Graphics: Enable Set/Reset Register
bit 0 If set enables Set/reset of plane 0 in Write Mode 0.
1 Same for plane 1.
2 Same for plane 2.
3 Same for plane 3.
3CEh index 2 (r/W): Graphics: Color Compare Register
bit 0-3 In Read Mode 1 each pixel at the address of the byte read is compared
to this color and the corresponding bit in the output set to 1 if
they match, 0 if not. The Color Don't Care Register (3CEh index 7)
can exclude bitplanes from the comparison.
3CEh index 3 (r/W): Graphics: Data Rotate
bit 0-2 Number of positions to rotate data right before it is written to
display memory. Only active in Write Mode 0.
3-4 In Write Mode 2 this field controls the relation between the data
written from the CPU, the data latched from the previous read and the
data written to display memory:
0: CPU Data is written unmodified
1: CPU data is ANDed with the latched data
2: CPU data is ORed with the latch data.
3: CPU data is XORed with the latched data.
3CEh index 4 (r/W): Graphics: Read Map Select Register
bit 0-1 Number of the plane Read Mode 0 will read from.
3CEh index 5 (r/W): Graphics: Mode Register
bit 0-1 Write Mode: Controls how data from the CPU is transformed before
being written to display memory:
0: Mode 0 works as a Read-Modify-Write operation.
First a read access loads the data latches of the EGA/VGA with
the value in video memory at the addressed location. Then a
write access will provide the destination address and the CPU
data byte. The data written is modified by the function code in
the Data Rotate register (3CEh index 3) as a function of the CPU
data and the latches, then data is rotated as specified by the
same register.
1: Mode 1 is used for video to video transfers.
A read access will load the data latches with the contents of
the addressed byte of video memory. A write access will write
the contents of the latches to the addressed byte. Thus a single
MOVSB instruction can copy all pixels in the source address byte
to the destination address.
2: Mode 2 writes a color to all pixels in the addressed byte of
video memory. Bit 0 of the CPU data is written to plane 0 et
cetera. Individual bits can be enabled or disabled through the
Bit Mask register (3CEh index 8).
3: (VGA Only) Mode 3 can be used to fill an area with a color and
pattern. The CPU data is rotated according to 3CEh index 3 bits
0-2 and anded with the Bit Mask Register (3CEh index 8). For
each bit in the result the corresponding pixel is set to the
color in the Set/Reset Register (3CEh index 0 bits 0-3) if the
bit is set and to the contents of the processor latch if the bit
is clear.
2 (EGA Only) Forces all outputs to a high impedance state if set.
3 Read Mode
0: Data is read from one of 4 bit planes depending on the Read Map
Select Register (3CEh index 4).
1: Data returned is a comparison between the 8 pixels occupying the
read byte and the color in the Color Compare Register (3CEh
index 2). A bit is set if the color of the corresponding pixel
matches the register.
4 Enables Odd/Even mode if set (See 3C4h index 4 bit 2).
5 Enables CGA style 4 color pixels using even/odd bit pairs if set.
6 (VGA Only) Enables 256 color mode if set.
3CEh index 6 (r/W): Graphics: Miscellaneous Register
bit 0 Indicates Graphics Mode if set, Alphanumeric mode else.
1 Enables Odd/Even mode if set.
2-3 Memory Mapping:
0: use A000h-BFFFh
1: use A000h-AFFFh EGA/VGA Graphics modes
2: use B000h-B7FFh Monochrome modes
3: use B800h-BFFFh CGA modes
3CEh index 7 (r/W): Graphics: Color Don't Care Register
bit 0 Ignore bit plane 0 in Read mode 1 if clear.
1 Ignore bit plane 1 in Read mode 1 if clear.
2 Ignore bit plane 2 in Read mode 1 if clear.
3 Ignore bit plane 3 in Read mode 1 if clear.
3CEh index 8 (r/W): Graphics: Bit Mask Register
bit 0-7 Each bit if set enables writing to the corresponding bit of a byte in
display memory.
3d4h index 0 (r/W): CRTC: Horizontal Total Register
bit 0-7 (EGA) Horizontal Total Character Clocks-2
0-7 (VGA) Horizontal Total Character Clocks-5
3d4h index 1 (r/W): CRTC: Horizontal Display End Register
bit 0-7 Number of Character Clocks Displayed -1
3d4h index 2 (r/W): CRTC: Start Horizontal Blanking Register
bit 0-7 The count at which Horizontal Blanking starts
3d4h index 3 (r/W): CRTC: End Horizontal Blanking Register
bit 0-4 Horizontal Blanking ends when the last 5 (6 for VGA) bits of the
character counter equals this field.
(VGA) The sixth bit is found in port 3d4h index 5 bit 7.
5-6 Number of character clocks to delay start of display after Horizontal
Total has been reached.
7 (VGA Only) Access to Vertical Retrace registers if set. If clear
reads to 3d4h index 10h and 11h access the Lightpen read back
registers ??
3d4h index 4 (r/W): CRTC: Start Horizontal Retrace Register
bit 0-7 Horizontal Retrace starts when the Character Counter reaches this
value.
3d4h index 5 (r/W): CRTC: End Horizontal Retrace Register
bit 0-4 Horizontal Retrace ends when the last 5 bits of the character counter
equals this value.
5-6 Number of character clocks to delay start of display after Horizontal
Retrace.
7 (EGA) Provides Smooth Scrolling in Odd/Even mode. When set display
starts from an odd byte.
7 (VGA) bit 5 of the End Horizontal Blanking count (See 3d4h index 3
bit 0-4).
3d4h index 6 (r/W): CRTC: Vertical Total Register
bit 0-7 Lower 8 bits of the Vertical Total. Bit 8 is found in 3d4h index 7
bit 0. (VGA) Bit 9 is found in 3d4h index 7 bit 5.
Note: For the VGA this value is the number of scan lines in the display -2.
3d4h index 7 (r/W): CRTC: Overflow Register
bit 0 Bit 8 of Vertical Total (3d4h index 6)
1 Bit 8 of Vertical Display End (3d4h index 12h)
2 Bit 8 of Vertical Retrace Start (3d4h index 10h)
3 Bit 8 of Start Vertical Blanking (3d4h index 15h)
4 Bit 8 of Line Compare Register (3d4h index 18h)
5 (VGA) Bit 9 of Vertical Total (3d4h index 6)
6 (VGA) Bit 9 of Vertical Display End (3d4h index 12h)
7 (VGA) Bit 9 of Vertical Retrace Start (3d4h index 10h)
3d4h index 8 (r/W): CRTC: Preset Row Scan Register
bit 0-4 Number of lines we have scrolled down in the first character row.
Provides Smooth Vertical Scrolling.
5-6 (VGA Only) Number of bytes to skip at the start of scanline. Provides
Smooth Horizontal Scrolling together with the Horizontal Panning
Register (3C0h index 13h).
3d4h index 9 (r/W): CRTC: Maximum Scan Line Register
bit 0-4 Number of scan lines in a character row -1. In graphics modes this is
the number of times (-1) the line is displayed before passing on to
the next line (0: normal, 1: double, 2: triple...).
This is independent of bit 7, except in CGA modes which seems to
require this field to be 1 and bit 7 to be set to work.
5 (VGA) Bit 9 of Start Vertical Blanking
6 (VGA) Bit 9 of Line Compare Register
7 (VGA) Doubles each scan line if set.
I.e. displays 200 lines on a 400 display.
3d4h index Ah (r/W): CRTC: Cursor Start Register
bit 0-4 First scanline of cursor within character.
5 (VGA) Turns Cursor off if set
3d4h index Bh (r/W): CRTC: Cursor End Register
bit 0-4 Last scanline of cursor within character
5-6 Delay of cursor data in character clocks.
3d4h index Ch (r/W): CRTC: Start Address High Register
bit 0-7 Upper 8 bits of the start address of the display buffer
3d4h index Dh (r/W): CRTC: Start Address Low Register
bit 0-7 Lower 8 bits of the start address of the display buffer
3d4h index Eh (r/W): CRTC: Cursor Location High Register
bit 0-7 Upper 8 bits of the address of the cursor
3d4h index Fh (r/W): CRTC: Cursor Location Low Register
bit 0-7 Lower 8 bits of the address of the cursor
3d4h index 10h (R): CRTC: Light Pen High Register (EGA Only)
bit 0-7 (EGA Only) Upper 8 bits of the address of the lightpen position.
3d4h index 10h (r/W): CRTC: Vertical Retrace Start Register
bit 0-7 Lower 8 bits of Vertical Retrace Start. Vertical Retrace starts when
the line counter reaches this value. Bit 8 is found in 3d4h index 7
bit 2. (VGA Only) Bit 9 is found in 3d4h index 7 bit 7.
3d4h index 11h (R): CRTC: Light Pen Low Register (EGA Only)
bit 0-7 (EGA Only) Lower 8 bits of the address of the lightpen position.
3d4h index 11h (r/W): CRTC: Vertical Retrace End Register
bit 0-3 Vertical Retrace ends when the last 4 bits of the line counter equals
this value.
4 if clear Clears pending Vertical Interrupts.
5 Vertical Interrupts (IRQ 2) disabled if set. Can usually be left
disabled, but some systems (including PS/2) require it to be enabled.
6 (VGA Only) If set selects 5 refresh cycles per scanline rather
than 3.
7 (VGA Only) Disables writing to registers 0-7 if set 3d4h index 7
bit 4 is not affected by this bit.
3d4h index 12h (r/W): CRTC: Vertical Display End Register
bit 0-7 Lower 8 bits of Vertical Display End. The display ends when the line
counter reaches this value. Bit 8 is found in 3d4h index 7 bit 1.
(VGA Only) Bit 9 is found in 3d4h index 7 bit 6.
3d4h index 13h (r/W): CRTC: Offset register
bit 0-7 Number of bytes in a scanline / K. Where K is 2 for byte mode, 4 for
word mode and 8 for Double Word mode.
3d4h index 14h (r/W): CRTC: Underline Location Register
bit 0-4 Position of underline within Character cell.
5 (VGA Only) If set memory address is only changed every fourth
character clock.
6 (VGA Only) Double Word mode addressing if set
3d4h index 15h (r/W): CRTC: Start Vertical Blank Register
bit 0-7 Lower 8 bits of Vertical Blank Start. Vertical blanking starts when
the line counter reaches this value. Bit 8 is found in 3d4h index 7
bit 3.
3d4h index 16h (r/W): CRTC: End Vertical Blank Register
bit 0-4 (EGA) Vertical blanking stops when the lower 5 bits of the line
counter equals this field.
0-6 (VGA) Vertical blanking stops when the lower 7 bits of the line
counter equals this field.
3d4h index 17h (r/W): CRTC: Mode Control Register
bit 0 If clear use CGA compatible memory addressing system
by substituting character row scan counter bit 0 for address bit 13,
thus creating 2 banks for even and odd scan lines.
1 If clear use Hercules compatible memory addressing system by
substituting character row scan counter bit 1 for address bit 14,
thus creating 4 banks.
2 If set increase scan line counter only every second line.
3 If set increase memory address counter only every other character
clock.
4 (EGA Only) If set disable the EGA output drivers. This bit is used
for other purposes in some Super VGA chips.
5 When in Word Mode bit 15 is rotated to bit 0 if this bit is set else
bit 13 is rotated into bit 0.
6 If clear system is in word mode. Addresses are rotated 1 position up
bringing either bit 13 or 15 into bit 0.
7 Clearing this bit will reset the display system until the bit is set
again.
3d4h index 18h (r/W): CRTC: Line Compare Register
bit 0-7 Lower 8 bits of the Line Compare. When the Line counter reaches this
value, the display address wraps to 0. Provides Split Screen
facilities. Bit 8 is found in 3d4h index 7 bit 4.
(VGA Only) Bit 9 is found in 3d4h index 9 bit 6.
3d4h index 22h (R): Memory Latch Register (VGA - Undoc)
bit 0-7 Reads the contents of the Graphics Controller Memory Data Latch for
the plane selected by 3C0h index 4 bit 0-1 (Read Map Select).
Note: This register is not documented by IBM and may not be available on all
clones.
3d4h index 24h (R): Attribute Controller Toggle Register. (VGA - Undoc)
bit 0-4 Attribute Controller Index.
The current value of the Attribute Index Register.
5 Palette Address Source. Same as 3C0h bit 5.
7 If set next read or write to 3C0h will access the data register.
Note: This register is not documented by IBM and may not be available on all
clones.
3d4h index 30h-3Fh (W): Clear Vertical Display Enable. (VGA - Undoc)
bit 0 Setting this bit will clear the Vertical Display Enable thus blanking
the display for the rest of the frame and giving the CPU total access
to display memory until the start of the next frame.
Note: This register is not documented by IBM and may not be available on all
clones.
3dAh (R): Input Status #1 Register
bit 0 Either Vertical or Horizontal Retrace active if set
1 (EGA Only) Light Pen has triggered if set
2 (EGA Only) Light Pen switch is open if set
3 Vertical Retrace in progress if set
4-5 (EGA Only) Shows two of the 6 color outputs, depending on 3C0h index
12h bit 4-5:
Attr: Bit 4-5: Out bit 4 Out bit 5
0 Blue Red
1 I Blue Green
2 I Red I Green
3dAh (W): Feature Control Register
bit 0 (EGA Only) Output to pin 21 of the Feature Connector.
1 (EGA Only) Output to pin 20 of the Feature Connector.
3 (VGA Only) Vertical Sync Select. If set Vertical Sync to the monitor
is the logical OR of the vertical sync and the vertical display
enable.
Note: On the VGA this register can be read from port 3CAh.

View File

@ -1,38 +1,36 @@
The virtual terminal (vterm) The virtual terminal (vterm)
---------------------------- ----------------------------
FINAL CUT uses a virtual terminal to print character via an update method
on the screen. It provides (as an overlying layer) virtual windows for
the realization of window movements. The update methods only transfer
differences to the virtual terminal or physical screen.
print(...) print(...)
printf(...) printf(...)
│ ╔════════════════════════[ vterm ]════════════════════════╗ │ ╔═════════════════════════[ vterm ]═════════════════════════╗
│ ║createVTerm() ║ │ ║createVTerm() ║
│ ║ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║ │ ║ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║
│ ║ ║ │ ║ ║
│ ║ │ restoreVTerm(x,y,w,h) │ ║ │ ║ │ restoreVTerm(x,y,w,h) │ ║
│ ┌───────╨────[ vwin ]────────────┐ ║ │ ║ ║
│ │createArea(area) │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║ │ ║ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║
│ ║ ║
│ ┌───────╨─────[ vwin ]─────────────┐ ║
│ │createArea(area) │ ║
│ │ │ ║ │ │ │ ║
│ │ │ ║ │ │ │ ║
└──┼────────► putArea(area) ────► ║ └───┼─────────────► ──────► updateVTerm(area) ────► ║
│ │ ║
│ putArea(x,y,area) ────► ║
│ │ ║
│ ◄──── getArea(x,y,area) ║
│ │ ║ │ │ ║
│ putArea(x,y,area) ║
│ ────────────────────► ║
│ getArea(x,y,area) ║
│ ◄──────────────────── ║
│ │ ║ │ │ ║
│ │ ║ │ │ ║
│ resizeArea(area)│ ║ │ resizeArea(area)│ ║
└───────╥────────────────────────┘ ║ └───────╥──────────────────────────┘ ║
║ ║
║ ║
║ ║ ║ ║
║ │ resizeVTerm()║ ║ │ resizeVTerm()║
╚═══════▼═════════════════════════════════════════════════╝ ═══▼═══════════════════════════════════════════════════════╝
│ putVTerm() │ putVTerm()
└──────────────────► updateTerminalLine(y) └──────────────────► updateTerminalLine(y)
@ -42,8 +40,10 @@ printf(...)
│ output_buffer │ │ output_buffer │
└───────────────┘ └───────────────┘
│ flushOutputBuffer() │ flush_out()
│ and putchar(char) │ +
│ Fputchar(char)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▌ ▐ ▌ ▐
@ -54,3 +54,4 @@ printf(...)
▀▀▀▀▀▀▀███▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀███▀▀▀▀▀▀▀
███ ███
▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀

View File

@ -1,432 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="142.65057mm"
viewBox="-3.4827666 -3.5036988 233.1604 142.65057"
width="233.1604mm"
version="1.1"
id="svg165">
<metadata
id="metadata171">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs169">
<marker
id="a-3"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(0.6)"
id="path2-6"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
<marker
id="s-7"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 0,5.65 V -5.65"
transform="scale(0.8)"
id="path56-5"
style="fill:none;stroke:#000000;stroke-width:1.00000003pt" />
</marker>
<marker
id="r-9"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 0,5.65 V -5.65"
transform="scale(0.8)"
id="path53-1"
style="fill:none;stroke:#000000;stroke-width:1.00000003pt" />
</marker>
<marker
id="c-2"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6)"
id="path8-7"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
<marker
id="b-0"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(0.6)"
id="path5-6"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
</defs>
<g
id="Terminal"
transform="translate(2.0027161e-8,-1.1799729e-6)">
<rect
y="-1.6996995"
x="-1.6787703"
height="139.04257"
width="229.55241"
id="background"
style="opacity:1;fill:#98b5ef;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<path
id="dialog-shadow"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:0.40613544;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 73.582026,96.010501 h 84.672244 v 5.637389 H 73.582028 Z M 158.25427,33.999698 h 5.64481 V 101.6479 l -5.64481,-1e-5 z" />
<rect
style="opacity:1;fill:#4d4dc0;fill-opacity:1;stroke:none;stroke-width:0.26458329;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="titlebar"
width="81.849838"
height="5.637352"
x="76.404434"
y="28.362345"
ry="0" />
<g
transform="translate(71.692613,37.697864)"
aria-label="Dialog"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="title-bar-text">
<path
d="m 36.734547,-5.2188523 c 0.380342,0 0.645834,-0.099754 0.796479,-0.2992606 0.150644,-0.2011031 0.225967,-0.563408 0.225967,-1.0869146 0,-0.5282949 -0.07532,-0.8921958 -0.225967,-1.0917029 -0.149153,-0.2011032 -0.414646,-0.3016548 -0.796479,-0.3016548 h -0.214781 v 2.7795329 z m 0.0089,-3.176951 c 0.510105,0 0.959924,0.038483 1.201552,0.3289651 0.241628,0.2904823 0.28849,0.8489248 0.28849,1.4618107 0,0.6096937 -0.05097,1.1409181 -0.292598,1.4314005 -0.241629,0.2888862 -0.687339,0.3521929 -1.197444,0.3521929 h -0.677902 v -3.5743692 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4980" />
<path
d="m 39.416509,-7.374682 0.802684,4.768e-4 0.01072,2.1092046 0.323533,-0.00427 0.0043,0.4307556 -1.11338,0.00854 0.01281,-0.4392963 h 0.319263 l -0.0084,-1.6582097 -0.351555,6.36e-4 z m 0.372748,-1.0651357 h 0.427881 l -0.0044,0.78334 -0.425031,-4.739e-4 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4982" />
<path
d="m 43.125816,-6.0642176 h -0.27473 c -0.249596,0 -0.406952,-0.022255 -0.534076,0.066111 -0.125574,0.086816 -0.188361,0.217041 -0.188361,0.3906738 0,0.1565796 -0.0093,0.177762 0.09181,0.2675815 0.119043,0.1057463 0.200316,0.063855 0.367748,0.063855 0.235644,0 0.606933,-0.00609 0.84811,-0.022709 -0.0072,-0.223167 -0.0098,-0.3086156 -0.01715,-0.622359 v -0.1443988 z m 0.78146,-0.052714 -0.01329,1.2910685 -0.470069,0.00443 c -0.383705,0.023525 -0.613681,-0.015785 -0.877687,0.00543 -0.2651,0 -0.450139,-0.012404 -0.608269,-0.1612326 -0.15813,-0.1503784 -0.237195,-0.3511413 -0.237195,-0.6022888 0,-0.2899047 0.09689,-0.5100463 0.29068,-0.6604247 0.195337,-0.1503784 0.481366,-0.2255676 0.858087,-0.2255676 h 0.574384 v -0.067438 c -0.0015,-0.2077528 0.02628,-0.3111209 -0.0862,-0.3697529 -0.134874,-0.00598 -0.357472,-0.011877 -0.574003,-0.015059 -0.216531,-0.00318 -0.201855,-0.00432 -0.415259,-0.00808 -0.213404,-0.00376 -0.231246,-0.00347 -0.455954,-0.014158 l -0.001,-0.3673202 c 0.188279,-0.043006 0.323439,-0.05143 0.475607,-0.068437 0.152169,-0.017007 0.216267,-0.024363 0.392225,-0.024363 0.175959,0 0.545366,0.00521 0.697295,0.068767 0.153479,0.063562 0.09339,0.025958 0.258827,0.144224 0.06634,0.04776 0.147125,0.2290897 0.175883,0.3915519 0.0137,0.1385602 0.01156,0.2868772 0.01156,0.5147702 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4984" />
<path
d="m 45.900031,-5.6889027 c -1.56e-4,0.1884622 -0.0045,0.2960245 0.0014,0.4029534 0.128075,2.853e-4 0.38981,0.00676 0.325949,0.00344 l -1.39e-4,0.1054309 v 0.3556467 c 0,0 -0.204277,-1.388e-4 -0.306416,0 -0.276552,3.759e-4 -0.618616,0.00213 -0.829655,0.00226 -0.0042,-0.2397473 -0.0023,-0.4554667 4.08e-4,-0.4668341 0,0 0.0976,0.00163 0.189007,0.00197 0.183136,6.815e-4 0.166946,0.017973 0.166109,-0.027117 -0.0021,-0.1142859 0.002,-0.2795005 0.0012,-0.4269249 l -0.01118,-2.2559473 h -0.354419 l -0.0045,-0.3998272 h 0.824422 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4986" />
<path
d="m 48.501809,-7.0373667 q -0.331439,0 -0.501894,0.2391665 -0.170455,0.2391665 -0.170455,0.7087226 0,0.4673619 0.170455,0.7087226 0.170455,0.2391664 0.501894,0.2391664 0.333808,0 0.504263,-0.2391664 0.170454,-0.2413607 0.170454,-0.7087226 0,-0.4695561 -0.170454,-0.7087226 -0.170455,-0.2391665 -0.504263,-0.2391665 z m 0,-0.3422933 q 0.55161,0 0.842805,0.3313224 0.29356,0.3313223 0.29356,0.95886 0,0.6297319 -0.291193,0.9610541 -0.291194,0.3291282 -0.845172,0.3291282 -0.55161,0 -0.842803,-0.3291282 -0.291194,-0.3313222 -0.291194,-0.9610541 0,-0.6275377 0.291194,-0.95886 0.291193,-0.3313224 0.842803,-0.3313224 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
id="path4988" />
<path
d="m 51.964761,-6.1043033 c 0,-0.3153981 -0.05478,-0.554613 -0.164328,-0.7176449 -0.107941,-0.1645555 -0.439029,-0.1268362 -0.646856,-0.1268362 -0.217493,0 -0.394754,0.042656 -0.497818,0.2468332 -0.0023,0.1743523 0.0016,0.2822498 0.0016,0.5976479 0,0.3153981 0.05719,0.5561367 0.171579,0.7222158 0.115996,0.1645555 0.262038,0.1347607 0.481143,0.1347607 0.204605,0 0.382387,0.029033 0.490328,-0.1370461 0.109552,-0.1660792 0.164328,-0.406056 0.164328,-0.7199304 z m 0.444654,1.1358901 c 0,0.3839629 -0.09586,0.6749823 -0.287575,0.8730584 -0.191717,0.1980761 -0.459268,0.2076824 -0.706567,0.2076824 -0.247298,0 -0.33316,0.00858 -0.480462,0.00196 -0.147303,-0.00662 -0.39649,-0.028793 -0.530208,-0.069932 l -0.0045,-0.4386006 c 0.175997,0.00217 0.296741,0.00642 0.436946,0.00372 0.140205,-0.0027 0.242375,-0.00179 0.41637,-0.00179 0.173995,0 0.335605,0.014139 0.574211,-0.044752 0.119552,-0.1030316 0.110826,-0.1010778 0.134895,-0.3592803 -0.223716,-0.00621 -0.02265,-0.00143 -0.203956,7.318e-4 -0.141072,0.00169 -0.355235,0.010041 -0.530841,0.010041 -0.315768,0 -0.607522,-0.059609 -0.796017,-0.298824 -0.188494,-0.2392149 -0.243119,-0.6191825 -0.243119,-1.0199056 0,-0.4022468 0.06708,-0.7229777 0.255572,-0.9621926 0.188495,-0.239215 0.396232,-0.2914175 0.774508,-0.2965599 0.378275,-0.00514 0.57781,-0.00176 0.781477,0.00434 l 0.407313,0.00318 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4990" />
</g>
<rect
style="opacity:1;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="title-bar-button"
width="8.4672203"
height="5.6373534"
x="67.93721"
y="28.362345" />
<path
style="opacity:1;fill:none;stroke:#727272;stroke-width:0.40613541;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="title-bar-button-line"
d="M 73.131727,31.089285 H 71.019288" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="dialog-client-area"
width="90.317062"
height="62.010803"
x="67.93721"
y="33.999699" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="dialog-border"
width="87.551292"
height="56.458969"
x="69.366524"
y="36.825737" />
<path
id="button-shadow"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:0.40613541;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 124.38536,84.735805 h 25.40168 v 2.900645 h -25.40168 z m 25.3985,-2.767792 h 2.81775 v 5.668438 h -2.81775 z" />
<rect
style="opacity:1;fill:#727272;fill-opacity:1;stroke:none;stroke-width:0.40613541;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="button"
width="28.224081"
height="5.6373444"
x="121.56296"
y="79.098457" />
<g
transform="translate(71.692613,37.697864)"
id="button-text">
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.2473854;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="Q-underline"
d="M 61.074994,46.475002 H 58.683557" />
<path
d="m 61.556895,45.081249 v -1.673628 h 0.452124 v 1.673628 q 0,0.364146 0.130232,0.535368 0.132689,0.17122 0.407894,0.17122 0.319436,0 0.488983,-0.219452 0.169546,-0.221864 0.169546,-0.634242 v -1.526522 h 0.454582 v 2.696132 H 63.205674 V 45.69861 q -0.120402,0.233922 -0.329264,0.3545 -0.206404,0.120579 -0.484068,0.120579 -0.422638,0 -0.629042,-0.270097 -0.206405,-0.272507 -0.206405,-0.822343 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4661" />
<path
d="m 64.87924,43.518911 0.785453,4.86e-4 0.01049,2.155477 0.316588,-0.0044 0.0042,0.440206 -1.08948,0.0087 0.01253,-0.448935 h 0.31241 l -0.0082,-1.694587 -0.344008,6.5e-4 z m 0.364746,-1.088502 h 0.418696 l -0.0043,0.800525 -0.415908,-4.84e-4 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.76249981px;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4982-36" />
<path
d="m 68.340878,42.63592 -0.0082,0.870231 0.667564,-0.0041 0.0041,0.415134 -0.655161,-0.0041 -0.0082,1.300867 c -0.0013,0.199353 0.03618,0.338423 0.108529,0.417201 0.07235,0.07878 0.198587,0.118167 0.378699,0.118167 h 0.477992 v 0.354501 h -0.519556 c -0.318661,0 -0.543417,-0.06672 -0.674269,-0.200161 -0.130851,-0.133439 -0.196277,-0.363343 -0.196277,-0.689708 l -0.0041,-1.305001 c -0.332119,0 -0.359412,0.0041 -0.686298,0.01654 l -0.0041,-0.427537 h 0.686297 l 0.0082,-0.861963 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4665" />
<path
id="path4722"
transform="matrix(0.26458333,0,0,0.26458333,-75.17538,-41.201563)"
d="m 510.18359,316.11914 c -1.46621,0 -2.55977,0.58334 -3.28125,1.75 -0.71566,1.16667 -1.07226,2.93858 -1.07226,5.31445 0,2.36979 0.35661,4.13802 1.07226,5.30469 0.72148,1.16667 1.8091,1.75 3.26368,1.75 0.0465,0 0.10796,-0.004 0.18359,-0.01 -0.0488,0.12717 1.33074,-0.19815 1.57569,-0.41698 l 1.28368,0.84276 1.26563,-0.56055 -1.06836,-1.21875 c 0.32119,-0.33486 0.4522,-0.54975 0.64258,-0.95312 0.1363,-0.31537 0.5,-2.95183 0.5,-4.73829 0,-2.37587 -0.36056,-4.14778 -1.08203,-5.31445 -0.71565,-1.16666 -1.81117,-1.75 -3.28321,-1.75 z m 0,1.49414 c 0.89602,0 1.53987,0.42839 1.92969,1.28516 0.39565,0.85677 0.59375,2.28406 0.59375,4.2832 0,1.99913 -0.1981,3.42838 -0.59375,4.28516 -0.30165,-0.10534 -0.78096,-0.85138 -1.30469,-0.84571 l -1.45507,0.31641 1.03906,1.17969 0.4375,0.52539 c 0.0131,-7.4e-4 0.0224,-0.005 0.0351,-0.006 -0.20919,0.0651 -0.43368,0.10547 -0.68164,0.10547 -0.8902,0 -1.53209,-0.42839 -1.92773,-1.28516 -0.38983,-0.85677 -0.58398,-2.28233 -0.58398,-4.27539 -10e-6,-1.99914 0.19416,-3.42643 0.58398,-4.2832 0.39564,-0.85677 1.03753,-1.28516 1.92773,-1.28516 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
id="grid"
d="M 0.19939842,0.00358645 V 135.70594 M 3.0218084,0.00358645 V 135.70594 M 5.8442174,0.00358645 V 135.70594 M 8.6666254,0.00358645 V 135.70594 M 11.489038,0.00358645 V 135.70594 M 14.311447,0.00358645 V 135.70594 M 17.133854,0.00358645 V 135.70594 M 19.956264,0.00358645 V 135.70594 M 22.778672,0.00358645 V 135.70594 M 25.60108,0.00358645 V 135.70594 M 28.42349,0.00358645 V 135.70594 M 31.245898,0.00358645 V 135.70594 M 34.068306,0.00358645 V 135.70594 M 36.890714,0.00358645 V 135.70594 M 39.713123,0.00358645 V 135.70594 M 42.535532,0.00358645 V 135.70594 M 45.35794,0.00358645 V 135.70594 M 48.180349,0.00358645 V 135.70594 M 51.00276,0.00358645 V 135.70594 M 53.82517,0.00358645 V 135.70594 M 56.647575,0.00358645 V 135.70594 M 59.469985,0.00358645 V 135.70594 M 62.292391,0.00358645 V 135.70594 M 65.114806,0.00358645 V 135.70594 M 67.937211,0.00358645 V 135.70594 M 70.759622,0.00358645 V 135.70594 M 73.582026,0.00358645 V 135.70594 M 76.404432,0.00358645 V 135.70594 M 79.226847,0.00358645 V 135.70594 M 82.049252,0.00358645 V 135.70594 M 84.871663,0.00358645 V 135.70594 M 87.694067,0.00358645 V 135.70594 M 90.516478,0.00358645 V 135.70594 M 93.338889,0.00358645 V 135.70594 M 96.161298,0.00358645 V 135.70594 M 98.983704,0.00358645 V 135.70594 M 101.8061,0.00358645 V 135.70594 M 104.6285,0.00358645 V 135.70594 M 107.45091,0.00358645 V 135.70594 M 110.27332,0.00358645 V 135.70594 M 113.09573,0.00358645 V 135.70594 M 115.91813,0.00358645 V 135.70594 M 118.74054,0.00358645 V 135.70594 M 121.56296,0.00358645 V 135.70594 M 124.38536,0.00358645 V 135.70594 M 127.20777,0.00358645 V 135.70594 M 130.03017,0.00358645 V 135.70594 M 132.85259,0.00358645 V 135.70594 M 135.67499,0.00358645 V 135.70594 M 138.49741,0.00358645 V 135.70594 M 141.31982,0.00358645 V 135.70594 M 144.14222,0.00358645 V 135.70594 M 146.96463,0.00358645 V 135.70594 M 149.78704,0.00358645 V 135.70594 M 152.60945,0.00358645 V 135.70594 M 155.43186,0.00358645 V 135.70594 M 158.25427,0.00358645 V 135.70594 M 161.07667,0.00358645 V 135.70594 M 163.89908,0.00358645 V 135.70594 M 166.72149,0.00358645 V 135.70594 M 169.5439,0.00358645 V 135.70594 M 172.36631,0.00358645 V 135.70594 M 175.18871,0.00358645 V 135.70594 M 178.01112,0.00358645 V 135.70594 M 180.83353,0.00358645 V 135.70594 M 183.65594,0.00358645 V 135.70594 M 186.47835,0.00358645 V 135.70594 M 189.30076,0.00358645 V 135.70594 M 192.12317,0.00358645 V 135.70594 M 194.94557,0.00358645 V 135.70594 M 197.76799,0.00358645 V 135.70594 M 200.59039,0.00358645 V 135.70594 M 203.41281,0.00358645 V 135.70594 M 206.23521,0.00358645 V 135.70594 M 209.05761,0.00358645 V 135.70594 M 211.88003,0.00358645 V 135.70594 M 214.70243,0.00358645 V 135.70594 M 217.52485,0.00358645 V 135.70594 M 220.34725,0.00358645 V 135.70594 M 223.16966,0.00358645 V 135.70594 M 225.99207,0.00358645 V 135.70594 M 0.19939842,0.17562045 H 226.19405 M 0.19939842,5.8129634 H 226.19405 M 0.19939842,11.450306 H 226.19405 M 0.19939842,17.087659 H 226.19405 M 0.19939842,22.725002 H 226.19405 M 0.19939842,28.362345 H 226.19405 M 0.19939842,33.999698 H 226.19405 M 0.19939842,39.637041 H 226.19405 M 0.19939842,45.274384 H 226.19405 M 0.19939842,50.911727 H 226.19405 M 0.19939842,56.54908 H 226.19405 M 0.19939842,62.186423 H 226.19405 M 0.19939842,67.823776 H 226.19405 M 0.19939842,73.461119 H 226.19405 M 0.19939842,79.098462 H 226.19405 M 0.19939842,84.735805 H 226.19405 M 0.19939842,90.373158 H 226.19405 M 0.19939842,96.010501 H 226.19405 M 0.19939842,101.64789 H 226.19405 M 0.19939842,107.28523 H 226.19405 M 0.19939842,112.92258 H 226.19405 M 0.19939842,118.55993 H 226.19405 M 0.19939842,124.19727 H 226.19405 M 0.19939842,129.83461 H 226.19405 M 0.19939842,135.47196 H 226.19405"
style="fill:none;stroke:#7c7c7c;stroke-width:0.106363;stroke-dasharray:0.212725, 0.106363, 0.053181, 0.106363;stroke-opacity:0.57478602" />
</g>
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;stroke-width:0.26458299"
font-size="3.880556"
x="195.95805"
y="120.19452"
id="text79">getDesktopWidth() = 80</text>
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;stroke-width:0.26458299"
font-size="3.880556"
x="196.55679"
y="125.13338"
id="text81">getDesktopHeight() = 24</text>
<path
d="M 79.217364,0.22472627 V 30.998882"
id="path83"
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#r-9);marker-end:url(#c-2)" />
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
font-size="3.88055611"
x="28.494898"
y="9.6283751"
id="text89">
<tspan
x="28.494898"
y="9.6283751"
id="tspan85">getPos() = (25,6)</tspan>
<tspan
x="28.494898"
y="14.920043"
id="tspan87">getTermPos() = (25,6)</tspan>
</text>
<text
font-size="3.880556"
x="80.911568"
y="13.147828"
id="text97"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">
<tspan
font-size="3.880556"
x="80.911568"
y="13.147828"
id="tspan93"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getY() = 6</tspan>
<tspan
font-size="3.880556"
x="80.911568"
y="17.998522"
id="tspan95"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getTermY() = 6</tspan>
</text>
<path
d="M 68.681659,39.660894 H 0.24701944"
id="path91"
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#a-3);marker-end:url(#r-9)" />
<path
d="M 69.044694,30.9307 52.569957,16.081284"
id="path99"
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#a-3)" />
<text
font-size="3.880556"
x="23.529711"
y="38.200218"
id="text105"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">
<tspan
font-size="3.880556"
x="23.529711"
y="38.200218"
id="tspan101"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getX() = 25</tspan>
<tspan
font-size="3.880556"
x="23.529711"
y="43.050911"
id="tspan103"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getTermX() = 25</tspan>
</text>
<path
style="fill:none;stroke:#4f4f4f;stroke-width:3.60800004;stroke-linejoin:round"
d="M -1.6787666,-1.6996988 H 227.87363 V 137.34287 H -1.6787666 Z"
id="path163" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777767px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#aa4f5d;fill-opacity:1;stroke-width:0.26458299"
font-size="3.880556"
x="7.6337833"
y="4.3176794"
id="text81-3">
<tspan
y="4.3176794"
x="7.6337833"
id="tspan4561">(1,1)</tspan>
</text>
<rect
y="0.17561977"
x="0.19939597"
height="5.6135254"
width="2.8310132"
id="rect4575"
style="opacity:1;fill:#aa4f5d;fill-opacity:0.27777782;stroke:#aa4f5d;stroke-width:0.13229166;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777767px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#aa4f5d;fill-opacity:1;stroke-width:0.26458299"
font-size="3.880556"
x="217.05225"
y="133.3719"
id="text81-3-0">
<tspan
y="133.3719"
x="217.05225"
id="tspan4598">(80,24)</tspan>
</text>
<rect
y="129.86887"
x="223.19901"
height="5.6135254"
width="2.8310132"
id="rect4575-1"
style="opacity:1;fill:#aa4f5d;fill-opacity:0.27777782;stroke:#aa4f5d;stroke-width:0.13229166;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="M 122.40614,81.759513 H 70.75244"
id="path91-3"
style="fill:none;stroke:#000000;stroke-width:0.40613502;marker-start:url(#a-3);marker-end:url(#s-7)" />
<text
font-size="3.880556"
x="83.122948"
y="80.298859"
id="text105-5"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">
<tspan
font-size="3.880556"
x="83.122948"
y="80.298859"
id="tspan101-6"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getX() = 19</tspan>
<tspan
font-size="3.880556"
x="83.122948"
y="85.149551"
id="tspan103-2"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getTermX() = 44</tspan>
</text>
<path
d="M 124.41247,39.600857 V 80.403768"
id="path83-0"
style="fill:none;stroke:#000000;stroke-width:0.40613541;marker-start:url(#r-9);marker-end:url(#c-2);stroke-miterlimit:4;stroke-dasharray:none" />
<text
font-size="3.880556"
x="126.10664"
y="59.332214"
id="text97-9"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">
<tspan
font-size="3.880556"
x="126.10664"
y="59.332214"
id="tspan93-3"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getY() = 8</tspan>
<tspan
font-size="3.880556"
x="126.10664"
y="64.182915"
id="tspan95-6"
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299">getTermY() = 15</tspan>
</text>
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
font-size="3.88055611"
x="81.139328"
y="58.211746"
id="text89-2">
<tspan
x="81.139328"
y="58.211746"
id="tspan85-6"
style="stroke-width:0.26458299">getPos() = (19,8)</tspan>
<tspan
x="81.139328"
y="63.503418"
id="tspan87-1"
style="stroke-width:0.26458299">getTermPos() = (44,15)</tspan>
</text>
<path
d="M 122.21838,79.514056 105.74357,64.664639"
id="path99-8"
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#b-0)" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777767px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#aa4f5d;fill-opacity:1;stroke-width:0.26458299"
font-size="3.880556"
x="216.86626"
y="4.3176794"
id="text81-3-0-7">
<tspan
y="4.3176794"
x="216.86626"
id="tspan5248">(80,1)</tspan>
</text>
<rect
y="0.16718166"
x="223.17175"
height="5.6135254"
width="2.8310132"
id="rect4575-1-2"
style="opacity:1;fill:#aa4f5d;fill-opacity:0.27777782;stroke:#aa4f5d;stroke-width:0.13229166;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777767px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#aa4f5d;fill-opacity:1;stroke-width:0.26458299"
font-size="3.880556"
x="8.6122913"
y="133.3719"
id="text81-3-9">
<tspan
y="133.3719"
x="8.6122913"
id="tspan4561-3"
style="stroke-width:0.26458299">(1,24)</tspan>
</text>
<rect
y="129.86887"
x="0.19944175"
height="5.6135254"
width="2.8310132"
id="rect4575-6"
style="opacity:1;fill:#aa4f5d;fill-opacity:0.27777782;stroke:#aa4f5d;stroke-width:0.13229166;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,481 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="142.65057mm"
viewBox="-3.4827666 -3.5036988 233.1604 142.65057"
width="233.1604mm"
version="1.1"
id="svg165">
<metadata
id="metadata171">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs169">
<marker
id="b-0-367"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(0.6)"
id="path5-6-5"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
<marker
id="b-0-3"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(0.6)"
id="path5-6-6"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
<marker
id="b-0-3-5"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(0.6)"
id="path5-6-6-3"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
<marker
id="b-0-36"
orient="auto"
overflow="visible"
refX="0"
refY="0"
style="overflow:visible">
<path
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(0.6)"
id="path5-6-7"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round" />
</marker>
</defs>
<g
id="Terminal">
<rect
y="-1.6996995"
x="-1.6787703"
height="139.04257"
width="229.55241"
id="background"
style="opacity:1;fill:#98b5ef;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<path
id="dialog-shadow"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:0.40613544;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 73.582026,96.010501 h 84.672244 v 5.637389 H 73.582028 Z M 158.25427,33.999698 h 5.64481 V 101.6479 l -5.64481,-1e-5 z" />
<rect
style="opacity:1;fill:#4d4dc0;fill-opacity:1;stroke:none;stroke-width:0.26458329;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="titlebar"
width="81.849838"
height="5.637352"
x="76.404434"
y="28.362345"
ry="0" />
<g
transform="translate(71.692613,37.697864)"
aria-label="Dialog"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="title-bar-text">
<path
d="m 36.734547,-5.2188523 c 0.380342,0 0.645834,-0.099754 0.796479,-0.2992606 0.150644,-0.2011031 0.225967,-0.563408 0.225967,-1.0869146 0,-0.5282949 -0.07532,-0.8921958 -0.225967,-1.0917029 -0.149153,-0.2011032 -0.414646,-0.3016548 -0.796479,-0.3016548 h -0.214781 v 2.7795329 z m 0.0089,-3.176951 c 0.510105,0 0.959924,0.038483 1.201552,0.3289651 0.241628,0.2904823 0.28849,0.8489248 0.28849,1.4618107 0,0.6096937 -0.05097,1.1409181 -0.292598,1.4314005 -0.241629,0.2888862 -0.687339,0.3521929 -1.197444,0.3521929 h -0.677902 v -3.5743692 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4980" />
<path
d="m 39.416509,-7.374682 0.802684,4.768e-4 0.01072,2.1092046 0.323533,-0.00427 0.0043,0.4307556 -1.11338,0.00854 0.01281,-0.4392963 h 0.319263 l -0.0084,-1.6582097 -0.351555,6.36e-4 z m 0.372748,-1.0651357 h 0.427881 l -0.0044,0.78334 -0.425031,-4.739e-4 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4982" />
<path
d="m 43.125816,-6.0642176 h -0.27473 c -0.249596,0 -0.406952,-0.022255 -0.534076,0.066111 -0.125574,0.086816 -0.188361,0.217041 -0.188361,0.3906738 0,0.1565796 -0.0093,0.177762 0.09181,0.2675815 0.119043,0.1057463 0.200316,0.063855 0.367748,0.063855 0.235644,0 0.606933,-0.00609 0.84811,-0.022709 -0.0072,-0.223167 -0.0098,-0.3086156 -0.01715,-0.622359 v -0.1443988 z m 0.78146,-0.052714 -0.01329,1.2910685 -0.470069,0.00443 c -0.383705,0.023525 -0.613681,-0.015785 -0.877687,0.00543 -0.2651,0 -0.450139,-0.012404 -0.608269,-0.1612326 -0.15813,-0.1503784 -0.237195,-0.3511413 -0.237195,-0.6022888 0,-0.2899047 0.09689,-0.5100463 0.29068,-0.6604247 0.195337,-0.1503784 0.481366,-0.2255676 0.858087,-0.2255676 h 0.574384 v -0.067438 c -0.0015,-0.2077528 0.02628,-0.3111209 -0.0862,-0.3697529 -0.134874,-0.00598 -0.357472,-0.011877 -0.574003,-0.015059 -0.216531,-0.00318 -0.201855,-0.00432 -0.415259,-0.00808 -0.213404,-0.00376 -0.231246,-0.00347 -0.455954,-0.014158 l -0.001,-0.3673202 c 0.188279,-0.043006 0.323439,-0.05143 0.475607,-0.068437 0.152169,-0.017007 0.216267,-0.024363 0.392225,-0.024363 0.175959,0 0.545366,0.00521 0.697295,0.068767 0.153479,0.063562 0.09339,0.025958 0.258827,0.144224 0.06634,0.04776 0.147125,0.2290897 0.175883,0.3915519 0.0137,0.1385602 0.01156,0.2868772 0.01156,0.5147702 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4984" />
<path
d="m 45.900031,-5.6889027 c -1.56e-4,0.1884622 -0.0045,0.2960245 0.0014,0.4029534 0.128075,2.853e-4 0.38981,0.00676 0.325949,0.00344 l -1.39e-4,0.1054309 v 0.3556467 c 0,0 -0.204277,-1.388e-4 -0.306416,0 -0.276552,3.759e-4 -0.618616,0.00213 -0.829655,0.00226 -0.0042,-0.2397473 -0.0023,-0.4554667 4.08e-4,-0.4668341 0,0 0.0976,0.00163 0.189007,0.00197 0.183136,6.815e-4 0.166946,0.017973 0.166109,-0.027117 -0.0021,-0.1142859 0.002,-0.2795005 0.0012,-0.4269249 l -0.01118,-2.2559473 h -0.354419 l -0.0045,-0.3998272 h 0.824422 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4986" />
<path
d="m 48.501809,-7.0373667 q -0.331439,0 -0.501894,0.2391665 -0.170455,0.2391665 -0.170455,0.7087226 0,0.4673619 0.170455,0.7087226 0.170455,0.2391664 0.501894,0.2391664 0.333808,0 0.504263,-0.2391664 0.170454,-0.2413607 0.170454,-0.7087226 0,-0.4695561 -0.170454,-0.7087226 -0.170455,-0.2391665 -0.504263,-0.2391665 z m 0,-0.3422933 q 0.55161,0 0.842805,0.3313224 0.29356,0.3313223 0.29356,0.95886 0,0.6297319 -0.291193,0.9610541 -0.291194,0.3291282 -0.845172,0.3291282 -0.55161,0 -0.842803,-0.3291282 -0.291194,-0.3313222 -0.291194,-0.9610541 0,-0.6275377 0.291194,-0.95886 0.291193,-0.3313224 0.842803,-0.3313224 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
id="path4988" />
<path
d="m 51.964761,-6.1043033 c 0,-0.3153981 -0.05478,-0.554613 -0.164328,-0.7176449 -0.107941,-0.1645555 -0.439029,-0.1268362 -0.646856,-0.1268362 -0.217493,0 -0.394754,0.042656 -0.497818,0.2468332 -0.0023,0.1743523 0.0016,0.2822498 0.0016,0.5976479 0,0.3153981 0.05719,0.5561367 0.171579,0.7222158 0.115996,0.1645555 0.262038,0.1347607 0.481143,0.1347607 0.204605,0 0.382387,0.029033 0.490328,-0.1370461 0.109552,-0.1660792 0.164328,-0.406056 0.164328,-0.7199304 z m 0.444654,1.1358901 c 0,0.3839629 -0.09586,0.6749823 -0.287575,0.8730584 -0.191717,0.1980761 -0.459268,0.2076824 -0.706567,0.2076824 -0.247298,0 -0.33316,0.00858 -0.480462,0.00196 -0.147303,-0.00662 -0.39649,-0.028793 -0.530208,-0.069932 l -0.0045,-0.4386006 c 0.175997,0.00217 0.296741,0.00642 0.436946,0.00372 0.140205,-0.0027 0.242375,-0.00179 0.41637,-0.00179 0.173995,0 0.335605,0.014139 0.574211,-0.044752 0.119552,-0.1030316 0.110826,-0.1010778 0.134895,-0.3592803 -0.223716,-0.00621 -0.02265,-0.00143 -0.203956,7.318e-4 -0.141072,0.00169 -0.355235,0.010041 -0.530841,0.010041 -0.315768,0 -0.607522,-0.059609 -0.796017,-0.298824 -0.188494,-0.2392149 -0.243119,-0.6191825 -0.243119,-1.0199056 0,-0.4022468 0.06708,-0.7229777 0.255572,-0.9621926 0.188495,-0.239215 0.396232,-0.2914175 0.774508,-0.2965599 0.378275,-0.00514 0.57781,-0.00176 0.781477,0.00434 l 0.407313,0.00318 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4990" />
</g>
<rect
style="opacity:1;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="title-bar-button"
width="8.4672203"
height="5.6373534"
x="67.93721"
y="28.362345" />
<path
style="opacity:1;fill:none;stroke:#727272;stroke-width:0.40613541;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="title-bar-button-line"
d="M 73.131727,31.089285 H 71.019288" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="dialog-client-area"
width="90.317062"
height="62.010803"
x="67.93721"
y="33.999699" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="dialog-border"
width="87.551292"
height="56.458969"
x="69.366524"
y="36.825737" />
<path
id="button-shadow"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:0.40613541;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 124.38536,84.735805 h 25.40168 v 2.900645 h -25.40168 z m 25.3985,-2.767792 h 2.81775 v 5.668438 h -2.81775 z" />
<rect
style="opacity:1;fill:#727272;fill-opacity:1;stroke:none;stroke-width:0.40613541;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="button"
width="28.224081"
height="5.6373444"
x="121.56296"
y="79.098457" />
<g
transform="translate(71.692613,37.697864)"
id="button-text">
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.2473854;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="Q-underline"
d="M 61.074994,46.475002 H 58.683557" />
<path
d="m 61.556895,45.081249 v -1.673628 h 0.452124 v 1.673628 q 0,0.364146 0.130232,0.535368 0.132689,0.17122 0.407894,0.17122 0.319436,0 0.488983,-0.219452 0.169546,-0.221864 0.169546,-0.634242 v -1.526522 h 0.454582 v 2.696132 H 63.205674 V 45.69861 q -0.120402,0.233922 -0.329264,0.3545 -0.206404,0.120579 -0.484068,0.120579 -0.422638,0 -0.629042,-0.270097 -0.206405,-0.272507 -0.206405,-0.822343 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4661" />
<path
d="m 64.87924,43.518911 0.785453,4.86e-4 0.01049,2.155477 0.316588,-0.0044 0.0042,0.440206 -1.08948,0.0087 0.01253,-0.448935 h 0.31241 l -0.0082,-1.694587 -0.344008,6.5e-4 z m 0.364746,-1.088502 h 0.418696 l -0.0043,0.800525 -0.415908,-4.84e-4 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.76249981px;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4982-36" />
<path
d="m 68.340878,42.63592 -0.0082,0.870231 0.667564,-0.0041 0.0041,0.415134 -0.655161,-0.0041 -0.0082,1.300867 c -0.0013,0.199353 0.03618,0.338423 0.108529,0.417201 0.07235,0.07878 0.198587,0.118167 0.378699,0.118167 h 0.477992 v 0.354501 h -0.519556 c -0.318661,0 -0.543417,-0.06672 -0.674269,-0.200161 -0.130851,-0.133439 -0.196277,-0.363343 -0.196277,-0.689708 l -0.0041,-1.305001 c -0.332119,0 -0.359412,0.0041 -0.686298,0.01654 l -0.0041,-0.427537 h 0.686297 l 0.0082,-0.861963 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4665" />
<path
id="path4722"
transform="matrix(0.26458333,0,0,0.26458333,-75.17538,-41.201563)"
d="m 510.18359,316.11914 c -1.46621,0 -2.55977,0.58334 -3.28125,1.75 -0.71566,1.16667 -1.07226,2.93858 -1.07226,5.31445 0,2.36979 0.35661,4.13802 1.07226,5.30469 0.72148,1.16667 1.8091,1.75 3.26368,1.75 0.0465,0 0.10796,-0.004 0.18359,-0.01 -0.0488,0.12717 1.33074,-0.19815 1.57569,-0.41698 l 1.28368,0.84276 1.26563,-0.56055 -1.06836,-1.21875 c 0.32119,-0.33486 0.4522,-0.54975 0.64258,-0.95312 0.1363,-0.31537 0.5,-2.95183 0.5,-4.73829 0,-2.37587 -0.36056,-4.14778 -1.08203,-5.31445 -0.71565,-1.16666 -1.81117,-1.75 -3.28321,-1.75 z m 0,1.49414 c 0.89602,0 1.53987,0.42839 1.92969,1.28516 0.39565,0.85677 0.59375,2.28406 0.59375,4.2832 0,1.99913 -0.1981,3.42838 -0.59375,4.28516 -0.30165,-0.10534 -0.78096,-0.85138 -1.30469,-0.84571 l -1.45507,0.31641 1.03906,1.17969 0.4375,0.52539 c 0.0131,-7.4e-4 0.0224,-0.005 0.0351,-0.006 -0.20919,0.0651 -0.43368,0.10547 -0.68164,0.10547 -0.8902,0 -1.53209,-0.42839 -1.92773,-1.28516 -0.38983,-0.85677 -0.58398,-2.28233 -0.58398,-4.27539 -10e-6,-1.99914 0.19416,-3.42643 0.58398,-4.2832 0.39564,-0.85677 1.03753,-1.28516 1.92773,-1.28516 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
id="grid"
d="M 0.19939842,0.00358645 V 135.70594 M 3.0218084,0.00358645 V 135.70594 M 5.8442174,0.00358645 V 135.70594 M 8.6666254,0.00358645 V 135.70594 M 11.489038,0.00358645 V 135.70594 M 14.311447,0.00358645 V 135.70594 M 17.133854,0.00358645 V 135.70594 M 19.956264,0.00358645 V 135.70594 M 22.778672,0.00358645 V 135.70594 M 25.60108,0.00358645 V 135.70594 M 28.42349,0.00358645 V 135.70594 M 31.245898,0.00358645 V 135.70594 M 34.068306,0.00358645 V 135.70594 M 36.890714,0.00358645 V 135.70594 M 39.713123,0.00358645 V 135.70594 M 42.535532,0.00358645 V 135.70594 M 45.35794,0.00358645 V 135.70594 M 48.180349,0.00358645 V 135.70594 M 51.00276,0.00358645 V 135.70594 M 53.82517,0.00358645 V 135.70594 M 56.647575,0.00358645 V 135.70594 M 59.469985,0.00358645 V 135.70594 M 62.292391,0.00358645 V 135.70594 M 65.114806,0.00358645 V 135.70594 M 67.937211,0.00358645 V 135.70594 M 70.759622,0.00358645 V 135.70594 M 73.582026,0.00358645 V 135.70594 M 76.404432,0.00358645 V 135.70594 M 79.226847,0.00358645 V 135.70594 M 82.049252,0.00358645 V 135.70594 M 84.871663,0.00358645 V 135.70594 M 87.694067,0.00358645 V 135.70594 M 90.516478,0.00358645 V 135.70594 M 93.338889,0.00358645 V 135.70594 M 96.161298,0.00358645 V 135.70594 M 98.983704,0.00358645 V 135.70594 M 101.8061,0.00358645 V 135.70594 M 104.6285,0.00358645 V 135.70594 M 107.45091,0.00358645 V 135.70594 M 110.27332,0.00358645 V 135.70594 M 113.09573,0.00358645 V 135.70594 M 115.91813,0.00358645 V 135.70594 M 118.74054,0.00358645 V 135.70594 M 121.56296,0.00358645 V 135.70594 M 124.38536,0.00358645 V 135.70594 M 127.20777,0.00358645 V 135.70594 M 130.03017,0.00358645 V 135.70594 M 132.85259,0.00358645 V 135.70594 M 135.67499,0.00358645 V 135.70594 M 138.49741,0.00358645 V 135.70594 M 141.31982,0.00358645 V 135.70594 M 144.14222,0.00358645 V 135.70594 M 146.96463,0.00358645 V 135.70594 M 149.78704,0.00358645 V 135.70594 M 152.60945,0.00358645 V 135.70594 M 155.43186,0.00358645 V 135.70594 M 158.25427,0.00358645 V 135.70594 M 161.07667,0.00358645 V 135.70594 M 163.89908,0.00358645 V 135.70594 M 166.72149,0.00358645 V 135.70594 M 169.5439,0.00358645 V 135.70594 M 172.36631,0.00358645 V 135.70594 M 175.18871,0.00358645 V 135.70594 M 178.01112,0.00358645 V 135.70594 M 180.83353,0.00358645 V 135.70594 M 183.65594,0.00358645 V 135.70594 M 186.47835,0.00358645 V 135.70594 M 189.30076,0.00358645 V 135.70594 M 192.12317,0.00358645 V 135.70594 M 194.94557,0.00358645 V 135.70594 M 197.76799,0.00358645 V 135.70594 M 200.59039,0.00358645 V 135.70594 M 203.41281,0.00358645 V 135.70594 M 206.23521,0.00358645 V 135.70594 M 209.05761,0.00358645 V 135.70594 M 211.88003,0.00358645 V 135.70594 M 214.70243,0.00358645 V 135.70594 M 217.52485,0.00358645 V 135.70594 M 220.34725,0.00358645 V 135.70594 M 223.16966,0.00358645 V 135.70594 M 225.99207,0.00358645 V 135.70594 M 0.19939842,0.17562045 H 226.19405 M 0.19939842,5.8129634 H 226.19405 M 0.19939842,11.450306 H 226.19405 M 0.19939842,17.087659 H 226.19405 M 0.19939842,22.725002 H 226.19405 M 0.19939842,28.362345 H 226.19405 M 0.19939842,33.999698 H 226.19405 M 0.19939842,39.637041 H 226.19405 M 0.19939842,45.274384 H 226.19405 M 0.19939842,50.911727 H 226.19405 M 0.19939842,56.54908 H 226.19405 M 0.19939842,62.186423 H 226.19405 M 0.19939842,67.823776 H 226.19405 M 0.19939842,73.461119 H 226.19405 M 0.19939842,79.098462 H 226.19405 M 0.19939842,84.735805 H 226.19405 M 0.19939842,90.373158 H 226.19405 M 0.19939842,96.010501 H 226.19405 M 0.19939842,101.64789 H 226.19405 M 0.19939842,107.28523 H 226.19405 M 0.19939842,112.92258 H 226.19405 M 0.19939842,118.55993 H 226.19405 M 0.19939842,124.19727 H 226.19405 M 0.19939842,129.83461 H 226.19405 M 0.19939842,135.47196 H 226.19405"
style="fill:none;stroke:#7c7c7c;stroke-width:0.106363;stroke-dasharray:0.212725, 0.106363, 0.053181, 0.106363;stroke-opacity:0.57478602" />
</g>
<path
style="fill:none;stroke:#4f4f4f;stroke-width:3.60800004;stroke-linejoin:round"
d="M -1.6787666,-1.6996976 H 227.87363 V 137.34287 H -1.6787666 Z"
id="path163" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055563px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="41.527641"
y="4.9554229"
id="text89">
<tspan
style="stroke-width:0.26458299"
id="tspan4726"
x="41.527641"
y="4.9554229">getSize() = FSize(32,12)</tspan>
</text>
<path
d="m 141.17255,88.237306 23.08169,15.614314"
id="path99-8"
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#b-0-367)" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="57.409531"
y="15.56948"
id="text89-30">
<tspan
style="stroke-width:0.26458299"
y="15.56948"
x="57.409531"
id="tspan4726-3">= FPoint(25,6), FPoint(56,17)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="32.320133"
y="10.262449"
id="text89-30-0">
<tspan
style="stroke-width:0.26458299"
y="10.262449"
x="32.320133"
id="tspan4726-3-9">getGeometry() = FPoint(25,6), FSize(32,12)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="23.297857"
y="20.876522"
id="text89-30-2">
<tspan
style="stroke-width:0.26458299"
y="20.876522"
x="23.297857"
id="tspan4726-3-5">getTermGeometry() = FPoint(25,6), FSize(32,12)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="57.409531"
y="26.183567"
id="text89-30-4">
<tspan
style="stroke-width:0.26458299"
y="26.183567"
x="57.409531"
id="tspan4726-3-0">= FPoint(25,6), FPoint(56,17)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="35.089531"
y="107.47711"
id="text89-30-2-0">
<tspan
style="stroke-width:0.26458299"
y="107.47711"
x="35.089531"
id="tspan4726-3-5-3">getShadow() = FSize(2,1)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="10.800667"
y="112.85639"
id="text89-30-4-0">
<tspan
style="stroke-width:0.26458299"
y="112.85639"
x="10.800667"
id="tspan4726-3-0-9">getGeometryWithShadow() = FPoint(25,6), FSize(34,13)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="57.209534"
y="118.22402"
id="text89-30-4-0-2">
<tspan
style="stroke-width:0.26458299"
y="118.22402"
x="57.209534"
id="tspan4726-3-0-9-5">= FPoint(25,6), FPoint(58,18)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="1.7888864"
y="123.61495"
id="text89-30-4-0-4">
<tspan
style="stroke-width:0.26458299"
y="123.61495"
x="1.7888864"
id="tspan4726-3-0-9-0">getTermGeometryWithShadow() = FPoint(25,6), FSize(34,13)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="57.209534"
y="128.98253"
id="text89-30-4-0-2-5">
<tspan
style="stroke-width:0.26458299"
y="128.98253"
x="57.209534"
id="tspan4726-3-0-9-5-9">= FPoint(25,6), FPoint(58,18)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="157.04732"
y="4.9555144"
id="text89-7">
<tspan
style="stroke-width:0.26458299"
id="tspan4726-7"
x="157.04732"
y="4.9555144">getSize() = FSize(10,1)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="172.90981"
y="15.569555"
id="text89-30-5">
<tspan
style="stroke-width:0.26458299"
y="15.569555"
x="172.90981"
id="tspan4726-3-4">= FPoint(19,8), FPoint(28,8)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="147.83995"
y="10.262533"
id="text89-30-0-8">
<tspan
style="stroke-width:0.26458299"
y="10.262533"
x="147.83995"
id="tspan4726-3-9-1">getGeometry() = FPoint(19,8), FSize(10,1)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="138.81775"
y="20.876591"
id="text89-30-2-2">
<tspan
style="stroke-width:0.26458299"
y="20.876591"
x="138.81775"
id="tspan4726-3-5-8">getTermGeometry() = FPoint(44,15), FSize(10,1)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="172.90981"
y="26.183636"
id="text89-30-4-9">
<tspan
style="stroke-width:0.26458299"
y="26.183636"
x="172.90981"
id="tspan4726-3-0-3">= FPoint(44,15), FPoint(53,15)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="150.6093"
y="107.47724"
id="text89-30-2-0-6">
<tspan
style="stroke-width:0.26458299"
y="107.47724"
x="150.6093"
id="tspan4726-3-5-3-8">getShadow() = FSize(1,1)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="126.32072"
y="112.8565"
id="text89-30-4-0-0">
<tspan
style="stroke-width:0.26458299"
y="112.8565"
x="126.32072"
id="tspan4726-3-0-9-2">getGeometryWithShadow() = FPoint(19,8), FSize(11,2)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="172.90981"
y="118.22413"
id="text89-30-4-0-2-1">
<tspan
style="stroke-width:0.26458299"
y="118.22413"
x="172.90981"
id="tspan4726-3-0-9-5-0">= FPoint(19,8), FPoint(29,9)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="117.30885"
y="123.61508"
id="text89-30-4-0-4-5">
<tspan
style="stroke-width:0.26458299"
y="123.61508"
x="117.30885"
id="tspan4726-3-0-9-0-1">getTermGeometryWithShadow() = FPoint(44,15), FSize(11,2)</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055587px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="172.90981"
y="128.98267"
id="text89-30-4-0-2-5-1">
<tspan
style="stroke-width:0.26458299"
y="128.98267"
x="172.90981"
id="tspan4726-3-0-9-5-9-0">= FPoint(44,15), FPoint(54,16)</tspan>
</text>
<path
d="M 72.941072,98.826256 46.406441,104.33931"
id="path99-8-7"
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#b-0-3)" />
<path
d="M 67.351122,31.942493 40.816491,21.944363"
id="path99-8-7-5"
style="fill:none;stroke:#000000;stroke-width:0.40613502;marker-start:url(#b-0-3-5)" />
<path
d="M 140.84178,77.363839 158.05881,22.058096"
id="path99-8-5"
style="fill:none;stroke:#000000;stroke-width:0.40613505;marker-start:url(#b-0-36)" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.8777771px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="3.8918011"
y="71.00386"
id="text89-30-2-0-6-3">
<tspan
style="stroke-width:0.26458299"
id="tspan4894"
x="3.8918011"
y="71.00386">FDialog()</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.8777771px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
font-size="3.88055611"
x="182.95201"
y="71.079964"
id="text89-30-2-0-6-3-4">
<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.8777771px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
y="71.079964"
x="182.95201"
id="tspan4894-0">FButton()</tspan>
</text>
</svg>

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@ -1,702 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
height="142.65057mm"
viewBox="-3.4827666 -3.5036988 233.1604 142.65057"
width="233.1604mm"
version="1.1"
id="svg165">
<metadata
id="metadata171">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs169">
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="i-3">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path26-6"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="h-7">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path23-5"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="k-3">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path32-5"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="j-6">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path29-2"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="r-91">
<path
style="fill:none;stroke:#000000;stroke-width:1.00000003pt"
id="path53-2"
transform="scale(0.8)"
d="M 0,5.65 V -5.65" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="c-7">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path8-0"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="a-9">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path2-3"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="s-6">
<path
style="fill:none;stroke:#000000;stroke-width:1.00000003pt"
id="path56-0"
transform="scale(0.8)"
d="M 0,5.65 V -5.65" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="b-6">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path5-2"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="e-6">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path14-1"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="d-8">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path11-7"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="g-9">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path20-2"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="f-0">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path17-2"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="m-3">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path38-7"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="l-5">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path35-9"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="o-2">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path44-2"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="n-8">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path41-9"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="q-7">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path50-3"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="p-6">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path47-1"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="t-2">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path59-9"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="u-3">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path62-1"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="v-9">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path65-4"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="w-7">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path68-8"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="e-3-4">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path14-6-5"
transform="scale(0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
<marker
style="overflow:visible"
refY="0"
refX="0"
overflow="visible"
orient="auto"
id="d-7-0">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round"
id="path11-5-3"
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" />
</marker>
</defs>
<g
id="Terminal">
<rect
y="-1.6996995"
x="-1.6787703"
height="139.04257"
width="229.55241"
id="background"
style="opacity:1;fill:#98b5ef;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
<path
id="dialog-shadow"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:0.40613544;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 73.582026,96.010501 h 84.672244 v 5.637389 H 73.582028 Z M 158.25427,33.999698 h 5.64481 V 101.6479 l -5.64481,-1e-5 z" />
<rect
style="opacity:1;fill:#4d4dc0;fill-opacity:1;stroke:none;stroke-width:0.26458329;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="titlebar"
width="81.849838"
height="5.637352"
x="76.404434"
y="28.362345"
ry="0" />
<g
transform="translate(71.692613,37.697864)"
aria-label="Dialog"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="title-bar-text">
<path
d="m 36.734547,-5.2188523 c 0.380342,0 0.645834,-0.099754 0.796479,-0.2992606 0.150644,-0.2011031 0.225967,-0.563408 0.225967,-1.0869146 0,-0.5282949 -0.07532,-0.8921958 -0.225967,-1.0917029 -0.149153,-0.2011032 -0.414646,-0.3016548 -0.796479,-0.3016548 h -0.214781 v 2.7795329 z m 0.0089,-3.176951 c 0.510105,0 0.959924,0.038483 1.201552,0.3289651 0.241628,0.2904823 0.28849,0.8489248 0.28849,1.4618107 0,0.6096937 -0.05097,1.1409181 -0.292598,1.4314005 -0.241629,0.2888862 -0.687339,0.3521929 -1.197444,0.3521929 h -0.677902 v -3.5743692 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4980" />
<path
d="m 39.416509,-7.374682 0.802684,4.768e-4 0.01072,2.1092046 0.323533,-0.00427 0.0043,0.4307556 -1.11338,0.00854 0.01281,-0.4392963 h 0.319263 l -0.0084,-1.6582097 -0.351555,6.36e-4 z m 0.372748,-1.0651357 h 0.427881 l -0.0044,0.78334 -0.425031,-4.739e-4 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4982" />
<path
d="m 43.125816,-6.0642176 h -0.27473 c -0.249596,0 -0.406952,-0.022255 -0.534076,0.066111 -0.125574,0.086816 -0.188361,0.217041 -0.188361,0.3906738 0,0.1565796 -0.0093,0.177762 0.09181,0.2675815 0.119043,0.1057463 0.200316,0.063855 0.367748,0.063855 0.235644,0 0.606933,-0.00609 0.84811,-0.022709 -0.0072,-0.223167 -0.0098,-0.3086156 -0.01715,-0.622359 v -0.1443988 z m 0.78146,-0.052714 -0.01329,1.2910685 -0.470069,0.00443 c -0.383705,0.023525 -0.613681,-0.015785 -0.877687,0.00543 -0.2651,0 -0.450139,-0.012404 -0.608269,-0.1612326 -0.15813,-0.1503784 -0.237195,-0.3511413 -0.237195,-0.6022888 0,-0.2899047 0.09689,-0.5100463 0.29068,-0.6604247 0.195337,-0.1503784 0.481366,-0.2255676 0.858087,-0.2255676 h 0.574384 v -0.067438 c -0.0015,-0.2077528 0.02628,-0.3111209 -0.0862,-0.3697529 -0.134874,-0.00598 -0.357472,-0.011877 -0.574003,-0.015059 -0.216531,-0.00318 -0.201855,-0.00432 -0.415259,-0.00808 -0.213404,-0.00376 -0.231246,-0.00347 -0.455954,-0.014158 l -0.001,-0.3673202 c 0.188279,-0.043006 0.323439,-0.05143 0.475607,-0.068437 0.152169,-0.017007 0.216267,-0.024363 0.392225,-0.024363 0.175959,0 0.545366,0.00521 0.697295,0.068767 0.153479,0.063562 0.09339,0.025958 0.258827,0.144224 0.06634,0.04776 0.147125,0.2290897 0.175883,0.3915519 0.0137,0.1385602 0.01156,0.2868772 0.01156,0.5147702 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4984" />
<path
d="m 45.900031,-5.6889027 c -1.56e-4,0.1884622 -0.0045,0.2960245 0.0014,0.4029534 0.128075,2.853e-4 0.38981,0.00676 0.325949,0.00344 l -1.39e-4,0.1054309 v 0.3556467 c 0,0 -0.204277,-1.388e-4 -0.306416,0 -0.276552,3.759e-4 -0.618616,0.00213 -0.829655,0.00226 -0.0042,-0.2397473 -0.0023,-0.4554667 4.08e-4,-0.4668341 0,0 0.0976,0.00163 0.189007,0.00197 0.183136,6.815e-4 0.166946,0.017973 0.166109,-0.027117 -0.0021,-0.1142859 0.002,-0.2795005 0.0012,-0.4269249 l -0.01118,-2.2559473 h -0.354419 l -0.0045,-0.3998272 h 0.824422 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4986" />
<path
d="m 48.501809,-7.0373667 q -0.331439,0 -0.501894,0.2391665 -0.170455,0.2391665 -0.170455,0.7087226 0,0.4673619 0.170455,0.7087226 0.170455,0.2391664 0.501894,0.2391664 0.333808,0 0.504263,-0.2391664 0.170454,-0.2413607 0.170454,-0.7087226 0,-0.4695561 -0.170454,-0.7087226 -0.170455,-0.2391665 -0.504263,-0.2391665 z m 0,-0.3422933 q 0.55161,0 0.842805,0.3313224 0.29356,0.3313223 0.29356,0.95886 0,0.6297319 -0.291193,0.9610541 -0.291194,0.3291282 -0.845172,0.3291282 -0.55161,0 -0.842803,-0.3291282 -0.291194,-0.3313222 -0.291194,-0.9610541 0,-0.6275377 0.291194,-0.95886 0.291193,-0.3313224 0.842803,-0.3313224 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458335px"
id="path4988" />
<path
d="m 51.964761,-6.1043033 c 0,-0.3153981 -0.05478,-0.554613 -0.164328,-0.7176449 -0.107941,-0.1645555 -0.439029,-0.1268362 -0.646856,-0.1268362 -0.217493,0 -0.394754,0.042656 -0.497818,0.2468332 -0.0023,0.1743523 0.0016,0.2822498 0.0016,0.5976479 0,0.3153981 0.05719,0.5561367 0.171579,0.7222158 0.115996,0.1645555 0.262038,0.1347607 0.481143,0.1347607 0.204605,0 0.382387,0.029033 0.490328,-0.1370461 0.109552,-0.1660792 0.164328,-0.406056 0.164328,-0.7199304 z m 0.444654,1.1358901 c 0,0.3839629 -0.09586,0.6749823 -0.287575,0.8730584 -0.191717,0.1980761 -0.459268,0.2076824 -0.706567,0.2076824 -0.247298,0 -0.33316,0.00858 -0.480462,0.00196 -0.147303,-0.00662 -0.39649,-0.028793 -0.530208,-0.069932 l -0.0045,-0.4386006 c 0.175997,0.00217 0.296741,0.00642 0.436946,0.00372 0.140205,-0.0027 0.242375,-0.00179 0.41637,-0.00179 0.173995,0 0.335605,0.014139 0.574211,-0.044752 0.119552,-0.1030316 0.110826,-0.1010778 0.134895,-0.3592803 -0.223716,-0.00621 -0.02265,-0.00143 -0.203956,7.318e-4 -0.141072,0.00169 -0.355235,0.010041 -0.530841,0.010041 -0.315768,0 -0.607522,-0.059609 -0.796017,-0.298824 -0.188494,-0.2392149 -0.243119,-0.6191825 -0.243119,-1.0199056 0,-0.4022468 0.06708,-0.7229777 0.255572,-0.9621926 0.188495,-0.239215 0.396232,-0.2914175 0.774508,-0.2965599 0.378275,-0.00514 0.57781,-0.00176 0.781477,0.00434 l 0.407313,0.00318 z"
style="font-size:4.76249981px;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332px"
id="path4990" />
</g>
<rect
style="opacity:1;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="title-bar-button"
width="8.4672203"
height="5.6373534"
x="67.93721"
y="28.362345" />
<path
style="opacity:1;fill:none;stroke:#727272;stroke-width:0.40613541;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="title-bar-button-line"
d="M 73.131727,31.089285 H 71.019288" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="dialog-client-area"
width="90.317062"
height="62.010803"
x="67.93721"
y="33.999699" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.26458332;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="dialog-border"
width="87.551292"
height="56.458969"
x="69.366524"
y="36.825737" />
<path
id="button-shadow"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:0.40613541;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 124.38536,84.735805 h 25.40168 v 2.900645 h -25.40168 z m 25.3985,-2.767792 h 2.81775 v 5.668438 h -2.81775 z" />
<rect
style="opacity:1;fill:#727272;fill-opacity:1;stroke:none;stroke-width:0.40613541;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="button"
width="28.224081"
height="5.6373444"
x="121.56296"
y="79.098457" />
<g
transform="translate(71.692613,37.697864)"
id="button-text">
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.2473854;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="Q-underline"
d="M 61.074994,46.475002 H 58.683557" />
<path
d="m 61.556895,45.081249 v -1.673628 h 0.452124 v 1.673628 q 0,0.364146 0.130232,0.535368 0.132689,0.17122 0.407894,0.17122 0.319436,0 0.488983,-0.219452 0.169546,-0.221864 0.169546,-0.634242 v -1.526522 h 0.454582 v 2.696132 H 63.205674 V 45.69861 q -0.120402,0.233922 -0.329264,0.3545 -0.206404,0.120579 -0.484068,0.120579 -0.422638,0 -0.629042,-0.270097 -0.206405,-0.272507 -0.206405,-0.822343 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4661" />
<path
d="m 64.87924,43.518911 0.785453,4.86e-4 0.01049,2.155477 0.316588,-0.0044 0.0042,0.440206 -1.08948,0.0087 0.01253,-0.448935 h 0.31241 l -0.0082,-1.694587 -0.344008,6.5e-4 z m 0.364746,-1.088502 h 0.418696 l -0.0043,0.800525 -0.415908,-4.84e-4 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.76249981px;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4982-36" />
<path
d="m 68.340878,42.63592 -0.0082,0.870231 0.667564,-0.0041 0.0041,0.415134 -0.655161,-0.0041 -0.0082,1.300867 c -0.0013,0.199353 0.03618,0.338423 0.108529,0.417201 0.07235,0.07878 0.198587,0.118167 0.378699,0.118167 h 0.477992 v 0.354501 h -0.519556 c -0.318661,0 -0.543417,-0.06672 -0.674269,-0.200161 -0.130851,-0.133439 -0.196277,-0.363343 -0.196277,-0.689708 l -0.0041,-1.305001 c -0.332119,0 -0.359412,0.0041 -0.686298,0.01654 l -0.0041,-0.427537 h 0.686297 l 0.0082,-0.861963 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Bitstream Vera Sans Mono';-inkscape-font-specification:'Bitstream Vera Sans Mono, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#c8c8c8;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path4665" />
<path
id="path4722"
transform="matrix(0.26458333,0,0,0.26458333,-75.17538,-41.201563)"
d="m 510.18359,316.11914 c -1.46621,0 -2.55977,0.58334 -3.28125,1.75 -0.71566,1.16667 -1.07226,2.93858 -1.07226,5.31445 0,2.36979 0.35661,4.13802 1.07226,5.30469 0.72148,1.16667 1.8091,1.75 3.26368,1.75 0.0465,0 0.10796,-0.004 0.18359,-0.01 -0.0488,0.12717 1.33074,-0.19815 1.57569,-0.41698 l 1.28368,0.84276 1.26563,-0.56055 -1.06836,-1.21875 c 0.32119,-0.33486 0.4522,-0.54975 0.64258,-0.95312 0.1363,-0.31537 0.5,-2.95183 0.5,-4.73829 0,-2.37587 -0.36056,-4.14778 -1.08203,-5.31445 -0.71565,-1.16666 -1.81117,-1.75 -3.28321,-1.75 z m 0,1.49414 c 0.89602,0 1.53987,0.42839 1.92969,1.28516 0.39565,0.85677 0.59375,2.28406 0.59375,4.2832 0,1.99913 -0.1981,3.42838 -0.59375,4.28516 -0.30165,-0.10534 -0.78096,-0.85138 -1.30469,-0.84571 l -1.45507,0.31641 1.03906,1.17969 0.4375,0.52539 c 0.0131,-7.4e-4 0.0224,-0.005 0.0351,-0.006 -0.20919,0.0651 -0.43368,0.10547 -0.68164,0.10547 -0.8902,0 -1.53209,-0.42839 -1.92773,-1.28516 -0.38983,-0.85677 -0.58398,-2.28233 -0.58398,-4.27539 -10e-6,-1.99914 0.19416,-3.42643 0.58398,-4.2832 0.39564,-0.85677 1.03753,-1.28516 1.92773,-1.28516 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
id="grid"
d="M 0.19939842,0.00358645 V 135.70594 M 3.0218084,0.00358645 V 135.70594 M 5.8442174,0.00358645 V 135.70594 M 8.6666254,0.00358645 V 135.70594 M 11.489038,0.00358645 V 135.70594 M 14.311447,0.00358645 V 135.70594 M 17.133854,0.00358645 V 135.70594 M 19.956264,0.00358645 V 135.70594 M 22.778672,0.00358645 V 135.70594 M 25.60108,0.00358645 V 135.70594 M 28.42349,0.00358645 V 135.70594 M 31.245898,0.00358645 V 135.70594 M 34.068306,0.00358645 V 135.70594 M 36.890714,0.00358645 V 135.70594 M 39.713123,0.00358645 V 135.70594 M 42.535532,0.00358645 V 135.70594 M 45.35794,0.00358645 V 135.70594 M 48.180349,0.00358645 V 135.70594 M 51.00276,0.00358645 V 135.70594 M 53.82517,0.00358645 V 135.70594 M 56.647575,0.00358645 V 135.70594 M 59.469985,0.00358645 V 135.70594 M 62.292391,0.00358645 V 135.70594 M 65.114806,0.00358645 V 135.70594 M 67.937211,0.00358645 V 135.70594 M 70.759622,0.00358645 V 135.70594 M 73.582026,0.00358645 V 135.70594 M 76.404432,0.00358645 V 135.70594 M 79.226847,0.00358645 V 135.70594 M 82.049252,0.00358645 V 135.70594 M 84.871663,0.00358645 V 135.70594 M 87.694067,0.00358645 V 135.70594 M 90.516478,0.00358645 V 135.70594 M 93.338889,0.00358645 V 135.70594 M 96.161298,0.00358645 V 135.70594 M 98.983704,0.00358645 V 135.70594 M 101.8061,0.00358645 V 135.70594 M 104.6285,0.00358645 V 135.70594 M 107.45091,0.00358645 V 135.70594 M 110.27332,0.00358645 V 135.70594 M 113.09573,0.00358645 V 135.70594 M 115.91813,0.00358645 V 135.70594 M 118.74054,0.00358645 V 135.70594 M 121.56296,0.00358645 V 135.70594 M 124.38536,0.00358645 V 135.70594 M 127.20777,0.00358645 V 135.70594 M 130.03017,0.00358645 V 135.70594 M 132.85259,0.00358645 V 135.70594 M 135.67499,0.00358645 V 135.70594 M 138.49741,0.00358645 V 135.70594 M 141.31982,0.00358645 V 135.70594 M 144.14222,0.00358645 V 135.70594 M 146.96463,0.00358645 V 135.70594 M 149.78704,0.00358645 V 135.70594 M 152.60945,0.00358645 V 135.70594 M 155.43186,0.00358645 V 135.70594 M 158.25427,0.00358645 V 135.70594 M 161.07667,0.00358645 V 135.70594 M 163.89908,0.00358645 V 135.70594 M 166.72149,0.00358645 V 135.70594 M 169.5439,0.00358645 V 135.70594 M 172.36631,0.00358645 V 135.70594 M 175.18871,0.00358645 V 135.70594 M 178.01112,0.00358645 V 135.70594 M 180.83353,0.00358645 V 135.70594 M 183.65594,0.00358645 V 135.70594 M 186.47835,0.00358645 V 135.70594 M 189.30076,0.00358645 V 135.70594 M 192.12317,0.00358645 V 135.70594 M 194.94557,0.00358645 V 135.70594 M 197.76799,0.00358645 V 135.70594 M 200.59039,0.00358645 V 135.70594 M 203.41281,0.00358645 V 135.70594 M 206.23521,0.00358645 V 135.70594 M 209.05761,0.00358645 V 135.70594 M 211.88003,0.00358645 V 135.70594 M 214.70243,0.00358645 V 135.70594 M 217.52485,0.00358645 V 135.70594 M 220.34725,0.00358645 V 135.70594 M 223.16966,0.00358645 V 135.70594 M 225.99207,0.00358645 V 135.70594 M 0.19939842,0.17562045 H 226.19405 M 0.19939842,5.8129634 H 226.19405 M 0.19939842,11.450306 H 226.19405 M 0.19939842,17.087659 H 226.19405 M 0.19939842,22.725002 H 226.19405 M 0.19939842,28.362345 H 226.19405 M 0.19939842,33.999698 H 226.19405 M 0.19939842,39.637041 H 226.19405 M 0.19939842,45.274384 H 226.19405 M 0.19939842,50.911727 H 226.19405 M 0.19939842,56.54908 H 226.19405 M 0.19939842,62.186423 H 226.19405 M 0.19939842,67.823776 H 226.19405 M 0.19939842,73.461119 H 226.19405 M 0.19939842,79.098462 H 226.19405 M 0.19939842,84.735805 H 226.19405 M 0.19939842,90.373158 H 226.19405 M 0.19939842,96.010501 H 226.19405 M 0.19939842,101.64789 H 226.19405 M 0.19939842,107.28523 H 226.19405 M 0.19939842,112.92258 H 226.19405 M 0.19939842,118.55993 H 226.19405 M 0.19939842,124.19727 H 226.19405 M 0.19939842,129.83461 H 226.19405 M 0.19939842,135.47196 H 226.19405"
style="fill:none;stroke:#7c7c7c;stroke-width:0.106363;stroke-dasharray:0.212725, 0.106363, 0.053181, 0.106363;stroke-opacity:0.57478602" />
</g>
<path
style="fill:none;stroke:#4f4f4f;stroke-width:3.60800004;stroke-linejoin:round"
d="M -1.6787666,-1.6996976 H 227.87363 V 137.34287 H -1.6787666 Z"
id="path163" />
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#i-3);marker-end:url(#h-7)"
id="path75"
d="M 0.71750465,127.07532 H 94.653983 m 36.300447,0 h 38.31176 56.1829" />
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#k-3);marker-end:url(#j-6)"
id="path77"
d="M 217.42769,0.67868155 V 50.334198 m 0,36.70988 0.10543,47.877372" />
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;stroke-width:0.26458299"
id="text79"
y="128.09375"
x="112.81702"
font-size="3.880556">getDesktopWidth()</text>
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-anchor:middle;stroke-width:0.26458299"
id="text81"
y="218.60313"
x="-67.922623"
transform="rotate(-90)"
font-size="3.880556">getDesktopHeight()</text>
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#r-91);marker-end:url(#c-7)"
id="path83"
d="M 79.195185,0.1864336 V 30.96059" />
<text
style="font-size:4.23333406px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="text89"
y="8.0025988"
x="38.52689"
font-size="4.233334">
<tspan
style="stroke-width:0.26458299"
id="tspan85"
y="8.0025988"
x="38.52689">getPos()</tspan>
<tspan
style="stroke-width:0.26458299"
id="tspan87"
y="13.294264"
x="38.52689">getTermPos()</tspan>
</text>
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#a-9);marker-end:url(#s-6)"
id="path91"
d="M 68.659479,39.622603 H 0.22484765" />
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="text97"
y="13.109548"
x="80.360222"
font-size="3.880556">
<tspan
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="tspan93"
y="13.109548"
x="80.360222"
font-size="3.880556">getY()</tspan>
<tspan
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="tspan95"
y="17.960236"
x="80.360222"
font-size="3.880556">getTermY()</tspan>
</text>
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#b-6)"
id="path99"
d="M 69.022514,30.892409 51.629013,15.07587" />
<text
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="text105"
y="38.16193"
x="23.507547"
font-size="3.880556">
<tspan
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="tspan101"
y="38.16193"
x="23.507547"
font-size="3.880556">getX()</tspan>
<tspan
style="font-size:3.88055611px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;stroke-width:0.26458299"
id="tspan103"
y="43.01263"
x="23.507547"
font-size="3.880556">getTermX()</tspan>
</text>
<path
id="path107"
d="m 68.517297,104.63844 c 9.778151,0 23.872888,0 33.651023,0 m 21.2908,0 h 34.11383"
style="fill:none;stroke:#000000;stroke-width:0.40613502;marker-start:url(#e-6);marker-end:url(#d-8)" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="text109"
y="105.70465"
x="113.03175"
font-size="3.880556">getWidth()</text>
<path
style="fill:none;stroke:#000000;stroke-width:0.32675999;marker-start:url(#g-9);marker-end:url(#f-0)"
id="path111"
d="m 168.43921,28.879659 v 24.612857 m 0.0915,23.177635 0.0139,18.749915" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="text115"
y="169.59256"
x="-64.999428"
transform="rotate(-90)"
font-size="3.880556">
<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="tspan113"
y="169.59256"
x="-64.999428">getHeight()</tspan>
</text>
<path
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101"
id="path117"
d="m 158.34356,28.368476 h 22.9042" />
<path
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101"
id="path119"
d="m 158.2189,95.892736 h 23.00064" />
<path
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101"
id="path121"
d="M 158.41834,39.536952 H 181.2261" />
<path
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101"
id="path123"
d="M 158.26877,90.313866 H 181.2453" />
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#m-3);marker-end:url(#l-5)"
id="path125"
d="m 176.50913,40.100361 0.0586,8.690149 m 0.0134,32.440661 0.0334,8.550595" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="text127"
y="177.81908"
x="-64.977974"
transform="rotate(-90)"
font-size="3.880556">getClientHeight()</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="text131"
y="34.690594"
x="190.8372"
font-size="4.233333">
<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="tspan129"
font-size="3.527778">getTopPadding()</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
id="text135"
y="93.831383"
x="179.42957"
font-size="4.233334">
<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
id="tspan133"
font-size="3.527778">getBottomPadding()</tspan>
</text>
<path
d="m 176.41928,28.968776 0.1054,10.028739 m -0.1054,-10.028739 0.1054,10.028739"
id="path137"
style="fill:none;stroke:#000000;stroke-width:0.32675999;marker-start:url(#o-2);marker-end:url(#n-8)" />
<path
d="m 176.62275,91.092126 0.1054,4.33023 m -0.1054,-4.33023 0.1054,4.33023"
id="path139"
style="fill:none;stroke:#000000;stroke-width:0.32675999;marker-start:url(#q-7);marker-end:url(#p-6)" />
<path
d="M 158.21888,95.892726 V 118.53038"
id="path141"
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101" />
<path
d="M 70.730357,95.980486 V 118.54438"
id="path143"
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101" />
<path
d="M 155.39817,95.960716 V 118.53576"
id="path145"
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101" />
<path
d="M 67.900884,95.962716 V 118.5266"
id="path147"
style="fill:none;stroke:#000000;stroke-width:0.32675999;stroke-dasharray:0.98028101, 0.98028101" />
<path
d="m 158.72867,115.55793 h 3.75652 m -3.75652,0.001 h -4.25436 m -3.8031,0 h 4.10756"
id="path149"
style="fill:none;stroke:#000000;stroke-width:0.32675999;marker-start:url(#t-2);marker-end:url(#u-3)" />
<path
d="m 71.453846,115.55803 h 3.756526 m -3.756526,0.001 h -4.254372 m -3.803094,0 h 4.107552"
id="path151"
style="fill:none;stroke:#000000;stroke-width:0.32675999;marker-start:url(#v-9);marker-end:url(#w-7)" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
id="text157"
y="116.48471"
x="163.30989"
font-size="4.233334">
<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
id="tspan155"
font-size="3.527778">getRightPadding()</tspan>
</text>
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
id="text161"
y="116.32534"
x="76.057518"
font-size="4.233334">
<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458299"
id="tspan159"
font-size="3.527778">getLeftPadding()</tspan>
</text>
<path
style="fill:none;stroke:#000000;stroke-width:0.40613499;marker-start:url(#e-3-4);marker-end:url(#d-7-0)"
id="path107-3"
d="m 71.346359,110.06317 c 9.156515,0.0101 18.313083,-0.0139 27.469578,0.0102 m 30.441293,-0.026 25.48321,0.003" />
<text
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.70416665px;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;-inkscape-font-specification:'FreeSans, Arial, Bitstream Vera Sans, DejaVu Sans, Open Sans, sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458299"
id="text109-5"
y="111.1342"
x="113.27158"
font-size="3.880556">getClientWidth()</text>
</svg>

Before

Width:  |  Height:  |  Size: 44 KiB

View File

@ -1,240 +0,0 @@
/***********************************************************************
* 7segment.cpp - Seven-segment display *
* *
* This file is part of the FINAL CUT widget toolkit *
* *
* Copyright 2012-2021 Markus Gans *
* *
* FINAL CUT is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* FINAL CUT 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 Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
#include <array>
#include <map>
#include <vector>
#include <final/final.h>
using finalcut::FColorPair;
using finalcut::FColor;
using finalcut::FRect;
using finalcut::FPoint;
using finalcut::FSize;
//----------------------------------------------------------------------
// class SegmentView
//----------------------------------------------------------------------
class SegmentView final : public finalcut::FDialog
{
public:
// Constructor
explicit SegmentView (finalcut::FWidget* = nullptr);
private:
struct sevenSegment
{
unsigned char a : 1;
unsigned char b : 1;
unsigned char c : 1;
unsigned char d : 1;
unsigned char e : 1;
unsigned char f : 1;
unsigned char g : 1;
unsigned char : 1; // padding bit
};
// Methods
void hexEncoding();
void get7Segment (const wchar_t);
void draw() override;
void initLayout() override;
// Data members
std::map<wchar_t, sevenSegment> code{};
std::array<finalcut::FString, 3> line{};
finalcut::FLineEdit input{"0123", this};
finalcut::FButton exit{"E&xit", this};
};
//----------------------------------------------------------------------
SegmentView::SegmentView (finalcut::FWidget* parent)
: FDialog{parent}
{
// Set encoding
hexEncoding();
// Input field
input.setLabelText (L"&Hex value");
input.setLabelText (L"&Hex-digits or (.) (:) (H) (L) (P) (U)");
input.setLabelOrientation(finalcut::FLineEdit::LabelOrientation::Above);
input.setMaxLength(9);
input.setInputFilter("[:.hHlLpPuU[:xdigit:]]");
// Add some function callbacks
input.addCallback
(
"changed",
[] (SegmentView& dialog)
{
dialog.redraw();
},
std::ref(*this)
);
exit.addCallback
(
"clicked",
finalcut::getFApplication(),
&finalcut::FApplication::cb_exitApp,
this
);
}
//----------------------------------------------------------------------
void SegmentView::hexEncoding()
{
code['0'] = sevenSegment{1, 1, 1, 1, 1, 1, 0};
code['1'] = sevenSegment{0, 1, 1, 0, 0, 0, 0};
code['2'] = sevenSegment{1, 1, 0, 1, 1, 0, 1};
code['3'] = sevenSegment{1, 1, 1, 1, 0, 0, 1};
code['4'] = sevenSegment{0, 1, 1, 0, 0, 1, 1};
code['5'] = sevenSegment{1, 0, 1, 1, 0, 1, 1};
code['6'] = sevenSegment{1, 0, 1, 1, 1, 1, 1};
code['7'] = sevenSegment{1, 1, 1, 0, 0, 0, 0};
code['8'] = sevenSegment{1, 1, 1, 1, 1, 1, 1};
code['9'] = sevenSegment{1, 1, 1, 1, 0, 1, 1};
code['A'] = sevenSegment{1, 1, 1, 0, 1, 1, 1};
code['B'] = sevenSegment{0, 0, 1, 1, 1, 1, 1};
code['C'] = sevenSegment{1, 0, 0, 1, 1, 1, 0};
code['D'] = sevenSegment{0, 1, 1, 1, 1, 0, 1};
code['E'] = sevenSegment{1, 0, 0, 1, 1, 1, 1};
code['F'] = sevenSegment{1, 0, 0, 0, 1, 1, 1};
}
//----------------------------------------------------------------------
void SegmentView::get7Segment (const wchar_t c)
{
for (std::size_t i{0}; i < 3; i++)
line[i].clear();
switch ( c )
{
case ':':
line[0] = ' ';
line[1] = '.';
line[2] = '.';
break;
case '.':
line[0] = ' ';
line[1] = ' ';
line[2] = '.';
break;
case 'H':
line[0] = " ";
line[1] = "|_|";
line[2] = "| |";
break;
case 'L':
line[0] = " ";
line[1] = "| ";
line[2] = "|_ ";
break;
case 'P':
line[0] = " _ ";
line[1] = "|_|";
line[2] = "| ";
break;
case 'U':
line[0] = " ";
line[1] = "| |";
line[2] = "|_|";
break;
default:
// Hexadecimal digit from 0 up to f
if ( code.find(c) != code.end() )
{
const sevenSegment& s = code[c];
constexpr std::array<char, 2> h{{' ', '_'}};
constexpr std::array<char, 2> v{{' ', '|'}};
line[0] << ' ' << h[s.a] << ' ';
line[1] << v[s.f] << h[s.g] << v[s.b];
line[2] << v[s.e] << h[s.d] << v[s.c];
}
}
}
//----------------------------------------------------------------------
void SegmentView::draw()
{
std::vector<finalcut::FTermBuffer> tbuffer(3);
finalcut::FTermBuffer left_space{};
FDialog::draw();
setColor(FColor::LightGray, FColor::Black);
finalcut::drawBorder(this, FRect(FPoint{3, 6}, FPoint{40, 11}));
for (auto&& ch : input.getText().toUpper())
{
const FColorPair color{FColor::LightRed, FColor::Black};
get7Segment(ch);
for (std::size_t i{0}; i < 3; i++)
tbuffer[i] << color << line[i] << " ";
}
const std::size_t length = tbuffer[0].getLength();
if ( length < 36 )
left_space << finalcut::FString(36 - length, ' ');
print() << FPoint {4, 7} << left_space << tbuffer[0]
<< FPoint {4, 8} << left_space << tbuffer[1]
<< FPoint {4, 9} << left_space << tbuffer[2]
<< FPoint {4, 10} << finalcut::FString{36, ' '};
}
//----------------------------------------------------------------------
void SegmentView::initLayout()
{
// Dialog settings
FDialog::setText ("Seven-segment display");
FDialog::setGeometry (FPoint{25, 5}, FSize{42, 15});
// Input field
input.setGeometry (FPoint(2, 2), FSize{12, 1});
// Exit button
exit.setGeometry(FPoint{28, 11}, FSize{10, 1});
FDialog::initLayout();
}
//----------------------------------------------------------------------
// main part
//----------------------------------------------------------------------
int main (int argc, char* argv[])
{
finalcut::FApplication app(argc, argv);
SegmentView dialog(&app);
finalcut::FWidget::setMainWidget(&dialog);
dialog.show();
return app.exec();
}

View File

@ -1,21 +1,17 @@
#---------------------------------------------------------------------- #----------------------------------------------------------------------
# Makefile.am - FINAL CUT example programs # Makefile.am - The Final Cut example programs
#---------------------------------------------------------------------- #----------------------------------------------------------------------
if ! CPPUNIT_TEST if ! CPPUNIT_TEST
AM_LDFLAGS = -L$(top_builddir)/src/.libs -lfinal AM_LDFLAGS = -L$(top_builddir)/src/.libs -lfinal
AM_CPPFLAGS = -I$(top_srcdir)/src/include -Wall -Werror -std=c++11 AM_CPPFLAGS = -I$(top_srcdir)/src/include -Wall -Werror
noinst_PROGRAMS = \ noinst_PROGRAMS = \
hello \ hello \
dialog \ dialog \
input-dialog \ input-dialog \
event-log \
fullwidth-character \
7segment \
choice \ choice \
busy \
listbox \ listbox \
listview \ listview \
checklist \ checklist \
@ -24,11 +20,9 @@ noinst_PROGRAMS = \
termcap \ termcap \
string-operations \ string-operations \
mandelbrot \ mandelbrot \
rotozoomer \
calculator \ calculator \
watch \ watch \
term-attributes \ term-attributes \
background-color \
transparent \ transparent \
keyboard \ keyboard \
mouse \ mouse \
@ -41,11 +35,7 @@ noinst_PROGRAMS = \
hello_SOURCES = hello.cpp hello_SOURCES = hello.cpp
dialog_SOURCES = dialog.cpp dialog_SOURCES = dialog.cpp
input_dialog_SOURCES = input-dialog.cpp input_dialog_SOURCES = input-dialog.cpp
event_log_SOURCES = event-log.cpp
fullwidth_character_SOURCES = fullwidth-character.cpp
7segment_SOURCES = 7segment.cpp
choice_SOURCES = choice.cpp choice_SOURCES = choice.cpp
busy_SOURCES = busy.cpp
listbox_SOURCES = listbox.cpp listbox_SOURCES = listbox.cpp
listview_SOURCES = listview.cpp listview_SOURCES = listview.cpp
checklist_SOURCES = checklist.cpp checklist_SOURCES = checklist.cpp
@ -53,11 +43,9 @@ treeview_SOURCES = treeview.cpp
opti_move_SOURCES = opti-move.cpp opti_move_SOURCES = opti-move.cpp
string_operations_SOURCES = string-operations.cpp string_operations_SOURCES = string-operations.cpp
mandelbrot_SOURCES = mandelbrot.cpp mandelbrot_SOURCES = mandelbrot.cpp
rotozoomer_SOURCES = rotozoomer.cpp
calculator_SOURCES = calculator.cpp calculator_SOURCES = calculator.cpp
watch_SOURCES = watch.cpp watch_SOURCES = watch.cpp
term_attributes_SOURCES = term-attributes.cpp term_attributes_SOURCES = term-attributes.cpp
background_color_SOURCES = background-color.cpp
termcap_SOURCES = termcap.cpp termcap_SOURCES = termcap.cpp
transparent_SOURCES = transparent.cpp transparent_SOURCES = transparent.cpp
keyboard_SOURCES = keyboard.cpp keyboard_SOURCES = keyboard.cpp

View File

@ -1,5 +1,5 @@
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# Makefile for FINAL CUT # Makefile for Final Cut
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# This is where make install will install the executable # This is where make install will install the executable
@ -9,14 +9,14 @@ BINDIR = /usr/local/bin
CXX = clang++ CXX = clang++
SRCS = $(wildcard *.cpp) SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:%.cpp=%) OBJS = $(SRCS:%.cpp=%)
CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG) -std=c++11 CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG)
MAKEFILE = -f Makefile.clang MAKEFILE = -f Makefile.clang
LDFLAGS = -L../src -lfinal LDFLAGS = -L../src -lfinal
INCLUDES = -I../src/include -I/usr/include/final INCLUDES = -I../src/include -I/usr/include/final
RM = rm -f RM = rm -f
ifdef DEBUG ifdef DEBUG
OPTIMIZE = -O0 -fsanitize=undefined OPTIMIZE = -O0 -fsanitize=bool,bounds,enum,float-cast-overflow,function,null
else else
OPTIMIZE = -O2 OPTIMIZE = -O2
endif endif
@ -24,12 +24,12 @@ endif
# $@ = name of the targets # $@ = name of the targets
# $^ = all dependency (without double entries) # $^ = all dependency (without double entries)
.cpp: .cpp:
$(CXX) $^ -o $@ $(CCXFLAGS) $(INCLUDES) $(LDFLAGS) $(CXX) $(CCXFLAGS) $(INCLUDES) $(LDFLAGS) -o $@ $^
all: $(OBJS) all: $(OBJS)
debug: debug:
$(MAKE) $(MAKEFILE) DEBUG="-g -D DEBUG -Wall -Wextra -Wpedantic -Weverything -Wno-padded -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-implicit-fallthrough -Wno-reserved-id-macro" $(MAKE) $(MAKEFILE) DEBUG="-g -D DEBUG -Wall -Wextra -Wpedantic -Weverything -Wpadded -Wno-reserved-id-macro"
profile: profile:
$(MAKE) $(MAKEFILE) PROFILE="-pg" $(MAKE) $(MAKEFILE) PROFILE="-pg"

View File

@ -1,5 +1,5 @@
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# Makefile for FINAL CUT # Makefile for Final Cut
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# This is where make install will install the executable # This is where make install will install the executable
@ -9,7 +9,7 @@ BINDIR = /usr/local/bin
CXX = g++ CXX = g++
SRCS = $(wildcard *.cpp) SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:%.cpp=%) OBJS = $(SRCS:%.cpp=%)
CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG) -std=c++11 CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG)
MAKEFILE = -f Makefile.gcc MAKEFILE = -f Makefile.gcc
LDFLAGS = -L../src -lfinal LDFLAGS = -L../src -lfinal
INCLUDES = -I../src/include -I/usr/include/final INCLUDES = -I../src/include -I/usr/include/final
@ -24,7 +24,7 @@ endif
# $@ = name of the targets # $@ = name of the targets
# $^ = all dependency (without double entries) # $^ = all dependency (without double entries)
.cpp: .cpp:
$(CXX) $^ -o $@ $(CCXFLAGS) $(INCLUDES) $(LDFLAGS) $(CXX) $(CCXFLAGS) $(INCLUDES) $(LDFLAGS) -o $@ $^
all: $(OBJS) all: $(OBJS)

View File

@ -1,233 +0,0 @@
/***********************************************************************
* background-color.cpp - Sets the background color palette *
* *
* This file is part of the FINAL CUT widget toolkit *
* *
* Copyright 2019-2021 Markus Gans *
* *
* FINAL CUT is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* FINAL CUT 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 Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
#include <tuple>
#include <utility>
#include <vector>
#include <final/final.h>
using finalcut::FPoint;
using finalcut::FRect;
using finalcut::FSize;
using finalcut::FColor;
//----------------------------------------------------------------------
// class Background
//----------------------------------------------------------------------
class Background final : public finalcut::FDialog
{
public:
// Using-declaration
using RGB = std::tuple<uChar, uChar, uChar>;
// Constructor
explicit Background (finalcut::FWidget* = nullptr);
// Disable copy constructor
Background (const Background&) = delete;
// Destructor
~Background() noexcept override;
// Disable copy assignment operator (=)
Background& operator = (const Background&) = delete;
private:
// Methods
void initLayout() override;
// Callback method
void cb_changed();
void cb_choice();
// Data members
finalcut::FComboBox color_choice{this};
finalcut::FSpinBox red{this};
finalcut::FSpinBox green{this};
finalcut::FSpinBox blue{this};
finalcut::FButton quit{"&Quit", this};
std::vector<std::pair<finalcut::FString, RGB>> color_list
{
{ "Light blue" , std::make_tuple(0x80, 0xa4, 0xec) },
{ "Vivid blue" , std::make_tuple(0x37, 0x97, 0xfd) },
{ "Bright blue" , std::make_tuple(0x3c, 0x85, 0xd2) },
{ "Strong blue" , std::make_tuple(0x32, 0x64, 0x9f) },
{ "Light cyan" , std::make_tuple(0x6c, 0xfe, 0xfe) },
{ "Vivid cyan" , std::make_tuple(0x0b, 0xdd, 0xd4) },
{ "Soft cyan" , std::make_tuple(0x49, 0xa8, 0xac) },
{ "Light green" , std::make_tuple(0x81, 0xdf, 0xbb) },
{ "Vivid green" , std::make_tuple(0x5c, 0x9e, 0x4a) },
{ "Bright green" , std::make_tuple(0x0f, 0xba, 0x78) },
{ "Strong green" , std::make_tuple(0x03, 0x8f, 0x68) },
{ "Mint green" , std::make_tuple(0x4a, 0xfd, 0x91) },
{ "Green" , std::make_tuple(0x6b, 0xe8, 0x1b) },
{ "Dark green" , std::make_tuple(0x01, 0x65, 0x05) },
{ "Dark sea green", std::make_tuple(0x7d, 0xb6, 0x96) },
{ "Bright purple" , std::make_tuple(0x83, 0x76, 0xa2) },
{ "Taupe" , std::make_tuple(0xa6, 0x8c, 0x99) },
{ "Silver" , std::make_tuple(0xc1, 0xc1, 0xcb) }
};
};
//----------------------------------------------------------------------
Background::Background (finalcut::FWidget* parent)
: FDialog{parent}
{
// Combobox
color_choice.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above);
color_choice.setLabelText ("Color choice");
color_choice.unsetEditable();
for (auto& c : color_list)
{
finalcut::FListBoxItem item (c.first, c.second);
color_choice.insert(item);
}
// Spin boxes
red.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above);
red.setLabelText ("Red");
red.setRange (0, 255);
red.setValue (0x80);
green.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above);
green.setLabelText ("Green");
green.setRange (0, 255);
green.setValue (0xa4);
blue.setLabelOrientation (finalcut::FLineEdit::LabelOrientation::Above);
blue.setLabelText ("Blue");
blue.setRange (0, 255);
blue.setValue (0xec);
// Set the initial palette values
if ( finalcut::FTerm::canChangeColorPalette() )
{
finalcut::FTerm::setPalette ( FColor::LightMagenta
, int(red.getValue())
, int(green.getValue())
, int(blue.getValue()) );
}
// Add some function callbacks
quit.addCallback
(
"clicked",
finalcut::getFApplication(),
&finalcut::FApplication::cb_exitApp,
this
);
for (const auto spinbox : {&red, &green, &blue})
{
spinbox->addCallback
(
"changed",
this, &Background::cb_changed
);
}
for (const auto& signal : {"row-changed", "clicked"})
{
color_choice.addCallback
(
signal,
this, &Background::cb_choice
);
}
}
//----------------------------------------------------------------------
Background::~Background() noexcept = default; // destructor
//----------------------------------------------------------------------
void Background::initLayout()
{
FDialog::setText ("Background color palette");
FDialog::setGeometry (FPoint{25, 5}, FSize{32, 12});
color_choice.setGeometry (FPoint{2, 2}, FSize{18, 1});
red.setGeometry (FPoint{2, 5}, FSize{7, 1});
green.setGeometry (FPoint{12, 5}, FSize{7, 1});
blue.setGeometry (FPoint{22, 5}, FSize{7, 1});
quit.setGeometry(FPoint{19, 8}, FSize{10, 1}); // Quit button
FDialog::initLayout();
}
//----------------------------------------------------------------------
void Background::cb_changed()
{
if ( ! finalcut::FTerm::canChangeColorPalette() )
return;
finalcut::FTerm::setPalette ( FColor::LightMagenta
, int(red.getValue())
, int(green.getValue())
, int(blue.getValue()) );
redraw();
}
//----------------------------------------------------------------------
void Background::cb_choice()
{
if ( ! finalcut::FTerm::canChangeColorPalette() )
return;
uChar r{};
uChar g{};
uChar b{};
const RGB rgb = color_choice.getItemData<RGB>();
std::tie(r, g, b) = rgb;
red.setValue(r);
green.setValue(g);
blue.setValue(b);
finalcut::FTerm::setPalette ( FColor::LightMagenta
, int(red.getValue())
, int(green.getValue())
, int(blue.getValue()) );
redraw();
}
//----------------------------------------------------------------------
// main part
//----------------------------------------------------------------------
int main (int argc, char* argv[])
{
// Create the application object
finalcut::FApplication app(argc, argv);
// Force terminal initialization without calling show()
app.initTerminal();
// The following lines require an initialized terminal
if ( finalcut::FTerm::canChangeColorPalette() )
app.setBackgroundColor(FColor::LightMagenta);
Background dialog(&app);
finalcut::FWidget::setMainWidget(&dialog);
dialog.show();
return app.exec();
}

View File

@ -1,136 +0,0 @@
/***********************************************************************
* busy.cpp - Shows the use of the FBusyIndicator *
* *
* This file is part of the FINAL CUT widget toolkit *
* *
* Copyright 2020-2021 Markus Gans *
* *
* FINAL CUT is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* FINAL CUT 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 Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
#include <final/final.h>
using finalcut::FPoint;
using finalcut::FRect;
using finalcut::FSize;
//----------------------------------------------------------------------
// class Dialog
//----------------------------------------------------------------------
class Dialog final : public finalcut::FDialog
{
public:
explicit Dialog (FWidget* parent = nullptr);
private:
void initLayout() override;
void adjustSize() override;
// Event handler
void onTimer (finalcut::FTimerEvent*) override;
// Callback method
void cb_start();
// Data members
finalcut::FSpinBox seconds{this};
finalcut::FButton start{"&Start", this};
finalcut::FButton quit{"&Quit", this};
finalcut::FBusyIndicator busy_indicator{this};
};
//----------------------------------------------------------------------
Dialog::Dialog (FWidget* parent)
: finalcut::FDialog{parent}
{
seconds.setLabelText ("Seconds");
seconds.setRange (0, 60);
seconds.setValue (3);
// Add button callbacks
seconds.addCallback
(
"activate",
this, &Dialog::cb_start
);
start.addCallback
(
"clicked",
this, &Dialog::cb_start
);
quit.addCallback
(
"clicked",
finalcut::getFApplication(),
&finalcut::FApplication::cb_exitApp,
this
);
}
//----------------------------------------------------------------------
void Dialog::initLayout()
{
FDialog::setText ("Dialog");
FDialog::setGeometry (FPoint{26, 5}, FSize{28, 10});
seconds.setGeometry (FPoint{10, 2}, FSize{10, 1});
start.setGeometry (FPoint{2, 6}, FSize{10, 1});
quit.setGeometry (FPoint{15, 6}, FSize{10, 1});
FDialog::initLayout();
}
//----------------------------------------------------------------------
void Dialog::adjustSize()
{
finalcut::FDialog::adjustSize();
auto x = int((getDesktopWidth() - getWidth()) / 2);
const int y = 5;
if ( x < 1 )
x = 1;
setPos (FPoint{x, y}, false);
}
//----------------------------------------------------------------------
void Dialog::onTimer (finalcut::FTimerEvent*)
{
delOwnTimers();
busy_indicator.stop();
}
//----------------------------------------------------------------------
void Dialog::cb_start()
{
if ( seconds.getValue() < 1 )
return;
busy_indicator.start();
addTimer(int(seconds.getValue() * 1000));
}
//----------------------------------------------------------------------
// main part
//----------------------------------------------------------------------
int main (int argc, char* argv[])
{
finalcut::FApplication app(argc, argv);
Dialog dialog(&app);
finalcut::FWidget::setMainWidget(&dialog);
dialog.show();
return app.exec();
}

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,17 @@
/*********************************************************************** /***********************************************************************
* checklist.cpp - Example for FListView widget with checkboxes * * checklist.cpp - Example for FListView widget with checkboxes *
* * * *
* This file is part of the FINAL CUT widget toolkit * * This file is part of the Final Cut widget toolkit *
* * * *
* Copyright 2017-2021 Markus Gans * * Copyright 2017-2018 Markus Gans *
* * * *
* FINAL CUT is free software; you can redistribute it and/or modify * * The Final Cut is free software; you can redistribute it and/or *
* it under the terms of the GNU Lesser General Public License as * * modify it under the terms of the GNU Lesser General Public License *
* published by the Free Software Foundation; either version 3 of * * as published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. * * the License, or (at your option) any later version. *
* * * *
* FINAL CUT is distributed in the hope that it will be useful, but * * The Final Cut is distributed in the hope that it will be useful, *
* WITHOUT ANY WARRANTY; without even the implied warranty of * * but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. * * GNU Lesser General Public License for more details. *
* * * *
@ -20,74 +20,75 @@
* <http://www.gnu.org/licenses/>. * * <http://www.gnu.org/licenses/>. *
***********************************************************************/ ***********************************************************************/
#include <array>
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <string> #include <string>
#include <vector>
#include <final/final.h> #include <final/final.h>
using finalcut::FPoint;
using finalcut::FRect;
using finalcut::FSize;
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// class CheckList // class CheckList
//---------------------------------------------------------------------- //----------------------------------------------------------------------
class CheckList final : public finalcut::FDialog #pragma pack(push)
#pragma pack(1)
class CheckList : public finalcut::FDialog
{ {
public: public:
// Constructor // Constructor
explicit CheckList (finalcut::FWidget* = nullptr); explicit CheckList (finalcut::FWidget* = 0);
// Disable copy constructor
CheckList (const CheckList&) = delete;
// Destructor // Destructor
~CheckList() override = default; ~CheckList();
// Disable copy assignment operator (=)
CheckList& operator = (const CheckList&) = delete;
private: private:
// Disable copy constructor
CheckList (const CheckList&);
// Disable assignment operator (=)
CheckList& operator = (const CheckList&);
// Method // Method
void populate(); void populate();
void initLayout() override;
void adjustSize() override;
// Event handlers // Event handlers
void onKeyPress (finalcut::FKeyEvent*) override; virtual void onKeyPress (finalcut::FKeyEvent*);
void onClose (finalcut::FCloseEvent*) override; virtual void onClose (finalcut::FCloseEvent*);
// Callback method // Callback method
void cb_showList(); void cb_showList (finalcut::FWidget*, data_ptr);
// Data members // Data Members
finalcut::FListView listview{this}; finalcut::FListView listView;
finalcut::FStatusBar status_bar{this}; finalcut::FStatusBar status_bar;
}; };
#pragma pack(pop)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
CheckList::CheckList (finalcut::FWidget* parent) CheckList::CheckList (finalcut::FWidget* parent)
: finalcut::FDialog{parent} : finalcut::FDialog(parent)
, listView(this)
, status_bar(this)
{ {
setShadow(); // Instead of the transparent window shadow setText (L"Shopping list");
listview.ignorePadding(); setShadow();
setGeometry (int(1 + (parent->getWidth() - 30) / 2), 5, 30, 13);
listView.ignorePadding();
listView.setGeometry (1, 2, getWidth(), getHeight() - 1);
// Add columns to the view // Add columns to the view
listview.addColumn ("Item"); listView.addColumn ("Item");
listview.addColumn ("Priority", 9); listView.addColumn ("Priority", 12);
// Set the type of sorting // Set the type of sorting
listview.setColumnSortType (1, finalcut::SortType::Name); listView.setColumnSortType (1, finalcut::fc::by_name);
listview.setColumnSortType (2, finalcut::SortType::Name); listView.setColumnSortType (2, finalcut::fc::by_name);
// Statusbar at the bottom // Statusbar at the bottom
finalcut::FString separator{}; finalcut::FString separator;
separator << ' ' << finalcut::UniChar::BoxDrawingsVertical << ' '; separator << ' ' << wchar_t(finalcut::fc::BoxDrawingsVertical) << ' ';
listview.setStatusbarMessage ( finalcut::FString{} listView.setStatusbarMessage ( finalcut::FString()
<< "<Q> exit" << separator << "<Q> exit" << separator
<< "<Space> select an item" << separator << "<Space> select an item" << separator
<< "<Enter> see your pick list"); << "<Enter> see your pick list");
@ -96,66 +97,55 @@ CheckList::CheckList (finalcut::FWidget* parent)
populate(); populate();
// Add callback method // Add callback method
listview.addCallback listView.addCallback
( (
"clicked", "clicked",
this, &CheckList::cb_showList F_METHOD_CALLBACK (this, &CheckList::cb_showList)
); );
} }
//----------------------------------------------------------------------
CheckList::~CheckList() // destructor
{ }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void CheckList::populate() void CheckList::populate()
{ {
constexpr std::array<std::array<const char*, 2>, 10> list = std::string list[][2] =
{{
{{ "Milk", "Highest" }},
{{ "Cheese", "High" }},
{{ "Yoghurt", "Medium" }},
{{ "Bread", "Low" }},
{{ "Eggs", "High" }},
{{ "Toothpaste", "Medium" }},
{{ "Apples", "Lowest" }},
{{ "Bananas", "Medium" }},
{{ "Fish", "Medium" }},
{{ "Lemons", "Low" }}
}};
for (const auto& line : list)
{ {
const finalcut::FStringList string_line (line.begin(), line.end()); { "Milk", "Highest" },
auto iter = listview.insert (string_line); { "Cheese", "High" },
auto item = static_cast<finalcut::FListViewItem*>(*iter); { "Yoghurt", "Medium" },
{ "Bread", "Low" },
{ "Eggs", "High" },
{ "Toothpaste", "Medium" },
{ "Apples", "Lowest" },
{ "Bananas", "Medium" },
{ "Fish", "Medium" },
{ "Lemons", "Low" }
};
const int lastItem = int(sizeof(list) / sizeof(list[0])) - 1;
for (int i = 0; i <= lastItem; i++)
{
const finalcut::FStringList line (&list[i][0], &list[i][0] + 2);
finalcut::FObject::FObjectIterator iter = listView.insert (line);
finalcut::FListViewItem* item = \
static_cast<finalcut::FListViewItem*>(*iter);
item->setCheckable(true); item->setCheckable(true);
} }
} }
//----------------------------------------------------------------------
void CheckList::initLayout()
{
FDialog::setText (L"Shopping list");
const std::size_t nf_offset = ( finalcut::FTerm::isNewFont() ) ? 1 : 0;
FDialog::setSize (FSize{28 + nf_offset, 13} );
listview.setGeometry ( FPoint{1 + int(nf_offset), 2}
, FSize{getWidth() - nf_offset, getHeight() - 1} );
FDialog::initLayout();
}
//----------------------------------------------------------------------
void CheckList::adjustSize()
{
finalcut::FDialog::adjustSize();
setPos(FPoint{int(1 + (getDesktopWidth() - getWidth()) / 2), 5});
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void CheckList::onKeyPress (finalcut::FKeyEvent* ev) void CheckList::onKeyPress (finalcut::FKeyEvent* ev)
{ {
if ( ! ev ) if ( ! ev )
return; return;
if ( ev->key() == finalcut::FKey('q') if ( ev->key() == 'q'
|| ev->key() == finalcut::FKey::Escape || ev->key() == finalcut::fc::Fkey_escape
|| ev->key() == finalcut::FKey::Escape_mintty ) || ev->key() == finalcut::fc::Fkey_escape_mintty )
{ {
close(); close();
ev->accept(); ev->accept();
@ -171,14 +161,21 @@ void CheckList::onClose (finalcut::FCloseEvent* ev)
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void CheckList::cb_showList() void CheckList::cb_showList (finalcut::FWidget*, data_ptr)
{ {
finalcut::FString shopping_list{}; finalcut::FListViewIterator iter = listView.beginOfList();
finalcut::FString shopping_list;
for (auto item : listview.getData()) while ( iter != listView.endOfList() )
{ {
const finalcut::FListViewItem* item = \
static_cast<finalcut::FListViewItem*>(*iter);
if ( item->isChecked() ) if ( item->isChecked() )
shopping_list << finalcut::UniChar::Bullet << ' ' << item->getText(1) << '\n'; shopping_list << wchar_t(finalcut::fc::Bullet) << ' '
<< item->getText(1) << '\n';
++iter;
} }
if ( shopping_list.isEmpty() ) if ( shopping_list.isEmpty() )
@ -205,7 +202,7 @@ int main (int argc, char* argv[])
CheckList d(&app); CheckList d(&app);
// Set dialog d as main widget // Set dialog d as main widget
finalcut::FWidget::setMainWidget(&d); app.setMainWidget(&d);
// Show and start the application // Show and start the application
d.show(); d.show();

View File

@ -1,17 +1,17 @@
/*********************************************************************** /***********************************************************************
* choice.cpp - FButtonGroup with scroll view * * choice.cpp - FButtonGroup with scroll view *
* * * *
* This file is part of the FINAL CUT widget toolkit * * This file is part of the Final Cut widget toolkit *
* * * *
* Copyright 2017-2020 Markus Gans * * Copyright 2017-2018 Markus Gans *
* * * *
* FINAL CUT is free software; you can redistribute it and/or modify * * The Final Cut is free software; you can redistribute it and/or *
* it under the terms of the GNU Lesser General Public License as * * modify it under the terms of the GNU Lesser General Public License *
* published by the Free Software Foundation; either version 3 of * * as published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. * * the License, or (at your option) any later version. *
* * * *
* FINAL CUT is distributed in the hope that it will be useful, but * * The Final Cut is distributed in the hope that it will be useful, *
* WITHOUT ANY WARRANTY; without even the implied warranty of * * but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. * * GNU Lesser General Public License for more details. *
* * * *
@ -20,46 +20,41 @@
* <http://www.gnu.org/licenses/>. * * <http://www.gnu.org/licenses/>. *
***********************************************************************/ ***********************************************************************/
#include <memory>
#include <vector> #include <vector>
#include <final/final.h> #include <final/final.h>
using finalcut::FPoint;
using finalcut::FSize;
// Using-declaration // function prototypes
using FRadioButtonPtr = std::shared_ptr<finalcut::FRadioButton>; void cb_quit (finalcut::FWidget*, finalcut::FWidget::data_ptr);
void populateChoice (std::vector<finalcut::FRadioButton*>&, finalcut::FButtonGroup*);
// Function prototypes void preset (std::vector<finalcut::FRadioButton*>&);
void cb_quit (finalcut::FDialog&);
void populateChoice (std::vector<FRadioButtonPtr>&, finalcut::FButtonGroup&);
void preset (std::vector<FRadioButtonPtr>&);
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// Callback functions // callback functions
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void cb_quit (finalcut::FDialog& dlg) void cb_quit (finalcut::FWidget*, finalcut::FWidget::data_ptr data)
{ {
dlg.close(); finalcut::FDialog* dlg = static_cast<finalcut::FDialog*>(data);
dlg->close();
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void populateChoice ( std::vector<FRadioButtonPtr>& os void populateChoice ( std::vector<finalcut::FRadioButton*>& os
, finalcut::FButtonGroup& group ) , finalcut::FButtonGroup* group )
{ {
os[0] = std::make_shared<finalcut::FRadioButton>("AIX", &group); os[0] = new finalcut::FRadioButton("AIX", group);
os[1] = std::make_shared<finalcut::FRadioButton>("Cygwin", &group); os[1] = new finalcut::FRadioButton("Cygwin", group);
os[2] = std::make_shared<finalcut::FRadioButton>("FreeBSD", &group); os[2] = new finalcut::FRadioButton("FreeBSD", group);
os[3] = std::make_shared<finalcut::FRadioButton>("HP-UX", &group); os[3] = new finalcut::FRadioButton("HP-UX", group);
os[4] = std::make_shared<finalcut::FRadioButton>("Linux", &group); os[4] = new finalcut::FRadioButton("Linux", group);
os[5] = std::make_shared<finalcut::FRadioButton>("Mac OS X", &group); os[5] = new finalcut::FRadioButton("Mac OS X", group);
os[6] = std::make_shared<finalcut::FRadioButton>("NetBSD", &group); os[6] = new finalcut::FRadioButton("NetBSD", group);
os[7] = std::make_shared<finalcut::FRadioButton>("OpenBSD", &group); os[7] = new finalcut::FRadioButton("OpenBSD", group);
os[8] = std::make_shared<finalcut::FRadioButton>("Solaris", &group); os[8] = new finalcut::FRadioButton("Solaris", group);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void preset (std::vector<FRadioButtonPtr>& os) void preset (std::vector<finalcut::FRadioButton*>& os)
{ {
#if defined(_AIX) #if defined(_AIX)
os[0]->setChecked(); os[0]->setChecked();
@ -96,58 +91,58 @@ void preset (std::vector<FRadioButtonPtr>& os)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
int main (int argc, char* argv[]) int main (int argc, char* argv[])
{ {
finalcut::FString label_text{"no OS"}; finalcut::FString label_text = "no OS";
// Create the application object // Create the application object
finalcut::FApplication app{argc, argv}; finalcut::FApplication app(argc, argv);
{ // Create a simple modal dialog box in this scope { // Create a simple modal dialog box in this scope
finalcut::FDialog dgl{&app}; finalcut::FDialog dgl(&app);
dgl.setModal(); dgl.setModal();
dgl.setText ("UNIX select"); dgl.setText ("UNIX select");
const std::size_t w{20}; std::size_t w = 20;
const std::size_t h{13}; std::size_t h = 13;
const int x = int(app.getDesktopWidth() - w) / 2; int x = int(app.getDesktopWidth() - w) / 2;
const int y = int(app.getDesktopHeight() - h) / 2; int y = int(app.getDesktopHeight() - h) / 2;
dgl.setGeometry (FPoint{x, y}, FSize{w, h}); dgl.setGeometry (x, y, w, h);
// Create a button group // Create a button group
finalcut::FButtonGroup checkButtonGroup("choice", &dgl); finalcut::FButtonGroup checkButtonGroup("choice", &dgl);
checkButtonGroup.setGeometry (FPoint{2, 1}, FSize{16, 7}); checkButtonGroup.setGeometry (2, 1, 16, 7);
// Create radio buttons // Create radio buttons
std::vector<FRadioButtonPtr> os(9); std::vector<finalcut::FRadioButton*> os (9);
populateChoice (os, checkButtonGroup); populateChoice (os, &checkButtonGroup);
// Set the radio button geometry // Set the radio button geometry
// => checkButtonGroup.setScrollSize(...) is not required // => checkButtonGroup.setScrollSize(...) is not required
// because a FButtonGroup is self-adjusting // because a FButtonGroup is self-adjusting
for (uInt i{0}; i < os.size(); i++) for (uInt i = 0; i < os.size(); i++)
os[i]->setGeometry(FPoint{1, int(1 + i)}, FSize{12, 1}); os[i]->setGeometry(1, int(1 + i), 12, 1);
preset(os); preset(os);
// Scroll to the focused child element // Scroll to the focused child element
finalcut::FFocusEvent cfi (finalcut::Event::ChildFocusIn); finalcut::FFocusEvent cfi (finalcut::fc::ChildFocusIn_Event);
app.queueEvent(&checkButtonGroup, &cfi); finalcut::FApplication::sendEvent(&checkButtonGroup, &cfi);
// Create a OK button // Create a OK button
finalcut::FButton ok("&OK", &dgl); finalcut::FButton ok("&OK", &dgl);
ok.setGeometry (FPoint{10, 9}, FSize{8, 1}); ok.setGeometry (10, 9, 8, 1);
// Connect the button signal "clicked" with the callback function // Connect the button signal "clicked" with the callback function
ok.addCallback ok.addCallback
( (
"clicked", "clicked",
&cb_quit, F_FUNCTION_CALLBACK (&cb_quit),
std::ref(dgl) &dgl
); );
// Show the dialog // Show the dialog
dgl.show(); dgl.show();
// Get the checked radio button text // Get the checked radio button text
for (auto n{1}; n <= int(checkButtonGroup.getCount()); n++) for (int n = 1; n <= int(checkButtonGroup.getCount()); n++)
{ {
if ( checkButtonGroup.isChecked(n) ) if ( checkButtonGroup.isChecked(n) )
{ {
@ -157,8 +152,9 @@ int main (int argc, char* argv[])
} }
} // Hide and destroy the dialog object } // Hide and destroy the dialog object
// Create and show tooltip for two seconds // Create and show tooltip for two seconds
finalcut::FToolTip tooltip{&app}; finalcut::FToolTip tooltip(&app);
tooltip.setText ("You have chosen " + label_text); tooltip.setText ("You have chosen " + label_text);
tooltip.show(); tooltip.show();
sleep(2); sleep(2);

View File

@ -1,17 +1,17 @@
/*********************************************************************** /***********************************************************************
* dialog.cpp - A FDialog example * * dialog.cpp - A FDialog example *
* * * *
* This file is part of the FINAL CUT widget toolkit * * This file is part of the Final Cut widget toolkit *
* * * *
* Copyright 2015-2020 Markus Gans * * Copyright 2015-2018 Markus Gans *
* * * *
* FINAL CUT is free software; you can redistribute it and/or modify * * The Final Cut is free software; you can redistribute it and/or *
* it under the terms of the GNU Lesser General Public License as * * modify it under the terms of the GNU Lesser General Public License *
* published by the Free Software Foundation; either version 3 of * * as published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. * * the License, or (at your option) any later version. *
* * * *
* FINAL CUT is distributed in the hope that it will be useful, but * * The Final Cut is distributed in the hope that it will be useful, *
* WITHOUT ANY WARRANTY; without even the implied warranty of * * but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. * * GNU Lesser General Public License for more details. *
* * * *
@ -22,19 +22,17 @@
#include <final/final.h> #include <final/final.h>
using finalcut::FPoint;
using finalcut::FSize;
// function prototype // function prototype
void cb_quit (const finalcut::FApplication&); void cb_quit (finalcut::FWidget*, finalcut::FWidget::data_ptr);
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// callback function // callback function
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void cb_quit (const finalcut::FApplication& app) void cb_quit (finalcut::FWidget*, finalcut::FWidget::data_ptr data)
{ {
app.quit(); finalcut::FApplication* app = static_cast<finalcut::FApplication*>(data);
app->quit();
} }
@ -44,43 +42,43 @@ void cb_quit (const finalcut::FApplication& app)
int main (int argc, char* argv[]) int main (int argc, char* argv[])
{ {
// Create the application object // Create the application object
finalcut::FApplication app{argc, argv}; finalcut::FApplication app(argc, argv);
// Create a simple dialog box // Create a simple dialog box
finalcut::FDialog dgl{&app}; finalcut::FDialog dgl(&app);
dgl.setText ("FDialog"); dgl.setText ("FDialog");
dgl.setGeometry (FPoint{4, 3}, FSize{41, 11}); dgl.setGeometry (4, 3, 41, 11);
// Create text labels // Create text labels
finalcut::FLabel label_1{&dgl}; finalcut::FLabel label_1(&dgl);
finalcut::FLabel label_2{&dgl}; finalcut::FLabel label_2(&dgl);
label_1 << finalcut::UniChar::BlackUpPointingTriangle label_1 << wchar_t(finalcut::fc::BlackUpPointingTriangle)
<< std::wstring{L"\n"} << std::wstring(L"\n")
<< finalcut::UniChar::BoxDrawingsUpAndRight << wchar_t(finalcut::fc::BoxDrawingsUpAndRight)
<< finalcut::FString{2, finalcut::UniChar::BoxDrawingsHorizontal} << finalcut::FString(2, wchar_t(finalcut::fc::BoxDrawingsHorizontal))
<< " Double click the title bar button,"; << " Double click the title bar button,";
label_2 << "press Q on the keyboard,\n" label_2 << "press Q on the keyboard,\n"
<< "or push the button below to exit\n" << "or push the button below to exit\n"
<< "the program."; << "the program.";
label_1.setGeometry (FPoint{1, 1}, FSize{38, 2}); label_1.setGeometry (1, 1, 38, 2);
label_2.setGeometry (FPoint{5, 3}, FSize{34, 3}); label_2.setGeometry (5, 3, 34, 3);
// Create the quit button // Create the quit button
finalcut::FButton btn{"&Quit", &dgl}; finalcut::FButton btn("&Quit", &dgl);
btn.setGeometry (FPoint{16, 7}, FSize{9, 1}); btn.setGeometry (16, 7, 9, 1);
// Connect the button signal "clicked" with the callback function // Connect the button signal "clicked" with the callback function
btn.addCallback btn.addCallback
( (
"clicked", "clicked",
&cb_quit, F_FUNCTION_CALLBACK (&cb_quit),
std::ref(app) &app
); );
// Set dialog object as main widget // Set dialog object as main widget
finalcut::FWidget::setMainWidget(&dgl); app.setMainWidget(&dgl);
// Show and start the application // Show and start the application
dgl.show(); dgl.show();

View File

@ -1,357 +0,0 @@
/***********************************************************************
* event-log.cpp - Logs events in a dialog box *
* *
* This file is part of the FINAL CUT widget toolkit *
* *
* Copyright 2020-2021 Markus Gans *
* *
* FINAL CUT is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* FINAL CUT 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 Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
#include <fstream>
#include <sstream>
#include <tuple>
#include <utility>
#include <vector>
#include <final/final.h>
using finalcut::FPoint;
using finalcut::FRect;
using finalcut::FSize;
class EventLog; // class forward declaration
//----------------------------------------------------------------------
// class EventLog::EventLog
//----------------------------------------------------------------------
class EventDialog final : public finalcut::FDialog
{
public:
// Constructor
explicit EventDialog (finalcut::FWidget* = nullptr);
// Disable copy constructor
EventDialog (const EventDialog&) = delete;
// Destructor
~EventDialog() noexcept override;
// Disable copy assignment operator (=)
EventDialog& operator = (const EventDialog&) = delete;
private:
// Methods
void initLayout() override;
finalcut::FString getMouseButtonName (const finalcut::MouseButton&) const;
void logMouseEvent ( const finalcut::FString&
, const finalcut::FMouseEvent& );
// Event handlers
void onClose (finalcut::FCloseEvent*) override;
void onShow (finalcut::FShowEvent*) override;
void onTimer (finalcut::FTimerEvent*) override;
void onKeyPress (finalcut::FKeyEvent*) override;
void onMouseDown (finalcut::FMouseEvent*) override;
void onMouseMove (finalcut::FMouseEvent*) override;
void onMouseUp (finalcut::FMouseEvent*) override;
void onMouseDoubleClick (finalcut::FMouseEvent* ev) override;
void onWindowActive (finalcut::FEvent*) override;
void onWindowInactive (finalcut::FEvent*) override;
void onWindowRaised (finalcut::FEvent*) override;
void onWindowLowered (finalcut::FEvent*) override;
// Data members
finalcut::FLog& log{*finalcut::FApplication::getLog()};
finalcut::FLabel label{this};
};
//----------------------------------------------------------------------
EventDialog::EventDialog (finalcut::FWidget* parent)
: FDialog{parent}
{
setShadow();
label.setText("\n\nUse the keyboard or mouse\n"
"in this dialog to create events");
label.setAlignment(finalcut::Align::Center);
addTimer(60000); // Starts the timer every minute
}
//----------------------------------------------------------------------
EventDialog::~EventDialog() noexcept = default; // destructor
//----------------------------------------------------------------------
void EventDialog::initLayout()
{
FDialog::setText ("Event dialog");
FDialog::setGeometry (FPoint{15, 2}, FSize{53, 12});
label.setGeometry (FPoint(1, 1), getClientSize(), false);
FDialog::initLayout();
}
//----------------------------------------------------------------------
finalcut::FString EventDialog::getMouseButtonName (const finalcut::MouseButton& btn_state) const
{
const auto& empty = finalcut::fc::emptyFString::get();
auto S = bool(btn_state & finalcut::MouseButton::Shift);
auto C = bool(btn_state & finalcut::MouseButton::Control);
auto M = bool(btn_state & finalcut::MouseButton::Meta);
auto l = bool(btn_state & finalcut::MouseButton::Left);
auto r = bool(btn_state & finalcut::MouseButton::Right);
auto m = bool(btn_state & finalcut::MouseButton::Middle);
auto prefix = (S ? finalcut::FString("Shift+") : empty)
+ (C ? finalcut::FString("Control+") : empty)
+ (M ? finalcut::FString("Meta+") : empty);
if ( l )
return prefix + "left";
else if ( r )
return prefix + "right";
else if ( m )
return prefix + "middle";
return "unknown";
}
//----------------------------------------------------------------------
void EventDialog::logMouseEvent ( const finalcut::FString& state
, const finalcut::FMouseEvent& ev )
{
const int mouse_x = ev.getX();
const int mouse_y = ev.getY();
log << finalcut::FLog::LogLevel::Info
<< getMouseButtonName(ev.getButton())
<< " mouse button " << state << " at ("
<< mouse_x << ", " << mouse_y << ")" << std::flush;
}
//----------------------------------------------------------------------
void EventDialog::onClose (finalcut::FCloseEvent* ev)
{
log.info("The event dialog was closed");
ev->accept();
}
//----------------------------------------------------------------------
void EventDialog::onShow (finalcut::FShowEvent*)
{
log.info("The event dialog is now displayed");
}
//----------------------------------------------------------------------
void EventDialog::onTimer (finalcut::FTimerEvent*)
{
log.info("-- minute marker --");
}
//----------------------------------------------------------------------
void EventDialog::onKeyPress (finalcut::FKeyEvent* ev)
{
const finalcut::FKey key_id = ev->key();
finalcut::FString key_name = finalcut::FTerm::getKeyName(key_id);
if ( key_name.isEmpty() )
key_name = wchar_t(key_id);
// std::clog redirects all stream data to FLogger
std::clog << finalcut::FLog::LogLevel::Info
<< "Key " << key_name
<< " (id " << uInt32(key_id) << ")" << std::flush;
finalcut::FDialog::onKeyPress(ev);
}
//----------------------------------------------------------------------
void EventDialog::onMouseDown (finalcut::FMouseEvent* ev)
{
logMouseEvent("down", *ev);
finalcut::FDialog::onMouseDown(ev);
}
//----------------------------------------------------------------------
void EventDialog::onMouseMove (finalcut::FMouseEvent* ev)
{
logMouseEvent("move", *ev);
finalcut::FDialog::onMouseMove(ev);
}
//----------------------------------------------------------------------
void EventDialog::onMouseUp (finalcut::FMouseEvent* ev)
{
logMouseEvent("up", *ev);
finalcut::FDialog::onMouseUp(ev);
}
//----------------------------------------------------------------------
void EventDialog::onMouseDoubleClick (finalcut::FMouseEvent* ev)
{
logMouseEvent("double click", *ev);
finalcut::FDialog::onMouseDoubleClick(ev);
}
//----------------------------------------------------------------------
void EventDialog::onWindowActive (finalcut::FEvent* ev)
{
log.info("The Event dialog is now active");
finalcut::FDialog::onWindowActive(ev);
}
//----------------------------------------------------------------------
void EventDialog::onWindowInactive (finalcut::FEvent* ev)
{
log.info("The Event dialog is now inactive");
finalcut::FDialog::onWindowInactive(ev);
}
//----------------------------------------------------------------------
void EventDialog::onWindowRaised (finalcut::FEvent* ev)
{
log.info("The dialog was raised");
finalcut::FDialog::onWindowRaised(ev);
}
//----------------------------------------------------------------------
void EventDialog::onWindowLowered (finalcut::FEvent* ev)
{
log.info("The dialog was lowered");
finalcut::FDialog::onWindowLowered(ev);
}
//----------------------------------------------------------------------
// class EventLog
//----------------------------------------------------------------------
class EventLog final : public finalcut::FDialog, public std::ostringstream
{
public:
// Constructor
explicit EventLog (finalcut::FWidget* = nullptr);
// Disable copy constructor
EventLog (const EventLog&) = delete;
// Destructor
~EventLog() noexcept override;
// Disable copy assignment operator (=)
EventLog& operator = (const EventLog&) = delete;
// Event handlers
void onTimer (finalcut::FTimerEvent*) override;
void onClose (finalcut::FCloseEvent*) override;
private:
// Method
void initLayout() override;
void adjustSize() override;
// Data members
finalcut::FTextView scrolltext{this};
EventDialog* event_dialog{new EventDialog(this)};
};
//----------------------------------------------------------------------
EventLog::EventLog (finalcut::FWidget* parent)
: FDialog{parent}
{
setMinimumSize (FSize{75, 5});
setShadow();
scrolltext.ignorePadding();
event_dialog->setFocus();
addTimer(250); // Starts the timer every 250 milliseconds
}
//----------------------------------------------------------------------
EventLog::~EventLog() noexcept = default; // destructor
//----------------------------------------------------------------------
void EventLog::onTimer (finalcut::FTimerEvent*)
{
if ( str().empty() )
return;
scrolltext.append(str());
str("");
scrolltext.scrollToEnd();
redraw();
}
//----------------------------------------------------------------------
void EventLog::onClose (finalcut::FCloseEvent* ev)
{
finalcut::FApplication::closeConfirmationDialog (this, ev);
}
//----------------------------------------------------------------------
void EventLog::initLayout()
{
FDialog::setText ("Event log");
FDialog::setGeometry (FPoint{4, 16}, FSize{75, 8});
FDialog::setResizeable();
scrolltext.setGeometry (FPoint{1, 2}, FSize{getWidth(), getHeight() - 1});
FDialog::initLayout();
}
//----------------------------------------------------------------------
void EventLog::adjustSize()
{
finalcut::FDialog::adjustSize();
scrolltext.setGeometry (FPoint{1, 2}, FSize(getWidth(), getHeight() - 1));
}
//----------------------------------------------------------------------
// main part
//----------------------------------------------------------------------
int main (int argc, char* argv[])
{
finalcut::FApplication app(argc, argv);
EventLog dialog(&app);
// Get the global logger object
finalcut::FLog& log = *finalcut::FApplication::getLog();
// Set the line endings (default = CRLF)
log.setLineEnding (finalcut::FLog::LineEnding::LF);
// Write a timestamp before each output line
log.enableTimestamp();
// Set the dialog object as output stream
log.setOutputStream(dialog);
// ----------------------------------------------
// Remove the comment characters in the following
// two lines to log the output to a file.
// ----------------------------------------------
//std::ofstream file_stream("test.log", std::ofstream::out | std::ofstream::app);
//log.setOutputStream(file_stream);
// Sets the dialog as main widget
finalcut::FWidget::setMainWidget(&dialog);
// Show the dialog
dialog.show();
// Run the application
return app.exec();
}

Some files were not shown because too many files have changed in this diff Show More