amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > custom sizing gadget [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2010-04-15, 16:42 h

AGSzabo
Posts: 1663
User
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

[ - Answer - Quote - Direct link - ]

2010-04-15, 16:48 h

Thore
Posts: 2266
User
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...

[ - Answer - Quote - Direct link - ]

2010-04-15, 17:19 h

AGSzabo
Posts: 1663
User
@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. ]

[ - Answer - Quote - Direct link - ]

2010-04-15, 20:10 h

Thore
Posts: 2266
User
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?

[ - Answer - Quote - Direct link - ]

2010-04-15, 20:22 h

AGSzabo
Posts: 1663
User
@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. ]

[ - Answer - Quote - Direct link - ]

2010-04-15, 21:12 h

thomas
Posts: 7717
User
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. ]

[ - Answer - Quote - Direct link - ]

2010-04-15, 21:55 h

AGSzabo
Posts: 1663
User
@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

[ - Answer - Quote - Direct link - ]

2010-04-16, 08:17 h

Thore
Posts: 2266
User
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?

[ - Answer - Quote - Direct link - ]

2010-04-16, 08:28 h

AGSzabo
Posts: 1663
User
@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

[ - Answer - Quote - Direct link - ]

2010-04-16, 17:38 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2010-04-16, 20:38 h

AGSzabo
Posts: 1663
User
@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

[ - Answer - Quote - Direct link - ]

2010-04-16, 23:35 h

thomas
Posts: 7717
User
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/

[ - Answer - Quote - Direct link - ]

2010-04-17, 07:24 h

AGSzabo
Posts: 1663
User
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. ]

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > custom sizing gadget [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.