Jacek Caban : mshtml: Added IDM_FORECOLOR implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Nov 9 13:57:49 CST 2006


Module: wine
Branch: master
Commit: 40d31d869b4ddb667e2604ba7452c1b274f8680e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=40d31d869b4ddb667e2604ba7452c1b274f8680e

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Nov  9 10:47:10 2006 +0100

mshtml: Added IDM_FORECOLOR implementation.

---

 dlls/mshtml/olecmd.c        |   38 ++++++++++++++++++++++++++++++++++++--
 dlls/mshtml/tests/htmldoc.c |    1 +
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index b63af0f..28f7189 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -42,6 +42,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 #define NSCMD_BOLD "cmd_bold"
 #define NSCMD_ITALIC "cmd_italic"
 #define NSCMD_UNDERLINE "cmd_underline"
+#define NSCMD_FONTCOLOR "cmd_fontColor"
+
+#define NSSTATE_ATTRIBUTE "state_attribute"
 
 /**********************************************************
  * IOleCommandTarget implementation
@@ -381,6 +384,35 @@ static HRESULT exec_fontname(HTMLDocumen
     return S_OK;
 }
 
+static HRESULT exec_forecolor(HTMLDocument *This, VARIANT *in, VARIANT *out)
+{
+    TRACE("(%p)->(%p %p)\n", This, in, out);
+
+    if(in) {
+        if(V_VT(in) == VT_I4) {
+            nsICommandParams *nsparam = create_nscommand_params();
+            char color_str[10];
+
+            sprintf(color_str, "#%02x%02x%02x",
+                    V_I4(in)&0xff, (V_I4(in)>>8)&0xff, (V_I4(in)>>16)&0xff);
+
+            nsICommandParams_SetCStringValue(nsparam, NSSTATE_ATTRIBUTE, color_str);
+            do_ns_command(This->nscontainer, NSCMD_FONTCOLOR, nsparam);
+
+            nsICommandParams_Release(nsparam);
+        }else {
+            FIXME("unsupported in vt=%d\n", V_VT(in));
+        }
+    }
+
+    if(out) {
+        FIXME("unsupported out\n");
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
+}
+
 static HRESULT exec_fontsize(HTMLDocument *This, VARIANT *in, VARIANT *out)
 {
     FIXME("(%p)->(%p %p)\n", This, in, out);
@@ -658,8 +690,8 @@ static HRESULT WINAPI OleCommandTarget_Q
                 prgCmds[i].cmdf = query_edit_status(This, NSCMD_BOLD);
                 break;
             case IDM_FORECOLOR:
-                FIXME("CGID_MSHTML: IDM_FORECOLOR\n");
-                prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
+                TRACE("CGID_MSHTML: IDM_FORECOLOR\n");
+                prgCmds[i].cmdf = query_edit_status(This, NULL);
                 break;
             case IDM_ITALIC:
                 TRACE("CGID_MSHTML: IDM_ITALIC\n");
@@ -756,6 +788,8 @@ static HRESULT WINAPI OleCommandTarget_E
             if(pvaIn || pvaOut)
                 FIXME("unsupported arguments\n");
             return exec_bold(This);
+        case IDM_FORECOLOR:
+            return exec_forecolor(This, pvaIn, pvaOut);
         case IDM_ITALIC:
             if(pvaIn || pvaOut)
                 FIXME("unsupported arguments\n");
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 68e2a11..2ae2dbb 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -2042,6 +2042,7 @@ static void test_MSHTML_QueryStatus(IUnk
     test_QueryStatus(unk, &CGID_MSHTML, IDM_FONTNAME, cmdf);
     test_QueryStatus(unk, &CGID_MSHTML, IDM_FONTSIZE, cmdf);
     test_QueryStatus(unk, &CGID_MSHTML, IDM_BOLD, cmdf);
+    test_QueryStatus(unk, &CGID_MSHTML, IDM_FORECOLOR, cmdf);
     test_QueryStatus(unk, &CGID_MSHTML, IDM_ITALIC, cmdf);
     test_QueryStatus(unk, &CGID_MSHTML, IDM_UNDERLINE, cmdf);
 }




More information about the wine-cvs mailing list