Skip to content
Snippets Groups Projects
Commit 1501bc1e authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Praktikumsversuch 4: Objektorientiertes Grafik-Programm

parent ac38054c
No related branches found
No related tags found
No related merge requests found
File added
% hp-2024ws-p4.pdf - Labor Notes on Low-Level Programming
% Copyright (C) 2014-2016, 2018-2022, 2025 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: Versuch 4: Objektorientiertes Grafik-Programm
\documentclass[a4paper]{article}
\usepackage{pgscript}
\usepackage{multicol}
\usepackage{amsmath}
\usepackage{sfmath}
\sloppy
%\pagestyle{empty}
\newcommand{\sep}{~$\cdot$~}
\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)}
\begin{document}
\makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill
\makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}
\par\bigskip\bigskip
\begin{center}
\Large\textbf{Praktikumsversuch 4: Objektorientiertes Grafik-Programm}
\par\medskip
\normalsize Hardwarenahe Programmierung\sep
Wintersemester 2024/25\sep
Prof.~Dr.~Peter Gerwinski
\end{center}
Aufgabe: Schreiben Sie ein GTK-Programm,
mit dem man verschiedene Objekte (z.\,B.\ Rechtecke, Kreise, Dreiecke)
in eine Grafik einfügen und nachträglich verändern kann
(z.\,B.\ Position, Größe, Farbe).
(Beispiel: Ich füge zunächst zwei Rechtecke und einen Kreis in eine Grafik ein,
wähle anschließend das erste Rechteck aus und ändere dessen Farbe.)
\bigskip
Hinweise:
\vspace*{-\medskipamount}
\begin{itemize}
\item
Vorab: Diese Hinweise beziehen sich auf Version 3 der GTK-Bibliothek.
Selbstverständlich dürfen Sie auch eine aktuellere Version verwenden.
\item
Das Beispielprogramm \gitfile{hp}{2022ws/20221128}{objects-08.c}
und seine Nachfolger zeigen,
wie man in C verschiedenartige Objekte
in einem Array von Zeigern verwaltet.
\item
Das Beispielprogramm \gitfile{hp}{2022ws/20221031}{gtk-06.c} zeigt,
wie man mit Hilfe der GUI-Bibliothek GTK
verschiedene Objekte in ein Fenster zeichnet.
\item
Das Beispielprogramm \gitfile{hp}{2022ws/20221031}{gtk-07.c} zeigt,
wie man in der GUI-Bibliothek GTK
Tastatur- und Maus-Eingaben entgegennimmt und verarbeitet.
\item
Das Auswählen eines bereits vorhandenen Objekts geht am einfachsten
mittels Tastatur-Eingaben (z.\,B.\ Ziffer 1 für das erste Objekt usw.).
Auswahl mit der Maus ist auch möglich, aber schwieriger.
\item
Mit Hilfe der Funktion \lstinline{gtk_widget_queue_draw()}
teilen Sie GTK mit, daß Sie ein \lstinline{GtkWidget}
neu zeichnen lassen möchten.
\item
Das Compilieren eines GTK-Programms
(z.\,B.\ \gitfile{hp}{2022ws/20221031}{gtk-07.c}) geschieht wie folgt:
\begin{lstlisting}[style=cmd,gobble=8]
gcc $(pkg-config --cflags gtk+-3.0) -Wall -O gtk-07.c \
$(pkg-config --libs gtk+-3.0) -o gtk-07
\end{lstlisting}
(Den Backslash am Ende der ersten Zeile entfällt,
wenn Sie den ganzen Befehl in eine einzige Zeile schreiben.)
% \item
% \textbf{Online-Abgabe:}
% Ihre Quelltexte mit den Lösungen der Praktikumsaufgabe schicken Sie bitte
% per E-Mail an \file{peter.gerwinski@hs-bochum.de}
% mit dem \textbf{Betreff:} \lstinline[style=terminal]{Eelei7ri}
% unter Angabe von Name, Matrikel-Nummer,
% Studiengang (MI/MP/TI) und Studienmodell (KIA/KIS/GS).
\end{itemize}
\bigskip
\textbf{GTK unter GNU/Linux}
\begin{itemize}
\item
Installieren Sie das Entwickler-Paket für GTK-3,\\
z.\,B.\ unter Debian GNU/Linux und darauf basierenden Systemen:
\begin{lstlisting}[style=cmd,gobble=8]
apt-get install libgtk-3-dev
\end{lstlisting}
\end{itemize}
\bigskip
\goodbreak
\textbf{GTK unter MacOS X}
\begin{itemize}
\item
Zuerst den Paketmanager "`Homebrew"' installieren:
\begin{lstlisting}[style=cmd,gobble=8]
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/
Homebrew/install/HEAD/install.sh)"
\end{lstlisting}
(Die URL nicht trennen, sondern in einer Zeile schreiben.)
\item
Danach mit Hilfe von \lstinline[style=cmd]{brew} GTK installieren:
\begin{lstlisting}[style=cmd,gobble=8]
brew install gtk+3
\end{lstlisting}
\end{itemize}
\bigskip
\goodbreak
\textbf{GTK unter Microsoft Windows: Cygwin}
\begin{itemize}
\item
Im Cygwin-Setup-Programm die Pakete \file{libgtk3-devel},
\file{xorg-server} und \file{dbus-x11} installieren.
\item
Bevor Sie GTK-Programme starten können,
müssen Sie einmalig den X-Server starten:
\begin{lstlisting}[style=cmd,gobble=8]
XWin -multiwindow &
\end{lstlisting}
\item
Bevor Sie GTK-Programme starten können,
müssen Sie einmalig pro Shell-Sitzung\\
die \lstinline[style=cmd]{DISPLAY}-Variable setzen:
\begin{lstlisting}[style=cmd,gobble=8]
export DISPLAY=:0.0
\end{lstlisting}
\end{itemize}
\bigskip
\goodbreak
\textbf{GTK unter Microsoft Windows: MinGW}
\begin{itemize}
\item
Installieren Sie \file{MSYS2} (Installer).
\item
Installieren Sie von der MinGW-Shell aus GTK
und weitere Entwicklungswerkzeuge:
\begin{lstlisting}[style=cmd,gobble=8]
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-x86_64-pkg-config
\end{lstlisting}
\item
Falls nötig, ergänzen Sie in der MinGW-Shell
den Pfad zu den neu installierten Programmen:
\begin{lstlisting}[style=cmd,gobble=8]
export PATH=$PATH:/mingw64/bin
\end{lstlisting}
\end{itemize}
\bigskip
\goodbreak
\textbf{GTK unter Microsoft Windows: WSL}
\begin{itemize}
\item
Installieren Sie die GTK-Entwicklungswerkzeuge in ihrer Linux-Umgebung (siehe oben).
\item
Installieren Sie einen X-Server für Ihr MS-Windows-System, z.\,B.\ \file{Xming}.
\item
Starten Sie Ihren X-Server mit \file{XLaunch}
und wählen Sie \emph{no access control} aus.
\item
Bevor Sie GTK-Programme starten können,
müssen Sie einmalig pro Shell-Sitzung\\
die \lstinline[style=cmd]{DISPLAY}-Variable setzen:
\begin{lstlisting}[style=cmd,gobble=8]
export DISPLAY=$(cat /etc/resolv.conf \
| grep nameserver | awk '{print $2}'):0
\end{lstlisting}
(Der Backslash ist ein Zeilen-Verlängerungszeichen. Wenn Sie den gesamten\\
Befehl in einer Zeile eingeben, entfällt der Backslash.)
\end{itemize}
\bigskip
\strut\hfill\emph{Viel Erfolg!}
\vfill
\begingroup
\small
\setlength{\leftskip}{3cm}
Stand: 8.\ Januar 2025
% Soweit nicht anders angegeben:\\
Copyright \copyright\ 2014--2016, 2018--2022, 2025\quad Peter Gerwinski\\
Lizenz: \mylicense
Sie können diese Praktikumsunterlagen einschließlich \LaTeX-Quelltext
% und Beispielprogramme\\
herunterladen unter:\\
\url{https://gitlab.cvh-server.de/pgerwinski/hp}
\endgroup
\end{document}
......@@ -70,6 +70,7 @@ Praktikumsunterlagen:
* [Versuch 1: RSA-Verschlüsselung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2024ws/20241017/hp-2024ws-p1.pdf)
* [Versuch 2: Druckknopfampel](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2024ws/20241121/hp-2024ws-p2.pdf)
* [Versuch 3: Weltraum-Simulation](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2024ws/20241212/hp-2024ws-p3.pdf)
* [Versuch 4: Objektorientiertes Grafik-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2024ws/20250109/hp-2024ws-p4.pdf)
Alte Klausuren:
---------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment