Notification/Delegate, wenn sich Modfier ändern?

  • Original von Tom9811
    Jepp, entweder du bekommst ein weißes Rechteck als Rand oder anderen Kokolores.

    Trick:
    Das ganze erst einmal in eine Bitmap zeichnen und dann mit der richtigen Zeichenmethode ins fenster blitten. IIch kann es mal nachschauen, wenn es dich interessiert.

    Komisch - was ist denn das Problem? Ich hatte mal vor einiger Zeit ein Beispiel zu etwas anderem gepostet, das zwar kein Loch, aber ein Custom Shape Window hatte, und das funktionierte ganz toll mit Transparenz und NSBezierPaths.
    Multigrad - 360°-Produktfotografie für den Mac
  • Naja, bei dir ist das Fenster ja schon durchsichtig, du malst ja nur darauf. Was Tom9811 will ist ein Fenster mit einer View drauf, die ein Loch in das Fenster zeichnet. Und dies ist etwas umständlicher.
    There are 10 kinds of people in the world - those who understand binary
    and those who don't.
  • Original von Squart
    Naja, bei dir ist das Fenster ja schon durchsichtig, du malst ja nur darauf. Was Tom9811 will ist ein Fenster mit einer View drauf, die ein Loch in das Fenster zeichnet. Und dies ist etwas umständlicher.

    Hilft das hier?

    Quellcode

    1. - (void)drawRect:(NSRect)rect {
    2. NSRect bounds = [self bounds];
    3. [[NSColor redColor] set];
    4. [NSBezierPath fillRect:bounds];
    5. NSRect smaller = NSInsetRect(bounds,20,20);
    6. NSBezierPath* path = [NSBezierPath bezierPathWithOvalInRect:smaller];
    7. NSGraphicsContext* ctx = [NSGraphicsContext currentContext];
    8. [ctx saveGraphicsState];
    9. [ctx setCompositingOperation:NSCompositeClear];
    10. [path fill];
    11. [ctx restoreGraphicsState];
    12. }
    Alles anzeigen

    Oder habe ich etwas immer noch nicht verstanden?
    Multigrad - 360°-Produktfotografie für den Mac
  • Original von Tom9811Gesucht, gefunden. Meckere aber nicht über das Chaos. War halt eiine Spielerei


    Hehe... Das funzt ja schon mal. Aber wenn man mal das Fenster resized, dann hat man massive Grafikfehler. ;)

    edit2:
    Geht es jetzt auch irgendwie, dass man keinen "farbigen Rahmen" um den Kreis hat, sondern den normalen texturierten Fensterhintergrund?!?!

    edit:
    Bei dem von mattik nicht. ;)
  • Original von Tom9811
    Welche Graphifehler hast du denn? Das ist ja interessant!

    Kannst du mir mal Rechner, Graphikkarte und OS nennen?
    Ach und einen Screenshot bitte. Ich kann das hier nicht nachvollziehen.


    Vielleicht liegt es auch an meinem .nib. Musst sonst mal dein ganzes Projekt hochladen.

    OS X 10.4.6, Radeon9800, Dual PowerMac G4 1,25 FireWire800-Reihe.
  • Ah. Um nur ein Viereck transparent zu machen reicht auch:

    Quellcode

    1. - (void)drawRect:(NSRect)rect
    2. {
    3. NSRect bounds = [self bounds];
    4. [[NSColor clearColor] set];
    5. NSRectFill(bounds);
    6. }


    Das hier geht aber nicht

    Quellcode

    1. - (void)drawRect:(NSRect)rect
    2. {
    3. NSRect bounds = [self bounds];
    4. [[NSColor clearColor] set];
    5. [NSBezierPath fillRect:bounds];
    6. }
  • Nee, das geht offensichtlich nicht. NSRectFill kopiert stumpf RGBA, [NSBezierPath fillRect: ] nutzt ordentlich das Compositing des GraphicsContext. Mit NSCompositeCopy kann man nichts mehr nachträglich transparent machen - das ist in etwa so, als ob man Klarlack über ein Bild pinselt. Deshalb muss man eine andere Compositing-Operation nehmen (NSCompositeClear, NSCompositeOut o.ä.) - entweder (Toms Ansatz) die Form in ein NSImage machen und das rausschneiden oder halt direkt die Compositing Operation des GraphicsContext ändern.
    Multigrad - 360°-Produktfotografie für den Mac
  • Dein Rect ist ja ein Rechteck. Dieses kann in das Fenster geblittet werden. Wenn du jetzt eine "krumme" Form hast, dann kann das nicht geblittet werden. Es wird also immer "etwas mitgenommen" -> klappt nicht.

    Daher bin ich auch auf die Idee gekommen, dass mir erst einmal in einem Image schön zu machen.

    Mattiks Ansatz gefällt mir aber besser.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Notification/Delegate, wenn sich Modfier ändern?

    Original von MCDan
    Also mir ist nur die Methode:

    Quellcode

    1. - (void)flagsChanged:(NSEvent *)theEvent
    von NSResponder bekannt. Die verwende ich und damit klappt es sehr gut.


    Die muss dann aber in der Responder Chain sein? Ich habe jetzt einen Button gesubclassed, aber der reagiert da irgendwie nicht drauf.

    Alex
    The only thing that really worried me was the ether.