VirtualBox

Changeset 6482 in vbox


Ignore:
Timestamp:
Jan 24, 2008 2:29:40 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
27483
Message:

Mac OS X: Now the dock screen icon is painted in realtime. It uses the current aspect ratio of the vm screen and shows the running states overlay.

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxConsoleWnd.h

    r6474 r6482  
    7777
    7878    void setMask (const QRegion &aRegion);
     79
     80#ifdef Q_WS_MAC
     81    CGImageRef dockImageState () const;
     82#endif
    7983
    8084public slots:
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxUtils.h

    r6474 r6482  
    255255CGImageRef DarwinQPixmapFromMimeSourceToCGImage (const char *aSource);
    256256CGImageRef DarwinCreateDockBadge (const char *aSource);
    257 CGImageRef DarwinCreateDockPreview (VBoxFrameBuffer *aFrameBuffer);
     257CGImageRef DarwinCreateDockPreview (VBoxFrameBuffer *aFrameBuffer, CGImageRef aOverlayImage);
    258258OSStatus DarwinRegionHandler (EventHandlerCallRef aInHandlerCallRef, EventRef aInEvent, void *aInUserData);
    259259#endif /* Q_WS_MAC */
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp

    r6467 r6482  
    28082808            /* Update the dock icon if we are in the running state */
    28092809            if (isRunning())
    2810                 SetApplicationDockTileImage(::DarwinCreateDockPreview(mFrameBuf));
     2810                SetApplicationDockTileImage (::DarwinCreateDockPreview(mFrameBuf, mMainWnd->dockImageState ()));
    28112811#endif
    28122812            return;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp

    r6474 r6482  
    18981898    }
    18991899#ifdef Q_WS_MAC
    1900     if (1)//(element & DockTile)
    1901     {
    1902         //CGContextDrawImage
    1903         //HIViewDrawCGImage();
    1904         //CGImageAlphaInfo
    1905         CGImageRef img;
    1906         if (machine_state == CEnums::Running)
    1907             img = dockImgStateRunning;
    1908         else if (machine_state == CEnums::Paused)
    1909             img = dockImgStatePaused;
    1910         else if (machine_state == CEnums::Restoring)
    1911             img = dockImgStateRestoring;
    1912         else if (machine_state == CEnums::Saving)
    1913             img = dockImgStateSaving;
    1914         else
    1915             img = NULL;
    19161900        SetApplicationDockTileImage (dockImgOS);
     1901        CGImageRef img = dockImageState ();
    19171902        if (img)
    19181903            OverlayApplicationDockTileImage (img);
    1919     }
    19201904#endif
    19211905}
     
    21832167    return true;
    21842168}
     2169
     2170#ifdef Q_WS_MAC
     2171CGImageRef VBoxConsoleWnd::dockImageState () const
     2172{
     2173    CGImageRef img;
     2174    if (machine_state == CEnums::Running)
     2175        img = dockImgStateRunning;
     2176    else if (machine_state == CEnums::Paused)
     2177        img = dockImgStatePaused;
     2178    else if (machine_state == CEnums::Restoring)
     2179        img = dockImgStateRestoring;
     2180    else if (machine_state == CEnums::Saving)
     2181        img = dockImgStateSaving;
     2182    else
     2183        img = NULL;
     2184    return img;
     2185}
     2186#endif
    21852187
    21862188//
  • trunk/src/VBox/Frontends/VirtualBox/src/darwin/VBoxUtils-darwin.cpp

    r6474 r6482  
    136136 * @param   aFrameBuffer    The guest frame buffer.
    137137 */
    138 CGImageRef DarwinCreateDockPreview (VBoxFrameBuffer *aFrameBuffer)
     138CGImageRef DarwinCreateDockPreview (VBoxFrameBuffer *aFrameBuffer, CGImageRef aOverlayImage)
    139139{
    140140    CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
     
    143143    CGDataProviderRef dp = CGDataProviderCreateWithData (aFrameBuffer, aFrameBuffer->address(), aFrameBuffer->bitsPerPixel() / 8 * aFrameBuffer->width() * aFrameBuffer->height() , NULL);
    144144    CGImageRef ir = CGImageCreate (aFrameBuffer->width(), aFrameBuffer->height(), 8, 32, aFrameBuffer->bytesPerLine(), cs,
    145                                    kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host, dp, 0 /* decode */, 0 /* shouldInterpolate */,
     145                                   kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host, dp, 0, false,
    146146                                   kCGRenderingIntentDefault);
    147147
     
    153153    int targetWidth = 128;
    154154    int targetHeight = 128;
     155    int scaledWidth;
     156    int scaledHeight;
    155157    float aspect = static_cast<float>(aFrameBuffer->width()) / aFrameBuffer->height();
    156     CGRect rect;
    157158    if (aspect > 1.0)
    158159    {
    159         rect.origin.x = 0;
    160         rect.origin.y = (targetHeight - targetHeight / aspect) / 2;
    161         rect.size.width = targetWidth;
    162         rect.size.height = targetHeight / aspect;
     160        scaledWidth = targetWidth;
     161        scaledHeight = targetHeight / aspect;
    163162    }
    164163    else
    165164    {
    166         rect.origin.x = (targetWidth - targetWidth * aspect) / 2;
    167         rect.origin.y = 0;
    168         rect.size.width = targetWidth*aspect;
    169         rect.size.height = targetHeight;
     165        scaledWidth = targetWidth * aspect;
     166        scaledHeight = targetHeight;
    170167    }
    171 
     168    CGRect iconRect = CGRectMake ((targetWidth - scaledWidth) / 2.0,
     169                                  (targetHeight - scaledHeight) / 2.0,
     170                                  scaledWidth, scaledHeight);
    172171    /* Create a bitmap context to draw on */
    173172    CGImageRef dockImage = NULL;
     
    178177    {
    179178        CGContextRef context = CGBitmapContextCreate (bitmapData, targetWidth, targetHeight, 8, bitmapBytesPerRow, cs, kCGImageAlphaPremultipliedLast);
    180 
    181         /* Draw on the bitmap */
    182         CGContextDrawImage (context, rect, ir);
    183 
     179        /* rounded corners */
     180//        CGContextSetLineJoin (context, kCGLineJoinRound);
     181//        CGContextSetShadow (context, CGSizeMake(10, 5), 1);
     182//        CGContextSetAllowsAntialiasing (context, true);
     183        /* some little boarder */
     184        iconRect = CGRectInset (iconRect, 1, 1);
     185        /* gray stroke */
     186        CGContextSetRGBStrokeColor (context, 225.0/255.0, 218.0/255.0, 211.0/255.0, 1);
     187        iconRect = CGRectInset (iconRect, 6, 6);
     188        CGContextStrokeRectWithWidth (context, iconRect, 12);
     189        iconRect = CGRectInset (iconRect, 5, 5);
     190        /* black stroke */
     191        CGContextSetRGBStrokeColor (context, 0.0, 0.0, 0.0, 1.0);
     192        CGContextStrokeRectWithWidth (context, iconRect, 2);
     193        /* vm content */
     194        iconRect = CGRectInset (iconRect, 1, 1);
     195        CGContextDrawImage (context, iconRect, ir);
     196        /* the overlay image */
     197        if (aOverlayImage)
     198        {
     199            CGRect overlayRect = CGRectMake (targetWidth - CGImageGetWidth (aOverlayImage), 0, CGImageGetWidth (aOverlayImage), CGImageGetHeight (aOverlayImage));
     200            CGContextDrawImage (context, overlayRect, aOverlayImage);
     201        }
    184202        /* Create the preview image ref from the bitmap */
    185203        dockImage = CGBitmapContextCreateImage (context);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette