|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 193 Wohnort: Frankreich
|
Verfasst am: 21.03.2024, 19:46 Titel: |
|
|
Wenn ich in Beispiel 3_14 (ToggleGadget) Knopf A drücke, kehrt seine Farbe nicht zur Normalität zurück. Es ist schwarz statt grau.
Oh, Entschuldigung. Ich sehe, es ist Absicht. |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 193 Wohnort: Frankreich
|
Verfasst am: 21.03.2024, 20:17 Titel: |
|
|
Adaption einer Animation, die ich im englischen Forum gepostet habe. Es funktioniert perfekt!
Code: |
' cairospiral.bas
' Uses sGUI 2 (https://www.freebasic-portal.de/downloads/sonstiges/sgui2-401.html)
#include "sGUI/sGUI.bas"
#include once "sGUI/Gadget_SimpleToggle.bas"
#include once "cairo/cairo.bi"
using sGUI
sGUIScreenRes 588, 480, 32
InitGUI
color Colors.Pen,Colors.BackGround
cls
dim as Gadget ptr tgl_a
tgl_a=AddToggleGadget(0,480,8,100,24,"Animate")
'SetSelect(tgl_a)
GadgetOn(tgl_a)
const IMAGE_W = 464
const IMAGE_H = 464
dim as any ptr image = imagecreate(IMAGE_W, IMAGE_H)
dim as any ptr pixels
imageinfo(image, IMAGE_W, IMAGE_H,,, pixels)
dim as long stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, IMAGE_W) ' https://www.freebasic.net/forum/viewtopic.php?p=215065#p215065
dim as cairo_surface_t ptr surface = cairo_image_surface_create_for_data(pixels, CAIRO_FORMAT_ARGB32, IMAGE_W, IMAGE_H, stride)
dim as cairo_t ptr context = cairo_create(surface)
const POINT_NUM = 180
const PI = 3.1415926535897932
sub DrawSpiral(surface as cairo_surface_t ptr, context as cairo_t ptr, angle_diff as double)
cairo_set_source_rgb(context, 1, 1, 1)
cairo_paint(context)
cairo_set_source_rgb(context, 0, 0, 0)
const POINT_RAD = 3
const RADIUS_MAX = 216
const CX = IMAGE_W \ 2
const CY = IMAGE_H \ 2
dim as double x, y
dim as double angle = 0
dim as double radius = 0
dim as double radius_diff = RADIUS_MAX / POINT_NUM
for i as integer = 1 to POINT_NUM
x = radius * cos(angle) + CX
y = radius * sin(angle) + CY
cairo_arc(context, x, y, POINT_RAD, 0, 2 * PI)
cairo_fill(context)
angle += angle_diff
radius += radius_diff
next i
end sub
dim as double angle_diff = 0
const ANGLE_DIFF_DIFF = (PI / 180) / POINT_NUM
const DELAY = 10
dim animate as integer = 0
screenlock()
DrawSpiral(surface, context, angle_diff)
put (8, 8), image, PSET
angle_diff += ANGLE_DIFF_DIFF
screenunlock()
do
'sleep 1
sleep(DELAY)
MasterControlProgram
if GADGETMESSAGE then
select case GADGETMESSAGE
case tgl_a
animate = GetSelect(tgl_a)
end select
end if
if animate then
screenlock()
DrawSpiral(surface, context, angle_diff)
put (8, 8), image, PSET
angle_diff += ANGLE_DIFF_DIFF
screenunlock()
end if
loop until SCREENCLOSEBUTTON
cairo_destroy(context)
cairo_surface_destroy(surface)
imagedestroy image
|
|
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 28.03.2024, 16:12 Titel: |
|
|
oh, danke Roland fürs Testen. Ich musste erstmal recherchieren wie und wo ich cairo.dll und cairo.lib (.a) her bekomme... ja, funktioniert 32bit only?
..und ja, das Toggle Gadget ist eigentlich nichts anderes als ein "Checkmark"
Mutton |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 564 Wohnort: Jüterbog
|
Verfasst am: 30.09.2024, 18:47 Titel: |
|
|
Etwas Produktpflege
Der alten sGUI hab ich das BitmapFontSystem aus sGUI2 verpasst.
Das Interface ist absolut gleich geblieben, mit all seinen Macken.
Wer noch alte Projekte damit herumliegen hat und nicht allzuviel selbst daran herumgeschraubt hat, sollte den sGUI Ordner fast problemlos wechseln können.
Mutton |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 193 Wohnort: Frankreich
|
Verfasst am: 02.10.2024, 16:39 Titel: |
|
|
Interessant. Danke! |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|