space.gadget und der RenderHook

...für und mit Amiga OS4

Moderator: OS4Welt-Team

Antworten
Benutzeravatar
ZeroG
OS4Welt-Team
Beiträge: 2656
Registriert: 25. September 2009 18:19
Danksagung erhalten: 6 Mal

space.gadget und der RenderHook

Beitrag von ZeroG »

Hi,
ich habe hier ein kleines Programm das ein Fenster öffnet in dem, unter anderem, ein space.gadget sitzt in das ich ein Icon zeichnen möchte. Ich verwende dafür den RenderHook des space.gadgets was soweit auch klappt.
Allerdings passen die Koordinaten nicht. Ich zeichne immer ab den Koordinaten 0,0 des Fensters anstatt des Gadgets.

msg ist, wie es der Hook vorsieht, ein struct gpRender *, der RastPort in den ich zeichne nehme ich von msg->gpr_RPort.

In msg->gpr_GInfo->gi_Domain.Left und msg->gpr_GInfo->gi_Domain.Top sollten doch die Koordinaten des space.gadgets stehen oder?
Benutzeravatar
Cyborg
AmigaOS Entwickler
Beiträge: 3514
Registriert: 28. September 2009 11:10
Hat sich bedankt: 12 Mal
Danksagung erhalten: 34 Mal

Re: space.gadget und der RenderHook

Beitrag von Cyborg »

Nein, Du holst Dir die richtigen Koordinaten direkt vom SpaceGadget im Renderhook. Und zwar so:

Code: Alles auswählen

	struct IBox *ibox = NULL;
	IIntuition->GetAttr(SPACE_AreaBox, space, (uint32*)(APTR)&ibox);

...

	/* Render to window */
	IGraphics->BltBitMapTags(
		BLITA_Source,           myBitmap,
		BLITA_Dest,             msg->gpr_RPort,
		BLITA_SrcType,          BLITT_BITMAP,
		BLITA_DestType,         BLITT_RASTPORT,
		BLITA_Width,            MIN(spaceWidth, ibox->Width),
		BLITA_Height,           MIN(spaceHeight, ibox->Height),
		BLITA_DestX,            ibox->Left,
		BLITA_DestY,            ibox->Top,
		TAG_DONE);
spaceWidth und spaceHeight braucht man nicht unbedingt. In meinem Fall sollte das SpaceGadget eine feste Größe haben (eben in spaceWidth und spaceHeight festgelegt), aber um auf Nummer sicher zu gehen, nehme ich im BltBitMapTags() eben immer das Minimum aus gewünschtem und tatsächlichen Wert.
.. der SysOp hat immer recht :evil:

PGP Schlüssel verfügbar
Benutzeravatar
ZeroG
OS4Welt-Team
Beiträge: 2656
Registriert: 25. September 2009 18:19
Danksagung erhalten: 6 Mal

Re: space.gadget und der RenderHook

Beitrag von ZeroG »

Danke.
Ich hätte jetzt erwartet das der RenderHook so wichtige Daten als Argument übergeben bekommt und das SPACE_AreaBox (ist übrigens deprecated) und SPACE_RenderBox für Leute gedacht sind die den Hook nicht benutzten.

Wenn die Frage erlaubt ist:
Wofür sind dann die Angaben in msg->gpr_GInfo->gi_Domain.#? gedacht die ich irrtümlich benutzt habe?
Benutzeravatar
Cyborg
AmigaOS Entwickler
Beiträge: 3514
Registriert: 28. September 2009 11:10
Hat sich bedankt: 12 Mal
Danksagung erhalten: 34 Mal

Re: space.gadget und der RenderHook

Beitrag von Cyborg »

hmm .. kann sein, daß es tatsächlich in den Hookdaten steht. Ich habe ein SpaceGadget das letzte Mal vor einigen Jahren benutzt, daher stammt auch der Code.

Grundsätzlich hast Du natürlich recht. Allein für die Geschwindigkeit ist meine Methode nicht unbedingt die Beste.. aber sie funktionierte damals ausreichend gut.

Deine andere Frage kann ich jetzt so nicht fundiert beantworten, da der ganze Gadgetkram auch schon länger zurückliegt und schon immer nicht so einfach zu durchblicken war.
.. der SysOp hat immer recht :evil:

PGP Schlüssel verfügbar
Benutzeravatar
ZeroG
OS4Welt-Team
Beiträge: 2656
Registriert: 25. September 2009 18:19
Danksagung erhalten: 6 Mal

Re: space.gadget und der RenderHook

Beitrag von ZeroG »

Es funktioniert ja mit SPACE_RenderBox und ich kann erstmal weitermachen.
Werde mich später nochmal durch die Dokumentation und die RKRMs wühlen.
Antworten