COMDLG32: native color picker on mac os x

Žiga Željko ziga.zeljko at gmail.com
Mon Dec 23 11:00:23 CST 2013


Hello,

I have made a patch for comdlg32 on Mac OS X that replaces Wine's own color
picker dialog with the native one.
Bellow are the sources for colordlg.c, cocoa_colordlg.m and Makefile.in
(without comments).

-------------------- colordlg.c --------------------

static BOOL ChooseColor_CocoaCommon(COLORREF *color, BOOL init);

BOOL WINAPI ChooseColorW( CHOOSECOLORW *lpChCol )
{
  if (!lpChCol) return FALSE;
  return ChooseColor_CocoaCommon(&lpChCol->rgbResult, lpChCol->Flags &
CC_RGBINIT);
}

BOOL WINAPI ChooseColorA( LPCHOOSECOLORA lpChCol )
{
  if (!lpChCol) return FALSE;
  return ChooseColor_CocoaCommon(&lpChCol->rgbResult, lpChCol->Flags &
CC_RGBINIT);
}

struct RGBColor {
  unsigned short red;
  unsigned short green;
  unsigned short blue;
};

int cocoa_run_color_dialog_modal(struct RGBColor *color);

static BOOL ChooseColor_CocoaCommon(COLORREF *color, BOOL init) {
  struct RGBColor rgb = { 0, 0, 0 };
  if (init) {
    rgb.red = GetRValue(*color) * 257;
    rgb.green = GetGValue(*color) * 257;
    rgb.blue = GetBValue(*color) * 257;
  }
  BOOL ret = cocoa_run_color_dialog_modal(&rgb);
  if (ret) *color = RGB(rgb.red / 257, rgb.green / 257, rgb.blue / 257);
  return ret;
}

-------------------- cocoa_colordlg.m --------------------

#import <AppKit/AppKit.h>
#import <Carbon/Carbon.h>

int cocoa_run_color_dialog_modal(RGBColor *color) {
  __block int ret = 0;

  void (^block)(void) = ^{
    ret = GetColor((Point){ 0, 0 }, (const unsigned char *)"Color", color,
color);
  };

  if ([NSThread isMainThread]) block();
  else dispatch_sync(dispatch_get_main_queue(), block);

  return ret;
}

-------------------- Makefile.in --------------------

MODULE    = comdlg32.dll
IMPORTLIB = comdlg32
IMPORTS   = uuid shell32 shlwapi comctl32 winspool user32 gdi32 advapi32
DELAYIMPORTS = ole32
EXTRALIBS = -framework AppKit -framework Carbon

C_SRCS = \
    cdlg32.c \
    colordlg.c \
    filedlg.c \
    filedlg31.c \
    filedlgbrowser.c \
    finddlg.c \
    fontdlg.c \
    itemdlg.c \
    printdlg.c

RC_SRCS = comdlg32.rc

SVG_SRCS = \
    pd32_collate.svg \
    pd32_landscape.svg \
    pd32_nocollate.svg \
    pd32_portrait.svg

OBJC_SRCS = \
    cocoa_colordlg.m

IDL_R_SRCS = comdlg32_classes.idl

@MAKE_DLL_RULES@

------------------------------------------------------------

Any comments are welcome.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20131223/5f2da74c/attachment-0001.html>


More information about the wine-devel mailing list