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?
space.gadget und der RenderHook
Moderator: OS4Welt-Team
- 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
Nein, Du holst Dir die richtigen Koordinaten direkt vom SpaceGadget im Renderhook. Und zwar so:
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.
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);
Re: space.gadget und der RenderHook
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?
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?
- 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
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.
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.
Re: space.gadget und der RenderHook
Es funktioniert ja mit SPACE_RenderBox und ich kann erstmal weitermachen.
Werde mich später nochmal durch die Dokumentation und die RKRMs wühlen.
Werde mich später nochmal durch die Dokumentation und die RKRMs wühlen.