basic dialog for setting canvas properties.
authorGed Murphy <gedmurphy@reactos.org>
Mon, 6 Mar 2006 19:16:04 +0000 (19:16 +0000)
committerGed Murphy <gedmurphy@reactos.org>
Mon, 6 Mar 2006 19:16:04 +0000 (19:16 +0000)
svn path=/trunk/; revision=21238

reactos/base/applications/imagesoft/En.rc
reactos/base/applications/imagesoft/imagesoft.rbuild
reactos/base/applications/imagesoft/imgedwnd.c
reactos/base/applications/imagesoft/mainwnd.c
reactos/base/applications/imagesoft/precomp.h
reactos/base/applications/imagesoft/resource.h

index 4e8f919..a3c8fd8 100644 (file)
@@ -77,18 +77,44 @@ BEGIN
 END\r
 \r
 \r
-IDD_ABOUTBOX DIALOGEX 22,16,190,182\r
+IDD_ABOUTBOX DIALOGEX 22,16,210,182\r
 CAPTION "About ImageSoft"\r
 FONT 8,"Tahoma",0,0\r
 STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME\r
 //EXSTYLE WS_EX_LAYERED\r
 BEGIN\r
-  LTEXT "ImageSoft v0.1\nCopyright (C) 2006\nby Ged Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 130, 26\r
+  LTEXT "ImageSoft v0.1\nCopyright (C) 2006\nThomas Weidenmueller (w3seek@reactos.org)\nGed Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 150, 36\r
   PUSHBUTTON "Close", IDOK, 75, 162, 44, 15\r
   ICON IDI_ICON, IDC_STATIC, 10, 10, 7, 30\r
-  EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE\r
+  EDITTEXT IDC_LICENSE_EDIT, 8, 44, 194, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE\r
 END\r
 \r
+\r
+IDD_IMAGE_PROP DIALOGEX 6,6,194,107\r
+CAPTION "Image Properties"\r
+FONT 8,"MS Sans Serif",0,0\r
+STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME\r
+BEGIN\r
+  CONTROL "", IDC_IMAGETYPE, "ComboBox", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 50, 5, 76, 54\r
+  EDITTEXT IDC_RES_EDIT, 50, 22, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP\r
+  EDITTEXT IDC_WIDTH_EDIT, 50, 38, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP\r
+  EDITTEXT IDC_HEIGHT_EDIT, 50, 55,32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP\r
+  CONTROL "", IDC_UNIT, "ComboBox", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 50, 72, 54, 50\r
+  PUSHBUTTON "OK", IDOK, 134, 7, 54, 13\r
+  PUSHBUTTON "Cancel", IDCANCEL, 134, 27, 54, 13\r
+  LTEXT "Image type:", IDC_STATIC, 4, 7, 42, 9\r
+  LTEXT "Resolution:", IDC_STATIC, 4, 24, 42, 9\r
+  LTEXT "Width:", IDC_STATIC, 4, 40, 42, 9\r
+  LTEXT "Height:", IDC_STATIC, 4, 57, 42, 9\r
+  LTEXT "Unit:", IDC_STATIC, 4, 73, 42, 9\r
+  LTEXT "Image size:", IDC_STATIC, 4, 92, 42, 9\r
+  LTEXT "", IDC_RES_STAT, 86, 24, 40, 9\r
+  LTEXT "", IDC_WIDTH_STAT, 86, 40, 40, 9\r
+  LTEXT "", IDC_HEIGHT_STAT, 86, 57, 40, 9\r
+  LTEXT "", IDC_MEMORY, 54, 92, 54, 9\r
+END\r
+\r
+\r
 /* floating toolbar */\r
 IDD_TOOLBAR DIALOGEX 1, 19, 32, 112\r
 STYLE WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_VISIBLE\r
@@ -116,12 +142,27 @@ BEGIN
   IDS_APPNAME "ImageSoft"\r
   IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."\r
   IDS_READY   " Ready."\r
-  \r
+\r
   IDS_TOOLBAR_STANDARD "Standard"\r
   IDS_TOOLBAR_TEST "Test"\r
   IDS_IMAGE_NAME "Image %1!u!"\r
 END\r
 \r
+/* imageprop.c */\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+  IDS_IMAGE_MONOCHROME "Monochrome (1 bit)"\r
+  IDS_IMAGE_GREYSCALE  "Greyscale (8 bit)"\r
+  IDS_IMAGE_PALETTE    "Palette or 256 color (8 bit)"\r
+  IDS_IMAGE_TRUECOLOR  "True color (24 bit)"\r
+\r
+  IDS_UNIT_CM "Cm"\r
+  IDS_UNIT_INCHES "Inches"\r
+  IDS_UNIT_PIXELS "Pixels"\r
+  IDS_UNIT_DOTSCM "Dots / Cm"\r
+  IDS_UNIT_DPI "DPI"\r
+END\r
+\r
 /* Tooltips */\r
 STRINGTABLE DISCARDABLE\r
 BEGIN\r
index 098e51b..e1bacae 100644 (file)
@@ -18,6 +18,7 @@
                <library>comdlg32</library>
                <compilationunit name="unit.c">
                        <file>about.c</file>
+                       <file>imageprop.c</file>
                        <file>imagesoft.c</file>
                        <file>imgedwnd.c</file>
                        <file>mainwnd.c</file>
index 9939d89..ab74006 100644 (file)
@@ -4,6 +4,7 @@ static const TCHAR szImageEditWndClass[] = TEXT("ImageSoftEditWndClass");
 \r
 #define IMAGE_FRAME_SIZE    1\r
 \r
+\r
 static VOID\r
 EditWndUpdateScrollInfo(PEDIT_WND_INFO Info)\r
 {\r
@@ -35,14 +36,37 @@ EditWndUpdateScrollInfo(PEDIT_WND_INFO Info)
 static BOOL\r
 InitEditWnd(PEDIT_WND_INFO Info)\r
 {\r
+    HDC hDC;\r
+    LONG cxBitmap, cyBitmap;\r
+\r
     Info->Zoom = 100;\r
 \r
     if (Info->OpenInfo != NULL)\r
     {\r
+        /* set bitmap dimensions */\r
+        cxBitmap = Info->OpenInfo->New.Width;\r
+        cyBitmap = Info->OpenInfo->New.Height;\r
+\r
+        /* create bitmap */\r
+        hDC = GetDC(Info->hSelf);\r
+        Info->hBitmap = CreateCompatibleBitmap(hDC, cxBitmap, cyBitmap);\r
+        Info->hDCMem  = CreateCompatibleDC(hDC);\r
+        ReleaseDC(Info->hSelf, hDC);\r
+\r
+        if (!Info->hBitmap)\r
+        {\r
+            DeleteDC(Info->hDCMem);\r
+            return FALSE;\r
+        }\r
+\r
         if (Info->OpenInfo->CreateNew)\r
         {\r
+            /* what is this for? Does Info->OpenInfo become obsolete? */\r
             Info->Width = Info->OpenInfo->New.Width;\r
             Info->Height = Info->OpenInfo->New.Height;\r
+\r
+            SelectObject(Info->hDCMem, Info->hBitmap);\r
+            PatBlt(Info->hDCMem, 0, 0, cxBitmap, cxBitmap, WHITENESS);\r
         }\r
         else\r
         {\r
@@ -90,7 +114,7 @@ ImageEditWndRepaint(PEDIT_WND_INFO Info,
                     HDC hDC,\r
                     LPPAINTSTRUCT lpps)\r
 {\r
-    /* FIXME */\r
+    BitBlt(hDC, 0, 0, Info->Width, Info->Height, Info->hDCMem, 0, 0, SRCCOPY);\r
 }\r
 \r
 static LRESULT CALLBACK\r
@@ -244,8 +268,8 @@ CreateImageEditWindow(struct _MAIN_WND_INFO *MainWnd,
                                      WS_HSCROLL | WS_VSCROLL,\r
                                      CW_USEDEFAULT,\r
                                      CW_USEDEFAULT,\r
-                                     CW_USEDEFAULT,\r
-                                     CW_USEDEFAULT,\r
+                                     OpenInfo->New.Width,\r
+                                     OpenInfo->New.Height,\r
                                      MainWnd->hMdiClient,\r
                                      hInstance,\r
                                      (LPARAM)Info);\r
@@ -275,8 +299,8 @@ InitImageEditWindowImpl(VOID)
     wc.hIcon = LoadIcon(hInstance,\r
                         MAKEINTRESOURCE(IDI_ICON));\r
     wc.hCursor = LoadCursor(NULL,\r
-                            IDC_ARROW);\r
-    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);\r
+                            IDC_CROSS);\r
+    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);\r
     wc.lpszClassName = szImageEditWndClass;\r
     wc.hIconSm = (HICON)LoadImage(hInstance,\r
                                   MAKEINTRESOURCE(IDI_ICON),\r
index d89ee13..5579d55 100644 (file)
@@ -462,6 +462,7 @@ MainWndCommand(PMAIN_WND_INFO Info,
         case ID_NEW:\r
         {\r
             OPEN_IMAGE_EDIT_INFO OpenInfo;\r
+            PIMAGE_PROP ImageProp = NULL;\r
             LPTSTR lpCaption = NULL;\r
 \r
             LoadAndFormatString(hInstance,\r
@@ -469,13 +470,27 @@ MainWndCommand(PMAIN_WND_INFO Info,
                                 &lpCaption,\r
                                 ++Info->ImagesCreated);\r
 \r
-            OpenInfo.CreateNew = TRUE;\r
-            OpenInfo.New.Width = 400;\r
-            OpenInfo.New.Height = 300;\r
+            ImageProp = (PIMAGE_PROP)DialogBox(hInstance,\r
+                                               MAKEINTRESOURCE(IDD_IMAGE_PROP),\r
+                                               Info->hSelf,\r
+                                               ImagePropDialogProc);\r
 \r
-            CreateImageEditWindow(Info,\r
-                                  lpCaption,\r
-                                  &OpenInfo);\r
+            if (ImageProp != 0)\r
+            {\r
+                OpenInfo.CreateNew = TRUE;\r
+                OpenInfo.Type = ImageProp->Type;\r
+                OpenInfo.Resolution = ImageProp->Resolution;\r
+                OpenInfo.New.Width = ImageProp->Width;\r
+                OpenInfo.New.Height = ImageProp->Height;\r
+\r
+                HeapFree(ProcessHeap,\r
+                         0,\r
+                         ImageProp);\r
+\r
+                CreateImageEditWindow(Info,\r
+                                      lpCaption,\r
+                                      &OpenInfo);\r
+            }\r
 \r
             if (lpCaption != NULL)\r
                 LocalFree((HLOCAL)lpCaption);\r
index 3071eca..ddf0f93 100644 (file)
@@ -39,11 +39,50 @@ INT_PTR CALLBACK AboutDialogProc(HWND hDlg,
                                  WPARAM wParam,\r
                                  LPARAM lParam);\r
 \r
+/* imageprop.c */\r
+typedef struct _IMAGE_PROP\r
+{\r
+    /* Canvas properties */\r
+    USHORT Type;\r
+    LONG Resolution;\r
+    /* size of drawing area */\r
+    LONG Width;\r
+    LONG Height;\r
+} IMAGE_PROP, *PIMAGE_PROP;\r
+\r
+INT_PTR CALLBACK\r
+ImagePropDialogProc(HWND hDlg,\r
+                    UINT message,\r
+                    WPARAM wParam,\r
+                    LPARAM lParam);\r
+\r
+\r
 /* imagesoft.c */\r
 extern HINSTANCE hInstance;\r
 extern HANDLE ProcessHeap;\r
 \r
 /* imgedwnd.c */\r
+typedef enum\r
+{\r
+    tSelect = 0,\r
+    tMove,\r
+    tLasso,\r
+    tZoom,\r
+    tMagicWand,\r
+    tBrush,\r
+    tEraser,\r
+    tPencil,\r
+    tColorPick,\r
+    tStamp,\r
+    tFill,\r
+    tLine,\r
+    tPolyline,\r
+    tRectangle,\r
+    tRoundRectangle,\r
+    tPolygon,\r
+    tElipse,\r
+} TOOL;\r
+\r
 typedef struct _OPEN_IMAGE_EDIT_INFO\r
 {\r
     BOOL CreateNew;\r
@@ -59,6 +98,8 @@ typedef struct _OPEN_IMAGE_EDIT_INFO
             LPCTSTR lpFileName;\r
         } Open;\r
     };\r
+    USHORT Type;\r
+    LONG Resolution;\r
 } OPEN_IMAGE_EDIT_INFO, *POPEN_IMAGE_EDIT_INFO;\r
 \r
 typedef struct _EDIT_WND_INFO\r
@@ -66,6 +107,8 @@ typedef struct _EDIT_WND_INFO
     MDI_EDITOR_TYPE MdiEditorType; /* Must be first member! */\r
 \r
     HWND hSelf;\r
+    HBITMAP hBitmap;\r
+    HDC hDCMem;\r
     struct _MAIN_WND_INFO *MainWnd;\r
     struct _EDIT_WND_INFO *Next;\r
     POINT ScrollPos;\r
@@ -73,11 +116,16 @@ typedef struct _EDIT_WND_INFO
 \r
     POPEN_IMAGE_EDIT_INFO OpenInfo; /* Only valid during initialization */\r
 \r
-    /* Bitmap size */\r
+    /* Canvas properties */\r
+    USHORT Type;\r
+    LONG Resolution;\r
+    /* size of drawing area */\r
     LONG Width;\r
     LONG Height;\r
+\r
 } EDIT_WND_INFO, *PEDIT_WND_INFO;\r
 \r
+\r
 BOOL CreateImageEditWindow(struct _MAIN_WND_INFO *MainWnd,\r
                            LPCTSTR lpCaption,\r
                            POPEN_IMAGE_EDIT_INFO OpenInfo);\r
index 70400de..6b77838 100644 (file)
 #define IDS_HINT_SYS_MAXIMIZE 21005\r
 #define IDS_HINT_SYS_CLOSE    21006\r
 #define IDS_HINT_SYS_NEXT     21007\r
+\r
+\r
+\r
+\r
+/* image property dialog */\r
+#define IDD_IMAGE_PROP      4000\r
+#define IDC_IMAGETYPE       4001\r
+#define IDC_RES_EDIT        4002\r
+#define IDC_WIDTH_EDIT      4003\r
+#define IDC_HEIGHT_EDIT     4004\r
+#define IDC_UNIT            4005\r
+#define IDC_RES_STAT        4006\r
+#define IDC_WIDTH_STAT      4007\r
+#define IDC_HEIGHT_STAT     4008\r
+#define IDC_MEMORY          4009\r
+#define IDS_IMAGE_MONOCHROME 4100\r
+#define IDS_IMAGE_GREYSCALE 4101\r
+#define IDS_IMAGE_PALETTE   4102\r
+#define IDS_IMAGE_TRUECOLOR 4103\r
+#define IDS_UNIT_CM         4104\r
+#define IDS_UNIT_INCHES     4105\r
+#define IDS_UNIT_PIXELS     4106\r
+#define IDS_UNIT_DOTSCM     4107\r
+#define IDS_UNIT_DPI        4108\r