diff --git a/reactos/base/applications/imagesoft/En.rc b/reactos/base/applications/imagesoft/En.rc
index 4e8f9197a1d..a3c8fd8b403 100644
--- a/reactos/base/applications/imagesoft/En.rc
+++ b/reactos/base/applications/imagesoft/En.rc
@@ -77,18 +77,44 @@ BEGIN
END
-IDD_ABOUTBOX DIALOGEX 22,16,190,182
+IDD_ABOUTBOX DIALOGEX 22,16,210,182
CAPTION "About ImageSoft"
FONT 8,"Tahoma",0,0
STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
//EXSTYLE WS_EX_LAYERED
BEGIN
- LTEXT "ImageSoft v0.1\nCopyright (C) 2006\nby Ged Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 130, 26
+ LTEXT "ImageSoft v0.1\nCopyright (C) 2006\nThomas Weidenmueller (w3seek@reactos.org)\nGed Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 150, 36
PUSHBUTTON "Close", IDOK, 75, 162, 44, 15
ICON IDI_ICON, IDC_STATIC, 10, 10, 7, 30
- EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE
+ EDITTEXT IDC_LICENSE_EDIT, 8, 44, 194, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE
END
+
+IDD_IMAGE_PROP DIALOGEX 6,6,194,107
+CAPTION "Image Properties"
+FONT 8,"MS Sans Serif",0,0
+STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
+BEGIN
+ CONTROL "", IDC_IMAGETYPE, "ComboBox", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 50, 5, 76, 54
+ EDITTEXT IDC_RES_EDIT, 50, 22, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ EDITTEXT IDC_WIDTH_EDIT, 50, 38, 32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ EDITTEXT IDC_HEIGHT_EDIT, 50, 55,32, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ CONTROL "", IDC_UNIT, "ComboBox", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 50, 72, 54, 50
+ PUSHBUTTON "OK", IDOK, 134, 7, 54, 13
+ PUSHBUTTON "Cancel", IDCANCEL, 134, 27, 54, 13
+ LTEXT "Image type:", IDC_STATIC, 4, 7, 42, 9
+ LTEXT "Resolution:", IDC_STATIC, 4, 24, 42, 9
+ LTEXT "Width:", IDC_STATIC, 4, 40, 42, 9
+ LTEXT "Height:", IDC_STATIC, 4, 57, 42, 9
+ LTEXT "Unit:", IDC_STATIC, 4, 73, 42, 9
+ LTEXT "Image size:", IDC_STATIC, 4, 92, 42, 9
+ LTEXT "", IDC_RES_STAT, 86, 24, 40, 9
+ LTEXT "", IDC_WIDTH_STAT, 86, 40, 40, 9
+ LTEXT "", IDC_HEIGHT_STAT, 86, 57, 40, 9
+ LTEXT "", IDC_MEMORY, 54, 92, 54, 9
+END
+
+
/* floating toolbar */
IDD_TOOLBAR DIALOGEX 1, 19, 32, 112
STYLE WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_VISIBLE
@@ -116,12 +142,27 @@ BEGIN
IDS_APPNAME "ImageSoft"
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."
IDS_READY " Ready."
-
+
IDS_TOOLBAR_STANDARD "Standard"
IDS_TOOLBAR_TEST "Test"
IDS_IMAGE_NAME "Image %1!u!"
END
+/* imageprop.c */
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_IMAGE_MONOCHROME "Monochrome (1 bit)"
+ IDS_IMAGE_GREYSCALE "Greyscale (8 bit)"
+ IDS_IMAGE_PALETTE "Palette or 256 color (8 bit)"
+ IDS_IMAGE_TRUECOLOR "True color (24 bit)"
+
+ IDS_UNIT_CM "Cm"
+ IDS_UNIT_INCHES "Inches"
+ IDS_UNIT_PIXELS "Pixels"
+ IDS_UNIT_DOTSCM "Dots / Cm"
+ IDS_UNIT_DPI "DPI"
+END
+
/* Tooltips */
STRINGTABLE DISCARDABLE
BEGIN
diff --git a/reactos/base/applications/imagesoft/imagesoft.rbuild b/reactos/base/applications/imagesoft/imagesoft.rbuild
index 098e51b574e..e1bacae978c 100644
--- a/reactos/base/applications/imagesoft/imagesoft.rbuild
+++ b/reactos/base/applications/imagesoft/imagesoft.rbuild
@@ -18,6 +18,7 @@
comdlg32
about.c
+ imageprop.c
imagesoft.c
imgedwnd.c
mainwnd.c
diff --git a/reactos/base/applications/imagesoft/imgedwnd.c b/reactos/base/applications/imagesoft/imgedwnd.c
index 9939d898025..ab74006ced9 100644
--- a/reactos/base/applications/imagesoft/imgedwnd.c
+++ b/reactos/base/applications/imagesoft/imgedwnd.c
@@ -4,6 +4,7 @@ static const TCHAR szImageEditWndClass[] = TEXT("ImageSoftEditWndClass");
#define IMAGE_FRAME_SIZE 1
+
static VOID
EditWndUpdateScrollInfo(PEDIT_WND_INFO Info)
{
@@ -35,14 +36,37 @@ EditWndUpdateScrollInfo(PEDIT_WND_INFO Info)
static BOOL
InitEditWnd(PEDIT_WND_INFO Info)
{
+ HDC hDC;
+ LONG cxBitmap, cyBitmap;
+
Info->Zoom = 100;
if (Info->OpenInfo != NULL)
{
+ /* set bitmap dimensions */
+ cxBitmap = Info->OpenInfo->New.Width;
+ cyBitmap = Info->OpenInfo->New.Height;
+
+ /* create bitmap */
+ hDC = GetDC(Info->hSelf);
+ Info->hBitmap = CreateCompatibleBitmap(hDC, cxBitmap, cyBitmap);
+ Info->hDCMem = CreateCompatibleDC(hDC);
+ ReleaseDC(Info->hSelf, hDC);
+
+ if (!Info->hBitmap)
+ {
+ DeleteDC(Info->hDCMem);
+ return FALSE;
+ }
+
if (Info->OpenInfo->CreateNew)
{
+ /* what is this for? Does Info->OpenInfo become obsolete? */
Info->Width = Info->OpenInfo->New.Width;
Info->Height = Info->OpenInfo->New.Height;
+
+ SelectObject(Info->hDCMem, Info->hBitmap);
+ PatBlt(Info->hDCMem, 0, 0, cxBitmap, cxBitmap, WHITENESS);
}
else
{
@@ -90,7 +114,7 @@ ImageEditWndRepaint(PEDIT_WND_INFO Info,
HDC hDC,
LPPAINTSTRUCT lpps)
{
- /* FIXME */
+ BitBlt(hDC, 0, 0, Info->Width, Info->Height, Info->hDCMem, 0, 0, SRCCOPY);
}
static LRESULT CALLBACK
@@ -244,8 +268,8 @@ CreateImageEditWindow(struct _MAIN_WND_INFO *MainWnd,
WS_HSCROLL | WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
+ OpenInfo->New.Width,
+ OpenInfo->New.Height,
MainWnd->hMdiClient,
hInstance,
(LPARAM)Info);
@@ -275,8 +299,8 @@ InitImageEditWindowImpl(VOID)
wc.hIcon = LoadIcon(hInstance,
MAKEINTRESOURCE(IDI_ICON));
wc.hCursor = LoadCursor(NULL,
- IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
+ IDC_CROSS);
+ wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = szImageEditWndClass;
wc.hIconSm = (HICON)LoadImage(hInstance,
MAKEINTRESOURCE(IDI_ICON),
diff --git a/reactos/base/applications/imagesoft/mainwnd.c b/reactos/base/applications/imagesoft/mainwnd.c
index d89ee1345b6..5579d55f026 100644
--- a/reactos/base/applications/imagesoft/mainwnd.c
+++ b/reactos/base/applications/imagesoft/mainwnd.c
@@ -462,6 +462,7 @@ MainWndCommand(PMAIN_WND_INFO Info,
case ID_NEW:
{
OPEN_IMAGE_EDIT_INFO OpenInfo;
+ PIMAGE_PROP ImageProp = NULL;
LPTSTR lpCaption = NULL;
LoadAndFormatString(hInstance,
@@ -469,13 +470,27 @@ MainWndCommand(PMAIN_WND_INFO Info,
&lpCaption,
++Info->ImagesCreated);
- OpenInfo.CreateNew = TRUE;
- OpenInfo.New.Width = 400;
- OpenInfo.New.Height = 300;
+ ImageProp = (PIMAGE_PROP)DialogBox(hInstance,
+ MAKEINTRESOURCE(IDD_IMAGE_PROP),
+ Info->hSelf,
+ ImagePropDialogProc);
- CreateImageEditWindow(Info,
- lpCaption,
- &OpenInfo);
+ if (ImageProp != 0)
+ {
+ OpenInfo.CreateNew = TRUE;
+ OpenInfo.Type = ImageProp->Type;
+ OpenInfo.Resolution = ImageProp->Resolution;
+ OpenInfo.New.Width = ImageProp->Width;
+ OpenInfo.New.Height = ImageProp->Height;
+
+ HeapFree(ProcessHeap,
+ 0,
+ ImageProp);
+
+ CreateImageEditWindow(Info,
+ lpCaption,
+ &OpenInfo);
+ }
if (lpCaption != NULL)
LocalFree((HLOCAL)lpCaption);
diff --git a/reactos/base/applications/imagesoft/precomp.h b/reactos/base/applications/imagesoft/precomp.h
index 3071eca5fca..ddf0f93c0fe 100644
--- a/reactos/base/applications/imagesoft/precomp.h
+++ b/reactos/base/applications/imagesoft/precomp.h
@@ -39,11 +39,50 @@ INT_PTR CALLBACK AboutDialogProc(HWND hDlg,
WPARAM wParam,
LPARAM lParam);
+/* imageprop.c */
+typedef struct _IMAGE_PROP
+{
+ /* Canvas properties */
+ USHORT Type;
+ LONG Resolution;
+ /* size of drawing area */
+ LONG Width;
+ LONG Height;
+} IMAGE_PROP, *PIMAGE_PROP;
+
+INT_PTR CALLBACK
+ImagePropDialogProc(HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam);
+
+
/* imagesoft.c */
extern HINSTANCE hInstance;
extern HANDLE ProcessHeap;
/* imgedwnd.c */
+typedef enum
+{
+ tSelect = 0,
+ tMove,
+ tLasso,
+ tZoom,
+ tMagicWand,
+ tBrush,
+ tEraser,
+ tPencil,
+ tColorPick,
+ tStamp,
+ tFill,
+ tLine,
+ tPolyline,
+ tRectangle,
+ tRoundRectangle,
+ tPolygon,
+ tElipse,
+} TOOL;
+
typedef struct _OPEN_IMAGE_EDIT_INFO
{
BOOL CreateNew;
@@ -59,6 +98,8 @@ typedef struct _OPEN_IMAGE_EDIT_INFO
LPCTSTR lpFileName;
} Open;
};
+ USHORT Type;
+ LONG Resolution;
} OPEN_IMAGE_EDIT_INFO, *POPEN_IMAGE_EDIT_INFO;
typedef struct _EDIT_WND_INFO
@@ -66,6 +107,8 @@ typedef struct _EDIT_WND_INFO
MDI_EDITOR_TYPE MdiEditorType; /* Must be first member! */
HWND hSelf;
+ HBITMAP hBitmap;
+ HDC hDCMem;
struct _MAIN_WND_INFO *MainWnd;
struct _EDIT_WND_INFO *Next;
POINT ScrollPos;
@@ -73,11 +116,16 @@ typedef struct _EDIT_WND_INFO
POPEN_IMAGE_EDIT_INFO OpenInfo; /* Only valid during initialization */
- /* Bitmap size */
+ /* Canvas properties */
+ USHORT Type;
+ LONG Resolution;
+ /* size of drawing area */
LONG Width;
LONG Height;
+
} EDIT_WND_INFO, *PEDIT_WND_INFO;
+
BOOL CreateImageEditWindow(struct _MAIN_WND_INFO *MainWnd,
LPCTSTR lpCaption,
POPEN_IMAGE_EDIT_INFO OpenInfo);
diff --git a/reactos/base/applications/imagesoft/resource.h b/reactos/base/applications/imagesoft/resource.h
index 70400defeae..6b778385028 100644
--- a/reactos/base/applications/imagesoft/resource.h
+++ b/reactos/base/applications/imagesoft/resource.h
@@ -94,3 +94,27 @@
#define IDS_HINT_SYS_MAXIMIZE 21005
#define IDS_HINT_SYS_CLOSE 21006
#define IDS_HINT_SYS_NEXT 21007
+
+
+
+
+/* image property dialog */
+#define IDD_IMAGE_PROP 4000
+#define IDC_IMAGETYPE 4001
+#define IDC_RES_EDIT 4002
+#define IDC_WIDTH_EDIT 4003
+#define IDC_HEIGHT_EDIT 4004
+#define IDC_UNIT 4005
+#define IDC_RES_STAT 4006
+#define IDC_WIDTH_STAT 4007
+#define IDC_HEIGHT_STAT 4008
+#define IDC_MEMORY 4009
+#define IDS_IMAGE_MONOCHROME 4100
+#define IDS_IMAGE_GREYSCALE 4101
+#define IDS_IMAGE_PALETTE 4102
+#define IDS_IMAGE_TRUECOLOR 4103
+#define IDS_UNIT_CM 4104
+#define IDS_UNIT_INCHES 4105
+#define IDS_UNIT_PIXELS 4106
+#define IDS_UNIT_DOTSCM 4107
+#define IDS_UNIT_DPI 4108