[elektro] Linux - GTK2 ről GTK3-ra
elight
elight at gmail.hu
Wed Sep 27 09:54:23 CEST 2017
Sziasztok
Ahogy látom itt akadnak többen Linuxos érdeklődők!
Bátorkodnék egy kis segítséget kérni a következő
témakörben.
Rasberry PI-3-ason összeraktam
GT3-alatt egy kis mérő programot..
Egy ideje tűrhetően szuperál.
Most ezt szeretném kiegészíteni
egy grafikus adatmegjelenítő funkcióval.
Eddig összeolvastam sok mindent
de nem igazán állt még bennem össze a kép.
Szeretnék egy olyat elkövetni, hogy
egyetlen megnyitott ablakban lévő képet animálnék.
Ha ez működik, folyamatosan feltölteném
grafikusan az érkező adataimat.
Ezt ki is próbáltam, egy free médialejátszó
forrásából kiválogattam pár utasítást
és ezzel tudok egy vonalsort mozgatni az
ablakon belül. A gondom, hogy mindez
GTK2-ben van megírva.
Maga a program amelyet így összehoztam:
//========================
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
GtkWidget *window1 ;
GtkWidget *vbox1 ;
GtkWidget *frame1 ;
GtkWidget *vbox2 ;
GtkWidget *hbox2 ;
GtkWidget *drawarea1 ;
GdkPixmap *pixmap_drawarea1 = NULL;
GtkWidget *hscale1 ;
GtkAccelGroup *menuGroup;
int k = 0;
void InitializeMainSystem ()
{
/* .... put initialize stuff here .... */
}
void MessageBox (GtkWindow *parentWindow, char *messageValue)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (parentWindow, GTK_DIALOG_MODAL,
GTK_MESSAGE_INFO, GTK_BUTTONS_OK, messageValue);
gtk_window_set_title (GTK_WINDOW (dialog), "Information");
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
/* Stop the GTK+ main loop function. */
static void destroy_window1 (GtkWidget *window, gpointer data)
{
gtk_main_quit ();
}
/* Return FALSE to destroy the widget. By returning TRUE, you can cancel
a delete-event. This can be used to confirm quitting the application. */
static gboolean delete_event_window1 (GtkWidget *window, GdkEvent
*event, gpointer data)
{
return (FALSE);
}
/* On size change: Create a new backing pixmap of the appropriate size */
static gboolean drawarea1_configure_event( GtkWidget *widget,
GdkEventConfigure *event )
{
if (pixmap_drawarea1) {
g_object_unref (pixmap_drawarea1);
}
pixmap_drawarea1 = gdk_pixmap_new (widget->window,
widget->allocation.width, widget->allocation.height, -1);
gdk_draw_rectangle (pixmap_drawarea1, widget->style->white_gc,
TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
return (TRUE);
}
static gboolean drawarea1_timeout (GtkWidget *widget)
{
static GdkPoint points[1000]; /* test */
static int flag = 0;
int i;
int j;
int x1 = widget->allocation.width;
int y1 = widget->allocation.height;
if (pixmap_drawarea1 == NULL){
return(TRUE);
}
if (flag != 0){
gdk_draw_points(pixmap_drawarea1, widget->style->white_gc,
points, 1000);
}
k = k+1;
if( k > 4 ) k = 0;
for ( j = 0; j < 50; j++ )
{
for (i=0; i < 1000; i++) {
points[i].x = i % x1;
// points[i].y = i % y1;
points[i].y = j*5+k;
}
gdk_draw_points(pixmap_drawarea1, widget->style->white_gc,
points, 1000);
for (i=0; i < 1000; i++) {
points[i].x = i % x1;
// points[i].y = i % y1;
points[i].y = j*5+k+1;
}
gdk_draw_points(pixmap_drawarea1, widget->style->black_gc,
points, 1000);
}
gtk_widget_queue_draw_area (widget, 0, 0, x1, y1);
flag = 1;
return (TRUE);
}
/* Redraw the screen from the backing pixmap */
static gboolean drawarea1_expose_event( GtkWidget *widget,
GdkEventExpose *event )
{
gdk_draw_drawable (widget->window,
widget->style->bg_gc[GTK_WIDGET_STATE (widget)], pixmap_drawarea1,
event->area.x, event->area.y, event->area.x, event->area.y,
event->area.width, event->area.height);
return (FALSE);
}
void InitializeUserInterface ()
{
menuGroup = gtk_accel_group_new();
/* initialize main window */
window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window1), "NATURLAND UHLMANN
DISPLAY");
gtk_window_set_default_size (GTK_WINDOW (window1), 1024, 450);
// gtk_window_maximize (GTK_WINDOW (window1));
/* Connect the main window to the destroy and delete-event signals. */
g_signal_connect (G_OBJECT (window1), "destroy", G_CALLBACK
(destroy_window1), NULL);
g_signal_connect (G_OBJECT (window1), "delete_event", G_CALLBACK
(delete_event_window1), NULL);
vbox1 = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window1), vbox1);
frame1 = gtk_frame_new ("Random Points");
gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 2);
vbox2 = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (frame1), vbox2);
hbox2 = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox2), hbox2, TRUE, TRUE, 5);
/* Create the drawing area */
drawarea1 = gtk_drawing_area_new();
gtk_box_pack_start (GTK_BOX (hbox2), drawarea1, TRUE, TRUE, 2);
g_signal_connect (G_OBJECT (drawarea1), "expose_event", G_CALLBACK
(drawarea1_expose_event), (gpointer) window1);
g_timeout_add (100, (GSourceFunc) drawarea1_timeout, (gpointer)
drawarea1);
g_signal_connect (G_OBJECT (drawarea1), "configure_event",
G_CALLBACK (drawarea1_configure_event), (gpointer) window1);
gtk_window_add_accel_group( GTK_WINDOW(window1), menuGroup);
}
int main (int argc, char *argv[])
{
gtk_init (&argc, &argv);
InitializeMainSystem();
InitializeUserInterface();
gtk_widget_show_all (window1);
gtk_main ();
return (0);
}
//=====================
és a make
//==============
EXES = $(basename $(wildcard *.c))
CC = cc
CFLAGS = -Wall -g `pkg-config --cflags --libs gtk+-2.0`
all:
$(MAKE) $(EXES)
%: %.c
$(CC) $(CFLAGS) $@.c -o $@
clean:
rm -f $(EXES) *.o
//=======================
aját könyvtárában simán
terminálból fordítható és futtatható. :-)
Eddig az öröm.
Szeretném a programomba is beilleszteni
de a fordító kidobja már azon a soron:
GtkAccelGroup *menuGroup;
meg azok a sorok is sárosak
widget->style->white_gc
Gondolom nincs ilyen elem és hozzá függvény
sem, mert máshogy írták meg a GTK 3-ban.
Szöszmötölök,
de közben a dolog lassan a körmömre ég.
Találtam a GLADE-ban két új elemet
revelaer és drawingarea
jelenleg ezekkel próbálkozom.
Esetleg aki tudja milyen parancsok
is kellenek még ... ne tartsa magát vissza..
Tulajdonképpen
azt szeretném hogy jöjjön létre
egy bit-pixel tér az LCD-n
amit hasonlóképpen manipulálhatok
és legyen hozzá egy árnyék pixbuffer
amelyt feltöltve az adataimmal
egy kiírás hatására rákerüljön
az élő képre. Mindezt szimplán GTK3 alatt.
Vagy az is lehet infó, ha kiderül, rossz irányból
közelítettem erre a problémára.
Üdv István
2017-09-26 20:57 keltezéssel, Skandar Graun írta:
> Köszi.
>
> 2017-09-26 16:41 GMT+02:00 Bánhidi István <banhidi.istvan at gmail.com>:
>
>> Köszi
>>
>> Steve
>>
>> 2017. szept. 26. 15:55 ezt írta ("elight" <elight at gmail.hu>):
>>
>>> Sziasztok.
>>>
>>> Akinek esetleg égető szüksége lenne rá, most free:
>>> http://www.bitsdujour.com/software/linux-networking-cookbook
>>> -17-value-free-for-a-limited-time/src=not?bdj-uwid=027d6172
>>> -e870-484f-b08a-67b6ddd53dbb&utm_source=WantEmail&utm_
>>> medium=email&utm_content=linux-networking-cookbook-17-
>>> value-free-for-a-limited-time+Title&utm_campaign=2017-09-26
>>>
>>> Üdv István
>>> -----------------------------------------
>>> elektro[-flame|-etc]
>>>
>> -----------------------------------------
>> elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list