amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > custom sizing gadget [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

15.04.2010, 16:42 Uhr

AGSzabo
Posts: 1663
Nutzer
hallo,

ich hab mal zum spass versucht ein eigenes windowsizing-gadget zu machen. damit gabs folgende probleme:

- unter os 3.1 springt die maus deutlich richtung oben links wenn man das gadget clickt, die taste gedrück hält, das fenster verkleinert und den button wieder los lässt. im augenblick des loslassens springt die maus. unter os 4.1 besteht dieses problem nicht.

- während dem ziehen der fenstergröße flimmert das rechteck in dem das gagdet sich unsichtbar befindet.

kann man da was machen?

grüsse,
ags
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Antworten - Zitieren - Direktlink - ]

15.04.2010, 16:48 Uhr

Thore
Posts: 2266
Nutzer
Kommt auf Deine Implementierung an =)
Wie hast Du das Gadget gemacht? Einfach in den Rastport gemalt, oder ein eigenes Gadget an die Gadgetliste gehängt und das Fenster malen lassen?
Verwendest Du API Funktionen um das Fenster zu vergrößern/verkleinern oder hackst Du die Werte direkt?
Oder hast Du das Gadget einfach mit VisualPrefs umgemalt?

Das Flimmern kannst Du mit einem Doublebuffer lösen.

Ich denk uns fehlen Infos um dir helfen zu können...

[ - Antworten - Zitieren - Direktlink - ]

15.04.2010, 17:19 Uhr

AGSzabo
Posts: 1663
Nutzer
@Thore:

ok also:

- das gadget wird erstmal noch garnicht gemalt, es ist und bleibt auf GADGHONE gesetzt. später soll ein icon mit transparenz an die stelle kommen, das immer zusammen mit dem fensterinhalt dahin gemalt wird wenn sich die größe ändert.

- es ist ein eigenes gadget vom typ SIZING in die fensterecke gehängt, geht es auch ohne?

- das fenster wird durch das gadget vergrößert oder verkleinert. sollte ich es irgendwie selber machen?

- kein visualprefs

- ich habe mein eigenes doublebuffering das bei bedarf wenn was gemalt wird in einen off-rastport malt und den dann auf einmal ins fenster kopiert. gibts auch ein system-doublebuffering? das hab ich noch nicht erforscht. wie geht das?

ok das sind die antworten
ags
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ Dieser Beitrag wurde von AGSzabo am 15.04.2010 um 17:23 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

15.04.2010, 20:10 Uhr

Thore
Posts: 2266
Nutzer
Ok, daß Du die Funktionen nutzt, die vom System bereitgestellt werden, und auch die Fenster-Events nutzt, ist soweit richtig.
Daß es ein DoubleBuffer für eigene Gadgets systemseitig gibt, weiß ich nicht, aber ich denke mal nicht. Daher ist der eigene DoubleBuffer ok.
Zeige dein Gadget mal an, und schau obs dann immer noch flimmert.

Warum der Mauszeiger springt kann ich mit diesen Infos leider nicht beantworten. Setzt du irgendwie den Zeiger nach einem Fenster-Event neu?

[ - Antworten - Zitieren - Direktlink - ]

15.04.2010, 20:22 Uhr

AGSzabo
Posts: 1663
Nutzer
@Thore:

da gibts nix anzuzeigen, zumindest nicht gadgetseitig. ich möchte ja, dass das gadget von intuition aus unsichtbar ist, um dann meine eigene grafik an dessen stelle zu setzen. davon würde das flimmern nicht besser werden. ich male ja jetzt schon dauernd das fensterhintergrund muster dahin. es sieht so aus als ob das gagdget trotz dass es unsichbar ist, einen eigenen layer hat?

den sprung konnte ich wahrscheinlich damit beheben dass ich zusätzlich zum WA_SizeGadget auch das WA_SizeBBottom auf FALSE gesetzt habe. ...

grüsse,
ags
--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ Dieser Beitrag wurde von AGSzabo am 15.04.2010 um 20:25 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

15.04.2010, 21:12 Uhr

thomas
Posts: 7717
Nutzer
Das Größengadget von PicShow sieht so aus:

struct Gadget sizegad = {&depthgad, -9, -9, 10, 10, GFLG_GADGHNONE | GFLG_RELBOTTOM | GFLG_RELRIGHT, GACT_IMMEDIATE, GTYP_SIZING, NULL, NULL, NULL, 0, NULL, 0, NULL};

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ Dieser Beitrag wurde von thomas am 15.04.2010 um 21:13 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

15.04.2010, 21:55 Uhr

AGSzabo
Posts: 1663
Nutzer
@thomas:

ja, genau so habe ich es gemacht. man sieht halt da wo das gagdet ist eine aussparung im background-pattern während man das fester größer zieht. evtl würde ein backfill hook funktionieren...

ags
--
Sam mini os4.1 upd. 1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Antworten - Zitieren - Direktlink - ]

16.04.2010, 08:17 Uhr

Thore
Posts: 2266
Nutzer
Das ist auch der richtige Weg wie Thomas es beschreibt. (Manchmal gibt ein Blick in die RKM auch ein aha-Effekt....)
Kannst Du uns informieren ob dein Hook zum Zeichnen Wirkung zeigt?

[ - Antworten - Zitieren - Direktlink - ]

16.04.2010, 08:28 Uhr

AGSzabo
Posts: 1663
Nutzer
@Thore:

oh jeh, da müsste ich das ganze gadget per tags erzeugen? im moment besteht es aus einer statischen "alten" gadget struktur. ich befürchte auch dass der hook wenig nützt weil er korrekterweise aufgerufen werden müsste nachdem das fenster sich neu zeichnet. wird aber höchstwahrscheinlich zuerst aufgerufen so dass das fenster die gadget grafik (icon) wieder übermalt.

ags
--
Sam mini os4.1 upd. 1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Antworten - Zitieren - Direktlink - ]

16.04.2010, 17:38 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von AGSzabo:
ich male ja jetzt schon dauernd das fensterhintergrund muster dahin. es sieht so aus als ob das gagdget trotz dass es unsichbar ist, einen eigenen layer hat?

Gadgets haben keine Layer. Nur der Rahmen hat einen, wenn Dein Fenster vom Typ GZZ ist.
Zitat:
Original von AGSzabo:
@thomas:
ja, genau so habe ich es gemacht.

Wenn Du es so gemacht hast wie thomas, dann fehlt bei Dir das Flag, dass es sich um ein Border-Gadget handeln soll.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

16.04.2010, 20:38 Uhr

AGSzabo
Posts: 1663
Nutzer
@Holger:

das fenster ist GZZ. im rahmen soll meine "sizing-ecke" aber nicht sein sondern genau das will ich verhindern dass das fenster unten oder rechts einen breiteren rahmen hat. mein sizer soll also IM fenster sitzen.

ags
--
Sam mini os4.1 upd. 1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Antworten - Zitieren - Direktlink - ]

16.04.2010, 23:35 Uhr

thomas
Posts: 7717
Nutzer
Zitat:
Original von AGSzabo:
- während dem ziehen der fenstergröße flimmert das rechteck in dem das gagdet sich unsichtbar befindet.


Während des Ziehens !!

Das Problem ist, daß du selber zeichnest und nicht einen Backfill-Hook benutzt.

Beim Vergrößern des Fensters wird zunächst alles, was dem System bekannt ist, mit Systemmitteln neu gezeichnet und dann die IDCMP_NEWSIZE-Message versendet. Erst dann kommst du und zeichnest neu, was das Betriebssystem bereits mit der Hintergrundfarbe gefüllt hat.

Wenn du einen Hook benutzt, ruft das Betriebssystem dich auf und zeichnet selber nichts.

Eine Alternative wäre, dass du dem Betriebssystem sagst, es soll gar nichts zeichnen, weil du ohnehin alles selber machst. Das geht mit WA_BackFill,LAYERS_NOBACKFILL. Dann mußt du aber dafür sorgen, daß du dich wirklich nirgends darauf verlassen hast, daß das Betriebssystem das Fenster mit der Hintergrundfarbe füllt, denn das tut es dann nicht mehr.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

17.04.2010, 07:24 Uhr

AGSzabo
Posts: 1663
Nutzer
du bist großartig! es ... FUNKTIONIERT! :-)


ps: und nicht nur das, mein ganzes gui hat sich verschnellert und sieht nun beim größe ändern besser aus!

--
Sam mini os4.1 upd. 1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ Dieser Beitrag wurde von AGSzabo am 17.04.2010 um 07:28 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > custom sizing gadget [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.