Compare commits

...

222 Commits

Author SHA1 Message Date
Joachim Henze
f362ced23c [NETSTAT] pragma once, reorder, fix pl-PL.rc
- add a pragma once into the header
- order -o options alphabetically also for the global variables, not only in usage-help
- pl-PL.rc: fix wrong alignment of IDS_ETHERNET_THEADER and its data for
- pl-PL.rc: also don't pad the data with 2 spaces here in the beginning, which
            we don't do in any other locale, and MS netstat also doesn't do that here.
            pl-PL.rc most likely got this wrong because it was created while en-US wasn't finished yet.
2023-07-06 02:26:29 +02:00
Katayama Hirofumi MZ
a1f7b3f2dd [MSPAINT] s/IsGuidEqual/::IsEqualGUID/
CORE-18867
2023-07-06 08:24:46 +09:00
Stanislav Motylkov
818908d9d3 [NETSTAT] Fix Traditional Chinese (zh-TW) translation
Take double-width characters into account. Addendum to 06ca384f78.
2023-07-06 01:56:14 +03:00
Stanislav Motylkov
5df6963754 [NETSTAT] Add Russian (ru-RU) translation 2023-07-06 01:41:41 +03:00
Stanislav Motylkov
06ca384f78 [NETSTAT] Fix some unintuitive formatting in translations 2023-07-06 01:30:06 +03:00
Stanislav Motylkov
af18a970a9 [MSPAINT] Update Russian (ru-RU) translation 2023-07-06 01:04:13 +03:00
Stanislav Motylkov
fa4c72b79e [MSPAINT] Improve wording of IDS_SAVEERROR
Addendum to 3e23cdf9e. CORE-18867
2023-07-06 01:02:33 +03:00
Joachim Henze
8ef47d2e5e [NETSTAT] Optimize a bit (#5405)
in netstat.c 100% of the calls to
    DisplayTableHeader();
have in the exact line beforehand a call to
    ConResPuts(StdOut, IDS_ACTIVE_CONNECT);

So let's fuse them.

Also fix a superfluous space in the *.rc files before it will get duplicated
a thousand times.
2023-07-05 20:52:04 +02:00
Katayama Hirofumi MZ
3e23cdf9ee [MSPAINT] Some bug fixes on loading/saving files (#5385)
- Display a correct error message on failing to save a file.
- Don't confuse the main file info and the non-main file info.
- Rename ShowFileLoadError as ShowError, and strengthen and move it to dialogs.cpp.
- Add SetFileInfo and InitializeImage helper functions.
- Add IDS_SAVEERROR resource string.
- Modify SaveDIBToFile, SetBitmapAndInfo, and DoLoadImageFile functions.
CORE-18867
2023-07-05 12:06:22 +09:00
Katayama Hirofumi MZ
17e9dcc922 [RTL][ADVAPI32_APITEST] RtlIsTextUnicode: Don't change weight unless lead-byte flag (#5396)
- Fix the garbled characters (a.k.a. mojibake) in some Japanese text files.
- weight will remain 3 unless IS_TEXT_UNICODE_DBCS_LEADBYTE flag is set.
- Strengthen advapi32_apitest IsTextUnicode testcase.
CORE-19016
2023-07-05 12:01:42 +09:00
Carl J. Bialorucki
7fafeb6390 [EXPLORER] Save taskbar position and locked state after reboot (#5393)
- Save locked state of the taskbar when toggled using its context menu.
- Save position of the taskbar after dragging it around the desktop.
- Invoke TRAYCMD_LOCK_TASKBAR command when (un)locking the taskbar
  by the context menu, instead of duplicating this functionality.

CORE-11621 CORE-16997
2023-07-04 16:16:24 +03:00
Katayama Hirofumi MZ
bfb973e0b3 [THEMEUI] Fix Japanese translation (ja-JP) as UTF-8
CORE-18706
2023-07-04 19:35:31 +09:00
Yukinari Mitsu
cce12eb9ed [SERVMAN] Respect the user-selected export format (#5394)
- Use either tab or comma separator depending on user's selection.
- Skip adding a separator after the last table cell.

CORE-19001
2023-07-04 13:04:44 +03:00
Katayama Hirofumi MZ
7342163b0d [CHARMAP] Improve Japanese (ja-JP) translation 2
CORE-18706
2023-07-04 13:28:19 +09:00
Katayama Hirofumi MZ
93445131e3 [CHARMAP] Improve Japanese (ja-JP) translation
CORE-18706
2023-07-04 13:18:11 +09:00
Katayama Hirofumi MZ
180bc8155e [SAMSRV] Improve Japanese (ja-JP) translation
CORE-18706
2023-07-04 12:58:23 +09:00
Katayama Hirofumi MZ
de85acff69 [THEMEUI] Add Japanese (ja-JP) translation
CORE-18706
2023-07-04 12:50:31 +09:00
Katayama Hirofumi MZ
e8cb1677ee [IPCONFIG] Add Japanese (ja-JP) translation
CORE-18706
2023-07-04 12:32:47 +09:00
Joachim Henze
5ee97b9537 [NETSTAT] -b flag implies -o flag on Windows XP/2003. CORE-19006 (#5377)
When calling 'netstat -abn'
Win 2k3sp2 and XPSP3 do show both: the processes name and the PID.
Contrary Win 7 and Win 8.1 would show only the process name then without the PID.

The newer Windows versions would require you to explicitly pass -o
if you want to see the PID also.

We do follow 2k3sp2 because it is our target. The process name is not of much use
without having the PID as well, especially if multiple processes with the
same name do run on a system, e.g.: multiple 'svchost.exe' processes.

Ros will automatically switch to the Win7-way when newer
Windows versions will be targeted at build-time.
2023-07-03 22:30:34 +02:00
Andrei Miloiu
99c4ffb0ae [THEMEUI] Update Romanian (ro-RO) translation (#5398) 2023-07-03 22:22:27 +02:00
Andrei Miloiu
87950be329 [TAPIUI] Improve Romanian (ro-RO) translation (#5397) 2023-07-03 22:21:15 +02:00
Andrei Miloiu
b807a95731 [CHARMAP] Improve Romanian (ro-RO) translation (#5390) 2023-07-03 22:20:03 +02:00
Andrei Miloiu
5d8aedf0e3 [USER32] Update Romanian (ro-RO) translation (#5395) 2023-07-03 22:19:43 +02:00
Andrei Miloiu
821d9422fe [SAMSRV] Update Romanian (ro-RO) translation (#5388) 2023-07-03 22:17:45 +02:00
Andrei Miloiu
f502d34b04 [NETID] Update Romanian (ro-RO) translation (#5384) 2023-07-03 22:17:16 +02:00
Andrei Miloiu
497009da82 [IPCONFIG] Update Romanian (ro-RO) translation (#5381) 2023-07-03 22:16:43 +02:00
Andrei Miloiu
b41615376b [MMC] Improve Romanian (ro-RO) translation (#5389) 2023-07-03 22:16:01 +02:00
Andrei Miloiu
0f62d80f2d [SHELL32] Improve Romanian (ro-RO) trnaslation (#5392) 2023-07-03 22:15:28 +02:00
Piotr Hetnarowicz
4c7ef7b1a2 [MSPAINT] Update Polish (pl-PL) translation (#5368) 2023-07-03 15:28:38 +03:00
Andrei Miloiu
e369caef4e [MSPAINT] Update Romanian (ro-RO) translation (#5353) 2023-07-03 15:24:21 +03:00
Stanislav Motylkov
489655a414 [IPCONFIG] Update Russian (ru-RU) translation 2023-07-03 15:20:02 +03:00
Eric Kohl
eb30050e1b [IPCONFIG] Add error messages for Release and Renew and fix magic values 2023-07-03 12:28:39 +02:00
Joachim Henze
a5360f542f [IPHLPAPI] Formatting only, no functional change
- Strip inconsistent spaces from the spec file.
- iphlpapi_main: Harmonize inconsistent and line-wasting function-comments and fix mixed space-tab-indentation.
- ipstats_reactos.c: Compactify horizontally accordingly to the coding guidelines

I am interested in that code for a backport, so I want it to be well-formatted.
Ftr: IPHLPAPI was *forked* more than a decade ago from Wine.
Therefore no diff ever was guarded within those files whenever we implemented anything here.
2023-07-03 00:38:41 +02:00
Stanislav Motylkov
5ae65ab7a7 [NTOS:KE] Add x86 CPU features reporting to AMD64
CORE-18023 CORE-14922
2023-07-02 21:00:32 +03:00
Stanislav Motylkov
6a6b383abd [NTOS:KE] Report x86 CPU features in a separate function
KiGetFeatureBits() is now being called in the early boot phase 0
when the Kernel Debugger is not yet initialized, so debug prints
are not available here. Move the debug prints into a new function
and call it at the right time. CORE-18023
2023-07-02 21:00:31 +03:00
Stanislav Motylkov
00715ccf8b [NTOS:KE] Fix magic constants for x86 CPU features
Do it the same way as in amd64 ke.h/cpu.c. CORE-18023
2023-07-02 21:00:31 +03:00
Thamatip Chitpong
c7e4c3a8e9 [NTUSER] NtUserWaitForInputIdle: Fix unhandled exception BSOD 0x1E (#5391)
Fix CLIENTINFO usermode pointer access once again.
Based on a patch by Michael Fritscher from CORE-10017.
Addendum to 7052282507 (r68702).

CORE-18728 CORE-19014
2023-07-02 20:30:30 +03:00
Eugen Podrug
8e01dee251 [NTOS:EX] Fix swapped values in ExGetCurrentProcessorCounts() (#4565)
The function should return the kernel time for the idle thread in the
first argument, and kernel time + user time for the current thread in
the second argument.

Also retrieve the processor number from the cached PRCB instead of
calling KeGetCurrentProcessorNumber() which retrieves the PRCB again
since the processor could switch in-between those calls.

NdisGetCurrentProcessorCounts() function follows the same prototype
which is the correct one.
2023-07-02 16:10:36 +03:00
Stanislav Motylkov
bc85db7d8c [IPCONFIG] Update Russian (ru-RU) translation 2023-07-02 16:02:19 +03:00
Eric Kohl
ed80df29e0 [IPCONFIG] Improvements to Release and Renew functions
- Reimplement the Release and Renew functions using GetAdaptersInfo().
- Check for enabled DHCP and connected medium
- Check for already released Lease in the Release function
- Add required messages
2023-07-02 14:48:03 +02:00
Doug Lyons
12e1919e5e [NTGDI][GDI32] Icon fixes for Office 2000, VB6, and Hoyle Cards (#5227)
Many thanks for Simone Lombardo for pointing to the code needing attention
and providing a working proof-of-concept solution.

CORE-12377
CORE-18084
CORE-13889
2023-07-02 13:24:15 +02:00
Serge Gautherie
38560761ce [WIN32K:NTUSER] Add ASSERT() on "linking window to itself" (#4749)
Addendum to ee0511b (0.4.10-dev-323).
CORE-18132
2023-07-02 13:19:06 +02:00
Andrei Miloiu
5e4c6ae983 [INPUT] Improve Romanian (ro-RO) translation (#5386) 2023-07-02 13:01:09 +02:00
Andrei Miloiu
8fe890e963 [SHELL32] Update Romanian (ro-RO) translation (#5382) 2023-07-02 13:00:10 +02:00
Victor Perevertkin
16882dcfa4 [HALX86] Bugcheck in case the ACPI initialization failed (for ACPI HAL) (#5376)
CORE-16302
2023-07-02 02:01:11 +03:00
Stanislav Motylkov
fb1162431d [IPCONFIG] Update Russian (ru-RU) translation 2023-07-02 00:58:45 +03:00
Stanislav Motylkov
d764b4232a [SHELL32] Fix last attribute width and button position
Addendum to f3a07f2a78. CORE-18829
2023-07-02 00:50:11 +03:00
Yukinari Mitsu
f3a07f2a78 [SHELL32] Fix overlapping attributes in the Folder properties dialog (#5383)
The sum of X and width exceeds the X of next element.
So, change the width to <next x> - <current x>.

All affected translations were changed.

CORE-18829
2023-07-02 00:24:21 +03:00
Andrei Miloiu
ad2d88f275 [FONTVIEW] Update Romanian (ro-RO) translation (#5371) 2023-07-01 22:59:49 +02:00
Yukinari Mitsu
3801acb914 [SHIMGVW] Display filename in taskbar even if the file isn't loaded (#5379)
If the file could not be loaded, its name wasn't displayed in the taskbar.
Now, always display the file name in all cases.

CORE-18954
2023-07-01 19:22:03 +03:00
Eric Kohl
4328b858e5 [IPCONFIG] Replace some DNS related strings by resources 2023-07-01 15:32:47 +02:00
Eric Kohl
edd332c952 [IPCONFIG] Implement globbing for the Release and Renew options
- Add a simple Wildcard Matcher.
- Use the Wildcard Matcher in the Release and Renew functions.
2023-07-01 10:28:33 +02:00
Joachim Henze
40864bc15c [NETSTAT] Fix crash when parsing the protocol CORE-19005 (#5363)
fixes symptom CORE-19005 [NETSTAT] crashes when called with -abnop
and no further argument (protocol name missing).

The crash was a regression of
0.4.11-dev-814-g 2b55073360

also meticulously try to match Windows exact screen output and ERRORLEVEL then
instead of e.g.: simply showing the usage help
which means:
ERRORLEVEL 0 for 'netstat -abnop' and displaying Active-string + table header *but without any sane contents*
ERRORLEVEL 1 for 'netstat -abnop bullshit' and displaying usage help
ERRORLEVEL 0 for 'netstat -abnop tcp' and displaying Active-string + table header + contents
ERRORLEVEL 0 for 'netstat -abnop udp' and displaying Active-string + table header + contents

while touching the file do also some unrelated whitespace tweaks.
2023-06-29 22:33:53 +02:00
Doug Lyons
40233a3644 [ADVAPI32_APITEST] Add new RegCreateKeyEx tests (#5234)
* [ADVAPI32_APITEST] Add new RegCreateKeyEx tests
* Remove trailing spaces.
* Initialize SECURITY_ATTRIBUTES sa with zeroes.

Add a set of tests for RegCreateKeyExW and -A.
Created to prove the correctness of the already merged PR (#5230)

JIRA issue: CORE-15471
2023-06-29 21:33:44 +02:00
Victor Perevertkin
8cfc4a3376 [NTOS:PNP] Complete the PlugPlayControlInitializeDevice control class
Besides creating the PDO and device node for it, it has to set up the
necessary registry keys, and register PDO at PnP root driver properly.

CORE-18989
2023-06-29 19:25:28 +03:00
Victor Perevertkin
6cac5b8c9e [NTOS:PNP] Refactor PnpRootCreateDevice
- Remove unused "DriverObject" argument
- Make "FullInstancePath" mandatory
- Extract the PDO creation into separate function, it will be used later
2023-06-29 19:25:28 +03:00
Victor Perevertkin
bbf64c0cc4 [NTOS:PNP] Do not create an extra "PDO" device inside PnP root driver
The root device object is in fact a PDO and a FDO at the same time. Thus
there is no need in creating two device objects here, one is enough.
This commit also removes the explicit device extension for the root DO,
because the only reason it existed is to distinguish the root driver's
FDO from its PDOs. This can easily be done by comparing with
IopRootDeviceNode.

Also collect some unused garbage while we are here.
2023-06-29 19:25:25 +03:00
Eric Kohl
e1eb9e3620 [UMPNPMGR] PNP_Get(First/Next)LogConf: return proper tags for the resource list case 2023-06-29 18:06:02 +02:00
Carl J. Bialorucki
209439a5ae [BROWSEUI] Add status bar view state persistence (#5366)
- Use `HKCU\Software\Microsoft\Internet Explorer\Main\StatusBarOther` registry key for the setting persistence.
- Set its value to 1 when the status bar is visible, and to 0 when the status bar is hidden.
- Query it when the file browser is initialized to set the correct view state for the status bar.
- Set the default state of the status bar to hidden if the registry key does not exist, matching the behavior of Windows Server 2003.

CORE-19010
2023-06-29 18:50:43 +03:00
Eric Kohl
44a312478d [UMPNPMGR] OpenConfigurationKey: Open subkeys depending on the configuration type
- Boot and Basic Configurations are located in the LogConf subkey.
- Alloc and filtered Configurations are located in the Control subkey.
2023-06-28 23:15:26 +02:00
Eric Kohl
7f55dd36ea [IPCONFIG] Show data for SOA DNS Entry 2023-06-28 22:16:25 +02:00
Hermès Bélusca-Maïto
5cb2b73988 [VIDEOPRT] VideoPortGetAccessRanges: Return ERROR_MORE_DATA if there exist more device access ranges that can be returned than what is specified by NumAccessRanges. 2023-06-28 17:22:01 +02:00
Hermès Bélusca-Maïto
122eaeb6ad [VIDEOPRT] VideoPortGetAccessRanges: Add doxygen doc, SAL annotations and minor formatting. 2023-06-28 17:22:00 +02:00
Hermès Bélusca-Maïto
61c77d1f87 [XBOXVMP] Real OG XBOX NVidia GPU exposes 3 access ranges, so retrieve them.
CORE-19011

Fix a "bug" I introduced in commit 61012eb54.
VideoPortGetAccessRanges() expects the caller to specify at least the
total number of ranges the hardware exposes, otherwise it fails with
ERROR_MORE_DATA. (Tested also with the help of Windows' videoprt.sys.)

On real original XBOX there are three:
```
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation NV2A [XGPU] [10de:02a0] (rev a1)
    Subsystem: Unknown [0000:0000]
    Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 03
    Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
    Memory at f0000000 (32-bit, prefetchable) [size=128M]
    Memory at 00000000 (32-bit, prefetchable) [size=512K]
```

Thanks to Stanislav and Daniel for tests on the real XBOX.
2023-06-28 17:21:58 +02:00
Piotr Hetnarowicz
f135d23f4c [FONTVIEW] Update Polish (pl-PL) translation (#5369) 2023-06-28 12:40:29 +03:00
Piotr Hetnarowicz
22233e66ce [IPCONFIG] Update Polish (pl-PL) translation (#5367) 2023-06-28 12:32:05 +03:00
Stanislav Motylkov
79de1846ac [IPCONFIG] Remove trailing whitespace
Addendum to bfc87de1d8.
2023-06-28 12:14:08 +03:00
Andrei Miloiu
bfc87de1d8 [IPCONFIG] Update Romanian (ro-RO) translation (#5360) 2023-06-28 09:57:16 +02:00
Andrei Miloiu
6ebadb4d39 [GETUNAME] Improve Romanian (ro-RO) translation (#5365)
Lines 44032-54000

Addendum to 0887c1c (#5323) and 60f4c38 (#[5327]).
2023-06-28 09:54:51 +02:00
Stanislav Motylkov
d09433a2da [FONTVIEW] Update copyright headers 2023-06-27 23:10:03 +03:00
Stanislav Motylkov
bfdb012f1f [FONTVIEW] Improve English wording of IDS_ERROR_OPENKEY 2023-06-27 21:44:06 +03:00
Stanislav Motylkov
f5200e6c25 [MSPAINT] Update copyright years for the C++ code
According to Benedikt Freisen, he didn't port the code base to C++
until 2015. Addendum to 8f1f1c7a5a. CORE-18867
2023-06-27 21:22:21 +03:00
Eric Kohl
1abfdde2d4 [IPCONFIG] Show data for MX and SRV DNS Entries 2023-06-27 09:27:30 +02:00
Fernando Isnaldo Silva de Faria
8c695b9437 [CMD] Add Portuguese Brazilian (pt-BR) translation (#4957)
Based on the Portuguese translation from Portugal.

Reviewed-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Reviewed-by: Stanislav Motylkov <x86corez@gmail.com>
2023-06-26 20:22:10 +03:00
Jose Carlos Jesus
bd761568f5 [EXPLORER] Improve Portuguese (pt-PT) translation (#5351)
- Improve and fix typo to pt-PT rc file
- Fix SUBLANG type to pt-PT language
2023-06-26 19:28:24 +03:00
Eric Kohl
0d0bd954a8 [IPCONFIG] Simplify the not type output 2023-06-26 12:26:04 +02:00
Eric Kohl
d737153ac9 [IPCONFIG] Remove unused resources 2023-06-26 08:12:07 +02:00
Hermès Bélusca-Maïto
3121aee56e [VIDEOPRT] Honour NumAccessRanges == 0 / AccessRanges == NULL in VideoPortVerifyAccessRanges()
These are specified for releasing the hardware resources previously
acquired by either a previous call to VideoPortVerifyAccessRanges()
or a call to VideoPortGetAccessRanges().
2023-06-25 21:25:08 +02:00
Hermès Bélusca-Maïto
de6313d89e [VIDEOPRT] Reformat VideoPortVerifyAccessRanges()
Fix indentation, add SAL annotations and Doxygen description.
2023-06-25 21:25:07 +02:00
Hermès Bélusca-Maïto
7eca194709 [VIDEOPRT] In legacy detection, don't guess the maximum number of buses of a certain type.
Use whatever number there is on the system.
Also ensure that vpStatus is correctly initialized.
2023-06-25 21:25:07 +02:00
Hermès Bélusca-Maïto
6409f97bc4 [NTOS:CONFIG] Use correct "Interface" variable type; use InterfaceTypeUndefined instead of -1. 2023-06-25 21:25:06 +02:00
Hermès Bélusca-Maïto
bd5209d9f4 [HALX86] These HalpNo* functions are actually _implemented_. Document their purpose.
Remove the misleading comment in HalpNoBusData().
Update the SAL annotations.
2023-06-25 21:25:06 +02:00
Hermès Bélusca-Maïto
9ba1849a97 [HAL][MINIHAL] Minor cleanup in reboot.c files (#5359)
And remove pic/processor.c from minihal compilation.
2023-06-25 19:39:44 +02:00
Eric Kohl
50d78f04e3 [IPCONFIG] Improve adapter type and name output 2023-06-25 14:00:47 +02:00
Katayama Hirofumi MZ
cb98e91b55 [MSPAINT] Rename some identifiers (#5362)
- s/CANVAS_HITTEST/HITTEST/
- s/m_whereHit/m_hitCanvasSizeBox/
- s/m_rcNew/m_rcResizing/
- Add comments to CCanvasWindow.
CORE-18867
2023-06-24 19:39:07 +09:00
Hilmar Preuße
5bb0a2c484 [FONTVIEW] Update German (de-DE) translation (#5345)
Co-authored-by: Joachim Henze <joachim.henze@reactos.org>
2023-06-24 00:35:08 +02:00
Andrei Miloiu
60f4c3839c [GETUNAME] Improve Romanian (ro-RO) translation (#5327)
Lines 11001-44025.

Addendum to 0887c1c0 (#5323).
2023-06-24 00:36:09 +03:00
Stanislav Motylkov
00dafff740 [IPCONFIG] Update Russian (ru-RU) translation 2023-06-23 21:43:49 +03:00
Stanislav Motylkov
ec09fffbfc [MSPAINT] Update and improve Russian (ru-RU) translation 2023-06-23 20:54:02 +03:00
Stanislav Motylkov
b6c4222f25 [MSPAINT] Make Attributes dialog layout consistent between languages
- Add missing mnemonic keys
- Remove unneeded mnemonic keys
- Fix some translated strings being too long
- Fix mispositioned elements
- Reposition overlapping elements

Validated the changes with Resource Hacker. CORE-18867
2023-06-23 20:51:45 +03:00
Stanislav Motylkov
8f1f1c7a5a [MSPAINT] Update copyright headers
Use LGPL-2.0-or-later as the first available LGPL version on SPDX
taking into account 530512f17e commit message.

CORE-18867
2023-06-23 20:49:28 +03:00
Eric Kohl
c63489f1e8 [IPCONFIG] Improve the German translation 2023-06-23 12:24:26 +02:00
Eric Kohl
a38b133dd1 [NET] Add the net session command 2023-06-22 12:40:46 +02:00
Eric Kohl
b0b40ce520 [IPCONFIG] Convert more strings to resources 2023-06-22 10:19:01 +02:00
Katayama Hirofumi MZ
d04e049284 [MSPAINT] s/Bound/Clamp/
CORE-18867
2023-06-22 07:57:36 +09:00
Katayama Hirofumi MZ
ec53d42278 [MSPAINT] s/pointSP/s_pointSP/ and s/pointStack/s_pointStack/
CORE-18867
2023-06-22 07:28:15 +09:00
Katayama Hirofumi MZ
3fa6d74a01 [MSPAINT] Fix ShapeTool with Shift key (#5358)
Fix the behavior of the ShapeTool in pressing Shift key. CORE-18867
2023-06-22 07:19:48 +09:00
Oleg Dubinskiy
e7ccb36b9b [WIN32SS][NTDDRAW] Don't startup DirectX graphics each time on DirectDraw object creation (#5329)
CORE-17561, CORE-17932, CORE-18221

Do it at each system startup instead: Remove old DirectX initialization code.
It's now outdated and not needed anymore.

Previously, the corresponding hackish intEnableReactXDriver() function
did two things: load dxg.sys and enable DirectDraw.
Now loading DirectX graphics is done during WINSRV initialization, and
enabling DirectDraw is called during each (and also first) display mode
switch, as in Windows. As debug analysis proves, there are no any other
calls in NtGdiDdCreateDirectDrawObject, besides the corresponding DXG
function.
2023-06-21 18:03:27 +02:00
Oleg Dubinskiy
e034377b51 [WIN32SS][ENG][NTDDRAW] Manage DirectDraw instances when switching display mode (#4519)
CORE-17932

[ENG] Implement DirectDraw management in switch display mode functions
(e.g. resolution change, color depth, display frequency etc.):

- Switch DirectDraw instances between the two PDEVs (the current one and
  the new one allocated by ourselves) by calling dxg!DxDdDynamicModeChange
  function.

- Suspend them before and resume after the display mode switch, by calling
  dxg!DxDdsuspendDirectDraw and dxg!DxDdResumeDirectDraw appropriately.

We currently don't have these functions implemented, but MS DXG has, so
it allows to properly manage DirectDraw PDEVs using this driver, similarly
to Windows.
My analysis confirms that these functions are always called in XP/2k3 on
display mode switch, even when there is no any DirectX app running at the
moment. Analyzing their prototypes show that my guesses are correct.

- Initialize hDev and dhpdev members for EDD_DIRECTDRAW_GLOBAL for newly
  created surfaces, switch them during mode change and re-initialize after
  it also. They are commonly used by DirectDraw stack.
  In addition, enable DirectDraw for old and new PDEVs, by calling
  dxg!DxDdEnableDirectDraw function.


[NTDDRAW] Additionally, fix usage of DirectDraw lock count in the PDEVOBJ
structure.

- Enable cDirectDrawDisableLocks member for storing its value, instead of
  DxDd_nCount, which is marked as ROS-specific.

- Use it in win32k!DxEngGet/SetHdevData for getting/setting DirectDraw
  count appropriately.

My analysis also shows that in Windows, the PDEVOBJ::cDirectDrawDisableLocks
method calls DxEngGetHdevData with type 8, which corresponds to our DxDd_nCount.
So there are no doubts that this member is used there.

- Rename DxEngGetHdevData_dd_count alias of type 8 to DxEngGetHdevData_dd_locks,
  to match more accurately an actual member name. Update the enumeration
  and fix all code parts appropriately.

All these changes allow to properly change display mode during executing
DirectDraw applications, when they try to switch in full-screen mode.
At least a bugcheck that happened before my changes, does no longer appear.

There are still some games that don't run correctly, as if there is no
3D acceleration (which actually exists). This requires further investigations.
2023-06-21 18:00:24 +02:00
Hermès Bélusca-Maïto
3fa613b9da [MINIHAL] Remove sysinfo.c from compilation. 2023-06-20 22:40:58 +02:00
Hermès Bélusca-Maïto
d6a78d580b [HALX86] Tabs to 4-space indentation in generic/sysinfo.c + Fix typo "ALMI" -> "AMLI" 2023-06-20 22:40:57 +02:00
Hermès Bélusca-Maïto
d03fc32e7d [MINIHAL] Remove unneeded files from compilation. 2023-06-20 18:39:01 +02:00
Carl J. Bialorucki
f203ad5cf4 [BROWSEUI] Add locked toolbar state persistence (#5350)
Store the state of the explorer toolbar, locked or unlocked, in the proper
registry location and set the proper toolbar state when initialized.

CORE-9094

- Set `HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\Locked`
  to 1 when the explorer toolbar is locked, 0 when the toolbar is unlocked.
- Query `HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\Locked`
  when the toolbar is initialized to set the correct locked state.
- Set the default state of the toolbar to locked if the registry key does not
  exist, matching the behavior of Windows Server 2003.
2023-06-20 11:16:23 +02:00
Hermès Bélusca-Maïto
157491e297 [STORPORT] MaximumNumberOfLogicalUnits should be initialized to SCSI_MAXIMUM_LOGICAL_UNITS
See https://www.osronline.com/article.cfm%5Earticle=538.htm
2023-06-19 21:10:53 +02:00
Hermès Bélusca-Maïto
3bc71f9086 [FREELDR][SCSIPORT][STORPORT] Use existing defines for some hardcoded max values.
See https://www.osronline.com/article.cfm%5Earticle=538.htm

[SCSIPORT] Remove 'MaxBus' variable, deprecated since commit fc3d38d1c (r26220).
2023-06-19 21:10:51 +02:00
Hermès Bélusca-Maïto
0fbd5eda85 [DDK] storport.h: Add some missing definitions that are in common with srb.h 2023-06-19 21:10:49 +02:00
Hermès Bélusca-Maïto
b12069d670 [DDK] srb.h: Introduce Win8+ SCSI_MAXIMUM_BUSES_PER_ADAPTER and comment about the old SCSI_MAXIMUM_* variables. 2023-06-19 21:10:44 +02:00
Hermès Bélusca-Maïto
7e1510eb9c [HALX86] Implement HalpcGetCmosData and HalpcSetCmosData. 2023-06-19 21:09:03 +02:00
Hermès Bélusca-Maïto
0c16bcd4e8 [FREELDR] scsiport.c: Fix x64 compilation. 2023-06-19 21:09:01 +02:00
Hermès Bélusca-Maïto
af47866f76 [FREELDR:UEFI] Fix compilation warning LNK4006.
ntoskrnl.c.obj : warning LNK4006: _KeStallExecutionProcessor@4
already defined in stubs.c.obj; second definition ignored.
2023-06-19 21:09:00 +02:00
Hermès Bélusca-Maïto
095510bdac [FREELDR:UEFI] Fix two MSVC build warnings C4553.
In both lines 451 and 474:
uefidisk.c: warning C4553: '==': result of expression not used; did you intend '='?

It's "funny" that GCC builds doesn't catch those...
2023-06-19 21:08:59 +02:00
Victor Perevertkin
38e4b859e2 [FRAMEBUFACC] Remove the driver
This is an unfinished attempt to rewrite the driver by Magnus Olsen,
dating back to 2007.
2023-06-19 13:58:46 +03:00
Victor Perevertkin
cdb130420e [FRAMEBUF_NEW] Remove the driver
It doesn't seem to be better than the current "framebuf", and has an
unfriendly license (NT4 DDK Sample).
2023-06-19 13:58:46 +03:00
Victor Perevertkin
b9b2608bfb [FRAMEBUF] Return the "old" driver back
It has a better license (GPL) and does not have visible drawbacks
compared to framebuf_new.
2023-06-19 13:58:43 +03:00
Katayama Hirofumi MZ
bc19bbe408 [MSPAINT] Add CMainWindow::CanPaste
CORE-18867
2023-06-19 18:59:00 +09:00
Katayama Hirofumi MZ
19d8862851 [MSPAINT] Fix CMainWindow::GetSaveFileName (#5356)
Fix filename extension cases and "File Type" field. If no filename extension on save, then append ".png" to the filename.
CORE-18867
2023-06-19 14:15:18 +09:00
Katayama Hirofumi MZ
64ef3ced9c [MSPAINT] Add CMainWindow::CanUndo/CanRedo (#5355)
- Add CMainWindow::CanUndo and CMainWindow::CanRedo and use them.
- Fix wrongly-disabled Undo/Redo in some cases.
CORE-18867
2023-06-19 14:13:43 +09:00
Katayama Hirofumi MZ
b5335fb90b [MSPAINT] Simplify SelectionModel::StretchSkew
...and omit cloning HBITMAP in SelectionModel::InsertFromHBITMAP. CORE-18867
2023-06-19 14:11:16 +09:00
Katayama Hirofumi MZ
7bb0561c2d [MSPAINT] Delete useless CTextEditWindow::m_nAppIsMovingOrSizing
CORE-18867
2023-06-19 13:47:24 +09:00
Katayama Hirofumi MZ
fdba69be7c [MSPAINT] Follow-up Part 2 of Realize Masked Skew (96d3883)
CORE-18867
2023-06-19 10:11:35 +09:00
Katayama Hirofumi MZ
2661b2db61 [MSPAINT] Improve Japanese (ja-JP) translation (IDS_CANTPASTE)
CORE-18867
2023-06-19 10:08:04 +09:00
Katayama Hirofumi MZ
96d3883686 [MSPAINT] Follow-up of Realize Masked Skew (9afcbea)
CORE-18867
2023-06-19 10:00:39 +09:00
Katayama Hirofumi MZ
9afcbea24e [MSPAINT] Realize Masked Skew
- Add CreateMonoBitmap and CopyMonoImage functions to dib.cpp.
- Add bMono parameter to SkewDIB function.
- Add hbmMask parameter to InsertFromHBITMAP function.
- Add ToolsModel::IsSelection.
CORE-18867
2023-06-19 09:56:02 +09:00
Katayama Hirofumi MZ
f6bd638b4d [MSPAINT] Don't show canvas size boxes if textEditWindow is shown
CORE-18867
2023-06-19 08:36:45 +09:00
Katayama Hirofumi MZ
17bdf55474 [MSPAINT] Smartly restrict CTextEditWindow's size and position
...by using WM_SIZING and WM_MOVING. CORE-18867
2023-06-19 08:25:23 +09:00
Katayama Hirofumi MZ
7aadc1e1fe [MSPAINT] Realize context menu on canvas (#5352)
- Add actions on Right-Click.
- Add ID_POPUPMENU resource menu.
- Use TrackPopupMenu to show the context menu.
- Improve CMainWindow::OnInitMenuPopup to display context menu.
- Add SelectionModel::m_bContentChanged flag to indicate whether the selection content is changed.
- Fix IDM_IMAGEINVERTCOLORS and IDM_IMAGEROTATEMIRROR commands.
CORE-18867
2023-06-19 07:51:19 +09:00
George Bișoc
0972f71d9a [NTOS:PNP] Assert the presence of a device extension when handling PnP root power IRPs
Handling PnP root driver power IRPs requires that a device object must come up
with a device extension to determine whether it is a function driver and if so,
handle the IRP accordingly.

CORE-18989
2023-06-18 20:44:13 +02:00
Stanislav Motylkov
89ecf32e0b [MSPAINT] Improve wording of IDS_CANTPASTE message
Follow-up of #5349 (9f56e67). CORE-18867
2023-06-18 19:16:17 +03:00
Stanislav Motylkov
d614d62b09 [EXPLORER] Update copyright headers 2023-06-18 18:52:02 +03:00
Stanislav Motylkov
21f0095cc4 [IPCONFIG] Update copyright headers 2023-06-18 18:34:39 +03:00
Katayama Hirofumi MZ
8ba330ead2 [MSPAINT] Follow-up of #5349 (9f56e67); Avoid assertion failure
CORE-18867
2023-06-18 20:34:49 +09:00
Katayama Hirofumi MZ
9f56e67bc2 [MSPAINT] Use CF_DIB instead of CF_BITMAP (#5349)
CF_BITMAP is not recommended format for copying. In fact, Win10 won't accept it.
- Use CF_DIB clipboard format instead of CF_BITMAP in copying.
- Use CF_ENHMETAFILE, CF_DIB, or CF_BITMAP in pasting.
- Add BitmapToClipboardDIB, BitmapFromClipboardDIB, and BitmapFromHEMF helper functions to dib.cpp.
- Re-enable paste by fixing the bug that is embugged in the previous commit.
- Enable Cut, Copy, Paste, and Delete on text editing box by modifying OnInitMenuPopup.
- Add IDS_CANTPASTE resource string to show message on paste failure.
CORE-18867
2023-06-18 19:48:20 +09:00
Eric Kohl
aaa0cb6724 [IPCONFIG] Use conutils and replace hardcoded strings 2023-06-17 15:23:18 +02:00
Katayama Hirofumi MZ
e8c7e30030 [MSPAINT] Establish Undo/Redo management (#5347)
- Painting the canvas is done by overlaying the multiple layers.
- Drawing each overlay is implemented as polymorphism of OOP.
- Refine the Undo/Redo mechanism.
- Some adjustments.
CORE-17969
2023-06-17 21:15:35 +09:00
Thamatip Chitpong
b7071f67a8 [TASKMGR] Remove CRTDBG (#5348)
taskmgr doesn't use any CRT allocation. I don't see the point of using it.

This reverts commit 2441e86 .

CORE-18991
2023-06-17 03:33:29 +09:00
Katayama Hirofumi MZ
2f856f6f0d [MSPAINT] Add CachedBufferDIB function and use it
We do caching on buffering paint.
This will improve performance a little.
CORE-18867
2023-06-16 08:05:23 +09:00
Hermès Bélusca-Maïto
c706222f3f [TASKMGR] Fix the license. Turns out it's LGPL-2.1-or-later from the texts.
Caught by Stanislav. Sorry for the oversight!
2023-06-15 19:45:23 +02:00
Hermès Bélusca-Maïto
f4735ccc9b [TASKMGR] Re-include StringSafe usage in trayicon.c (see e.g. 99fb812be) 2023-06-15 13:28:16 +02:00
Hermès Bélusca-Maïto
434798e312 [TASKMGR] Move strsafe.h into precompiled header. 2023-06-15 13:26:32 +02:00
Hermès Bélusca-Maïto
9927163455 [TASKMGR] Reorder page controls to have natural TAB-ordering. 2023-06-15 12:55:27 +02:00
Hermès Bélusca-Maïto
3bdc062fb9 [PSDK][NDK] Update SYSTEM_PERFORMANCE_INFORMATION definition with Win7+ members.
See https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/performance.htm
for more information.
2023-06-15 12:55:08 +02:00
Hermès Bélusca-Maïto
d5707eefe2 [TASKMGR] High speed update is twice per second, and not every second.
And honour what is also told by the info in the status bar.
2023-06-15 12:45:08 +02:00
Hermès Bélusca-Maïto
2da0506f2a [TASKMGR] Remove more dead code. 2023-06-15 12:44:37 +02:00
Hermès Bélusca-Maïto
6e77747b30 [TASKMGR] Simplify tray icon code. 2023-06-15 12:44:29 +02:00
Hermès Bélusca-Maïto
0b4c8bdd1c [TASKMGR] Clamp the values returned from PerfDataGetProcessorUsage() and PerfDataGetProcessorSystemUsage() inside these functions.
It's necessary to make this clamping there so that returned values are
always used consistently in taskmgr, including in places where the
values are directly fetched into other functions.

This is a free adaptation from
Wine commit
a9742b3210c4cec67aca3c0012f3b9504a4368cf
From: Gerald Pfeifer <gerald@pfeifer.com>

taskmgr: Move out-of-domain checking into
PerfDataGetProcessorUsage() and PerfDataGetProcessorSystemUsage().
2023-06-15 12:44:21 +02:00
Hermès Bélusca-Maïto
7b53126375 [TASKMGR] Completely reformat perfpage.c, perfpage.h, procpage.h and trayicon.c
- Rename also these stupidly long "hPerformancePageBlablabla" variables.
- Remove unnecessary global variables in procpage.c/h.
2023-06-15 12:44:13 +02:00
Hermès Bélusca-Maïto
da7dcec6a0 [TASKMGR] Reformat the files' headers. Add Valerij in graphctl.c/h who rewrote most of the graph control. 2023-06-15 12:44:01 +02:00
Hermès Bélusca-Maïto
3fc702b588 Revert "[TASKMGR] Follow-up of 'Refactor trayicon.c' (99fb812)"
This reverts commit ec93c2340d.

Revert "[TASKMGR] Refactor trayicon.c"

This reverts commit 99fb812be4.
2023-06-15 12:43:36 +02:00
Katayama Hirofumi MZ
36aea8e56e [TASKMGR] affinity.c: Use _countof instead of sizeof/sizeof
CORE-18991
2023-06-15 16:22:43 +09:00
Katayama Hirofumi MZ
9a6c85f68a [TASKMGR] Fix PerfDataDeallocCommandLineCache
Do not leak memory. CORE-18014
2023-06-15 15:36:19 +09:00
Katayama Hirofumi MZ
7989e3f26c [TASKMGR] GraphCtrl_Dispose: Delete hdcGraph first
The pen might be selected at GraphCtrl_Dispose.
Do not delete a drawing object (pen or brush) while it is still selected into a DC.
CORE-18014
2023-06-15 15:14:32 +09:00
Katayama Hirofumi MZ
dc14a9f6e0 [TASKMGR] GraphCtrl: Use DeleteDC instead of DeleteObject to delete inst->hdcGraph
This reduces handle leak.
CORE-18014
2023-06-15 14:55:25 +09:00
Katayama Hirofumi MZ
2441e86963 [TASKMGR] Report any memory leaks on exit (#5340)
Use the power of CRT debug to detect memory leaks.
- Define _CRTDBG_MAP_ALLOC and include <crtdbg.h> after <stdlib.h>.
- Call _CrtSetDbgFlag at prologue of wWinMain.
CORE-18014
2023-06-15 14:27:06 +09:00
Katayama Hirofumi MZ
ec93c2340d [TASKMGR] Follow-up of 'Refactor trayicon.c' (99fb812) 2023-06-15 14:18:45 +09:00
Katayama Hirofumi MZ
99fb812be4 [TASKMGR] Refactor trayicon.c 2023-06-15 13:26:20 +09:00
Katayama Hirofumi MZ
ad61c574f4 [MSPAINT] Fix two handle leaks
CORE-18867
2023-06-15 10:55:59 +09:00
Katayama Hirofumi MZ
5675604d28 [MSPAINT] CMiniatureWindow: Avoid too small
CORE-18867
2023-06-14 20:17:49 +09:00
Hermès Bélusca-Maïto
61012eb544 [XBOXVMP] Fix in VideoPortGetAccessRanges call: missing Slot parameter.
Contrary to what is (badly) written on MSDN, this parameter is
*mandatory* when the ranges looked for are on a PCI adapter.

Detected when testing with MS Windows' videoprt.sys on XBOX emulator;
thanks to Simone Lombardo for assistance!
2023-06-14 12:10:55 +02:00
Katayama Hirofumi MZ
bfd42c67a1 [MSPAINT] Improve CMiniatureWindow (#5337)
- Save the position and size of the miniature window.
- Improve drawing of the miniature window.
- Sync with the canvas.
CORE-18867
2023-06-14 18:51:40 +09:00
Hermès Bélusca-Maïto
113656563a [HALX86] Minor fixes in HaliFindBusAddressTranslation()
- Remove ContextValue variable. This variable erroneously truncated
  *Context value (that can contain a pointer value) to 32 bits.

- Gracefully fail instead of asserting.
2023-06-14 11:27:24 +02:00
Hermès Bélusca-Maïto
4f41000714 [FLOPPY] "zero" parameters in IoQueryDeviceDescription() call are NULL pointers. 2023-06-14 11:24:47 +02:00
Hermès Bélusca-Maïto
84b4a80beb [NTOS:IO] Fix some bugs in the IoQueryDeviceDescription helpers (#5320)
- Add missing ExAllocatePool NULL checks.

- Fix order of KeBugCheckEx parameters for PNP_DETECTED_FATAL_ERROR.

- The Controller and Peripheral numbers are zero-based, so if the caller
  wants to inspect controller (or peripheral) zero, let it be so!
  The original code was treating controller number zero for enumerating
  controllers of a given class within the different buses, which is
  wrong. See the diff'ed trace below.
  Tested with Windows' videoprt.sys VideoPortGetDeviceData().

```diff
 IoQueryDeviceDescription()
     BusType:          0xB093C224 (0)
     BusNumber:        0xB093C228 (0)
     ControllerType:   0xF9D01030 (19)
     ControllerNumber: 0xF9D01038 (0)
     PeripheralType:   0x00000000 (4294967295)
     PeripheralNumber: 0x00000000 (4294967295)
     CalloutRoutine:   0xF9CF74E4
     Context:          0xF9D5A340
 --> Query: 0xF9D5A22C

 IopQueryBusDescription(Query: 0xF9D5A22C)
     RootKey: '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM'
     RootKeyHandle: 0x00000598
     KeyIsRoot: TRUE
     Bus: 0xF9D5A290 (4294967295)
     Seen: 'CentralProcessor'
     Seen: 'FloatingPointProcessor'
     Seen: 'MultifunctionAdapter'
     SubRootRegName: '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter'

 IopQueryBusDescription(Query: 0xF9D5A22C)
     RootKey: '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter'
     RootKeyHandle: 0x00000590
     KeyIsRoot: FALSE
     Bus: 0xF9D5A290 (4294967295)
     Seen: '0'
     SubRootRegName: '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter\0'
     Getting bus value: 'Identifier'
     Getting bus value: 'Configuration Data'
     Getting bus value: 'Component Information'
     --> Getting device on Bus #0 : '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter\0'

 IopQueryDeviceDescription(Query: 0xF9D5A22C)
     RootKey: '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter\0'
     RootKeyHandle: 0x00000590
     Bus: 0
-    Enumerating controllers in '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter\0\DisplayController'...
+    Getting controller #0
+    Retrieving controller '\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MultifunctionAdapter\0\DisplayController\0'
```
2023-06-14 11:20:56 +02:00
Katayama Hirofumi MZ
318b2e786d [MSPAINT] Trivial improvements
- Use SetPixelV instead of SetPixel.
- BI_RGB is zero.
- Use CS_HREDRAW and CS_VREDRAW.
CORE-18867
2023-06-14 17:42:21 +09:00
Katayama Hirofumi MZ
3b4422b41b [MSPAINT] drawing.cpp: Refactor Erase, Replace and Airbrush 3
CORE-18867
2023-06-14 17:14:41 +09:00
Katayama Hirofumi MZ
0334498068 [MSPAINT] drawing.cpp: Refactor Erase, Replace and Airbrush 2
CORE-18867
2023-06-14 17:03:22 +09:00
Katayama Hirofumi MZ
78c8df8393 [MSPAINT] drawing.cpp: Refactor Erase, Replace and Airbrush
CORE-18867
2023-06-14 16:44:54 +09:00
Katayama Hirofumi MZ
6d9b7f77ad [MSPAINT] mouse.cpp: Use override keywords
CORE-18867
2023-06-14 16:01:10 +09:00
Katayama Hirofumi MZ
2b623c1d04 [MSPAINT] Refactor ImageModel (#5335)
- Unify ImageModel::Insert and ImageModel::CopyPrevious to ImageModel::PushImageForUndo.
- Delete useless stuffs.
- Fix some memory leaks.
- Fix IDM_IMAGECROP.
CORE-17969, CORE-18867
2023-06-13 23:23:48 +09:00
Katayama Hirofumi MZ
70f897e4c9 [FONTVIEW] Add Japanese translation (ja-JP) 2023-06-13 22:04:44 +09:00
Stanislav Motylkov
8d8e81ee7a [FONTVIEW] Update Russian (ru-RU) translation
Addendum to 5ef3f347. CORE-18952
2023-06-13 14:40:46 +03:00
Nikita Piatygorskiy
5ef3f347ad [FONTVIEW] Make hardcoded messages localizable (#5305)
- Move messages from OnInstall procedure to en-US resource file.
- Applied the same changes to all language files, now it's available
  for translation into other languages.

CORE-18952

Signed-off-by: Nikita Piatygorskiy <generalhammond16@gmail.com>
2023-06-13 14:12:26 +03:00
Stanislav Motylkov
2e836fb339 [FONTVIEW] Formatting only (for PR #5305) 2023-06-13 12:44:46 +03:00
Katayama Hirofumi MZ
fa4c3bd560 [MSPAINT] s/HasUndoSteps/CanUndo/ and s/HasRedoSteps/CanRedo/
CORE-18867
2023-06-13 18:24:42 +09:00
Katayama Hirofumi MZ
1a88607387 [MSPAINT] Move selection by arrow keys (#5334)
Improve keyboard usability.
- Add CCanvasWindow::MoveSelection.
- Modify CMainWindow::OnKeyDown.
- If Esc key is pressed, then the selection will land to canvas.
- If any arrow key is pressed, then the selection will move a bit.
CORE-18867
2023-06-13 16:31:18 +09:00
Katayama Hirofumi MZ
0087ea6597 [MSPAINT] Set CC_RGBINIT to CMainWindow::ChooseColor
It had failed to set initial color. CORE-18867
2023-06-13 15:51:52 +09:00
Katayama Hirofumi MZ
cb245ff711 [MSPAINT] Scrolled canvas has defects in dragging a selection
CORE-18990, CORE-18867
2023-06-13 14:57:59 +09:00
Katayama Hirofumi MZ
62b6859a67 [MSPAINT] Follow-up of #5332 (9ff9580)
Simplify the epilogue code of CCanvasWindow::OnSetCursor by using bHandle variable. CORE-18867
2023-06-13 14:18:12 +09:00
Jose Carlos Jesus
9ff9580fb0 [MSPAINT] Fix the type of cursor displayed when overlaying scrollbars (#5332)
When the window size is smaller than the image size in both directions, the wrong cursor is displayed when hovering the mouse over the scrollbars.

Readjust position for file date and file size objects, to fit all text.

CORE-18867
2023-06-13 13:01:39 +09:00
Thamatip Chitpong
3da25b73c2 [MMSYS] Use PWSTR instead of PWCHAR for string (#5333)
Use PWSTR instead of PWCHAR for string
Constify some function arguments
2023-06-12 21:52:56 +02:00
Katayama Hirofumi MZ
83762575e1 [MSPAINT] Add (CS_HREDRAW | CS_VREDRAW) style to CCanvasWindow
Reduce repainting defects. CORE-18867
2023-06-12 21:12:37 +09:00
Joachim Henze
d3164a0f55 [SHELL32] Strip leftover in CDefView::FillFileMenu() (#5330)
In 0.4.14-dev-955-g 1cf564c25f
Katayama experimented with populating explorers file-menu when no object is selected.

Later we found out, that none of the new entries introduced by that commit really
made sense and even created duplicates. So the commit was reverted by
0.4.15-dev-6039-g 0fa4edebd9 'Revert CDefView::FillFileMenu (#5278)' CORE-18429

But it seems that not all parts were properly reverted back then,
maybe because 6 lines of new code were written between the two lines in the meantime.
2023-06-11 20:53:25 +02:00
George Bișoc
0f9be53985 [WIN32K:NTUSER] Fix an unintialized user's token variable case
And remove the "!NT_SUCCESS(Status)" check which is excessive, the expected
status will always be STATUS_BUFFER_TOO_SMALL anyway. This should fix
some compilation warnings spotted by GCC. Courtesy goes to Hermes for letting
me know of these warnings.
2023-06-11 18:14:02 +02:00
Stanislav Motylkov
7d5e159131 [NTOS:PNP] Assign correct PnP IDs to the devices detected by bootloader
Based on a commit by Vadim Galyant:
5ef5c11e7f

Also fix a minor type conversion warning. CORE-18963 CORE-17977

Co-authored-by: Vadim Galyant <vgal@rambler.ru>
2023-06-11 16:19:02 +03:00
Oleg Dubinskiy
114bc2b96e [NTGDI][NTUSER] Load DirectX graphics driver at system startup (#4551)
CORE-18221

Load the DirectX graphics kernel driver (dxg.sys) by win32k at WINSRV
initialization time, in NtUserInitialize(). Keep it always loaded in
memory, as on Windows, instead of loading it only by DirectX dlls.

This fixes the problem of acessing this driver: we need only to call
DxDdEnableDirectDraw() and do other stuff when DirectDraw/Direct3D is
required by anything. In other cases, it is called from win32k PDEV
functions when changing display mode (as in Windows). Since it's used
by other things too, it needs to be always loaded.

Otherwise, if it's not loaded, its APIs are not accessible when needed,
and execution fails.

For example, it fixes display mode change problem in VMWare, when a
new mode fails to be applied. Indeed, when it manages DirectDraw stuff,
it calls DXG routines, and therefore fails if dxg.sys isn't loaded
in memory at this moment.

- Implement InitializeGreCSRSS() initialization routine, that initializes
  supplemental NTGDI/GRE data once CSRSS and WINSRV are loaded:
  * Call DxDdStartupDxGraphics() inside it, which loads dxg.sys.
  * Additionally, move fonts and language ID initialization there, from
   win32k!DriverEntry. Confirmed by analysis on Windows.

- Call InitializeGreCSRSS() in NtUserInitialize() main initialization routine
  (called by WINSRV initialization).

Moved to NTGDI from previously NTUSER place:

Co-authored-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
2023-06-11 13:44:56 +02:00
Sophie Lemos
29a706fc5a [NTOS:PNP] Fix bug causing all devices be considered as already existing
We should compare against DeviceObject as DeviceInstance is never NULL.
Fix a resource leak as well. The bug CORE-18983 seems to lay somewhere
else though, I just stumbled upon this one while researching it.

Note there is a BSOD in the PnP manager on reboot after the driver
installation failure, but it seems it was uncovered by the fix
as opposed to caused by it.
2023-06-11 13:13:11 +03:00
Andrei Miloiu
fa388640ca [GETUNAME] Update Romanian translation (#5323) 2023-06-10 20:03:23 +00:00
Andrei Miloiu
0887c1c040 [GETUNAME] Update Romanian translation (#5323) 2023-06-10 21:47:35 +02:00
Jose Carlos Jesus
ed22908780 [MSPAINT] Update Portuguese (pt-PT) translation (#5319) 2023-06-10 16:21:54 +00:00
Milan Raymakers
4782c314d4 [TRANSLATION] Improve Dutch (nl-NL) translation (#4765)
- [NOTEPAD] Improve Dutch (nl-NL) translation
- [TASKMGR] Improve Dutch (nl-NL) translation
- [WELCOME] Improve Dutch (nl-NL) translation
- [EXPLORER] Improve Dutch (nl-NL) translation

Reviewed-by: Mark Jansen <mark.jansen@reactos.org>
2023-06-10 18:32:03 +03:00
Eric Kohl
c3db5e9c8e [ADVAPI32][SECLOGON] CreateProcessWithLogonW: Pass the environment to the callee 2023-06-10 14:10:14 +02:00
George Bișoc
59e74584ac [NTOS:SE] Refactor SeTokenCanImpersonate
- Refactor most of the code, since there's quite some stuff that don't make much sense.
For instance ImpersonationLevel is basically the requested impersonation level a
server asks for. PsImpersonateClient doesn't explicitly say that SecurityAnonymous
and SecurityIdentification are not allowed. If the server was to give such levels
it simply means it doesn't want to impersonate the client.

Another thing that doesn't make much sense is that we check if the client is
associated with an anonymous token, then avoid impersonating regular anonymous
tokens that weren't created by the system. Only system can create such tokens
and an anonymous token basically means a token with hidden security info.

- Check that the server is within the same client logon session.

- If the server is granted the SeImpersonatePrivilege privilege, allow impersonation
regardless of the conditions we want to check for.

- Update the documentation and code comments.
2023-06-09 11:53:56 +02:00
George Bișoc
8e2fe925f2 [NTOS:PS] Do not reference the copied token twice and properly assign the impersonation level in case the server can't impersonate
As it currently stands the PsImpersonateClient routine does the following approach.
If impersonation couldn't be granted to a client the routine will make a copy
of the client's access token. As it makes a copy of the said token PsImpersonateClient
will reference the copied token after impersonation info have been filled out.
In the same code path we are assigning the desired level for impersonation to thread
impersonation info.

This is wrong for two reasons:

- On a copy situation the SeCopyClientToken routine holds a reference as the object
has been created. Referencing it at the bottom of the PsImpersonateClient routine
will make it that the token is referenced twice and whenever a server stops
impersonation the token still has an extra reference count which keeps the token
still alive in object database and memory space.

- If client impersonation is not possible the thread impersonation info should
have been assigned SecurityIdentification level to further indicate that the
actual impersonation of the thread is not currently in force but instead we
are assigning the impersonation level that is supplied by the caller. For instance
if the requested level is SecurityDelegation but impersonation is not possible
the level will be assigned that of SecurityDelegation yet the token has an
impersonation level of SecurityIdentification. This could lead to erratic behaviors
as well as potential impersonation escalation.

Fix the aforementioned issues by avoiding a double reference and properly assign
the impersonation level to SecurityIdentification if the server is not able to
impersonate the target client.
2023-06-09 11:53:55 +02:00
George Bișoc
f483e42f89 [NTOS:SE] Grant the SYSTEM process the missing privileges
- Add the missing privileges to the SYSTEM privileges which might be needed,
notably SeUndockPrivilege, SeManageVolumePrivilege, SeCreateGlobalPrivilege and
SeImpersonatePrivilege.

Specifically SeImpersonatePrivilege is important here because with it we
allow system components of the core OS to perform certain system tasks.

- Declare the Groups array with a maximum of 3 elements in SepCreateSystemProcessToken
and 1 element in SepCreateSystemAnonymousLogonToken respectively, because previously
this array was oversized with most of free space left as a waste.

- Avoid hardcoding the size value of the Privilege array, instead initialize it
by hand and compute the exact number of elements with RTL_NUMBER_OF.
2023-06-09 11:53:51 +02:00
George Bișoc
d8bfe2a261 [GITHUB] Draft PRs should be exempt from closure by the stale PR bot 2023-06-09 11:43:04 +02:00
George Bișoc
56a450147c [GITHUB] Temporarily disable MSBuild
Due to a update of MSBuild build worker, MSBuild keeps failing which is a nuisance.
Temporarily disable that worker until a proper fix is shipped.

CORE-18911
2023-06-06 20:06:01 +02:00
Hermès Bélusca-Maïto
8061a6f6f4 [FREELDR] Cleanup some FldrCreateComponentKey() calls and archwsup.c 2023-06-05 22:39:47 +02:00
Hermès Bélusca-Maïto
0b695a6f70 [NTOS:IO] iorsrce.c: Add DBG traces for bus/device enumeration functions. 2023-06-04 21:40:08 +02:00
Hermès Bélusca-Maïto
2674e26cbb [NTOS:IO] Reformat iorsrce.c, no functional code changes.
- Fix whitespace; add SAL annotations, doxygen documentation...

- Deduplicate the array of description strings corresponding to
  IO_QUERY_DEVICE_DATA_FORMAT.

- Unhardcode the "[3]" into 'IoQueryDeviceMaxData': the maximum number
  of device data queried.
2023-06-04 21:40:07 +02:00
Hermès Bélusca-Maïto
509359b3ec [DDK] Add some documentation about the VIDEO_HARDWARE_CONFIGURATION_DATA structure. 2023-06-04 21:40:06 +02:00
Hermès Bélusca-Maïto
2e305b251b [DDK] Correct PERF_CONFIGURATION_DATA definition. 2023-06-04 21:40:05 +02:00
Hermès Bélusca-Maïto
8d242c6229 [SDK] Add CONFIGURATION_TYPE definition back in arc.h
The definition is also in xdk/iotypes.h and ntddk.h around _ARC_DDK_
for compatibility, but arc.h should also be self-contained regarding
ARC definitions.
2023-06-04 21:40:04 +02:00
Hermès Bélusca-Maïto
789a296c43 [SDK:XBOX] Add missing 'VOID' in empty function prototypes. 2023-06-04 21:40:03 +02:00
Hermès Bélusca-Maïto
6db0d24fb6 Fix typo "managment" -> "management" in our codebase...
... except for 3rd-party code or "official" names.
2023-06-04 21:39:56 +02:00
Katayama Hirofumi MZ
13b1eadebb [KERNEL32] LCMapString: Convert Chinese characters (#5316)
* [KERNEL32] LCMAP_SIMPLIFIED_CHINESE and LCMAP_TRADITIONAL_CHINESE

* fix

* improve

* reduce data

* improve
2023-06-04 21:46:01 +09:00
George Bișoc
51279c3e44 [NTOS:SE] Refactor NtOpenThreadTokenEx
- Wrap most of the code into a new private routine, SepOpenThreadToken.
And properly fail gracefully if we fail to open a thread's token instead of just keeping going.

- Do not use the same thread object that we have referenced in NtOpenThreadTokenEx
to do a copy of the access token in case we can't open it directly.
Instead we must reference a new object with full access, solely used for
the purpose to do our required operations.

- Add debug prints

CORE-18986
2023-06-04 11:09:34 +02:00
George Bișoc
a389f8aa0c [NTOS:SE] Make an access token effective after the end of token duplication
Removing any disabled privileges or groups in the middle of token dynamic
part allocation can pose problems. During the operation of making an access
token as effective, we are toying with the privileges and groups arrays
of the token.

After that we are allocating the dynamic part and set EndMem (the end tail
of the memory part) to that dynamic part, previously it was set to the
variable part. As a matter of fact we are making the token effective in
the middle where EndMem still points to VariablePart, thus DynamicPart
will end up with memory pool blocks butchered in the pool list.

Another problem, albeit not related to the DynamicPart corruption, is that
the code starts iterating over the UserAndGroups array from 0, which is
the actual user. One cannot simply remove the user from the array, so we
have to start looping right from the groups.

Move the token effective code part at the end of the SepDuplicateToken
function, which fixes the random pool corruptions caused by the butchered
DynamicPart.

CORE-18986
2023-06-04 11:09:22 +02:00
Katayama Hirofumi MZ
d708c7947b [MSPAINT] Use better units for image resolution (#5301)
Our paint program used the pixels per meter (PPM)
unit but this unit is hardly used in the world.
Let's use DPI (dots per inch) and/or pixels per
centimeter (PPCM). CORE-18867
2023-06-04 11:24:00 +09:00
Timo Kreuzer
b29b2682bf [UMPNPMGR] Fix uninitialized variable (#5310)
The unhiding and guilty revision that was identified by @stasm by bisecting the
bootability of LiveCD was 0.4.15-dev-6050-g13e6cbc
As that was the symptom: "We could not longer boot livecd". CORE-18986
2023-06-01 19:44:05 +09:00
Katayama Hirofumi MZ
36cdd34814 [MSPAINT] Use black and R2_NOTXORPEN instead of white and R2_XORPEN
Workaround. CORE-18867, CORE-18921
2023-05-31 17:00:05 +09:00
Katayama Hirofumi MZ
bddd8b058c [MSPAINT] Minor adjustment on drawing text on TOOL_TEXT
CORE-18867
2023-05-31 13:31:50 +09:00
Katayama Hirofumi MZ
aeffa57ec7 [MSPAINT] Fix textbox background by using WM_CTLCOLOREDIT
CORE-18867
2023-05-31 13:21:01 +09:00
Eric Kohl
2626c724e9 [UMPNPMGR] Replace some magic values 2023-05-29 11:58:09 +02:00
Eric Kohl
024daea0af [UMPNPMGR] Check ulFlags in PNP_GetGlobalState
Return CR_INVALID_FLAG if ulFlags is not zero.
2023-05-29 09:54:31 +02:00
Eric Kohl
13e6cbcafa [UMPNPMGR] Check for interactive caller in PNP_ReportLogOn
Do not run device install when a non-interactive user logs on.
2023-05-29 09:38:31 +02:00
Eric Kohl
e54b32b434 [RPCRT4] Set binding handle for server functions
This enables us to impersonate server functions using RpcImpersonateClient.
2023-05-28 21:04:01 +02:00
Timo Kreuzer
8f9ef68ea7 [WIN32K][WIN32U] Fix system call ids (#5287)
- Delete the win32ksvc-ros.h file, which was not used
- Use a separate file for x64 (based on 2k3 x64 free)
- Delete w32ksvc.db. It's unused since ages.
2023-05-28 16:19:50 +03:00
Stanislav Motylkov
b29e82d0e0 [APPWIZ] Use new Appwiz-mode to start RAPPS with "Installed" section open
CORE-18981
2023-05-27 15:38:35 +03:00
Stanislav Motylkov
acbb73a89d [RAPPS] Open "Installed" section in Appwiz-mode when RAPPS already runs
CORE-18981
2023-05-27 15:38:01 +03:00
Stanislav Motylkov
ff1fa4f38a [RAPPS] Add /APPWIZ command-line key to open "Installed" section
Addendum to ab7ddc44. CORE-18981
2023-05-27 15:36:53 +03:00
Stanislav Motylkov
d6fecc52d1 [RAPPS] Move CMainWindow creation to upper function 2023-05-27 15:31:03 +03:00
Stanislav Motylkov
85ca8afb60 [NTOS:PNP] IopEnumerateDetectedDevices(): General refactoring
CORE-18962

- Deduplicate a while-loop by adding one more recursive call.
- Add IopMapDetectedDeviceId() helper function with a structure
  in order to reduce hardcoded constants and checks.
2023-05-27 12:22:57 +02:00
Nikita Piatygorskiy
2eb67000a5 [DXDIAG] Fix inconsistent WS_DISABLED style (#5303)
Make resource files consistent among different languages.

CORE-18903

Add the WS_DISABLED flag for IDC_BUTTON_HELP and IDC_BUTTON_SAVE_INFO,
in those places where it was not done. The actions corresponding to those
buttons are currently unimplemented, this is why they were disabled.

Signed-off-by: Nikita Piatygorskiy <generalhammond16@gmail.com>
2023-05-26 18:47:06 +02:00
460 changed files with 36775 additions and 20478 deletions

View File

@@ -272,28 +272,29 @@ jobs:
name: reactos-syms-clang-cl-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
path: build/msvc_pdb
build-msbuild-i386:
name: MSBuild (i386)
runs-on: windows-2019
steps:
- name: Install Flex and Bison
run: |
curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
7z x flexbison.7z -O${{github.workspace}}\bin
echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Add CL to PATH
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64_x86
- uses: actions/checkout@v2
with:
path: src
- name: Configure
run: |
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=i386 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 ${{github.workspace}}\src
- name: Build
run: cmake --build ${{github.workspace}}\build --target bootcd --target livecd
# Disable MSBuild for the moment being until a proper fix is provided -- see CORE-18911
# build-msbuild-i386:
# name: MSBuild (i386)
# runs-on: windows-2019
# steps:
# - name: Install Flex and Bison
# run: |
# curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
# 7z x flexbison.7z -O${{github.workspace}}\bin
# echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
# echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
# echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
# - name: Add CL to PATH
# uses: ilammy/msvc-dev-cmd@v1
# with:
# arch: amd64_x86
# - uses: actions/checkout@v2
# with:
# path: src
# - name: Configure
# run: |
# mkdir build
# cd build
# cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=i386 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 ${{github.workspace}}\src
# - name: Build
# run: cmake --build ${{github.workspace}}\build --target bootcd --target livecd

View File

@@ -26,6 +26,7 @@ jobs:
days-before-close: 14
days-before-issue-close: -1
exempt-all-assignees: true
exempt-draft-pr: true
stale-pr-message: 'This PR is stale because it received no updates in the last 4 months. Without removing the stale label, or commenting on this ticket it will be closed in 2 weeks.'
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'

View File

@@ -15,7 +15,7 @@ BEGIN
WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13
DEFPUSHBUTTON "選択", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "コピー", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
CONTROL "Advanced view", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
CONTROL "詳細表示", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
WS_TABSTOP, 8, 208, 95, 10
END
@@ -23,13 +23,13 @@ IDD_ADVANCED DIALOGEX 0, 0, 292, 64
STYLE DS_SHELLFONT | WS_CHILD
FONT 9, "MS UI Gothic"
BEGIN
LTEXT "Charset:", IDC_STATIC, 8, 8, 48, 8
LTEXT "文字セット:", IDC_STATIC, 8, 8, 48, 8
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Group by:", IDC_STATIC, 8, 28, 50, 8
LTEXT "分類:", IDC_STATIC, 8, 28, 50, 8
COMBOBOX IDC_COMBO_GROUPBY, 72, 24, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Search", IDC_BUTTON_SEARCH, 200, 44, 50, 14
PUSHBUTTON "検索", IDC_BUTTON_SEARCH, 200, 44, 50, 14
EDITTEXT IDC_EDIT_SEARCH, 72, 44, 116, 14, ES_AUTOHSCROLL
LTEXT "Search for:", IDC_STATIC, 8, 48, 42, 8
LTEXT "検索文字列:", IDC_STATIC, 8, 48, 42, 8
LTEXT "Unicode:", IDC_STATIC, 200, 8, 30, 8
EDITTEXT IDC_EDIT_UNICODE, 236, 4, 28, 12, ES_AUTOHSCROLL
END
@@ -48,9 +48,9 @@ END
STRINGTABLE
BEGIN
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
IDS_LICENSE "本プログラムはフリーソフトウェアです。フリーソフトウェア財団が発行した GNU 一般公衆利用許諾契約書のバージョン2、またはそれ以降のバージョン任意選択の条件の下で再配布、または改変することができます。\r\n\r\n本プログラムは、有用であることを期待して配布されていますが、商品性や特定目的への適合性についての暗黙の保証もなく、いかなる保証もありません。詳細は GNU 一般公衆利用許諾契約書をご覧ください。\r\n\r\nあなたはこのプログラムとともに GNU 一般公衆利用許諾書のコピーを受け取っているはずです。そうでない場合は、フリーソフトウェア財団(Free Software Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA)までご連絡ください。"
IDS_ABOUT "バージョン情報(&B)..."
IDS_TITLE "Character Map"
IDS_TITLE "文字コード表"
IDS_UNICODE "Unicode"
IDS_ALL "All"
IDS_ALL "すべて"
END

View File

@@ -1,7 +1,8 @@
/*
* FILE: base/applications/charmap/lang/ro-RO.rc
* ReactOS Project (https://reactos.org)
* TRANSLATOR: Ștefan Fulea (stefan dot fulea at mail dot com)
* TRANSLATORS: Copyright 2011-2018 Ștefan Fulea <stefan.fulea@mail.com>
* Copyright 2023 Andrei Miloiu <miloiuandrei@gmail.com>
*/
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
@@ -58,5 +59,5 @@ BEGIN
IDS_ABOUT "&Despre…"
IDS_TITLE "Hartă de caractere"
IDS_UNICODE "Unicode"
IDS_ALL "All"
IDS_ALL "Toate"
END

View File

@@ -9,9 +9,9 @@ CAPTION "Programa de diagnóstico de ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "Ay&uda", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Ay&uda", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Siguiente página", IDC_BUTTON_NEXT, 107, 260, 80, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Guardar toda la información...", IDC_BUTTON_SAVE_INFO, 201, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Guardar toda la información...", IDC_BUTTON_SAVE_INFO, 201, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Sa&lir", IDC_BUTTON_EXIT, 323, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -9,9 +9,9 @@ CAPTION "ReactX 분석 도구"
FONT 9, "굴림"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "도움말(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "도움말(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "다음 장(&N)", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "모든 정보 저장(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "모든 정보 저장(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "종료(&E)", IDC_BUTTON_EXIT, 425, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -7,9 +7,9 @@ CAPTION "Diagnostisch hulpprogramma voor ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Help", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Help", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Volgende Pagina", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Alle gegevens opslaan...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Alle gegevens opslaan...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Afsluiten", IDC_BUTTON_EXIT, 425, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -7,9 +7,9 @@ CAPTION "ReactX-diagnose program"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Hjelp", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Hjelp", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Neste side", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Lagre alt informasjon...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Lagre alt informasjon...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Avslutt", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -16,9 +16,9 @@ CAPTION "Narzędzie diagnostyki ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Pomoc", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Pomoc", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Następna", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Zapisz wszystkie informacje...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Zapisz wszystkie informacje...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Wyjście", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -9,9 +9,9 @@ CAPTION "Programa de Diagnóstico ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Ajuda", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Ajuda", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Próxima página", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Sal&var Informações...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "Sal&var Informações...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Sai&r", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -13,9 +13,9 @@ CAPTION "Diagnostic ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Manual…", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Manual…", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Următorul compartiment", IDC_BUTTON_NEXT, 187, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Păstrare informații…", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Păstrare informații…", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "Î&nchide", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -12,9 +12,9 @@ CAPTION "ReactX - diagnostický program"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Pomocník", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Pomocník", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "Ďalšia stra&na", IDC_BUTTON_NEXT, 250, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Uložiť všetky informácie...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Uložiť všetky informácie...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Skončiť", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -11,9 +11,9 @@ CAPTION "ReactX-Programi i diaknostikimit"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Ndihmë", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Ndihmë", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Faqja tjetër", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Ruaj të gjithë informacionet...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Ruaj të gjithë informacionet...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Dil", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -14,9 +14,9 @@ CAPTION "ReactX-diagnos program"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Hjälp", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Hjälp", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Nästa sida", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Spara all information...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Spara all information...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Avsluta", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -10,9 +10,9 @@ CAPTION "ReactX Tanı Aracı"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Yardım", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Yardım", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "S&onraki Sayfa", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Tüm Bilgileri Sakla...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Tüm Bilgileri Sakla...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Çıkış", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -15,9 +15,9 @@ CAPTION "Засіб діагностики ReactX"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "&Довідка", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Довідка", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "&Наступна сторінка", IDC_BUTTON_NEXT, 203, 260, 94, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Зберегти всю інформацію...", IDC_BUTTON_SAVE_INFO, 301, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "&Зберегти всю інформацію...", IDC_BUTTON_SAVE_INFO, 301, 260, 120, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "&Вихід", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -16,9 +16,9 @@ CAPTION "ReactX 诊断工具"
FONT 9, "宋体"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "帮助(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "帮助(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "下一页(&N)", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "保存所有信息(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "保存所有信息(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "退出(&E)", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -15,9 +15,9 @@ CAPTION "ReactX 診斷程式"
FONT 9, "新細明體"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "説明(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "説明(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "下一頁(&N)", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "儲存所有資訊(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "儲存所有資訊(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "結束(&E)", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -15,9 +15,9 @@ CAPTION "ReactX 診斷程式"
FONT 9, "新細明體"
BEGIN
CONTROL "Tab1", IDC_TAB_CONTROL, "SysTabControl32", WS_TABSTOP, 2, 2, 474, 250
PUSHBUTTON "說明(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "說明(&H)", IDC_BUTTON_HELP, 2, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
DEFPUSHBUTTON "下一頁(&N)", IDC_BUTTON_NEXT, 257, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "儲存所有資訊(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "儲存所有資訊(&S)...", IDC_BUTTON_SAVE_INFO, 311, 260, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "結束(&E)", IDC_BUTTON_EXIT, 425, 260, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END

View File

@@ -1,23 +1,8 @@
/*
* fontview display class
*
* display.c
*
* Copyright (C) 2007 Timo Kreuzer <timo <dot> kreuzer <at> reactos <dot> org>
*
* 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.
*
* This 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.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Display class
* COPYRIGHT: Copyright 2007 Timo Kreuzer <timo.kreuzer@reactos.org>
*/
#include "precomp.h"
@@ -37,488 +22,488 @@ LRESULT CALLBACK DisplayProc(HWND, UINT, WPARAM, LPARAM);
/* Internal data storage type */
typedef struct
{
int nPageHeight;
WCHAR szTypeFaceName[LF_FULLFACESIZE];
WCHAR szFormat[MAX_FORMAT];
WCHAR szString[MAX_STRING];
int nPageHeight;
WCHAR szTypeFaceName[LF_FULLFACESIZE];
WCHAR szFormat[MAX_FORMAT];
WCHAR szString[MAX_STRING];
HFONT hCaptionFont;
HFONT hCharSetFont;
HFONT hSizeFont;
HFONT hFonts[MAX_SIZES];
int nSizes[MAX_SIZES];
int nHeights[MAX_SIZES];
HFONT hCaptionFont;
HFONT hCharSetFont;
HFONT hSizeFont;
HFONT hFonts[MAX_SIZES];
int nSizes[MAX_SIZES];
int nHeights[MAX_SIZES];
} DISPLAYDATA;
/* This is the only public function, it registers the class */
BOOL
Display_InitClass(HINSTANCE hInstance)
{
WNDCLASSEXW wincl;
WNDCLASSEXW wincl;
/* Set the fontdisplay window class structure */
wincl.cbSize = sizeof(WNDCLASSEX);
wincl.style = CS_DBLCLKS;
wincl.lpfnWndProc = DisplayProc;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hInstance = hInstance;
wincl.hIcon = NULL;
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.hbrBackground = GetStockObject(WHITE_BRUSH);
wincl.lpszMenuName = NULL;
wincl.lpszClassName = g_szFontDisplayClassName;
wincl.hIconSm = NULL;
/* Set the fontdisplay window class structure */
wincl.cbSize = sizeof(WNDCLASSEX);
wincl.style = CS_DBLCLKS;
wincl.lpfnWndProc = DisplayProc;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hInstance = hInstance;
wincl.hIcon = NULL;
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.hbrBackground = GetStockObject(WHITE_BRUSH);
wincl.lpszMenuName = NULL;
wincl.lpszClassName = g_szFontDisplayClassName;
wincl.hIconSm = NULL;
/* Register the window class, and if it fails return FALSE */
if (!RegisterClassExW (&wincl))
{
return FALSE;
}
return TRUE;
/* Register the window class, and if it fails return FALSE */
if (!RegisterClassExW (&wincl))
{
return FALSE;
}
return TRUE;
}
static int
Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos)
{
HFONT hOldFont;
TEXTMETRIC tm;
int i, y;
WCHAR szSize[5];
WCHAR szCaption[LF_FULLFACESIZE + 20];
HFONT hOldFont;
TEXTMETRIC tm;
int i, y;
WCHAR szSize[5];
WCHAR szCaption[LF_FULLFACESIZE + 20];
/* This is the location on the DC where we draw */
y = -nYPos;
/* This is the location on the DC where we draw */
y = -nYPos;
hOldFont = SelectObject(hDC, pData->hCaptionFont);
GetTextMetrics(hDC, &tm);
hOldFont = SelectObject(hDC, pData->hCaptionFont);
GetTextMetrics(hDC, &tm);
swprintf(szCaption, L"%s%s", pData->szTypeFaceName, pData->szFormat);
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + SPACING1;
swprintf(szCaption, L"%s%s", pData->szTypeFaceName, pData->szFormat);
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + SPACING1;
/* Draw a separation Line */
SelectObject(hDC, GetStockObject(BLACK_PEN));
MoveToEx(hDC, 0, y, NULL);
LineTo(hDC, 10000, y);
y += SPACING2;
/* Draw a separation Line */
SelectObject(hDC, GetStockObject(BLACK_PEN));
MoveToEx(hDC, 0, y, NULL);
LineTo(hDC, 10000, y);
y += SPACING2;
/* TODO: Output font info */
/* TODO: Output font info */
/* Output Character set */
SelectObject(hDC, pData->hCharSetFont);
GetTextMetrics(hDC, &tm);
swprintf(szCaption, L"abcdefghijklmnopqrstuvwxyz");
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + 1;
/* Output Character set */
SelectObject(hDC, pData->hCharSetFont);
GetTextMetrics(hDC, &tm);
swprintf(szCaption, L"abcdefghijklmnopqrstuvwxyz");
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + 1;
swprintf(szCaption, L"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + 1;
swprintf(szCaption, L"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + 1;
swprintf(szCaption, L"0123456789.:,;(\"~!@#$%%^&*')");
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + 1;
swprintf(szCaption, L"0123456789.:,;(\"~!@#$%%^&*')");
TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
y += tm.tmHeight + 1;
/* Draw a separation Line */
SelectObject(hDC, GetStockObject(BLACK_PEN));
MoveToEx(hDC, 0, y, NULL);
LineTo(hDC, 10000, y);
y += SPACING2;
/* Draw a separation Line */
SelectObject(hDC, GetStockObject(BLACK_PEN));
MoveToEx(hDC, 0, y, NULL);
LineTo(hDC, 10000, y);
y += SPACING2;
/* Output the strings for different sizes */
for (i = 0; i < MAX_SIZES; i++)
{
SelectObject(hDC, pData->hFonts[i]);
TextOutW(hDC, 20, y, pData->szString, (INT)wcslen(pData->szString));
GetTextMetrics(hDC, &tm);
y += tm.tmHeight + 1;
SelectObject(hDC, pData->hSizeFont);
swprintf(szSize, L"%d", pData->nSizes[i]);
TextOutW(hDC, 0, y - 13 - tm.tmDescent, szSize, (INT)wcslen(szSize));
}
SelectObject(hDC, hOldFont);
/* Output the strings for different sizes */
for (i = 0; i < MAX_SIZES; i++)
{
SelectObject(hDC, pData->hFonts[i]);
TextOutW(hDC, 20, y, pData->szString, (INT)wcslen(pData->szString));
GetTextMetrics(hDC, &tm);
y += tm.tmHeight + 1;
SelectObject(hDC, pData->hSizeFont);
swprintf(szSize, L"%d", pData->nSizes[i]);
TextOutW(hDC, 0, y - 13 - tm.tmDescent, szSize, (INT)wcslen(szSize));
}
SelectObject(hDC, hOldFont);
return y;
return y;
}
static int
CALLBACK
EnumFontFamProcW(
const LOGFONTW *lpelfe,
const TEXTMETRICW *lptm,
DWORD FontType,
LPARAM lParam)
const LOGFONTW *lpelfe,
const TEXTMETRICW *lptm,
DWORD FontType,
LPARAM lParam)
{
PNEWTEXTMETRICW pntmw = (PNEWTEXTMETRICW)lptm;
PBOOL pfOpenType = (PBOOL)lParam;
PNEWTEXTMETRICW pntmw = (PNEWTEXTMETRICW)lptm;
PBOOL pfOpenType = (PBOOL)lParam;
if (FontType & TRUETYPE_FONTTYPE)
{
if (pntmw->ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
{
*pfOpenType = TRUE;
return FALSE;
}
}
return TRUE;
if (FontType & TRUETYPE_FONTTYPE)
{
if (pntmw->ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
{
*pfOpenType = TRUE;
return FALSE;
}
}
return TRUE;
}
static LRESULT
Display_SetTypeFace(HWND hwnd, PLOGFONTW pLogFont)
{
DISPLAYDATA* pData;
TEXTMETRIC tm;
HDC hDC;
RECT rect;
SCROLLINFO si;
int i;
LOGFONTW logfont;
BOOL fOpenType;
BYTE Buffer[512];
LPOUTLINETEXTMETRICW pOTM = (LPOUTLINETEXTMETRICW)Buffer;
LPWSTR pch;
DISPLAYDATA* pData;
TEXTMETRIC tm;
HDC hDC;
RECT rect;
SCROLLINFO si;
int i;
LOGFONTW logfont;
BOOL fOpenType;
BYTE Buffer[512];
LPOUTLINETEXTMETRICW pOTM = (LPOUTLINETEXTMETRICW)Buffer;
LPWSTR pch;
/* Set the new type face name */
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
lstrcpynW(pData->szTypeFaceName, pLogFont->lfFaceName,
ARRAYSIZE(pData->szTypeFaceName));
/* Set the new type face name */
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
lstrcpynW(pData->szTypeFaceName, pLogFont->lfFaceName,
ARRAYSIZE(pData->szTypeFaceName));
/* Create the new fonts */
hDC = GetDC(hwnd);
DeleteObject(pData->hCharSetFont);
/* Create the new fonts */
hDC = GetDC(hwnd);
DeleteObject(pData->hCharSetFont);
logfont = *pLogFont;
logfont.lfHeight = -MulDiv(16, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72);
pData->hCharSetFont = CreateFontIndirectW(&logfont);
logfont = *pLogFont;
logfont.lfHeight = -MulDiv(16, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72);
pData->hCharSetFont = CreateFontIndirectW(&logfont);
/* Get font format */
SelectObject(hDC, pData->hCharSetFont);
GetTextMetrics(hDC, &tm);
if (tm.tmPitchAndFamily & TMPF_TRUETYPE)
{
if (GetOutlineTextMetricsW(hDC, sizeof(Buffer), pOTM))
{
LPBYTE pb = Buffer;
pb += (WORD)(DWORD_PTR)pOTM->otmpStyleName;
pch = (LPWSTR)pb;
if (*pch)
{
lstrcatW(pData->szTypeFaceName, L" ");
lstrcatW(pData->szTypeFaceName, pch);
}
}
/* Get font format */
SelectObject(hDC, pData->hCharSetFont);
GetTextMetrics(hDC, &tm);
if (tm.tmPitchAndFamily & TMPF_TRUETYPE)
{
if (GetOutlineTextMetricsW(hDC, sizeof(Buffer), pOTM))
{
LPBYTE pb = Buffer;
pb += (WORD)(DWORD_PTR)pOTM->otmpStyleName;
pch = (LPWSTR)pb;
if (*pch)
{
lstrcatW(pData->szTypeFaceName, L" ");
lstrcatW(pData->szTypeFaceName, pch);
}
}
fOpenType = FALSE;
EnumFontFamiliesExW(hDC, &logfont,
EnumFontFamProcW, (LPARAM)&fOpenType, 0);
fOpenType = FALSE;
EnumFontFamiliesExW(hDC, &logfont,
EnumFontFamProcW, (LPARAM)&fOpenType, 0);
if (fOpenType)
swprintf(pData->szFormat, L" (OpenType)");
else
swprintf(pData->szFormat, L" (TrueType)");
}
else if (tm.tmPitchAndFamily & TMPF_VECTOR)
{
swprintf(pData->szFormat, L" (Vector)");
}
else
{
swprintf(pData->szFormat, L" (Raster)");
}
if (fOpenType)
swprintf(pData->szFormat, L" (OpenType)");
else
swprintf(pData->szFormat, L" (TrueType)");
}
else if (tm.tmPitchAndFamily & TMPF_VECTOR)
{
swprintf(pData->szFormat, L" (Vector)");
}
else
{
swprintf(pData->szFormat, L" (Raster)");
}
for (i = 0; i < MAX_SIZES; i++)
{
DeleteObject(pData->hFonts[i]);
logfont.lfHeight = -MulDiv(pData->nSizes[i], GetDeviceCaps(hDC, LOGPIXELSY), 72);
pData->hFonts[i] = CreateFontIndirectW(&logfont);
}
for (i = 0; i < MAX_SIZES; i++)
{
DeleteObject(pData->hFonts[i]);
logfont.lfHeight = -MulDiv(pData->nSizes[i], GetDeviceCaps(hDC, LOGPIXELSY), 72);
pData->hFonts[i] = CreateFontIndirectW(&logfont);
}
/* Calculate new page dimensions */
pData->nPageHeight = Display_DrawText(hDC, pData, 0);
ReleaseDC(hwnd, hDC);
/* Calculate new page dimensions */
pData->nPageHeight = Display_DrawText(hDC, pData, 0);
ReleaseDC(hwnd, hDC);
/* Set the vertical scrolling range and page size */
GetClientRect(hwnd, &rect);
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
si.nMin = 0;
si.nMax = pData->nPageHeight;
si.nPage = rect.bottom;
si.nPos = 0;
si.nTrackPos = 0;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
/* Set the vertical scrolling range and page size */
GetClientRect(hwnd, &rect);
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
si.nMin = 0;
si.nMax = pData->nPageHeight;
si.nPage = rect.bottom;
si.nPos = 0;
si.nTrackPos = 0;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
return 0;
return 0;
}
static LRESULT
Display_SetString(HWND hwnd, LPCWSTR pszString)
{
DISPLAYDATA* pData;
DISPLAYDATA* pData;
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
lstrcpynW(pData->szString, pszString, ARRAYSIZE(pData->szString));
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
lstrcpynW(pData->szString, pszString, ARRAYSIZE(pData->szString));
InvalidateRect(hwnd, NULL, TRUE);
InvalidateRect(hwnd, NULL, TRUE);
return 0;
return 0;
}
static LRESULT
Display_OnCreate(HWND hwnd)
{
DISPLAYDATA* pData;
const int nSizes[MAX_SIZES] = {8, 12, 18, 24, 36, 48, 60, 72};
int i;
LOGFONTW LogFont = {50, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
DEFAULT_PITCH , L"MS Shell Dlg"};
DISPLAYDATA* pData;
const int nSizes[MAX_SIZES] = {8, 12, 18, 24, 36, 48, 60, 72};
int i;
LOGFONTW LogFont = {50, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
DEFAULT_PITCH , L"MS Shell Dlg"};
/* Create data structure */
pData = malloc(sizeof(DISPLAYDATA));
ZeroMemory(pData, sizeof(DISPLAYDATA));
/* Create data structure */
pData = malloc(sizeof(DISPLAYDATA));
ZeroMemory(pData, sizeof(DISPLAYDATA));
/* Set the window's GWLP_USERDATA to our data structure */
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pData);
/* Set the window's GWLP_USERDATA to our data structure */
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pData);
for (i = 0; i < MAX_SIZES; i++)
{
pData->nSizes[i] = nSizes[i];
}
for (i = 0; i < MAX_SIZES; i++)
{
pData->nSizes[i] = nSizes[i];
}
pData->hCaptionFont = CreateFontIndirectW(&LogFont);
LogFont.lfHeight = 12;
pData->hSizeFont = CreateFontIndirectW(&LogFont);
pData->hCaptionFont = CreateFontIndirectW(&LogFont);
LogFont.lfHeight = 12;
pData->hSizeFont = CreateFontIndirectW(&LogFont);
Display_SetString(hwnd,
L"Jackdaws love my big sphinx of quartz. 1234567890");
Display_SetString(hwnd,
L"Jackdaws love my big sphinx of quartz. 1234567890");
Display_SetTypeFace(hwnd, &LogFont);
Display_SetTypeFace(hwnd, &LogFont);
return 0;
return 0;
}
static LRESULT
Display_OnPaint(HWND hwnd)
{
DISPLAYDATA* pData;
PAINTSTRUCT ps;
SCROLLINFO si;
DISPLAYDATA* pData;
PAINTSTRUCT ps;
SCROLLINFO si;
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
/* Get the Scroll position */
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
/* Get the Scroll position */
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
BeginPaint(hwnd, &ps);
BeginPaint(hwnd, &ps);
/* Erase background */
FillRect(ps.hdc, &ps.rcPaint, GetStockObject(WHITE_BRUSH));
/* Erase background */
FillRect(ps.hdc, &ps.rcPaint, GetStockObject(WHITE_BRUSH));
/* Draw the text */
Display_DrawText(ps.hdc, pData, si.nPos);
/* Draw the text */
Display_DrawText(ps.hdc, pData, si.nPos);
EndPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
return 0;
return 0;
}
static LRESULT
Display_OnSize(HWND hwnd)
{
RECT rect;
SCROLLINFO si;
int nOldPos;
RECT rect;
SCROLLINFO si;
int nOldPos;
GetClientRect(hwnd, &rect);
GetClientRect(hwnd, &rect);
/* Get the old scroll pos */
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
nOldPos = si.nPos;
/* Get the old scroll pos */
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
nOldPos = si.nPos;
/* Set the new page size */
si.fMask = SIF_PAGE;
si.nPage = rect.bottom;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
/* Set the new page size */
si.fMask = SIF_PAGE;
si.nPage = rect.bottom;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
/* Get the new scroll pos */
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
/* Get the new scroll pos */
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
/* If they don't match ... */
if (nOldPos != si.nPos)
{
/* ... scroll the window */
ScrollWindowEx(hwnd, 0, nOldPos - si.nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
UpdateWindow(hwnd);
}
/* If they don't match ... */
if (nOldPos != si.nPos)
{
/* ... scroll the window */
ScrollWindowEx(hwnd, 0, nOldPos - si.nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
UpdateWindow(hwnd);
}
return 0;
return 0;
}
static LRESULT
Display_OnVScroll(HWND hwnd, WPARAM wParam)
{
SCROLLINFO si;
int nPos;
SCROLLINFO si;
int nPos;
si.cbSize = sizeof(si);
si.fMask = SIF_POS | SIF_RANGE | SIF_TRACKPOS;
GetScrollInfo(hwnd, SB_VERT, &si);
si.cbSize = sizeof(si);
si.fMask = SIF_POS | SIF_RANGE | SIF_TRACKPOS;
GetScrollInfo(hwnd, SB_VERT, &si);
switch(LOWORD(wParam))
{
case SB_PAGEUP:
nPos = si.nPos - 50;
break;
case SB_PAGEDOWN:
nPos = si.nPos + 50;
break;
case SB_LINEUP:
nPos = si.nPos - 10;
break;
case SB_LINEDOWN:
nPos = si.nPos + 10;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
nPos = si.nTrackPos;
break;
default:
nPos = si.nPos;
}
switch(LOWORD(wParam))
{
case SB_PAGEUP:
nPos = si.nPos - 50;
break;
case SB_PAGEDOWN:
nPos = si.nPos + 50;
break;
case SB_LINEUP:
nPos = si.nPos - 10;
break;
case SB_LINEDOWN:
nPos = si.nPos + 10;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
nPos = si.nTrackPos;
break;
default:
nPos = si.nPos;
}
nPos = max(nPos, si.nMin);
nPos = min(nPos, si.nMax);
if (nPos != si.nPos)
{
ScrollWindowEx(hwnd, 0, si.nPos - nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
si.cbSize = sizeof(si);
si.nPos = nPos;
si.fMask = SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
UpdateWindow(hwnd);
}
nPos = max(nPos, si.nMin);
nPos = min(nPos, si.nMax);
if (nPos != si.nPos)
{
ScrollWindowEx(hwnd, 0, si.nPos - nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
si.cbSize = sizeof(si);
si.nPos = nPos;
si.fMask = SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
UpdateWindow(hwnd);
}
return 0;
return 0;
}
static LRESULT
Display_OnDestroy(HWND hwnd)
{
DISPLAYDATA* pData;
int i;
DISPLAYDATA* pData;
int i;
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
/* Delete the fonts */
DeleteObject(pData->hCaptionFont);
DeleteObject(pData->hCharSetFont);
DeleteObject(pData->hSizeFont);
/* Delete the fonts */
DeleteObject(pData->hCaptionFont);
DeleteObject(pData->hCharSetFont);
DeleteObject(pData->hSizeFont);
for (i = 0; i < MAX_SIZES; i++)
{
DeleteObject(pData->hFonts[i]);
}
for (i = 0; i < MAX_SIZES; i++)
{
DeleteObject(pData->hFonts[i]);
}
/* Free the data structure */
free(pData);
/* Free the data structure */
free(pData);
return 0;
return 0;
}
LRESULT
Display_OnPrint(HWND hwnd)
{
PRINTDLG pfont;
TEXTMETRIC tm;
int copies, yPos;
PRINTDLG pfont;
TEXTMETRIC tm;
int copies, yPos;
/* Clears the memory before using it */
ZeroMemory(&pfont, sizeof(pfont));
/* Clears the memory before using it */
ZeroMemory(&pfont, sizeof(pfont));
pfont.lStructSize = sizeof(pfont);
pfont.hwndOwner = hwnd;
pfont.hDevMode = NULL;
pfont.hDevNames = NULL;
pfont.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
pfont.nCopies = 1;
pfont.nFromPage = 0xFFFF;
pfont.nToPage = 0xFFFF;
pfont.nMinPage = 1;
pfont.nMaxPage = 0xFFFF;
pfont.lStructSize = sizeof(pfont);
pfont.hwndOwner = hwnd;
pfont.hDevMode = NULL;
pfont.hDevNames = NULL;
pfont.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
pfont.nCopies = 1;
pfont.nFromPage = 0xFFFF;
pfont.nToPage = 0xFFFF;
pfont.nMinPage = 1;
pfont.nMaxPage = 0xFFFF;
/* Opens up the print dialog box */
if (PrintDlg(&pfont))
{
DOCINFO docinfo;
/* Opens up the print dialog box */
if (PrintDlg(&pfont))
{
DOCINFO docinfo;
#if 0
DISPLAYDATA* pData;
DISPLAYDATA* pData;
pData = malloc(sizeof(DISPLAYDATA));
ZeroMemory(pData, sizeof(DISPLAYDATA));
pData = malloc(sizeof(DISPLAYDATA));
ZeroMemory(pData, sizeof(DISPLAYDATA));
/* Sets up the font layout */
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
/* Sets up the font layout */
pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
#endif
docinfo.cbSize = sizeof(DOCINFO);
docinfo.lpszDocName = L"Printing Font";
docinfo.lpszOutput = NULL;
docinfo.lpszDatatype = NULL;
docinfo.fwType = 0;
docinfo.cbSize = sizeof(DOCINFO);
docinfo.lpszDocName = L"Printing Font";
docinfo.lpszOutput = NULL;
docinfo.lpszDatatype = NULL;
docinfo.fwType = 0;
/* We start printing */
StartDoc(pfont.hDC, &docinfo);
/* We start printing */
StartDoc(pfont.hDC, &docinfo);
/* Grabs the text metrics for the printer */
GetTextMetrics(pfont.hDC, &tm);
/* Grabs the text metrics for the printer */
GetTextMetrics(pfont.hDC, &tm);
/* Start out with 0 for the y position for the page */
yPos = 0;
/* Start out with 0 for the y position for the page */
yPos = 0;
/* Starts out with the current page */
StartPage(pfont.hDC);
/* Starts out with the current page */
StartPage(pfont.hDC);
/* Used when printing for more than one copy */
for (copies = 0; copies < pfont.nCopies; copies++)
{
/* Test output */
TextOutW(pfont.hDC, 10, yPos, L"Testing...1...2...3", 19);
/* Used when printing for more than one copy */
for (copies = 0; copies < pfont.nCopies; copies++)
{
/* Test output */
TextOutW(pfont.hDC, 10, yPos, L"Testing...1...2...3", 19);
/* TODO: Determine if using Display_DrawText() will work for both rendering out to the
window and to the printer output */
/* TODO: Determine if using Display_DrawText() will work for both rendering out to the
window and to the printer output */
#if 0
Display_DrawText(pfont.hDC, pData, yPos);
Display_DrawText(pfont.hDC, pData, yPos);
#endif
/* Ends the current page */
EndPage(pfont.hDC);
/* Ends the current page */
EndPage(pfont.hDC);
/* If we are making more than one copy, start a new page */
if (copies != pfont.nCopies)
{
yPos = 0;
StartPage(pfont.hDC);
}
}
/* If we are making more than one copy, start a new page */
if (copies != pfont.nCopies)
{
yPos = 0;
StartPage(pfont.hDC);
}
}
/* The printing is now over */
EndDoc(pfont.hDC);
/* The printing is now over */
EndDoc(pfont.hDC);
DeleteDC(pfont.hDC);
DeleteDC(pfont.hDC);
#if 0
/* Frees the memory since we no longer need it for now */
free(pData);
/* Frees the memory since we no longer need it for now */
free(pData);
#endif
}
}
return 0;
return 0;
}
LRESULT
@@ -542,36 +527,35 @@ Display_GetFullName(HWND hwnd, INT length, PWSTR ptr)
LRESULT CALLBACK
DisplayProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
return Display_OnCreate(hwnd);
switch (message)
{
case WM_CREATE:
return Display_OnCreate(hwnd);
case WM_PAINT:
return Display_OnPaint(hwnd);
case WM_PAINT:
return Display_OnPaint(hwnd);
case WM_SIZE:
return Display_OnSize(hwnd);
case WM_SIZE:
return Display_OnSize(hwnd);
case WM_VSCROLL:
return Display_OnVScroll(hwnd, wParam);
case WM_VSCROLL:
return Display_OnVScroll(hwnd, wParam);
case FVM_SETTYPEFACE:
return Display_SetTypeFace(hwnd, (PLOGFONTW)lParam);
case FVM_SETTYPEFACE:
return Display_SetTypeFace(hwnd, (PLOGFONTW)lParam);
case FVM_SETSTRING:
return Display_SetString(hwnd, (WCHAR *)lParam);
case FVM_SETSTRING:
return Display_SetString(hwnd, (WCHAR *)lParam);
case FVM_GETFULLNAME:
return Display_GetFullName(hwnd, (INT)wParam, (PWSTR)lParam);
case FVM_GETFULLNAME:
return Display_GetFullName(hwnd, (INT)wParam, (PWSTR)lParam);
case WM_DESTROY:
return Display_OnDestroy(hwnd);
case WM_DESTROY:
return Display_OnDestroy(hwnd);
default:
return DefWindowProcW(hwnd, message, wParam, lParam);
}
default:
return DefWindowProcW(hwnd, message, wParam, lParam);
}
return 0;
return 0;
}

View File

@@ -1,24 +1,9 @@
/*
* fontview
*
* fontview.c
*
* Copyright (C) 2007 Timo Kreuzer <timo <dot> kreuzer <at> reactos <dot> org>
* Copyright (C) 2016-2017 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*
* 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.
*
* This 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.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Main source file
* COPYRIGHT: Copyright 2007 Timo Kreuzer <timo.kreuzer@reactos.org>
* Copyright 2016-2017 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#include "precomp.h"
@@ -47,50 +32,76 @@ BOOL WINAPI GetFontResourceInfoW(LPCWSTR lpFileName, DWORD *pdwBufSize, void* lp
DWORD
FormatString(
DWORD dwFlags,
HINSTANCE hInstance,
DWORD dwStringId,
DWORD dwLanguageId,
LPWSTR lpBuffer,
DWORD nSize,
va_list* Arguments
DWORD dwFlags,
HINSTANCE hInstance,
DWORD dwStringId,
DWORD dwLanguageId,
LPWSTR lpBuffer,
DWORD nSize,
va_list* Arguments
)
{
DWORD dwRet;
int len;
WCHAR Buffer[1000];
DWORD dwRet;
int len;
WCHAR Buffer[1000];
len = LoadStringW(hInstance, dwStringId, (LPWSTR)Buffer, 1000);
len = LoadStringW(hInstance, dwStringId, (LPWSTR)Buffer, 1000);
if (len)
{
dwFlags |= FORMAT_MESSAGE_FROM_STRING;
dwFlags &= ~(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM);
dwRet = FormatMessageW(dwFlags, Buffer, 0, dwLanguageId, lpBuffer, nSize, Arguments);
return dwRet;
}
return 0;
if (len)
{
dwFlags |= FORMAT_MESSAGE_FROM_STRING;
dwFlags &= ~(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM);
dwRet = FormatMessageW(dwFlags, Buffer, 0, dwLanguageId, lpBuffer, nSize, Arguments);
return dwRet;
}
return 0;
}
static void
ErrorMsgBox(HWND hParent, DWORD dwMessageId, ...)
FormatMsgBox(
_In_ HWND hParent,
_In_ DWORD dwMessageId,
_In_ DWORD dwCaptionId,
_In_ UINT uType,
_In_ va_list args)
{
HLOCAL hMemCaption = NULL;
HLOCAL hMemText = NULL;
va_list args;
HLOCAL hMemCaption = NULL;
HLOCAL hMemText = NULL;
va_start(args, dwMessageId);
FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, dwMessageId, 0, (LPWSTR)&hMemText, 0, &args);
va_end(args);
FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, dwMessageId, 0, (LPWSTR)&hMemText, 0, &args);
FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, dwCaptionId, 0, (LPWSTR)&hMemCaption, 0, NULL);
FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, IDS_ERROR, 0, (LPWSTR)&hMemCaption, 0, NULL);
MessageBoxW(hParent, hMemText, hMemCaption, uType);
LocalFree(hMemCaption);
LocalFree(hMemText);
}
MessageBoxW(hParent, hMemText, hMemCaption, MB_ICONERROR);
static void
ErrorMsgBox(
HWND hParent,
DWORD dwMessageId,
...)
{
va_list args;
LocalFree(hMemCaption);
LocalFree(hMemText);
va_start(args, dwMessageId);
FormatMsgBox(hParent, dwMessageId, IDS_ERROR, MB_ICONERROR, args);
va_end(args);
}
static void
SuccessMsgBox(
HWND hParent,
DWORD dwMessageId,
...)
{
va_list args;
va_start(args, dwMessageId);
FormatMsgBox(hParent, dwMessageId, IDS_SUCCESS, MB_ICONINFORMATION, args);
va_end(args);
}
int WINAPI
@@ -99,14 +110,14 @@ wWinMain(HINSTANCE hThisInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
int argc;
INT i;
WCHAR** argv;
DWORD dwSize;
HWND hMainWnd;
MSG msg;
WNDCLASSEXW wincl;
LPCWSTR fileName;
int argc;
INT i;
WCHAR** argv;
DWORD dwSize;
HWND hMainWnd;
MSG msg;
WNDCLASSEXW wincl;
LPCWSTR fileName;
switch (GetUserDefaultUILanguage())
{
@@ -118,48 +129,48 @@ wWinMain(HINSTANCE hThisInstance,
break;
}
g_hInstance = hThisInstance;
g_hInstance = hThisInstance;
/* Get unicode command line */
argv = CommandLineToArgvW(GetCommandLineW(), &argc);
if (argc < 2)
{
/* Get unicode command line */
argv = CommandLineToArgvW(GetCommandLineW(), &argc);
if (argc < 2)
{
#if 0
WCHAR szFileName[MAX_PATH] = L"";
OPENFILENAMEW fontOpen;
WCHAR szFileName[MAX_PATH] = L"";
OPENFILENAMEW fontOpen;
WCHAR filter[MAX_PATH*2] = {0}, dialogTitle[MAX_PATH];
LoadStringW(NULL, IDS_OPEN, dialogTitle, ARRAYSIZE(dialogTitle));
LoadStringW(NULL, IDS_FILTER_LIST, filter, ARRAYSIZE(filter) - 1);
LoadStringW(NULL, IDS_OPEN, dialogTitle, ARRAYSIZE(dialogTitle));
LoadStringW(NULL, IDS_FILTER_LIST, filter, ARRAYSIZE(filter) - 1);
/* Clears out any values of fontOpen before we use it */
ZeroMemory(&fontOpen, sizeof(fontOpen));
/* Clears out any values of fontOpen before we use it */
ZeroMemory(&fontOpen, sizeof(fontOpen));
/* Sets up the open dialog box */
fontOpen.lStructSize = sizeof(fontOpen);
fontOpen.hwndOwner = NULL;
fontOpen.lpstrFilter = filter;
fontOpen.lpstrFile = szFileName;
fontOpen.lpstrTitle = dialogTitle;
fontOpen.nMaxFile = MAX_PATH;
fontOpen.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
fontOpen.lpstrDefExt = L"ttf";
/* Sets up the open dialog box */
fontOpen.lStructSize = sizeof(fontOpen);
fontOpen.hwndOwner = NULL;
fontOpen.lpstrFilter = filter;
fontOpen.lpstrFile = szFileName;
fontOpen.lpstrTitle = dialogTitle;
fontOpen.nMaxFile = MAX_PATH;
fontOpen.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
fontOpen.lpstrDefExt = L"ttf";
/* Opens up the Open File dialog box in order to chose a font file. */
if(GetOpenFileNameW(&fontOpen))
{
fileName = fontOpen.lpstrFile;
g_fileName = fileName;
} else {
/* If the user decides to close out of the open dialog effectively
exiting the program altogether */
return 0;
}
/* Opens up the Open File dialog box in order to chose a font file. */
if(GetOpenFileNameW(&fontOpen))
{
fileName = fontOpen.lpstrFile;
g_fileName = fileName;
} else {
/* If the user decides to close out of the open dialog effectively
exiting the program altogether */
return 0;
}
#endif
}
else
{
/* Try to add the font resource from command line */
}
else
{
/* Try to add the font resource from command line */
for (i = 1; i < argc; ++i)
{
// Treat the last argument as filename
@@ -189,269 +200,269 @@ wWinMain(HINSTANCE hThisInstance,
fileName = argv[i];
}
}
g_fileName = fileName;
}
g_fileName = fileName;
}
if (!AddFontResourceW(g_fileName))
{
ErrorMsgBox(0, IDS_ERROR_NOFONT, g_fileName);
return -1;
}
if (!AddFontResourceW(g_fileName))
{
ErrorMsgBox(0, IDS_ERROR_NOFONT, g_fileName);
return -1;
}
/* Get the font name */
dwSize = sizeof(g_LogFonts);
ZeroMemory(g_LogFonts, sizeof(g_LogFonts));
if (!GetFontResourceInfoW(fileName, &dwSize, g_LogFonts, 2))
{
ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
return -1;
}
g_NumFonts = 0;
for (i = 0; i < ARRAYSIZE(g_LogFonts); ++i)
{
if (g_LogFonts[i].lfFaceName[0] == 0)
break;
/* Get the font name */
dwSize = sizeof(g_LogFonts);
ZeroMemory(g_LogFonts, sizeof(g_LogFonts));
if (!GetFontResourceInfoW(fileName, &dwSize, g_LogFonts, 2))
{
ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
return -1;
}
g_NumFonts = 0;
for (i = 0; i < ARRAYSIZE(g_LogFonts); ++i)
{
if (g_LogFonts[i].lfFaceName[0] == 0)
break;
++g_NumFonts;
}
if (g_NumFonts == 0)
{
ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
return -1;
}
++g_NumFonts;
}
if (g_NumFonts == 0)
{
ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
return -1;
}
/* get font title */
dwSize = sizeof(g_FontTitle);
ZeroMemory(g_FontTitle, sizeof(g_FontTitle));
GetFontResourceInfoW(fileName, &dwSize, g_FontTitle, 1);
/* get font title */
dwSize = sizeof(g_FontTitle);
ZeroMemory(g_FontTitle, sizeof(g_FontTitle));
GetFontResourceInfoW(fileName, &dwSize, g_FontTitle, 1);
if (!Display_InitClass(hThisInstance))
{
ErrorMsgBox(0, IDS_ERROR_NOCLASS);
return -1;
}
if (!Display_InitClass(hThisInstance))
{
ErrorMsgBox(0, IDS_ERROR_NOCLASS);
return -1;
}
/* The main window class */
wincl.cbSize = sizeof (WNDCLASSEXW);
wincl.style = CS_DBLCLKS;
wincl.lpfnWndProc = MainWndProc;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hInstance = hThisInstance;
wincl.hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
wincl.lpszMenuName = NULL;
wincl.lpszClassName = g_szFontViewClassName;
wincl.hIconSm = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
/* The main window class */
wincl.cbSize = sizeof (WNDCLASSEXW);
wincl.style = CS_DBLCLKS;
wincl.lpfnWndProc = MainWndProc;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hInstance = hThisInstance;
wincl.hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
wincl.lpszMenuName = NULL;
wincl.lpszClassName = g_szFontViewClassName;
wincl.hIconSm = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
/* Register the window class, and if it fails quit the program */
if (!RegisterClassExW (&wincl))
{
ErrorMsgBox(0, IDS_ERROR_NOCLASS);
return 0;
}
/* Register the window class, and if it fails quit the program */
if (!RegisterClassExW (&wincl))
{
ErrorMsgBox(0, IDS_ERROR_NOCLASS);
return 0;
}
/* The class is registered, let's create the main window */
hMainWnd = CreateWindowExW(
0, /* Extended possibilities for variation */
g_szFontViewClassName, /* Classname */
g_FontTitle, /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);
ShowWindow(hMainWnd, nCmdShow);
/* The class is registered, let's create the main window */
hMainWnd = CreateWindowExW(
0, /* Extended possibilities for variation */
g_szFontViewClassName, /* Classname */
g_FontTitle, /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);
ShowWindow(hMainWnd, nCmdShow);
/* Main message loop */
while (GetMessage (&msg, NULL, 0, 0))
{
if (IsDialogMessage(hMainWnd, &msg))
continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/* Main message loop */
while (GetMessage (&msg, NULL, 0, 0))
{
if (IsDialogMessage(hMainWnd, &msg))
continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
RemoveFontResourceW(argv[1]);
RemoveFontResourceW(argv[1]);
return (int)msg.wParam;
return (int)msg.wParam;
}
static LRESULT
MainWnd_OnCreate(HWND hwnd)
{
WCHAR szQuit[MAX_BUTTONNAME];
WCHAR szPrint[MAX_BUTTONNAME];
WCHAR szString[MAX_STRING];
WCHAR szPrevious[MAX_STRING];
WCHAR szNext[MAX_STRING];
HWND hDisplay, hButtonInstall, hButtonPrint, hButtonPrev, hButtonNext;
WCHAR szQuit[MAX_BUTTONNAME];
WCHAR szPrint[MAX_BUTTONNAME];
WCHAR szString[MAX_STRING];
WCHAR szPrevious[MAX_STRING];
WCHAR szNext[MAX_STRING];
HWND hDisplay, hButtonInstall, hButtonPrint, hButtonPrev, hButtonNext;
/* create the display window */
hDisplay = CreateWindowExW(
0, /* Extended style */
g_szFontDisplayClassName, /* Classname */
L"", /* Title text */
WS_CHILD | WS_VSCROLL, /* Window style */
0, /* X-pos */
HEADER_SIZE, /* Y-Pos */
550, /* Width */
370-HEADER_SIZE, /* Height */
hwnd, /* Parent */
(HMENU)IDC_DISPLAY, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
/* create the display window */
hDisplay = CreateWindowExW(
0, /* Extended style */
g_szFontDisplayClassName, /* Classname */
L"", /* Title text */
WS_CHILD | WS_VSCROLL, /* Window style */
0, /* X-pos */
HEADER_SIZE, /* Y-Pos */
550, /* Width */
370-HEADER_SIZE, /* Height */
hwnd, /* Parent */
(HMENU)IDC_DISPLAY, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
LoadStringW(g_hInstance, IDS_STRING, szString, MAX_STRING);
SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
LoadStringW(g_hInstance, IDS_STRING, szString, MAX_STRING);
SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
/* Create the install button */
LoadStringW(g_hInstance, IDS_INSTALL, szQuit, MAX_BUTTONNAME);
hButtonInstall = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szQuit, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
BUTTON_POS_X, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_INSTALL, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonInstall, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the install button */
LoadStringW(g_hInstance, IDS_INSTALL, szQuit, MAX_BUTTONNAME);
hButtonInstall = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szQuit, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
BUTTON_POS_X, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_INSTALL, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonInstall, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
EnableWindow(hButtonInstall, !g_DisableInstall);
/* Create the print button */
LoadStringW(g_hInstance, IDS_PRINT, szPrint, MAX_BUTTONNAME);
hButtonPrint = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szPrint, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
450, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_PRINT, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonPrint, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the print button */
LoadStringW(g_hInstance, IDS_PRINT, szPrint, MAX_BUTTONNAME);
hButtonPrint = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szPrint, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
450, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_PRINT, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonPrint, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the previous button */
LoadStringW(g_hInstance, IDS_PREVIOUS, szPrevious, MAX_BUTTONNAME);
hButtonPrev = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szPrevious, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
450, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_PREV, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonPrev, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the previous button */
LoadStringW(g_hInstance, IDS_PREVIOUS, szPrevious, MAX_BUTTONNAME);
hButtonPrev = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szPrevious, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
450, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_PREV, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonPrev, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the next button */
LoadStringW(g_hInstance, IDS_NEXT, szNext, MAX_BUTTONNAME);
hButtonNext = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szNext, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
450, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_NEXT, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonNext, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
/* Create the next button */
LoadStringW(g_hInstance, IDS_NEXT, szNext, MAX_BUTTONNAME);
hButtonNext = CreateWindowExW(
0, /* Extended style */
L"button", /* Classname */
szNext, /* Title text */
WS_CHILD | WS_VISIBLE, /* Window style */
450, /* X-pos */
BUTTON_POS_Y, /* Y-Pos */
BUTTON_WIDTH, /* Width */
BUTTON_HEIGHT, /* Height */
hwnd, /* Parent */
(HMENU)IDC_NEXT, /* Identifier */
g_hInstance, /* Program Instance handler */
NULL /* Window Creation data */
);
SendMessage(hButtonNext, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)TRUE);
EnableWindow(hButtonPrev, FALSE);
if (g_NumFonts <= 1)
EnableWindow(hButtonNext, FALSE);
EnableWindow(hButtonPrev, FALSE);
if (g_NumFonts <= 1)
EnableWindow(hButtonNext, FALSE);
/* Init the display window with the font name */
g_FontIndex = 0;
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
ShowWindow(hDisplay, SW_SHOWNORMAL);
/* Init the display window with the font name */
g_FontIndex = 0;
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
ShowWindow(hDisplay, SW_SHOWNORMAL);
if (g_FontPrint)
PostMessage(hwnd, WM_COMMAND, IDC_PRINT, 0);
if (g_FontPrint)
PostMessage(hwnd, WM_COMMAND, IDC_PRINT, 0);
return 0;
return 0;
}
static LRESULT
MainWnd_OnSize(HWND hwnd)
{
RECT rc;
HWND hInstall, hPrint, hPrev, hNext, hDisplay;
HDWP hDWP;
RECT rc;
HWND hInstall, hPrint, hPrev, hNext, hDisplay;
HDWP hDWP;
GetClientRect(hwnd, &rc);
GetClientRect(hwnd, &rc);
hDWP = BeginDeferWindowPos(5);
hDWP = BeginDeferWindowPos(5);
hInstall = GetDlgItem(hwnd, IDC_INSTALL);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hInstall, NULL, BUTTON_POS_X, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hInstall = GetDlgItem(hwnd, IDC_INSTALL);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hInstall, NULL, BUTTON_POS_X, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hPrint = GetDlgItem(hwnd, IDC_PRINT);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hPrint, NULL, BUTTON_POS_X + BUTTON_WIDTH + BUTTON_PADDING, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hPrint = GetDlgItem(hwnd, IDC_PRINT);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hPrint, NULL, BUTTON_POS_X + BUTTON_WIDTH + BUTTON_PADDING, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hPrev = GetDlgItem(hwnd, IDC_PREV);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hPrev, NULL, rc.right - (BUTTON_WIDTH * 2 + BUTTON_PADDING + BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hPrev = GetDlgItem(hwnd, IDC_PREV);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hPrev, NULL, rc.right - (BUTTON_WIDTH * 2 + BUTTON_PADDING + BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hNext = GetDlgItem(hwnd, IDC_NEXT);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hNext, NULL, rc.right - (BUTTON_WIDTH + BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hNext = GetDlgItem(hwnd, IDC_NEXT);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hNext, NULL, rc.right - (BUTTON_WIDTH + BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hDisplay, NULL, 0, HEADER_SIZE, rc.right, rc.bottom - HEADER_SIZE, SWP_NOZORDER);
hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
if (hDWP)
hDWP = DeferWindowPos(hDWP, hDisplay, NULL, 0, HEADER_SIZE, rc.right, rc.bottom - HEADER_SIZE, SWP_NOZORDER);
EndDeferWindowPos(hDWP);
EndDeferWindowPos(hDWP);
InvalidateRect(hwnd, NULL, TRUE);
InvalidateRect(hwnd, NULL, TRUE);
return 0;
return 0;
}
static LRESULT
MainWnd_OnPaint(HWND hwnd)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rc;
HDC hDC;
PAINTSTRUCT ps;
RECT rc;
hDC = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rc);
rc.top = HEADER_SIZE - 2;
rc.bottom = HEADER_SIZE;
FillRect(hDC, &rc, GetStockObject(GRAY_BRUSH));
EndPaint(hwnd, &ps);
return 0;
hDC = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rc);
rc.top = HEADER_SIZE - 2;
rc.bottom = HEADER_SIZE;
FillRect(hDC, &rc, GetStockObject(GRAY_BRUSH));
EndPaint(hwnd, &ps);
return 0;
}
static LRESULT
@@ -466,7 +477,6 @@ MainWnd_OnInstall(HWND hwnd)
HKEY hKey;
SendDlgItemMessage(hwnd, IDC_DISPLAY, FVM_GETFULLNAME, 64, (LPARAM)szFullName);
// MessageBoxW(hwnd, szFullName, L"Debug", MB_OK);
/* First, we have to find out if the font still exists */
if (GetFileAttributes(g_fileName) == INVALID_FILE_ATTRIBUTES)
@@ -483,21 +493,17 @@ MainWnd_OnInstall(HWND hwnd)
wcscat(szDestPath, L"\\Fonts\\");
wcscat(szDestPath, pszFileName);
/* Debug Message */
// MessageBoxW(hwnd, szDestPath, L"szDestPath", MB_OK);
// MessageBoxW(hwnd, pszFileName, L"pszFileExt", MB_OK);
/* Check if the file already exists */
if (GetFileAttributesW(szDestPath) != INVALID_FILE_ATTRIBUTES)
{
MessageBoxW(hwnd, L"This font is already installed!", L"Already Installed", MB_OK);
ErrorMsgBox(hwnd, IDS_ERROR_ISINSTALLED);
return 0;
}
/* Copy the font file */
if (!CopyFileW(g_fileName, szDestPath, TRUE))
{
MessageBoxW(hwnd,L"Failed to copy the font file!", L"File Error", MB_OK);
ErrorMsgBox(hwnd, IDS_ERROR_FONTCPY);
return -1;
}
@@ -509,7 +515,7 @@ MainWnd_OnInstall(HWND hwnd)
&hKey);
if (res != ERROR_SUCCESS)
{
MessageBoxW(hwnd, L"Failed top open the fonts key!", L"Debug1", MB_OK);
ErrorMsgBox(hwnd, IDS_ERROR_OPENKEY);
return -1;
}
@@ -519,10 +525,10 @@ MainWnd_OnInstall(HWND hwnd)
0,
REG_SZ,
(LPBYTE)pszFileName,
(wcslen(pszFileName) + 1) * sizeof(WCHAR));
(DWORD)(wcslen(pszFileName) + 1) * sizeof(WCHAR));
if (res != ERROR_SUCCESS)
{
MessageBoxW(hwnd, L"Failed to register the new font!", L"Debug2", MB_OK);
ErrorMsgBox(hwnd, IDS_ERROR_REGISTER);
RegCloseKey(hKey);
return -1;
}
@@ -534,7 +540,7 @@ MainWnd_OnInstall(HWND hwnd)
SendMessageW(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
/* if all of this goes correctly, message the user about success */
MessageBoxW(hwnd, L"Font Installation Completed.", L"Success", MB_OK);
SuccessMsgBox(hwnd, IDS_COMPLETED);
return 0;
}
@@ -542,37 +548,37 @@ MainWnd_OnInstall(HWND hwnd)
static LRESULT
MainWnd_OnPrev(HWND hwnd)
{
HWND hDisplay;
if (g_FontIndex > 0)
{
--g_FontIndex;
EnableWindow(GetDlgItem(hwnd, IDC_NEXT), TRUE);
if (g_FontIndex == 0)
EnableWindow(GetDlgItem(hwnd, IDC_PREV), FALSE);
HWND hDisplay;
if (g_FontIndex > 0)
{
--g_FontIndex;
EnableWindow(GetDlgItem(hwnd, IDC_NEXT), TRUE);
if (g_FontIndex == 0)
EnableWindow(GetDlgItem(hwnd, IDC_PREV), FALSE);
hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
InvalidateRect(hDisplay, NULL, TRUE);
}
return 0;
hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
InvalidateRect(hDisplay, NULL, TRUE);
}
return 0;
}
static LRESULT
MainWnd_OnNext(HWND hwnd)
{
HWND hDisplay;
if (g_FontIndex + 1 < g_NumFonts)
{
++g_FontIndex;
EnableWindow(GetDlgItem(hwnd, IDC_PREV), TRUE);
if (g_FontIndex == g_NumFonts - 1)
EnableWindow(GetDlgItem(hwnd, IDC_NEXT), FALSE);
HWND hDisplay;
if (g_FontIndex + 1 < g_NumFonts)
{
++g_FontIndex;
EnableWindow(GetDlgItem(hwnd, IDC_PREV), TRUE);
if (g_FontIndex == g_NumFonts - 1)
EnableWindow(GetDlgItem(hwnd, IDC_NEXT), FALSE);
hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
InvalidateRect(hDisplay, NULL, TRUE);
}
return 0;
hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
InvalidateRect(hDisplay, NULL, TRUE);
}
return 0;
}
LRESULT CALLBACK
@@ -580,41 +586,39 @@ MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
return MainWnd_OnCreate(hwnd);
case WM_CREATE:
return MainWnd_OnCreate(hwnd);
case WM_PAINT:
return MainWnd_OnPaint(hwnd);
case WM_PAINT:
return MainWnd_OnPaint(hwnd);
case WM_SIZE:
return MainWnd_OnSize(hwnd);
case WM_SIZE:
return MainWnd_OnSize(hwnd);
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_INSTALL:
return MainWnd_OnInstall(hwnd);
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_INSTALL:
return MainWnd_OnInstall(hwnd);
case IDC_PRINT:
return Display_OnPrint(hwnd);
case IDC_PRINT:
return Display_OnPrint(hwnd);
case IDC_PREV:
return MainWnd_OnPrev(hwnd);
case IDC_PREV:
return MainWnd_OnPrev(hwnd);
case IDC_NEXT:
return MainWnd_OnNext(hwnd);
}
break;
case IDC_NEXT:
return MainWnd_OnNext(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProcW(hwnd, message, wParam, lParam);
}
default: /* for messages that we don't deal with */
return DefWindowProcW(hwnd, message, wParam, lParam);
}
return 0;
return 0;
}
/* EOF */

View File

@@ -48,6 +48,9 @@ END
#ifdef LANGUAGE_IT_IT
#include "lang/it-IT.rc"
#endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
#ifdef LANGUAGE_LT_LT
#include "lang/lt-LT.rc"
#endif

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Bulgarian resource file
* TRANSLATOR: Copyright 2008 S. Stanev (CCTAHEB) <sstpr@narod.ru>
*/
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
STRINGTABLE
@@ -10,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Няма достатъчно място за завършване на действието."
IDS_ERROR_NOFONT "%1 не е редовен шрифтов файл."
IDS_ERROR_NOCLASS "Неуспешно изпълнение на класа на прозореца."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Czech resource file
* TRANSLATOR: Copyright 2014-2017 Kamil Hornicek <kamil.hornicek@reactos.org>
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
STRINGTABLE
@@ -10,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "K dokončení operace není dostatek paměti."
IDS_ERROR_NOFONT "Soubor %1 není platným souborem písma."
IDS_ERROR_NOCLASS "Inicializace okna aplikace selhala."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Podporované soubory písem (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Písmo Font (*.fon;*.fnt)\0*.fon;*.fnt\0\
Písmo TrueType (*.ttf)\0*.ttf\0\

View File

@@ -1,3 +1,12 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: German resource file
* TRANSLATORS: Copyright 2007 Timo Kreuzer <timo.kreuzer@reactos.org>
* Copyright 2010 Sven Knurr (tux.) <forenkrams@tuxproject.de>
* Copyright 2023 Hilmar Preuße <hille42@web.de>
*/
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE
@@ -10,13 +19,19 @@ BEGIN
IDS_ERROR_NOMEM "Es steht nicht genügend Speicher zur Verfügung."
IDS_ERROR_NOFONT "Die angegebene Datei %1 ist keine gültige Schriftartendatei."
IDS_ERROR_NOCLASS "Fehler beim Initialisieren der Fensterklasse."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
IDS_ERROR_ISINSTALLED "Die Schriftart ist schon installiert!"
IDS_ERROR_FONTCPY "Kopieren der Schriftartdatei fehlgeschlagen!"
IDS_ERROR_OPENKEY "Öffnen des Schriftart Keys fehlgeschlagen!"
IDS_ERROR_REGISTER "Registrierung der neuen Schriftart fehlgeschlagen!"
IDS_SUCCESS "Erfolg"
IDS_COMPLETED "Installation der Schriftarten vollständig."
IDS_FILTER_LIST "Alle unterstützten Schriftarten (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\
TrueType Font Collection (*.ttc)\0*.ttc\0\
OpenType Font (*.otf)\0*.otf\0\
OpenType Font Collection (*.otc)\0*.otc\0\
All Files (*.*)\0*.*\0"
IDS_PREVIOUS "< P&revious"
IDS_NEXT "&Next >"
TrueType Schriftart (*.ttf)\0*.ttf\0\
TrueType Schriftart Sammlung (*.ttc)\0*.ttc\0\
OpenType Schriftart (*.otf)\0*.otf\0\
OpenType Schriftart Sammlung (*.otc)\0*.otc\0\
Alle Dateien (*.*)\0*.*\0"
IDS_PREVIOUS "< V&orheriges"
IDS_NEXT "&Nächstes >"
END

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: English (United States) resource file
* TRANSLATOR: Copyright 2007 Timo Kreuzer <timo.kreuzer@reactos.org>
*/
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
@@ -10,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "There is not enough memory to complete the operation."
IDS_ERROR_NOFONT "The file %1 is not a valid font file."
IDS_ERROR_NOCLASS "Could not initialize window class."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,4 +1,10 @@
/* Spanish language file by Javier Remacha <2007-09-21> and Ismael Ferreras Morezuelas <2014-11-07> */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Spanish resource file
* TRANSLATORS: Copyright 2007 Javier Remacha <remialdo@gmail.com>
* Copyright 2014 Ismael Ferreras Morezuelas <swyterzone+ros@gmail.com>
*/
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
@@ -12,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "No hay memoria suficiente para completar la operación."
IDS_ERROR_NOFONT "El archivo %1 no es un archivo de fuente válido."
IDS_ERROR_NOCLASS "No es posible iniciar la clase de ventana."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Todas las tipografías (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Tipografía de mapa de bits (*.fon;*.fnt)\0*.fon;*.fnt\0\
Tipografía TrueType (*.ttf)\0*.ttf\0\

View File

@@ -1,3 +1,11 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: French resource file
* TRANSLATORS: Copyright 2007 Pierre Schweitzer <pierre@reactos.org>
* Copyright 2012-2017 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
@@ -10,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "Mémoire insuffisante pour terminer l'opération."
IDS_ERROR_NOFONT "Le fichier %1 n'est pas un fichier de polices valide."
IDS_ERROR_NOCLASS "Impossible d'initialiser la classe de fenêtre."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Toutes polices supportées (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Fichier de polices (*.fon;*.fnt)\0*.fon;*.fnt\0\
Fichier de polices TrueType (*.ttf)\0*.ttf\0\

View File

@@ -1,4 +1,9 @@
/* Translated by Baruch Rutman */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Hebrew (Israel) resource file
* TRANSLATOR: Copyright 2013-2018 Baruch Rutman <peterooch@gmail.com>
*/
LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
@@ -12,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "אין מספיק זיכרון כדי להשלים את הפעולה."
IDS_ERROR_NOFONT "הקובץ %1 אינו קובץ גופנים חוקי."
IDS_ERROR_NOCLASS "Could not initialize window class."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Indonesian resource file
* TRANSLATOR: Copyright 2019 Mas Ahmad Muhammad <m.charly81@gmail.com>
*/
LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
STRINGTABLE
@@ -10,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Memori tidak cukup untuk menyelesaikan operasi."
IDS_ERROR_NOFONT "Berkas %1 bukan berkas fon yang valid."
IDS_ERROR_NOCLASS "Tidak bisa memulai window class."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Semua fon yang didukung (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Berkas Fon (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Fon (*.ttf)\0*.ttf\0\

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Italian resource file
* TRANSLATOR: Copyright 2013 Ivan Di Francesco (oswetto) <ivan.difrancesco@yahoo.it>
*/
LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
STRINGTABLE
@@ -10,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Memoria insufficiente per completare l'operazione."
IDS_ERROR_NOFONT "Il file% 1 non è un file di origine valido."
IDS_ERROR_NOCLASS "Impossibile avviare la classe."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Tutti i font supportati (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
Font TrueType (*.ttf)\0*.ttf\0\

View File

@@ -0,0 +1,35 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Japanese resource file
* TRANSLATORS: Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_INSTALL "インストール(&I)"
IDS_PRINT "印刷(&P)"
IDS_STRING "ReactOS は万人に開かれたコンピュータのシステムです。1234567890"
IDS_OPEN "フォントを開く..."
IDS_ERROR "エラー"
IDS_ERROR_NOMEM "処理の完了に充分なメモリーがありません。"
IDS_ERROR_NOFONT "ファイル %1 は有効なフォントファイルではありません。"
IDS_ERROR_NOCLASS "ウィンドウ クラスを初期化できません。"
IDS_ERROR_ISINSTALLED "このフォントはインストール済みです!"
IDS_ERROR_FONTCPY "フォントファイルのコピーに失敗しました!"
IDS_ERROR_OPENKEY "フォントキーを開くのに失敗しました!"
IDS_ERROR_REGISTER "新しいフォントの登録に失敗しました!"
IDS_SUCCESS "成功"
IDS_COMPLETED "フォントのインストールが完了しました。"
IDS_FILTER_LIST "すべてのサポート済みフォント (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
フォントファイル (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType フォント (*.ttf)\0*.ttf\0\
TrueType フォント コレクション (*.ttc)\0*.ttc\0\
OpenType フォント (*.otf)\0*.otf\0\
OpenType フォント コレクション (*.otc)\0*.otc\0\
すべてのファイル (*.*)\0*.*\0"
IDS_PREVIOUS "< 戻る(&R)"
IDS_NEXT "次へ(&N) >"
END

View File

@@ -1,4 +1,9 @@
/* Translation by Vytis "CMan" Girdžijauskas (cman@cman.us) */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Lithuanian resource file
* TRANSLATOR: Copyright 2008 Vytis Girdžijauskas (CMan) <cman@cman.us>
*/
LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
@@ -12,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Užduočiai užbaigti, nepakanka atminties."
IDS_ERROR_NOFONT "%1 nėra teisinga šrifto byla."
IDS_ERROR_NOCLASS "Nepavyko inicijuoti lango klasės."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,4 +1,9 @@
/* Malay translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Malay resource file
* TRANSLATOR: Copyright 2015 Henry Tang Ih <henrytang2@hotmail.com>
*/
LANGUAGE LANG_MALAY, SUBLANG_DEFAULT
@@ -12,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Terdapat tidak cukup ingatan untuk melengkapkan operasi ini."
IDS_ERROR_NOFONT "Fail %1 bukanlah fail fon yang sah."
IDS_ERROR_NOCLASS "Tidak dapat mengawalkan kelas tetingkap."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Semuanya disokong fon (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Norwegian resource file
* TRANSLATOR: Copyright 2008 Lars Martin Hambro (LMH1) <lars_martin4@hotmail.com>
*/
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
STRINGTABLE
@@ -10,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Det er ikke nok minne for å fullføre oppgaven."
IDS_ERROR_NOFONT "Filen %1 er ikke et gyldig skriftfil."
IDS_ERROR_NOCLASS "Kunne ikke initialise vindu klassen."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,23 +1,30 @@
/*
* Translated by Caemyr - Olaf Siejka (Feb, 2008; Jul, 2012)
* Use ReactOS forum PM or IRC to contact me
* https://reactos.org
* IRC: irc.freenode.net #reactos-pl;
* UTF-8 conversion by Caemyr (May, 2011)
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Polish resource file
* TRANSLATORS: Copyright 2008-2012 Olaf Siejka <caemyr@gmail.com>
* Copyright 2017-2018 Adam Słaboń <asaillen456esx@gmail.com>
* Copyright 2023 Piotr Hetnarowicz <piotrhwz@gmail.com>
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_INSTALL "&Instaluj"
IDS_PRINT "&Drukuj"
IDS_INSTALL "Za&instaluj"
IDS_PRINT "Dr&ukuj"
IDS_STRING "Zażółć gęślą Jaźń żółwiątkiem. 1234567890. !@#$%^&*()_+=-/?"
IDS_OPEN "Otwórz czcionkę..."
IDS_ERROR "Błąd"
IDS_ERROR_NOMEM "Brakuje pamięci do ukończenia tej operacji."
IDS_ERROR_NOMEM "Za mało pamięci do ukończenia tej operacji."
IDS_ERROR_NOFONT "Plik %1 nie jest poprawnym plikiem czcionki."
IDS_ERROR_NOCLASS "Nie udało się zainicjować klasy window."
IDS_ERROR_ISINSTALLED "Ta czcionka jest już zainstalowana!"
IDS_ERROR_FONTCPY "Nie można skopiować pliku czcionki!"
IDS_ERROR_OPENKEY "Nie można otworzyć klucza rejestru czcionek!"
IDS_ERROR_REGISTER "Nie można zarejestrować nowej czcionki!"
IDS_SUCCESS "Sukces"
IDS_COMPLETED "Instalacja czcionki zakończona."
IDS_FILTER_LIST "Wszystkie obsługiwane czcionki (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Plik czcionki (*.fon;*.fnt)\0*.fon;*.fnt\0\
Czcionka TrueType (*.ttf)\0*.ttf\0\

View File

@@ -1,4 +1,9 @@
/* Translation and UTF-8 Conversion by mkbu95 <mkbu95@gmail.com> (August, 2011) */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Portuguese (Brazilian) resource file
* TRANSLATOR: Copyright 2011 Matheus Macabu <mkbu95@gmail.com>
*/
LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
@@ -12,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Não há memória suficiente para completar a operação."
IDS_ERROR_NOFONT "O arquivo %1 não é um arquivo de fonte válida."
IDS_ERROR_NOCLASS "Não foi possível inicializar a janela."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,4 +1,11 @@
/* Translator: Ștefan Fulea (stefan dot fulea at mail dot com) */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Romanian resource file
* TRANSLATORS: Copyright 2009 Petru Dimitriu <petrimetri@gmail.com>
* Copyright 2011-2018 Ștefan Fulea <stefan.fulea@mail.com>
* Copyright 2023 Andrei Miloiu <miloiuandrei@gmail.com>
*/
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
@@ -6,12 +13,18 @@ STRINGTABLE
BEGIN
IDS_INSTALL "Inst&alează"
IDS_PRINT "I&mprimă"
IDS_STRING "Turubinele eoliene generează câțiva MJ (câțiva kW•h) în exces, acoperind și necesarul familiei. QY 1234567890"
IDS_STRING "Turbinele eoliene generează câțiva MJ (câțiva kW•h) în exces, acoperind și necesarul familiei. QY 1234567890"
IDS_OPEN "Deschidere font…"
IDS_ERROR "Eroare"
IDS_ERROR_NOMEM "Nu e destulă memorie pentru a încheia operația."
IDS_ERROR_NOFONT "Fișierul «%1» este un fișier font deteriorat."
IDS_ERROR_NOCLASS "Clasa de ferestre nu a putut fi inițializată."
IDS_ERROR_ISINSTALLED "Acest font este deja instalat!"
IDS_ERROR_FONTCPY "Nu a putut fi copiat acest fișier de font!"
IDS_ERROR_OPENKEY "Nu a putut fi deschisă această cheie de regiștrii a fonturilor!"
IDS_ERROR_REGISTER "Nu a putut fi înregistrat noul font!"
IDS_SUCCESS "Succes"
IDS_COMPLETED "Instalarea fontului completă."
IDS_FILTER_LIST "Toate fonturile recunoscute (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Fișiere de tip Font (*.fon;*.fnt)\0*.fon;*.fnt\0\
Fonturi de tip TrueType (*.ttf)\0*.ttf\0\

View File

@@ -1,4 +1,10 @@
/* Russian language resource file (Dmitry Chapyshev, 2007-06-21) */
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Russian resource file
* TRANSLATORS: Copyright 2007 Dmitry Chapyshev <dmitry@reactos.org>
* Copyright 2014-2015 Kudratov Olimjon <olim98@bk.ru>
*/
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
@@ -12,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "Недостаточно памяти для выполнения операции."
IDS_ERROR_NOFONT "%1 не является корректным файлом шрифта."
IDS_ERROR_NOCLASS "Невозможно инициализировать класс окна."
IDS_ERROR_ISINSTALLED "Этот шрифт уже установлен!"
IDS_ERROR_FONTCPY "Не удалось скопировать файл шрифта!"
IDS_ERROR_OPENKEY "Не удалось открыть ключ реестра для шрифтов!"
IDS_ERROR_REGISTER "Не удалось зарегистрировать новый шрифт!"
IDS_SUCCESS "Успех"
IDS_COMPLETED "Установка шрифта завершена."
IDS_FILTER_LIST "Все поддерживаемые шрифты (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Файлы шрифтов (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType шрифты (*.ttf)\0*.ttf\0\

View File

@@ -1,6 +1,8 @@
/* TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR: 31-07-2007
* UPDATED : 21-07-2012
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Slovak resource file
* TRANSLATOR: Copyright 2007-2012 Mário Kačmár <kario@szm.sk>
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -15,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Na vykonanie tejto operácie nie je dostatok voľnej pamäte."
IDS_ERROR_NOFONT "Požadovaný súbor %1 nie je platným súborom písiem."
IDS_ERROR_NOCLASS "Nepodarilo sa inicializovať triedu window."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,6 +1,9 @@
/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com)
* DATE OF TR: 29-11-2013
*/
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Albanian resource file
* TRANSLATOR: Copyright 2013 Ardit Dani <ardit.dani@gmail.com>
*/
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
@@ -14,6 +17,12 @@ BEGIN
IDS_ERROR_NOMEM "Nuk ka memorie të mjaftueshme për të përfunduar operacionin."
IDS_ERROR_NOFONT "Dokumenti %1 nuk është një font i vlefshem."
IDS_ERROR_NOCLASS "Nuk mund të fillojë dritaren e klases."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,8 +1,9 @@
/*
* PROJECT: ReactOS FontView
* FILE: base/applications/fontview/lang/sv-SE.rc
* PURPOSE: Swedish resource file
* TRANSLATOR: Jaix Bly
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Swedish resource file
* TRANSLATORS: Copyright 2011 Jan Blomqvist Kinander (Jaix Bly) <jaixbly@spray.se>
* Copyright 2017 Markus Gothe <nietzsche@lysator.liu.se>
*/
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
@@ -17,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "Det er inte nog minne för att slutföre operationen."
IDS_ERROR_NOFONT "Filen %1 är inte en giltig typsnittsfil."
IDS_ERROR_NOCLASS "Kunde inte initialisera Windows klassen."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -18,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "Bu işlemi bitirmek için yeterli bellek yok."
IDS_ERROR_NOFONT "%1 dosyası, geçerli bir yazı tipi dosyası değil."
IDS_ERROR_NOCLASS "Pencere sınıfı başlatılamadı."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "Tüm Desteklenen Yazı Tipleri (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Yazı Tipi Dosyası (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Yazı Tipi (*.ttf)\0*.ttf\0\

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/fontview/lang/uk-UA.rc
* PURPOSE: Ukraianian Language File for fontview
* TRANSLATOR: Artem Reznikov
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Ukrainian resource file
* TRANSLATORS: Copyright 2007 Artem Reznikov <temarez@yandex.ru>
* Copyright 2011 Igor Paliychuk <mansonigor@gmail.com>
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
@@ -18,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "Недостатньо пам'яті для завершення операції."
IDS_ERROR_NOFONT "Файл %1 не є коректним файлом шрифту."
IDS_ERROR_NOCLASS "Неможливо ініціалізувати віконний клас."
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "All Supported Fonts (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
Font File (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType Font (*.ttf)\0*.ttf\0\

View File

@@ -1,11 +1,10 @@
/*
* PROJECT: ReactOS FontView
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/fontview/lang/zh-CN.rc
* PURPOSE: Chinese (Simplified) Language File for FontView
* TRANSLATOR: Elton Chung aka MfldElton <elton328@gmail.com>
* Li Keqing <auroracloud4096@gmail.com>
* Luke Luo <njlyf2011@hotmail.com>
* PROJECT: ReactOS Font Viewer
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Chinese (Simplified) resource file
* TRANSLATORS: Copyright 2009 Elton Chung aka MfldElton <elton328@gmail.com>
* Copyright 2017 Li Keqing <auroracloud4096@gmail.com>
* Copyright 2018-2022 Luke Luo <njlyf2011@hotmail.com>
*/
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
@@ -20,6 +19,12 @@ BEGIN
IDS_ERROR_NOMEM "没有足够的内存来完成操作。"
IDS_ERROR_NOFONT "%1不是一个有效的字体文件。"
IDS_ERROR_NOCLASS "无法初始化窗口。"
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "所有支持的字体 (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
字体文件 (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType 字体 (*.ttf)\0*.ttf\0\

View File

@@ -18,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "沒有足夠的記憶體來完成操作。"
IDS_ERROR_NOFONT "%1 不是一個有效的字型檔案。"
IDS_ERROR_NOCLASS "無法初始化視窗。"
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "所有支援的字型 (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
字型檔案 (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType 字型 (*.ttf)\0*.ttf\0\

View File

@@ -18,6 +18,12 @@ BEGIN
IDS_ERROR_NOMEM "沒有足夠的記憶體來完成操作。"
IDS_ERROR_NOFONT "%1 不是一個有效的字型檔案。"
IDS_ERROR_NOCLASS "無法初始化視窗。"
IDS_ERROR_ISINSTALLED "This font is already installed!"
IDS_ERROR_FONTCPY "Failed to copy the font file!"
IDS_ERROR_OPENKEY "Failed to open the fonts registry key!"
IDS_ERROR_REGISTER "Failed to register the new font!"
IDS_SUCCESS "Success"
IDS_COMPLETED "Font installation completed."
IDS_FILTER_LIST "所有支援的字型 (*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc)\0*.fon;*.fnt;*.ttf;*.ttc;*.otf;*.otc\0\
字型檔案 (*.fon;*.fnt)\0*.fon;*.fnt\0\
TrueType 字型 (*.ttf)\0*.ttf\0\

View File

@@ -1,10 +1,16 @@
#pragma once
#define IDS_ERROR 100
#define IDS_ERROR_NOMEM 101
#define IDS_ERROR_NOFONT 102
#define IDS_ERROR_NOCLASS 103
#define IDS_FILTER_LIST 104
#define IDS_ERROR 100
#define IDS_ERROR_NOMEM 101
#define IDS_ERROR_NOFONT 102
#define IDS_ERROR_NOCLASS 103
#define IDS_ERROR_ISINSTALLED 104
#define IDS_ERROR_FONTCPY 105
#define IDS_ERROR_OPENKEY 106
#define IDS_ERROR_REGISTER 107
#define IDS_SUCCESS 108
#define IDS_COMPLETED 109
#define IDS_FILTER_LIST 110
#define IDS_INSTALL 500
#define IDS_PRINT 501

View File

@@ -1,7 +1,8 @@
/*
* FILE: base/applications/mmc/lang/ro-RO.rc
* ReactOS Project (https://reactos.org)
* TRANSLATOR: Ștefan Fulea (stefan dot fulea at mail dot com)
* FILE: base/applications/mmc/lang/ro-RO.rc
* ReactOS Project (https://reactos.org)
* TRANSLATORS: Copyright 2011-2018 Ștefan Fulea <stefan.fulea@mail.com>
* Copyright 2023 Andrei Miloiu <miloiuandrei@gmail.com>
*/
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
@@ -32,9 +33,9 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "I&eșire\tAlt+F4", IDM_FILE_EXIT
END
POPUP "&Windows"
POPUP "&Ferestre"
BEGIN
MENUITEM "List", IDM_WINDOWS_LIST
MENUITEM "Listă", IDM_WINDOWS_LIST
END
POPUP "Aj&utor"
BEGIN

View File

@@ -34,11 +34,17 @@ GetTextFromListView(PMAIN_WND_INFO Info,
static BOOL
SaveServicesToFile(PMAIN_WND_INFO Info,
LPCWSTR pszFileName)
LPCWSTR pszFileName,
DWORD nFormat)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
if (!nFormat || nFormat > 2)
{
return bSuccess;
}
hFile = CreateFileW(pszFileName,
GENERIC_WRITE,
0,
@@ -51,7 +57,7 @@ SaveServicesToFile(PMAIN_WND_INFO Info,
{
WCHAR LVText[500];
WCHAR newl[2] = {L'\r', L'\n'};
WCHAR tab = L'\t';
WCHAR seps[2] = {L'\t', L','};
DWORD dwTextLength, dwWritten;
INT NumListedServ = 0;
INT i, k;
@@ -60,7 +66,7 @@ SaveServicesToFile(PMAIN_WND_INFO Info,
for (i=0; i < NumListedServ; i++)
{
for (k=0; k<5; k++)
for (k=0; k < LVMAX; k++)
{
dwTextLength = GetTextFromListView(Info,
LVText,
@@ -73,9 +79,13 @@ SaveServicesToFile(PMAIN_WND_INFO Info,
sizeof(WCHAR) * dwTextLength,
&dwWritten,
NULL);
}
if (k < LVMAX - 1)
{
/* Do not add separator after the last table cell */
WriteFile(hFile,
&tab,
&seps[nFormat-1],
sizeof(WCHAR),
&dwWritten,
NULL);
@@ -113,7 +123,7 @@ VOID ExportFile(PMAIN_WND_INFO Info)
if(GetSaveFileName(&ofn))
{
if (SaveServicesToFile(Info, szFileName))
if (SaveServicesToFile(Info, szFileName, ofn.nFilterIndex))
return;
}

View File

@@ -31,6 +31,7 @@
#define LVSTATUS 2
#define LVSTARTUP 3
#define LVLOGONAS 4
#define LVMAX 5
#define IMAGE_UNKNOWN 0
#define IMAGE_SERVICE 1

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Loading/Saving an image file with getting/setting resolution
* COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
@@ -94,7 +94,7 @@ public:
// if the file type is null, get the file type from extension
const GUID *FileType = &guidFileType;
if (IsGuidEqual(guidFileType, GUID_NULL))
if (::IsEqualGUID(guidFileType, GUID_NULL))
{
LPCWSTR pszExt = GetFileExtension(pszNameW);
FileType = FileTypeFromExtension(pszExt);

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/canvas.cpp
* PURPOSE: Providing the canvas window class
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Providing the canvas window class
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#include "precomp.h"
@@ -15,10 +14,19 @@ CCanvasWindow canvasWindow;
CCanvasWindow::CCanvasWindow()
: m_drawing(FALSE)
, m_hitSelection(HIT_NONE)
, m_whereHit(HIT_NONE)
, m_hitCanvasSizeBox(HIT_NONE)
, m_ptOrig { -1, -1 }
{
::SetRectEmpty(&m_rcNew);
m_ahbmCached[0] = m_ahbmCached[1] = NULL;
::SetRectEmpty(&m_rcResizing);
}
CCanvasWindow::~CCanvasWindow()
{
if (m_ahbmCached[0])
::DeleteObject(m_ahbmCached[0]);
if (m_ahbmCached[1])
::DeleteObject(m_ahbmCached[1]);
}
VOID CCanvasWindow::drawZoomFrame(INT mouseX, INT mouseY)
@@ -85,8 +93,10 @@ VOID CCanvasWindow::GetImageRect(RECT& rc)
::SetRect(&rc, 0, 0, imageModel.GetWidth(), imageModel.GetHeight());
}
CANVAS_HITTEST CCanvasWindow::CanvasHitTest(POINT pt)
HITTEST CCanvasWindow::CanvasHitTest(POINT pt)
{
if (selectionModel.m_bShow || ::IsWindowVisible(textEditWindow))
return HIT_INNER;
RECT rcBase = GetBaseRect();
return getSizeBoxHitTest(pt, &rcBase);
}
@@ -94,78 +104,80 @@ CANVAS_HITTEST CCanvasWindow::CanvasHitTest(POINT pt)
VOID CCanvasWindow::DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint)
{
// We use a memory bitmap to reduce flickering
HDC hdcMem = ::CreateCompatibleDC(hDC);
HBITMAP hbm = ::CreateCompatibleBitmap(hDC, rcClient.right, rcClient.bottom);
HGDIOBJ hbmOld = ::SelectObject(hdcMem, hbm);
HDC hdcMem0 = ::CreateCompatibleDC(hDC);
m_ahbmCached[0] = CachedBufferDIB(m_ahbmCached[0], rcClient.right, rcClient.bottom);
HGDIOBJ hbm0Old = ::SelectObject(hdcMem0, m_ahbmCached[0]);
// Fill the background
::FillRect(hdcMem, &rcPaint, (HBRUSH)(COLOR_APPWORKSPACE + 1));
// Fill the background on hdcMem0
::FillRect(hdcMem0, &rcPaint, (HBRUSH)(COLOR_APPWORKSPACE + 1));
// Draw the sizeboxes if necessary
RECT rcBase = GetBaseRect();
if (!selectionModel.m_bShow)
drawSizeBoxes(hdcMem, &rcBase, FALSE, &rcPaint);
if (!selectionModel.m_bShow && !::IsWindowVisible(textEditWindow))
drawSizeBoxes(hdcMem0, &rcBase, FALSE, &rcPaint);
// Draw the image
// Calculate image size
CRect rcImage;
GetImageRect(rcImage);
ImageToCanvas(rcImage);
SIZE sizeImage = { imageModel.GetWidth(), imageModel.GetHeight() };
StretchBlt(hdcMem, rcImage.left, rcImage.top, rcImage.Width(), rcImage.Height(),
imageModel.GetDC(), 0, 0, sizeImage.cx, sizeImage.cy, SRCCOPY);
// Draw the grid
if (showGrid && toolsModel.GetZoom() >= 4000)
// hdcMem1 <-- imageModel
HDC hdcMem1 = ::CreateCompatibleDC(hDC);
m_ahbmCached[1] = CachedBufferDIB(m_ahbmCached[1], sizeImage.cx, sizeImage.cy);
HGDIOBJ hbm1Old = ::SelectObject(hdcMem1, m_ahbmCached[1]);
BitBlt(hdcMem1, 0, 0, sizeImage.cx, sizeImage.cy, imageModel.GetDC(), 0, 0, SRCCOPY);
// Draw overlay #1 on hdcMem1
toolsModel.OnDrawOverlayOnImage(hdcMem1);
// Transfer the bits with stretch (hdcMem0 <-- hdcMem1)
ImageToCanvas(rcImage);
::StretchBlt(hdcMem0, rcImage.left, rcImage.top, rcImage.Width(), rcImage.Height(),
hdcMem1, 0, 0, sizeImage.cx, sizeImage.cy, SRCCOPY);
// Clean up hdcMem1
::SelectObject(hdcMem1, hbm1Old);
::DeleteDC(hdcMem1);
// Draw the grid on hdcMem0
if (g_showGrid && toolsModel.GetZoom() >= 4000)
{
HPEN oldPen = (HPEN) SelectObject(hdcMem, CreatePen(PS_SOLID, 1, RGB(160, 160, 160)));
HPEN oldPen = (HPEN) ::SelectObject(hdcMem0, ::CreatePen(PS_SOLID, 1, RGB(160, 160, 160)));
for (INT counter = 0; counter < sizeImage.cy; counter++)
{
POINT pt0 = { 0, counter }, pt1 = { sizeImage.cx, counter };
ImageToCanvas(pt0);
ImageToCanvas(pt1);
::MoveToEx(hdcMem, pt0.x, pt0.y, NULL);
::LineTo(hdcMem, pt1.x, pt1.y);
::MoveToEx(hdcMem0, pt0.x, pt0.y, NULL);
::LineTo(hdcMem0, pt1.x, pt1.y);
}
for (INT counter = 0; counter < sizeImage.cx; counter++)
{
POINT pt0 = { counter, 0 }, pt1 = { counter, sizeImage.cy };
ImageToCanvas(pt0);
ImageToCanvas(pt1);
::MoveToEx(hdcMem, pt0.x, pt0.y, NULL);
::LineTo(hdcMem, pt1.x, pt1.y);
::MoveToEx(hdcMem0, pt0.x, pt0.y, NULL);
::LineTo(hdcMem0, pt1.x, pt1.y);
}
::DeleteObject(::SelectObject(hdcMem, oldPen));
::DeleteObject(::SelectObject(hdcMem0, oldPen));
}
// Draw selection
if (selectionModel.m_bShow)
{
RECT rcSelection = selectionModel.m_rc;
ImageToCanvas(rcSelection);
// Draw overlay #2 on hdcMem0
toolsModel.OnDrawOverlayOnCanvas(hdcMem0);
::InflateRect(&rcSelection, GRIP_SIZE, GRIP_SIZE);
drawSizeBoxes(hdcMem, &rcSelection, TRUE, &rcPaint);
::InflateRect(&rcSelection, -GRIP_SIZE, -GRIP_SIZE);
// Draw new frame on hdcMem0 if any
if (m_hitCanvasSizeBox != HIT_NONE && !::IsRectEmpty(&m_rcResizing))
DrawXorRect(hdcMem0, &m_rcResizing);
INT iSaveDC = ::SaveDC(hdcMem);
::IntersectClipRect(hdcMem, rcImage.left, rcImage.top, rcImage.right, rcImage.bottom);
selectionModel.DrawSelection(hdcMem, &rcSelection, paletteModel.GetBgColor(),
toolsModel.IsBackgroundTransparent());
::RestoreDC(hdcMem, iSaveDC);
}
// Draw new frame if any
if (m_whereHit != HIT_NONE && !::IsRectEmpty(&m_rcNew))
DrawXorRect(hdcMem, &m_rcNew);
// Transfer the bits
// Transfer the bits (hDC <-- hdcMem0)
::BitBlt(hDC,
rcPaint.left, rcPaint.top,
rcPaint.right - rcPaint.left, rcPaint.bottom - rcPaint.top,
hdcMem, rcPaint.left, rcPaint.top, SRCCOPY);
hdcMem0, rcPaint.left, rcPaint.top, SRCCOPY);
::DeleteObject(::SelectObject(hdcMem, hbmOld));
::DeleteDC(hdcMem);
// Clean up hdcMem0
::SelectObject(hdcMem0, hbm0Old);
::DeleteDC(hdcMem0);
}
VOID CCanvasWindow::Update(HWND hwndFrom)
@@ -253,18 +265,23 @@ LRESULT CCanvasWindow::OnLRButtonDown(BOOL bLeftButton, UINT nMsg, WPARAM wParam
{
POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
CANVAS_HITTEST hitSelection = SelectionHitTest(pt);
HITTEST hitSelection = SelectionHitTest(pt);
if (hitSelection != HIT_NONE)
{
if (bLeftButton)
{
UnZoomed(pt);
CanvasToImage(pt);
StartSelectionDrag(hitSelection, pt);
}
else
{
canvasWindow.ClientToScreen(&pt);
mainWindow.TrackPopupMenu(pt, 0);
}
return 0;
}
CANVAS_HITTEST hit = CanvasHitTest(pt);
HITTEST hit = CanvasHitTest(pt);
if (hit == HIT_NONE || hit == HIT_BORDER)
{
switch (toolsModel.GetActiveTool())
@@ -303,7 +320,7 @@ LRESULT CCanvasWindow::OnLRButtonDown(BOOL bLeftButton, UINT nMsg, WPARAM wParam
if (bLeftButton)
{
m_whereHit = hit;
m_hitCanvasSizeBox = hit;
UnZoomed(pt);
m_ptOrig = pt;
SetCapture();
@@ -376,15 +393,15 @@ LRESULT CCanvasWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
{
CString strCoord;
strCoord.Format(_T("%ld, %ld"), pt.x, pt.y);
SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) (LPCTSTR) strCoord);
::SendMessage(g_hStatusBar, SB_SETTEXT, 1, (LPARAM) (LPCTSTR) strCoord);
}
}
if (m_drawing)
{
// values displayed in statusbar
LONG xRel = pt.x - start.x;
LONG yRel = pt.y - start.y;
LONG xRel = pt.x - g_ptStart.x;
LONG yRel = pt.y - g_ptStart.y;
switch (toolsModel.GetActiveTool())
{
@@ -393,13 +410,13 @@ LRESULT CCanvasWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
case TOOL_RECTSEL:
case TOOL_TEXT:
if (xRel < 0)
xRel = (pt.x < 0) ? -start.x : xRel;
xRel = (pt.x < 0) ? -g_ptStart.x : xRel;
else if (pt.x > imageModel.GetWidth())
xRel = imageModel.GetWidth() - start.x;
xRel = imageModel.GetWidth() - g_ptStart.x;
if (yRel < 0)
yRel = (pt.y < 0) ? -start.y : yRel;
yRel = (pt.y < 0) ? -g_ptStart.y : yRel;
else if (pt.y > imageModel.GetHeight())
yRel = imageModel.GetHeight() - start.y;
yRel = imageModel.GetHeight() - g_ptStart.y;
break;
// while drawing, update cursor coordinates only for tools 3, 7, 8, 9, 14
@@ -411,7 +428,7 @@ LRESULT CCanvasWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
{
CString strCoord;
strCoord.Format(_T("%ld, %ld"), pt.x, pt.y);
SendMessage(hStatusBar, SB_SETTEXT, 1, (LPARAM) (LPCTSTR) strCoord);
::SendMessage(g_hStatusBar, SB_SETTEXT, 1, (LPARAM) (LPCTSTR) strCoord);
break;
}
default:
@@ -431,13 +448,13 @@ LRESULT CCanvasWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
{
toolsModel.OnMouseMove(TRUE, pt.x, pt.y);
Invalidate(FALSE);
if ((toolsModel.GetActiveTool() >= TOOL_TEXT) || (toolsModel.GetActiveTool() == TOOL_RECTSEL) || (toolsModel.GetActiveTool() == TOOL_FREESEL))
if ((toolsModel.GetActiveTool() >= TOOL_TEXT) || toolsModel.IsSelection())
{
CString strSize;
if ((toolsModel.GetActiveTool() >= TOOL_LINE) && (GetAsyncKeyState(VK_SHIFT) < 0))
yRel = xRel;
strSize.Format(_T("%ld x %ld"), xRel, yRel);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) (LPCTSTR) strSize);
::SendMessage(g_hStatusBar, SB_SETTEXT, 2, (LPARAM) (LPCTSTR) strSize);
}
}
@@ -451,20 +468,20 @@ LRESULT CCanvasWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
if ((toolsModel.GetActiveTool() >= TOOL_LINE) && (GetAsyncKeyState(VK_SHIFT) < 0))
yRel = xRel;
strSize.Format(_T("%ld x %ld"), xRel, yRel);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) (LPCTSTR) strSize);
::SendMessage(g_hStatusBar, SB_SETTEXT, 2, (LPARAM) (LPCTSTR) strSize);
}
}
return 0;
}
if (m_whereHit == HIT_NONE || ::GetCapture() != m_hWnd)
if (m_hitCanvasSizeBox == HIT_NONE || ::GetCapture() != m_hWnd)
return 0;
// Dragging now... Calculate the new size
INT cxImage = imageModel.GetWidth(), cyImage = imageModel.GetHeight();
INT cxDelta = pt.x - m_ptOrig.x;
INT cyDelta = pt.y - m_ptOrig.y;
switch (m_whereHit)
switch (m_hitCanvasSizeBox)
{
case HIT_UPPER_LEFT:
cxImage -= cxDelta;
@@ -507,31 +524,32 @@ LRESULT CCanvasWindow::OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
// Display new size
CString strSize;
strSize.Format(_T("%d x %d"), cxImage, cyImage);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) (LPCTSTR) strSize);
::SendMessage(g_hStatusBar, SB_SETTEXT, 2, (LPARAM) (LPCTSTR) strSize);
CRect rc = { 0, 0, cxImage, cyImage };
switch (m_whereHit)
// Dragging now... Fix the position...
CRect rcResizing = { 0, 0, cxImage, cyImage };
switch (m_hitCanvasSizeBox)
{
case HIT_UPPER_LEFT:
::OffsetRect(&rc, cxDelta, cyDelta);
::OffsetRect(&rcResizing, cxDelta, cyDelta);
break;
case HIT_UPPER_CENTER:
::OffsetRect(&rc, 0, cyDelta);
::OffsetRect(&rcResizing, 0, cyDelta);
break;
case HIT_UPPER_RIGHT:
::OffsetRect(&rc, 0, cyDelta);
::OffsetRect(&rcResizing, 0, cyDelta);
break;
case HIT_MIDDLE_LEFT:
::OffsetRect(&rc, cxDelta, 0);
::OffsetRect(&rcResizing, cxDelta, 0);
break;
case HIT_LOWER_LEFT:
::OffsetRect(&rc, cxDelta, 0);
::OffsetRect(&rcResizing, cxDelta, 0);
break;
default:
break;
}
ImageToCanvas(rc);
m_rcNew = rc;
ImageToCanvas(rcResizing);
m_rcResizing = rcResizing;
Invalidate(TRUE);
return 0;
@@ -549,7 +567,7 @@ LRESULT CCanvasWindow::OnLRButtonUp(BOOL bLeftButton, UINT nMsg, WPARAM wParam,
m_drawing = FALSE;
toolsModel.OnButtonUp(bLeftButton, pt.x, pt.y);
Invalidate(FALSE);
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM) "");
::SendMessage(g_hStatusBar, SB_SETTEXT, 2, (LPARAM)_T(""));
return 0;
}
else if (m_hitSelection != HIT_NONE && bLeftButton)
@@ -558,14 +576,14 @@ LRESULT CCanvasWindow::OnLRButtonUp(BOOL bLeftButton, UINT nMsg, WPARAM wParam,
return 0;
}
if (m_whereHit == HIT_NONE || !bLeftButton)
if (m_hitCanvasSizeBox == HIT_NONE || !bLeftButton)
return 0;
// Resize the image
INT cxImage = imageModel.GetWidth(), cyImage = imageModel.GetHeight();
INT cxDelta = pt.x - m_ptOrig.x;
INT cyDelta = pt.y - m_ptOrig.y;
switch (m_whereHit)
switch (m_hitCanvasSizeBox)
{
case HIT_UPPER_LEFT:
imageModel.Crop(cxImage - cxDelta, cyImage - cyDelta, cxDelta, cyDelta);
@@ -594,11 +612,11 @@ LRESULT CCanvasWindow::OnLRButtonUp(BOOL bLeftButton, UINT nMsg, WPARAM wParam,
default:
break;
}
::SetRectEmpty(&m_rcNew);
::SetRectEmpty(&m_rcResizing);
imageSaved = FALSE;
g_imageSaved = FALSE;
m_whereHit = HIT_NONE;
m_hitCanvasSizeBox = HIT_NONE;
toolsModel.resetTool(); // resets the point-buffer of the polygon and bezier functions
Update(NULL);
Invalidate(TRUE);
@@ -621,7 +639,16 @@ LRESULT CCanvasWindow::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
::GetCursorPos(&pt);
ScreenToClient(&pt);
CANVAS_HITTEST hitSelection = SelectionHitTest(pt);
CRect rcClient;
GetClientRect(&rcClient);
if (!::PtInRect(&rcClient, pt))
{
bHandled = FALSE;
return 0;
}
HITTEST hitSelection = SelectionHitTest(pt);
if (hitSelection != HIT_NONE)
{
if (!setCursorOnSizeBox(hitSelection))
@@ -632,24 +659,25 @@ LRESULT CCanvasWindow::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
CRect rcImage;
GetImageRect(rcImage);
ImageToCanvas(rcImage);
if (::PtInRect(&rcImage, pt))
{
switch (toolsModel.GetActiveTool())
{
case TOOL_FILL:
::SetCursor(::LoadIcon(hProgInstance, MAKEINTRESOURCE(IDC_FILL)));
::SetCursor(::LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDC_FILL)));
break;
case TOOL_COLOR:
::SetCursor(::LoadIcon(hProgInstance, MAKEINTRESOURCE(IDC_COLOR)));
::SetCursor(::LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDC_COLOR)));
break;
case TOOL_ZOOM:
::SetCursor(::LoadIcon(hProgInstance, MAKEINTRESOURCE(IDC_ZOOM)));
::SetCursor(::LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDC_ZOOM)));
break;
case TOOL_PEN:
::SetCursor(::LoadIcon(hProgInstance, MAKEINTRESOURCE(IDC_PEN)));
::SetCursor(::LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDC_PEN)));
break;
case TOOL_AIRBRUSH:
::SetCursor(::LoadIcon(hProgInstance, MAKEINTRESOURCE(IDC_AIRBRUSH)));
::SetCursor(::LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDC_AIRBRUSH)));
break;
default:
::SetCursor(::LoadCursor(NULL, IDC_CROSS));
@@ -658,7 +686,7 @@ LRESULT CCanvasWindow::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
}
if (selectionModel.m_bShow || !setCursorOnSizeBox(CanvasHitTest(pt)))
::SetCursor(::LoadCursor(NULL, IDC_ARROW));
bHandled = FALSE;
return 0;
}
@@ -669,8 +697,8 @@ LRESULT CCanvasWindow::OnKeyDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL&
{
// Cancel dragging
::ReleaseCapture();
m_whereHit = HIT_NONE;
::SetRectEmpty(&m_rcNew);
m_hitCanvasSizeBox = HIT_NONE;
::SetRectEmpty(&m_rcResizing);
Invalidate(TRUE);
}
@@ -680,8 +708,8 @@ LRESULT CCanvasWindow::OnKeyDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL&
LRESULT CCanvasWindow::OnCancelMode(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// Cancel dragging
m_whereHit = HIT_NONE;
::SetRectEmpty(&m_rcNew);
m_hitCanvasSizeBox = HIT_NONE;
::SetRectEmpty(&m_rcResizing);
Invalidate(TRUE);
return 0;
}
@@ -693,7 +721,7 @@ LRESULT CCanvasWindow::OnMouseWheel(UINT nMsg, WPARAM wParam, LPARAM lParam, BOO
LRESULT CCanvasWindow::OnCaptureChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
SendMessage(hStatusBar, SB_SETTEXT, 2, (LPARAM)_T(""));
::SendMessage(g_hStatusBar, SB_SETTEXT, 2, (LPARAM)_T(""));
return 0;
}
@@ -731,7 +759,7 @@ VOID CCanvasWindow::finishDrawing()
Invalidate(FALSE);
}
CANVAS_HITTEST CCanvasWindow::SelectionHitTest(POINT ptZoomed)
HITTEST CCanvasWindow::SelectionHitTest(POINT ptImage)
{
if (!selectionModel.m_bShow)
return HIT_NONE;
@@ -741,28 +769,51 @@ CANVAS_HITTEST CCanvasWindow::SelectionHitTest(POINT ptZoomed)
::OffsetRect(&rcSelection, GRIP_SIZE - GetScrollPos(SB_HORZ), GRIP_SIZE - GetScrollPos(SB_VERT));
::InflateRect(&rcSelection, GRIP_SIZE, GRIP_SIZE);
return getSizeBoxHitTest(ptZoomed, &rcSelection);
return getSizeBoxHitTest(ptImage, &rcSelection);
}
VOID CCanvasWindow::StartSelectionDrag(CANVAS_HITTEST hit, POINT ptUnZoomed)
VOID CCanvasWindow::StartSelectionDrag(HITTEST hit, POINT ptImage)
{
m_hitSelection = hit;
selectionModel.m_ptHit = ptUnZoomed;
selectionModel.m_ptHit = ptImage;
selectionModel.TakeOff();
SetCapture();
Invalidate(FALSE);
}
VOID CCanvasWindow::SelectionDragging(POINT ptUnZoomed)
VOID CCanvasWindow::SelectionDragging(POINT ptImage)
{
selectionModel.Dragging(m_hitSelection, ptUnZoomed);
selectionModel.Dragging(m_hitSelection, ptImage);
Invalidate(FALSE);
}
VOID CCanvasWindow::EndSelectionDrag(POINT ptUnZoomed)
VOID CCanvasWindow::EndSelectionDrag(POINT ptImage)
{
selectionModel.Dragging(m_hitSelection, ptUnZoomed);
selectionModel.Dragging(m_hitSelection, ptImage);
m_hitSelection = HIT_NONE;
Invalidate(FALSE);
}
VOID CCanvasWindow::MoveSelection(INT xDelta, INT yDelta)
{
if (!selectionModel.m_bShow)
return;
selectionModel.TakeOff();
::OffsetRect(&selectionModel.m_rc, xDelta, yDelta);
Invalidate(FALSE);
}
LRESULT CCanvasWindow::OnCtlColorEdit(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
SetTextColor((HDC)wParam, paletteModel.GetFgColor());
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)GetStockObject(NULL_BRUSH);
}
LRESULT CCanvasWindow::OnPaletteModelColorChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
imageModel.NotifyImageChanged();
return 0;
}

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/canvas.h
* PURPOSE: Providing the canvas window class
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Providing the canvas window class
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
@@ -11,7 +10,8 @@
class CCanvasWindow : public CWindowImpl<CCanvasWindow>
{
public:
DECLARE_WND_CLASS_EX(_T("ReactOSPaintCanvas"), CS_DBLCLKS, COLOR_APPWORKSPACE)
DECLARE_WND_CLASS_EX(_T("ReactOSPaintCanvas"), CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW,
COLOR_APPWORKSPACE)
BEGIN_MSG_MAP(CCanvasWindow)
MESSAGE_HANDLER(WM_SIZE, OnSize)
@@ -31,9 +31,12 @@ public:
MESSAGE_HANDLER(WM_MOUSEWHEEL, OnMouseWheel)
MESSAGE_HANDLER(WM_CANCELMODE, OnCancelMode)
MESSAGE_HANDLER(WM_CAPTURECHANGED, OnCaptureChanged)
MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)
MESSAGE_HANDLER(WM_PALETTEMODELCOLORCHANGED, OnPaletteModelColorChanged)
END_MSG_MAP()
CCanvasWindow();
virtual ~CCanvasWindow();
BOOL m_drawing;
@@ -46,23 +49,25 @@ public:
VOID CanvasToImage(POINT& pt, BOOL bZoomed = FALSE);
VOID CanvasToImage(RECT& rc, BOOL bZoomed = FALSE);
VOID GetImageRect(RECT& rc);
VOID MoveSelection(INT xDelta, INT yDelta);
protected:
CANVAS_HITTEST m_hitSelection;
CANVAS_HITTEST m_whereHit;
HITTEST m_hitSelection;
HITTEST m_hitCanvasSizeBox;
POINT m_ptOrig; // The origin of drag start
CRect m_rcNew;
HBITMAP m_ahbmCached[2]; // The cached buffer bitmaps
CRect m_rcResizing; // Resizing rectagle
CANVAS_HITTEST CanvasHitTest(POINT pt);
HITTEST CanvasHitTest(POINT pt);
RECT GetBaseRect();
VOID DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint);
VOID OnHVScroll(WPARAM wParam, INT fnBar);
VOID drawZoomFrame(INT mouseX, INT mouseY);
CANVAS_HITTEST SelectionHitTest(POINT ptZoomed);
VOID StartSelectionDrag(CANVAS_HITTEST hit, POINT ptUnZoomed);
VOID SelectionDragging(POINT ptUnZoomed);
VOID EndSelectionDrag(POINT ptUnZoomed);
HITTEST SelectionHitTest(POINT ptImage);
VOID StartSelectionDrag(HITTEST hit, POINT ptImage);
VOID SelectionDragging(POINT ptImage);
VOID EndSelectionDrag(POINT ptImage);
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnHScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
@@ -81,6 +86,8 @@ protected:
LRESULT OnMouseWheel(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCancelMode(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCaptureChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCtlColorEdit(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnPaletteModelColorChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnLRButtonDown(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnLRButtonDblClk(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

View File

@@ -1,11 +1,10 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/common.h
* PURPOSE: Commonly used functions and definitions
* PROGRAMMERS: Benedikt Freisen
* Stanislav Motylkov
* Katayama Hirofumi MZ
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Commonly used functions and definitions
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
* Copyright 2018 Stanislav Motylkov <x86corez@gmail.com>
* Copyright 2021-2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#pragma once
@@ -20,16 +19,6 @@
#define WM_TOOLSMODELSETTINGSCHANGED (WM_APP + 1)
#define WM_TOOLSMODELZOOMCHANGED (WM_APP + 2)
#define WM_PALETTEMODELCOLORCHANGED (WM_APP + 3)
#define WM_PALETTEMODELPALETTECHANGED (WM_APP + 4)
#define WM_IMAGEMODELDIMENSIONSCHANGED (WM_APP + 5)
#define WM_IMAGEMODELIMAGECHANGED (WM_APP + 6)
#define WM_SELECTIONMODELREFRESHNEEDED (WM_APP + 7)
/* width of the rectangle defined by a RECT structure */
#define RECT_WIDTH(a) ((a).right - (a).left)
/* height of the rectangle defined by a RECT structure */
#define RECT_HEIGHT(a) ((a).bottom - (a).top)
/* this simplifies checking and unchecking menu items */
#define CHECKED_IF(a) ((a) ? (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND))
@@ -37,7 +26,7 @@
/* this simplifies enabling or graying menu items */
#define ENABLED_IF(a) ((a) ? (MF_ENABLED | MF_BYCOMMAND) : (MF_GRAYED | MF_BYCOMMAND))
enum CANVAS_HITTEST // hit
enum HITTEST // hit
{
HIT_NONE = 0, // Nothing hit or outside
HIT_UPPER_LEFT,

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/dialogs.cpp
* PURPOSE: Window procedures of the dialog windows plus launching functions
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Window procedures of the dialog windows plus launching functions
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
/* INCLUDES *********************************************************/
@@ -23,6 +22,22 @@ CFontsDialog fontsDialog;
/* FUNCTIONS ********************************************************/
void ShowError(INT stringID, ...)
{
va_list va;
va_start(va, stringID);
CStringW strFormat, strText;
strFormat.LoadString(stringID);
strText.FormatV(strFormat, va);
CStringW strProgramName;
strProgramName.LoadString(IDS_PROGRAMNAME);
mainWindow.MessageBox(strText, strProgramName, MB_ICONERROR);
va_end(va);
}
LRESULT CMirrorRotateDialog::OnInitDialog(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CheckDlgButton(IDD_MIRRORROTATERB1, BST_CHECKED);
@@ -73,8 +88,6 @@ LRESULT CMirrorRotateDialog::OnRadioButton12(WORD wNotifyCode, WORD wID, HWND hW
return 0;
}
LRESULT CAttributesDialog::OnInitDialog(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
newWidth = imageModel.GetWidth();
@@ -85,21 +98,29 @@ LRESULT CAttributesDialog::OnInitDialog(UINT nMsg, WPARAM wParam, LPARAM lParam,
SetDlgItemInt(IDD_ATTRIBUTESEDIT1, newWidth, FALSE);
SetDlgItemInt(IDD_ATTRIBUTESEDIT2, newHeight, FALSE);
if (isAFile)
if (g_isAFile)
{
TCHAR date[100];
TCHAR temp[100];
GetDateFormat(LOCALE_USER_DEFAULT, 0, &fileTime, NULL, date, _countof(date));
GetTimeFormat(LOCALE_USER_DEFAULT, 0, &fileTime, NULL, temp, _countof(temp));
GetDateFormat(LOCALE_USER_DEFAULT, 0, &g_fileTime, NULL, date, _countof(date));
GetTimeFormat(LOCALE_USER_DEFAULT, 0, &g_fileTime, NULL, temp, _countof(temp));
_tcscat(date, _T(" "));
_tcscat(date, temp);
CString strSize;
strSize.Format(IDS_FILESIZE, fileSize);
strSize.Format(IDS_FILESIZE, g_fileSize);
SetDlgItemText(IDD_ATTRIBUTESTEXT6, date);
SetDlgItemText(IDD_ATTRIBUTESTEXT7, strSize);
}
CString strUnit;
GetDlgItemText(IDD_ATTRIBUTESTEXT8, strUnit);
CString strRes;
strRes.Format(IDS_PRINTRES, (INT)PpmFromDpi(g_xDpi), (INT)PpmFromDpi(g_yDpi));
if (strUnit == L"dpi")
strRes.Format(IDS_PRINTRES, ROUND(g_xDpi), ROUND(g_yDpi));
else
strRes.Format(IDS_PRINTRES, ROUND(PpcmFromDpi(g_xDpi)), ROUND(PpcmFromDpi(g_yDpi)));
SetDlgItemText(IDD_ATTRIBUTESTEXT8, strRes);
return 0;
}
@@ -146,9 +167,9 @@ LRESULT CAttributesDialog::OnRadioButton1(WORD wNotifyCode, WORD wID, HWND hWndC
LRESULT CAttributesDialog::OnRadioButton2(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
CString strNum;
strNum.Format(_T("%.3lf"), newWidth * 100 / PpmFromDpi(g_xDpi));
strNum.Format(_T("%.3lf"), newWidth / PpcmFromDpi(g_xDpi));
SetDlgItemText(IDD_ATTRIBUTESEDIT1, strNum);
strNum.Format(_T("%.3lf"), newHeight * 100 / PpmFromDpi(g_yDpi));
strNum.Format(_T("%.3lf"), newHeight / PpcmFromDpi(g_yDpi));
SetDlgItemText(IDD_ATTRIBUTESEDIT2, strNum);
return 0;
}
@@ -173,7 +194,7 @@ LRESULT CAttributesDialog::OnEdit1(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOO
else if (IsDlgButtonChecked(IDD_ATTRIBUTESRB2))
{
GetDlgItemText(IDD_ATTRIBUTESEDIT1, tempS, _countof(tempS));
newWidth = max(1, (int) (_tcstod(tempS, NULL) * PpmFromDpi(g_xDpi) / 100));
newWidth = max(1, (int) (_tcstod(tempS, NULL) * PpcmFromDpi(g_xDpi)));
}
else if (IsDlgButtonChecked(IDD_ATTRIBUTESRB3))
{
@@ -198,7 +219,7 @@ LRESULT CAttributesDialog::OnEdit2(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOO
else if (IsDlgButtonChecked(IDD_ATTRIBUTESRB2))
{
GetDlgItemText(IDD_ATTRIBUTESEDIT2, tempS, _countof(tempS));
newHeight = max(1, (int) (_tcstod(tempS, NULL) * PpmFromDpi(g_yDpi) / 100));
newHeight = max(1, (int) (_tcstod(tempS, NULL) * PpcmFromDpi(g_yDpi)));
}
else if (IsDlgButtonChecked(IDD_ATTRIBUTESRB3))
{
@@ -234,9 +255,9 @@ LRESULT CStretchSkewDialog::OnOk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
CString strrcAngle;
BOOL tr1, tr2, tr3, tr4;
strrcIntNumbers.LoadString(hProgInstance, IDS_INTNUMBERS);
strrcPercentage.LoadString(hProgInstance, IDS_PERCENTAGE);
strrcAngle.LoadString(hProgInstance, IDS_ANGLE);
strrcIntNumbers.LoadString(g_hinstExe, IDS_INTNUMBERS);
strrcPercentage.LoadString(g_hinstExe, IDS_PERCENTAGE);
strrcAngle.LoadString(g_hinstExe, IDS_ANGLE);
percentage.x = GetDlgItemInt(IDD_STRETCHSKEWEDITHSTRETCH, &tr1, FALSE);
percentage.y = GetDlgItemInt(IDD_STRETCHSKEWEDITVSTRETCH, &tr2, FALSE);
@@ -341,11 +362,11 @@ void CFontsDialog::InitToolbar()
SendMessage(hwndToolbar, TB_SETBUTTONWIDTH, 0, MAKELPARAM(20, 20));
TBADDBITMAP AddBitmap;
AddBitmap.hInst = hProgInstance;
AddBitmap.hInst = g_hinstExe;
AddBitmap.nID = IDB_FONTSTOOLBAR;
SendMessage(hwndToolbar, TB_ADDBITMAP, 4, (LPARAM)&AddBitmap);
HIMAGELIST himl = ImageList_LoadImage(hProgInstance, MAKEINTRESOURCE(IDB_FONTSTOOLBAR),
HIMAGELIST himl = ImageList_LoadImage(g_hinstExe, MAKEINTRESOURCE(IDB_FONTSTOOLBAR),
16, 8, RGB(255, 0, 255), IMAGE_BITMAP,
LR_CREATEDIBSECTION);
SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl);
@@ -505,7 +526,7 @@ LRESULT CFontsDialog::OnNotify(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
if (pnmhdr->code == TTN_NEEDTEXT)
{
LPTOOLTIPTEXT pToolTip = reinterpret_cast<LPTOOLTIPTEXT>(lParam);
pToolTip->hinst = hProgInstance;
pToolTip->hinst = g_hinstExe;
switch (pnmhdr->idFrom)
{
case IDM_BOLD: pToolTip->lpszText = MAKEINTRESOURCE(IDS_BOLD); break;

View File

@@ -1,13 +1,14 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/dialogs.h
* PURPOSE: Window procedures of the dialog windows plus launching functions
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Window procedures of the dialog windows plus launching functions
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
void ShowError(INT stringID, ...);
class CMirrorRotateDialog : public CDialogImpl<CMirrorRotateDialog>
{
public:

View File

@@ -1,25 +1,25 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/dib.cpp
* PURPOSE: Some DIB related functions
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Some DIB related functions
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#include "precomp.h"
#include <math.h>
INT fileSize = 0;
INT g_fileSize = 0;
float g_xDpi = 96;
float g_yDpi = 96;
SYSTEMTIME fileTime;
SYSTEMTIME g_fileTime;
/* FUNCTIONS ********************************************************/
// Convert DPI (dots per inch) into PPM (pixels per meter)
float PpmFromDpi(float dpi)
// Convert DPI (dots per inch) into PPCM (pixels per centimeter)
float PpcmFromDpi(float dpi)
{
return dpi / 0.0254; // 1 DPI is 0.0254 meter.
// 1 DPI is 0.0254 meter. 1 centimeter is 1/100 meter.
return dpi / (0.0254f * 100.0f);
}
HBITMAP
@@ -32,10 +32,29 @@ CreateDIBWithProperties(int width, int height)
bmi.bmiHeader.biHeight = height;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
return CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
}
HBITMAP
CreateMonoBitmap(int width, int height, BOOL bWhite)
{
HBITMAP hbm = CreateBitmap(width, height, 1, 1, NULL);
if (hbm == NULL)
return NULL;
if (bWhite)
{
HDC hdc = CreateCompatibleDC(NULL);
HGDIOBJ hbmOld = SelectObject(hdc, hbm);
RECT rc = { 0, 0, width, height };
FillRect(hdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));
SelectObject(hdc, hbmOld);
DeleteDC(hdc);
}
return hbm;
}
HBITMAP
CreateColorDIB(int width, int height, COLORREF rgb)
{
@@ -59,6 +78,54 @@ CreateColorDIB(int width, int height, COLORREF rgb)
return ret;
}
HBITMAP CopyMonoImage(HBITMAP hbm, INT cx, INT cy)
{
BITMAP bm;
if (!GetObject(hbm, sizeof(bm), &bm))
return NULL;
if (cx == 0 || cy == 0)
{
cx = bm.bmWidth;
cy = bm.bmHeight;
}
HBITMAP hbmNew = CreateBitmap(cx, cy, 1, 1, NULL);
if (!hbmNew)
return NULL;
HDC hdc1 = CreateCompatibleDC(NULL);
HDC hdc2 = CreateCompatibleDC(NULL);
HGDIOBJ hbm1Old = SelectObject(hdc1, hbm);
HGDIOBJ hbm2Old = SelectObject(hdc2, hbmNew);
StretchBlt(hdc2, 0, 0, cx, cy, hdc1, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
SelectObject(hdc1, hbm1Old);
SelectObject(hdc2, hbm2Old);
DeleteDC(hdc1);
DeleteDC(hdc2);
return hbmNew;
}
HBITMAP CachedBufferDIB(HBITMAP hbm, int minimalWidth, int minimalHeight)
{
if (minimalWidth <= 0)
minimalWidth = 1;
if (minimalHeight <= 0)
minimalHeight = 1;
BITMAP bm;
if (!GetObject(hbm, sizeof(bm), &bm))
hbm = NULL;
if (hbm && minimalWidth <= bm.bmWidth && minimalHeight <= bm.bmHeight)
return hbm;
if (hbm)
DeleteObject(hbm);
return CreateDIBWithProperties((minimalWidth * 3) / 2, (minimalHeight * 3) / 2);
}
int
GetDIBWidth(HBITMAP hBitmap)
{
@@ -75,148 +142,146 @@ GetDIBHeight(HBITMAP hBitmap)
return bm.bmHeight;
}
BOOL SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC)
BOOL SaveDIBToFile(HBITMAP hBitmap, LPCWSTR FileName, BOOL fIsMainFile)
{
CImageDx img;
img.Attach(hBitmap);
img.SaveDx(FileName, GUID_NULL, g_xDpi, g_yDpi); // TODO: error handling
HRESULT hr = img.SaveDx(FileName, GUID_NULL, g_xDpi, g_yDpi);
img.Detach();
WIN32_FIND_DATA find;
HANDLE hFind = FindFirstFile(FileName, &find);
if (hFind == INVALID_HANDLE_VALUE)
if (FAILED(hr))
{
ShowFileLoadError(FileName);
ShowError(IDS_SAVEERROR, FileName);
return FALSE;
}
FindClose(hFind);
// update time and size
FILETIME ft;
FileTimeToLocalFileTime(&find.ftLastWriteTime, &ft);
FileTimeToSystemTime(&ft, &fileTime);
fileSize = find.nFileSizeLow;
if (!fIsMainFile)
return TRUE;
// TODO: update hRes and vRes
WIN32_FIND_DATAW find;
HANDLE hFind = ::FindFirstFileW(FileName, &find);
if (hFind == INVALID_HANDLE_VALUE)
{
ShowError(IDS_SAVEERROR, FileName);
return FALSE;
}
::FindClose(hFind);
registrySettings.SetMostRecentFile(FileName);
isAFile = TRUE;
imageSaved = TRUE;
SetFileInfo(FileName, &find, TRUE);
g_imageSaved = TRUE;
return TRUE;
}
void ShowFileLoadError(LPCTSTR name)
void SetFileInfo(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isAFile)
{
CString strText;
strText.Format(IDS_LOADERRORTEXT, (LPCTSTR) name);
CString strProgramName;
strProgramName.LoadString(IDS_PROGRAMNAME);
mainWindow.MessageBox(strText, strProgramName, MB_OK | MB_ICONEXCLAMATION);
}
HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCTSTR name, DWORD dwFileSize, BOOL isFile)
{
if (hBitmap == NULL)
// update file time and size
if (pFound)
{
COLORREF white = RGB(255, 255, 255);
hBitmap = CreateColorDIB(registrySettings.BMPWidth,
registrySettings.BMPHeight, white);
if (hBitmap == NULL)
return FALSE;
FILETIME ft;
::FileTimeToLocalFileTime(&pFound->ftLastWriteTime, &ft);
::FileTimeToSystemTime(&ft, &g_fileTime);
HDC hScreenDC = GetDC(NULL);
g_xDpi = GetDeviceCaps(hScreenDC, LOGPIXELSX);
g_yDpi = GetDeviceCaps(hScreenDC, LOGPIXELSY);
ReleaseDC(NULL, hScreenDC);
ZeroMemory(&fileTime, sizeof(fileTime));
g_fileSize = pFound->nFileSizeLow;
}
else
{
ZeroMemory(&g_fileTime, sizeof(g_fileTime));
g_fileSize = 0;
}
// update image
imageModel.Insert(hBitmap);
imageModel.ClearHistory();
// update fileSize
fileSize = dwFileSize;
// update filepathname
// update g_szFileName
if (name && name[0])
GetFullPathName(name, _countof(filepathname), filepathname, NULL);
{
CStringW strName = name;
::GetFullPathNameW(strName, _countof(g_szFileName), g_szFileName, NULL);
// The following code won't work correctly when (name == g_szFileName):
// ::GetFullPathNameW(name, _countof(g_szFileName), g_szFileName, NULL);
}
else
LoadString(hProgInstance, IDS_DEFAULTFILENAME, filepathname, _countof(filepathname));
{
::LoadStringW(g_hinstExe, IDS_DEFAULTFILENAME, g_szFileName, _countof(g_szFileName));
}
// set title
CString strTitle;
strTitle.Format(IDS_WINDOWTITLE, PathFindFileName(filepathname));
strTitle.Format(IDS_WINDOWTITLE, PathFindFileName(g_szFileName));
mainWindow.SetWindowText(strTitle);
// update file info and recent
isAFile = isFile;
if (isAFile)
registrySettings.SetMostRecentFile(filepathname);
g_isAFile = isAFile;
if (g_isAFile)
registrySettings.SetMostRecentFile(g_szFileName);
imageSaved = TRUE;
g_imageSaved = TRUE;
}
HBITMAP InitializeImage(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile)
{
COLORREF white = RGB(255, 255, 255);
HBITMAP hBitmap = CreateColorDIB(registrySettings.BMPWidth, registrySettings.BMPHeight, white);
if (hBitmap == NULL)
return NULL;
HDC hScreenDC = ::GetDC(NULL);
g_xDpi = ::GetDeviceCaps(hScreenDC, LOGPIXELSX);
g_yDpi = ::GetDeviceCaps(hScreenDC, LOGPIXELSY);
::ReleaseDC(NULL, hScreenDC);
return SetBitmapAndInfo(hBitmap, name, pFound, isFile);
}
HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile)
{
// update image
imageModel.PushImageForUndo(hBitmap);
imageModel.ClearHistory();
SetFileInfo(name, pFound, isFile);
g_imageSaved = TRUE;
return hBitmap;
}
HBITMAP DoLoadImageFile(HWND hwnd, LPCTSTR name, BOOL fIsMainFile)
HBITMAP DoLoadImageFile(HWND hwnd, LPCWSTR name, BOOL fIsMainFile)
{
// find the file
WIN32_FIND_DATA find;
HANDLE hFind = FindFirstFile(name, &find);
if (hFind == INVALID_HANDLE_VALUE)
HANDLE hFind = ::FindFirstFileW(name, &find);
if (hFind == INVALID_HANDLE_VALUE) // does not exist
{
// does not exist
CStringW strText;
strText.Format(IDS_LOADERRORTEXT, name);
MessageBoxW(hwnd, strText, NULL, MB_ICONERROR);
ShowError(IDS_LOADERRORTEXT, name);
return NULL;
}
DWORD dwFileSize = find.nFileSizeLow; // get file size
FindClose(hFind);
::FindClose(hFind);
// is file empty?
if (dwFileSize == 0)
if (find.nFileSizeLow == 0 && find.nFileSizeHigh == 0)
{
if (fIsMainFile)
{
FILETIME ft;
FileTimeToLocalFileTime(&find.ftLastWriteTime, &ft);
FileTimeToSystemTime(&ft, &fileTime);
return SetBitmapAndInfo(NULL, name, dwFileSize, TRUE);
}
return InitializeImage(name, &find, TRUE);
}
// load the image
CImageDx img;
img.LoadDx(name, &g_xDpi, &g_yDpi);
float xDpi, yDpi;
HRESULT hr = img.LoadDx(name, &xDpi, &yDpi);
if (FAILED(hr))
{
ShowError(IDS_LOADERRORTEXT, name);
return NULL;
}
HBITMAP hBitmap = img.Detach();
if (!fIsMainFile)
return hBitmap;
g_xDpi = xDpi;
g_yDpi = yDpi;
if (g_xDpi <= 0)
g_xDpi = 96;
if (g_yDpi <= 0)
g_yDpi = 96;
HBITMAP hBitmap = img.Detach();
if (hBitmap == NULL)
{
// cannot open
CStringW strText;
strText.Format(IDS_LOADERRORTEXT, name);
MessageBoxW(hwnd, strText, NULL, MB_ICONERROR);
return NULL;
}
if (fIsMainFile)
{
FILETIME ft;
FileTimeToLocalFileTime(&find.ftLastWriteTime, &ft);
FileTimeToSystemTime(&ft, &fileTime);
SetBitmapAndInfo(hBitmap, name, dwFileSize, TRUE);
}
SetBitmapAndInfo(hBitmap, name, &find, TRUE);
return hBitmap;
}
@@ -263,7 +328,7 @@ HBITMAP Rotate90DegreeBlt(HDC hDC1, INT cx, INT cy, BOOL bRight, BOOL bMono)
#define M_PI 3.14159265
#endif
HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical)
HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical, BOOL bMono)
{
if (nDegree == 0)
return CopyDIBImage(hbm);
@@ -281,7 +346,11 @@ HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical)
if (dx == 0 && dy == 0)
return CopyDIBImage(hbm);
HBITMAP hbmNew = CreateColorDIB(cx + dx, cy + dy, RGB(255, 255, 255));
HBITMAP hbmNew;
if (bMono)
hbmNew = CreateMonoBitmap(cx + dx, cy + dy, FALSE);
else
hbmNew = CreateColorDIB(cx + dx, cy + dy, RGB(255, 255, 255));
if (!hbmNew)
return NULL;
@@ -309,7 +378,140 @@ HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical)
BitBlt(hDC2, delta, y, cx, 1, hDC1, 0, y, SRCCOPY);
}
}
SelectObject(hDC2, hbm2Old);
DeleteDC(hDC2);
return hbmNew;
}
struct BITMAPINFODX : BITMAPINFO
{
RGBQUAD bmiColorsAdditional[256 - 1];
};
HGLOBAL BitmapToClipboardDIB(HBITMAP hBitmap)
{
BITMAP bm;
if (!GetObject(hBitmap, sizeof(BITMAP), &bm))
return NULL;
BITMAPINFODX bmi;
ZeroMemory(&bmi, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = bm.bmWidth;
bmi.bmiHeader.biHeight = bm.bmHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = bm.bmBitsPixel;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = bm.bmWidthBytes * bm.bmHeight;
INT cColors;
if (bm.bmBitsPixel < 16)
cColors = 1 << bm.bmBitsPixel;
else
cColors = 0;
HDC hDC = CreateCompatibleDC(NULL);
if (cColors)
{
HGDIOBJ hbmOld = SelectObject(hDC, hBitmap);
cColors = GetDIBColorTable(hDC, 0, cColors, bmi.bmiColors);
SelectObject(hDC, hbmOld);
}
DWORD cbColors = cColors * sizeof(RGBQUAD);
DWORD dwSize = sizeof(BITMAPINFOHEADER) + cbColors + bmi.bmiHeader.biSizeImage;
HGLOBAL hGlobal = GlobalAlloc(GHND | GMEM_SHARE, dwSize);
if (hGlobal)
{
LPBYTE pb = (LPBYTE)GlobalLock(hGlobal);
if (pb)
{
CopyMemory(pb, &bmi, sizeof(BITMAPINFOHEADER));
pb += sizeof(BITMAPINFOHEADER);
CopyMemory(pb, bmi.bmiColors, cbColors);
pb += cbColors;
GetDIBits(hDC, hBitmap, 0, bm.bmHeight, pb, &bmi, DIB_RGB_COLORS);
GlobalUnlock(hGlobal);
}
else
{
GlobalFree(hGlobal);
hGlobal = NULL;
}
}
DeleteDC(hDC);
return hGlobal;
}
HBITMAP BitmapFromClipboardDIB(HGLOBAL hGlobal)
{
LPBYTE pb = (LPBYTE)GlobalLock(hGlobal);
if (!pb)
return NULL;
LPBITMAPINFO pbmi = (LPBITMAPINFO)pb;
pb += pbmi->bmiHeader.biSize;
INT cColors = 0, cbColors = 0;
if (pbmi->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
{
LPBITMAPCOREINFO pbmci = (LPBITMAPCOREINFO)pbmi;
WORD BitCount = pbmci->bmciHeader.bcBitCount;
if (BitCount < 16)
{
cColors = (1 << BitCount);
cbColors = cColors * sizeof(RGBTRIPLE);
pb += cbColors;
}
}
else if (pbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER))
{
WORD BitCount = pbmi->bmiHeader.biBitCount;
if (BitCount < 16)
{
cColors = (1 << BitCount);
cbColors = cColors * sizeof(RGBQUAD);
pb += cbColors;
}
}
HDC hDC = CreateCompatibleDC(NULL);
HBITMAP hBitmap = CreateDIBSection(hDC, pbmi, DIB_RGB_COLORS, NULL, NULL, 0);
if (hBitmap)
{
SetDIBits(hDC, hBitmap, 0, labs(pbmi->bmiHeader.biHeight), pb, pbmi, DIB_RGB_COLORS);
}
DeleteDC(hDC);
GlobalUnlock(hGlobal);
return hBitmap;
}
HBITMAP BitmapFromHEMF(HENHMETAFILE hEMF)
{
ENHMETAHEADER header;
if (!GetEnhMetaFileHeader(hEMF, sizeof(header), &header))
return NULL;
CRect rc = *(LPRECT)&header.rclBounds;
INT cx = rc.Width(), cy = rc.Height();
HBITMAP hbm = CreateColorDIB(cx, cy, RGB(255, 255, 255));
if (!hbm)
return NULL;
HDC hDC = CreateCompatibleDC(NULL);
HGDIOBJ hbmOld = SelectObject(hDC, hbm);
PlayEnhMetaFile(hDC, hEMF, &rc);
SelectObject(hDC, hbmOld);
DeleteDC(hDC);
return hbm;
}

View File

@@ -1,15 +1,18 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/dib.h
* PURPOSE: Some DIB related functions
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Some DIB related functions
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
HBITMAP CreateDIBWithProperties(int width, int height);
HBITMAP CreateMonoBitmap(int width, int height, BOOL bWhite);
HBITMAP CreateColorDIB(int width, int height, COLORREF rgb);
HBITMAP CachedBufferDIB(HBITMAP hbm, int minimalWidth, int minimalHeight);
HBITMAP CopyMonoImage(HBITMAP hbm, INT cx = 0, INT cy = 0);
static inline HBITMAP CopyDIBImage(HBITMAP hbm, INT cx = 0, INT cy = 0)
{
@@ -17,19 +20,25 @@ static inline HBITMAP CopyDIBImage(HBITMAP hbm, INT cx = 0, INT cy = 0)
}
int GetDIBWidth(HBITMAP hbm);
int GetDIBHeight(HBITMAP hbm);
BOOL SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC);
BOOL SaveDIBToFile(HBITMAP hBitmap, LPCWSTR FileName, BOOL fIsMainFile);
HBITMAP DoLoadImageFile(HWND hwnd, LPCTSTR name, BOOL fIsMainFile);
HBITMAP DoLoadImageFile(HWND hwnd, LPCWSTR name, BOOL fIsMainFile);
void ShowFileLoadError(LPCTSTR name);
void SetFileInfo(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isAFile);
HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCTSTR name, DWORD dwFileSize, BOOL isFile);
HBITMAP InitializeImage(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile);
HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile);
HBITMAP Rotate90DegreeBlt(HDC hDC1, INT cx, INT cy, BOOL bRight, BOOL bMono);
HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical);
HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical, BOOL bMono = FALSE);
float PpmFromDpi(float dpi);
float PpcmFromDpi(float dpi);
#define ROUND(x) (INT)((x) + 0.5)
HGLOBAL BitmapToClipboardDIB(HBITMAP hBitmap);
HBITMAP BitmapFromClipboardDIB(HGLOBAL hGlobal);
HBITMAP BitmapFromHEMF(HENHMETAFILE hEMF);

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/drawing.cpp
* PURPOSE: The drawing functions used by the tools
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: The drawing functions used by the tools
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
/* INCLUDES *********************************************************/
@@ -116,46 +115,52 @@ Fill(HDC hdc, LONG x, LONG y, COLORREF color)
void
Erase(HDC hdc, LONG x1, LONG y1, LONG x2, LONG y2, COLORREF color, LONG radius)
{
LONG a, b;
HPEN oldPen;
HBRUSH oldBrush = (HBRUSH) SelectObject(hdc, CreateSolidBrush(color));
LONG b = max(1, max(abs(x2 - x1), abs(y2 - y1)));
HBRUSH hbr = ::CreateSolidBrush(color);
b = max(1, max(abs(x2 - x1), abs(y2 - y1)));
oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_SOLID, 1, color));
for(a = 0; a <= b; a++)
Rectangle(hdc,
(x1 * (b - a) + x2 * a) / b - radius,
(y1 * (b - a) + y2 * a) / b - radius,
(x1 * (b - a) + x2 * a) / b + radius,
(y1 * (b - a) + y2 * a) / b + radius);
DeleteObject(SelectObject(hdc, oldBrush));
DeleteObject(SelectObject(hdc, oldPen));
for (LONG a = 0; a <= b; a++)
{
LONG cx = (x1 * (b - a) + x2 * a) / b;
LONG cy = (y1 * (b - a) + y2 * a) / b;
RECT rc = { cx - radius, cy - radius, cx + radius, cy + radius };
::FillRect(hdc, &rc, hbr);
}
::DeleteObject(hbr);
}
void
Replace(HDC hdc, LONG x1, LONG y1, LONG x2, LONG y2, COLORREF fg, COLORREF bg, LONG radius)
{
LONG a, b, x, y;
b = max(1, max(abs(x2 - x1), abs(y2 - y1)));
LONG b = max(1, max(abs(x2 - x1), abs(y2 - y1)));
for(a = 0; a <= b; a++)
for(y = (y1 * (b - a) + y2 * a) / b - radius + 1;
y < (y1 * (b - a) + y2 * a) / b + radius + 1; y++)
for(x = (x1 * (b - a) + x2 * a) / b - radius + 1;
x < (x1 * (b - a) + x2 * a) / b + radius + 1; x++)
if (GetPixel(hdc, x, y) == fg)
SetPixel(hdc, x, y, bg);
for (LONG a = 0; a <= b; a++)
{
LONG cx = (x1 * (b - a) + x2 * a) / b;
LONG cy = (y1 * (b - a) + y2 * a) / b;
RECT rc = { cx - radius, cy - radius, cx + radius, cy + radius };
for (LONG y = rc.top; y < rc.bottom; ++y)
{
for (LONG x = rc.left; x < rc.right; ++x)
{
if (::GetPixel(hdc, x, y) == fg)
::SetPixelV(hdc, x, y, bg);
}
}
}
}
void
Airbrush(HDC hdc, LONG x, LONG y, COLORREF color, LONG r)
{
LONG a, b;
for(b = -r; b <= r; b++)
for(a = -r; a <= r; a++)
if ((a * a + b * b <= r * r) && (rand() % 4 == 0))
SetPixel(hdc, x + a, y + b, color);
for (LONG dy = -r; dy <= r; dy++)
{
for (LONG dx = -r; dx <= r; dx++)
{
if ((dx * dx + dy * dy <= r * r) && (rand() % r == 0))
::SetPixelV(hdc, x + dx, y + dy, color);
}
}
}
void
@@ -183,7 +188,7 @@ Brush(HDC hdc, LONG x1, LONG y1, LONG x2, LONG y2, COLORREF color, LONG style)
case 2:
MoveToEx(hdc, x1, y1, NULL);
LineTo(hdc, x2, y2);
SetPixel(hdc, x2, y2, color);
::SetPixelV(hdc, x2, y2, color);
break;
case 3:
for(a = 0; a <= b; a++)
@@ -366,9 +371,9 @@ ColorKeyedMaskBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight,
void DrawXorRect(HDC hdc, const RECT *prc)
{
HGDIOBJ oldPen = ::SelectObject(hdc, ::CreatePen(PS_SOLID, 0, RGB(255, 255, 255)));
HGDIOBJ oldPen = ::SelectObject(hdc, ::CreatePen(PS_SOLID, 0, RGB(0, 0, 0)));
HGDIOBJ oldBrush = ::SelectObject(hdc, ::GetStockObject(NULL_BRUSH));
INT oldRop2 = SetROP2(hdc, R2_XORPEN);
INT oldRop2 = SetROP2(hdc, R2_NOTXORPEN);
::Rectangle(hdc, prc->left, prc->top, prc->right, prc->bottom);
::SetROP2(hdc, oldRop2);
::SelectObject(hdc, oldBrush);

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/drawing.h
* PURPOSE: The drawing functions used by the tools
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: The drawing functions used by the tools
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/fullscreen.cpp
* PURPOSE: Window for fullscreen view
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Window for fullscreen view
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#include "precomp.h"
@@ -23,8 +22,8 @@ HWND CFullscreenWindow::DoCreate()
LRESULT CFullscreenWindow::OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
SendMessage(WM_SETICON, ICON_BIG, (LPARAM) LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON)));
SendMessage(WM_SETICON, ICON_SMALL, (LPARAM) LoadIcon(hProgInstance, MAKEINTRESOURCE(IDI_APPICON)));
SendMessage(WM_SETICON, ICON_BIG, (LPARAM) LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDI_APPICON)));
SendMessage(WM_SETICON, ICON_SMALL, (LPARAM) LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDI_APPICON)));
return 0;
}
@@ -50,12 +49,6 @@ LRESULT CFullscreenWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL
return 0;
}
LRESULT CFullscreenWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
Invalidate(TRUE);
return 0;
}
LRESULT CFullscreenWindow::OnGetText(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// return caption of the main window, instead

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/fullscreen.h
* PURPOSE: Window for fullscreen view
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Window for fullscreen view
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
@@ -11,7 +10,8 @@
class CFullscreenWindow : public CWindowImpl<CFullscreenWindow>
{
public:
DECLARE_WND_CLASS_EX(_T("FullscreenWindow"), CS_DBLCLKS, COLOR_BACKGROUND)
DECLARE_WND_CLASS_EX(_T("FullscreenWindow"), CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW,
COLOR_BACKGROUND)
BEGIN_MSG_MAP(CFullscreenWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
@@ -19,7 +19,6 @@ public:
MESSAGE_HANDLER(WM_KEYDOWN, OnCloseOrKeyDownOrLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnCloseOrKeyDownOrLButtonDown)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_GETTEXT, OnGetText)
END_MSG_MAP()
@@ -29,6 +28,5 @@ private:
LRESULT OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCloseOrKeyDownOrLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnGetText(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
};

View File

@@ -1,27 +1,24 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/globalvar.h
* PURPOSE: Declaring global variables for later initialization
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Declaring global variables for later initialization
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
/* VARIABLES declared in main.cpp ***********************************/
extern BOOL askBeforeEnlarging;
extern BOOL g_askBeforeEnlarging;
extern POINT start;
extern POINT last;
extern POINT g_ptStart, g_ptEnd;
extern HINSTANCE hProgInstance;
extern HINSTANCE g_hinstExe;
extern TCHAR filepathname[MAX_LONG_PATH];
extern BOOL isAFile;
extern BOOL imageSaved;
extern BOOL showGrid;
extern TCHAR g_szFileName[MAX_LONG_PATH];
extern BOOL g_isAFile;
extern BOOL g_imageSaved;
extern BOOL g_showGrid;
extern CMainWindow mainWindow;
@@ -40,11 +37,11 @@ extern ToolsModel toolsModel;
extern SelectionModel selectionModel;
extern PaletteModel paletteModel;
extern HWND hStatusBar;
extern HWND g_hStatusBar;
extern float g_xDpi;
extern float g_yDpi;
extern INT fileSize;
extern SYSTEMTIME fileTime;
extern INT g_fileSize;
extern SYSTEMTIME g_fileTime;
extern CFullscreenWindow fullscreenWindow;
extern CMiniatureWindow miniature;

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/history.cpp
* PURPOSE: Undo and redo functionality
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Undo and redo functionality
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
* Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#include "precomp.h"
@@ -12,178 +12,159 @@ ImageModel imageModel;
/* FUNCTIONS ********************************************************/
void ImageModel::NotifyDimensionsChanged()
{
if (canvasWindow.IsWindow())
canvasWindow.SendMessage(WM_IMAGEMODELDIMENSIONSCHANGED);
}
void ImageModel::NotifyImageChanged()
{
if (canvasWindow.IsWindow())
canvasWindow.SendMessage(WM_IMAGEMODELIMAGECHANGED);
canvasWindow.Invalidate(FALSE);
if (miniature.IsWindow())
miniature.Invalidate(FALSE);
}
ImageModel::ImageModel()
: m_hDrawingDC(::CreateCompatibleDC(NULL))
, m_currInd(0)
, m_undoSteps(0)
, m_redoSteps(0)
{
currInd = 0;
undoSteps = 0;
redoSteps = 0;
imageSaved = TRUE;
ZeroMemory(m_hBms, sizeof(m_hBms));
// prepare a minimal usable bitmap
int imgXRes = 1;
int imgYRes = 1;
m_hBms[0] = CreateColorDIB(1, 1, RGB(255, 255, 255));
m_hbmOld = ::SelectObject(m_hDrawingDC, m_hBms[0]);
hDrawingDC = CreateCompatibleDC(NULL);
SelectObject(hDrawingDC, CreatePen(PS_SOLID, 0, paletteModel.GetFgColor()));
SelectObject(hDrawingDC, CreateSolidBrush(paletteModel.GetBgColor()));
hBms[0] = CreateDIBWithProperties(imgXRes, imgYRes);
SelectObject(hDrawingDC, hBms[0]);
Rectangle(hDrawingDC, 0 - 1, 0 - 1, imgXRes + 1, imgYRes + 1);
g_imageSaved = TRUE;
}
void ImageModel::CopyPrevious()
ImageModel::~ImageModel()
{
ATLTRACE("%s: %d\n", __FUNCTION__, currInd);
DeleteObject(hBms[(currInd + 1) % HISTORYSIZE]);
hBms[(currInd + 1) % HISTORYSIZE] = CopyDIBImage(hBms[currInd]);
currInd = (currInd + 1) % HISTORYSIZE;
if (undoSteps < HISTORYSIZE - 1)
undoSteps++;
redoSteps = 0;
SelectObject(hDrawingDC, hBms[currInd]);
imageSaved = FALSE;
::DeleteDC(m_hDrawingDC);
for (size_t i = 0; i < HISTORYSIZE; ++i)
{
if (m_hBms[i])
::DeleteObject(m_hBms[i]);
}
}
void ImageModel::Undo(BOOL bClearRedo)
{
ATLTRACE("%s: %d\n", __FUNCTION__, undoSteps);
if (undoSteps > 0)
{
int oldWidth = GetWidth();
int oldHeight = GetHeight();
selectionModel.m_bShow = FALSE;
currInd = (currInd + HISTORYSIZE - 1) % HISTORYSIZE;
SelectObject(hDrawingDC, hBms[currInd]);
undoSteps--;
if (bClearRedo)
redoSteps = 0;
else if (redoSteps < HISTORYSIZE - 1)
redoSteps++;
if (GetWidth() != oldWidth || GetHeight() != oldHeight)
NotifyDimensionsChanged();
NotifyImageChanged();
}
ATLTRACE("%s: %d\n", __FUNCTION__, m_undoSteps);
if (!CanUndo())
return;
selectionModel.HideSelection();
// Select previous item
m_currInd = (m_currInd + HISTORYSIZE - 1) % HISTORYSIZE;
::SelectObject(m_hDrawingDC, m_hBms[m_currInd]);
m_undoSteps--;
if (bClearRedo)
m_redoSteps = 0;
else if (m_redoSteps < HISTORYSIZE - 1)
m_redoSteps++;
NotifyImageChanged();
}
void ImageModel::Redo()
{
ATLTRACE("%s: %d\n", __FUNCTION__, redoSteps);
if (redoSteps > 0)
{
int oldWidth = GetWidth();
int oldHeight = GetHeight();
selectionModel.m_bShow = FALSE;
currInd = (currInd + 1) % HISTORYSIZE;
SelectObject(hDrawingDC, hBms[currInd]);
redoSteps--;
if (undoSteps < HISTORYSIZE - 1)
undoSteps++;
if (GetWidth() != oldWidth || GetHeight() != oldHeight)
NotifyDimensionsChanged();
NotifyImageChanged();
}
ATLTRACE("%s: %d\n", __FUNCTION__, m_redoSteps);
if (!CanRedo())
return;
selectionModel.HideSelection();
// Select next item
m_currInd = (m_currInd + 1) % HISTORYSIZE;
::SelectObject(m_hDrawingDC, m_hBms[m_currInd]);
m_redoSteps--;
if (m_undoSteps < HISTORYSIZE - 1)
m_undoSteps++;
NotifyImageChanged();
}
void ImageModel::ResetToPrevious()
{
ATLTRACE("%s: %d\n", __FUNCTION__, currInd);
DeleteObject(hBms[currInd]);
hBms[currInd] = CopyDIBImage(hBms[(currInd + HISTORYSIZE - 1) % HISTORYSIZE]);
SelectObject(hDrawingDC, hBms[currInd]);
ATLTRACE("%s: %d\n", __FUNCTION__, m_currInd);
// Revert current item with previous item
::DeleteObject(m_hBms[m_currInd]);
m_hBms[m_currInd] = CopyDIBImage(m_hBms[(m_currInd + HISTORYSIZE - 1) % HISTORYSIZE]);
::SelectObject(m_hDrawingDC, m_hBms[m_currInd]);
NotifyImageChanged();
}
void ImageModel::ClearHistory()
{
undoSteps = 0;
redoSteps = 0;
m_undoSteps = 0;
m_redoSteps = 0;
}
void ImageModel::Insert(HBITMAP hbm)
void ImageModel::PushImageForUndo(HBITMAP hbm)
{
int oldWidth = GetWidth();
int oldHeight = GetHeight();
DeleteObject(hBms[(currInd + 1) % HISTORYSIZE]);
hBms[(currInd + 1) % HISTORYSIZE] = hbm;
currInd = (currInd + 1) % HISTORYSIZE;
if (undoSteps < HISTORYSIZE - 1)
undoSteps++;
redoSteps = 0;
SelectObject(hDrawingDC, hBms[currInd]);
if (GetWidth() != oldWidth || GetHeight() != oldHeight)
NotifyDimensionsChanged();
ATLTRACE("%s: %d\n", __FUNCTION__, m_currInd);
// Go to the next item with an HBITMAP or current item
::DeleteObject(m_hBms[(m_currInd + 1) % HISTORYSIZE]);
m_hBms[(m_currInd + 1) % HISTORYSIZE] = (hbm ? hbm : CopyDIBImage(m_hBms[m_currInd]));
m_currInd = (m_currInd + 1) % HISTORYSIZE;
::SelectObject(m_hDrawingDC, m_hBms[m_currInd]);
if (m_undoSteps < HISTORYSIZE - 1)
m_undoSteps++;
m_redoSteps = 0;
g_imageSaved = FALSE;
NotifyImageChanged();
}
void ImageModel::Crop(int nWidth, int nHeight, int nOffsetX, int nOffsetY)
{
HDC hdc;
HPEN oldPen;
HBRUSH oldBrush;
int oldWidth = GetWidth();
int oldHeight = GetHeight();
// We cannot create bitmaps of size zero
if (nWidth <= 0)
nWidth = 1;
if (nHeight <= 0)
nHeight = 1;
SelectObject(hDrawingDC, hBms[currInd]);
DeleteObject(hBms[(currInd + 1) % HISTORYSIZE]);
hBms[(currInd + 1) % HISTORYSIZE] = CreateDIBWithProperties(nWidth, nHeight);
currInd = (currInd + 1) % HISTORYSIZE;
if (undoSteps < HISTORYSIZE - 1)
undoSteps++;
redoSteps = 0;
// Create an HBITMAP
HBITMAP hbmCropped = CreateDIBWithProperties(nWidth, nHeight);
if (!hbmCropped)
return;
hdc = CreateCompatibleDC(hDrawingDC);
SelectObject(hdc, hBms[currInd]);
// Select the HBITMAP by memory DC
HDC hdcMem = ::CreateCompatibleDC(m_hDrawingDC);
HGDIOBJ hbmOld = ::SelectObject(hdcMem, hbmCropped);
oldPen = (HPEN) SelectObject(hdc, CreatePen(PS_SOLID, 1, paletteModel.GetBgColor()));
oldBrush = (HBRUSH) SelectObject(hdc, CreateSolidBrush(paletteModel.GetBgColor()));
Rectangle(hdc, 0, 0, nWidth, nHeight);
BitBlt(hdc, -nOffsetX, -nOffsetY, GetWidth(), GetHeight(), hDrawingDC, 0, 0, SRCCOPY);
DeleteObject(SelectObject(hdc, oldBrush));
DeleteObject(SelectObject(hdc, oldPen));
DeleteDC(hdc);
SelectObject(hDrawingDC, hBms[currInd]);
// Fill background of the HBITMAP
RECT rcBack = { 0, 0, nWidth, nHeight };
HBRUSH hbrBack = ::CreateSolidBrush(paletteModel.GetBgColor());
::FillRect(hdcMem, &rcBack, hbrBack);
::DeleteObject(hbrBack);
// Copy the old content
::BitBlt(hdcMem, -nOffsetX, -nOffsetY, GetWidth(), GetHeight(), m_hDrawingDC, 0, 0, SRCCOPY);
// Clean up
::SelectObject(hdcMem, hbmOld);
::DeleteDC(hdcMem);
// Push it
PushImageForUndo(hbmCropped);
if (GetWidth() != oldWidth || GetHeight() != oldHeight)
NotifyDimensionsChanged();
NotifyImageChanged();
}
void ImageModel::SaveImage(LPTSTR lpFileName)
void ImageModel::SaveImage(LPCTSTR lpFileName)
{
SaveDIBToFile(hBms[currInd], lpFileName, hDrawingDC);
SaveDIBToFile(m_hBms[m_currInd], lpFileName, TRUE);
}
BOOL ImageModel::IsImageSaved() const
{
return imageSaved;
}
BOOL ImageModel::HasUndoSteps() const
{
return undoSteps > 0;
}
BOOL ImageModel::HasRedoSteps() const
{
return redoSteps > 0;
return g_imageSaved;
}
void ImageModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY)
@@ -194,65 +175,57 @@ void ImageModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSk
INT newHeight = oldHeight * nStretchPercentY / 100;
if (oldWidth != newWidth || oldHeight != newHeight)
{
HBITMAP hbm0 = CopyDIBImage(hBms[currInd], newWidth, newHeight);
Insert(hbm0);
HBITMAP hbm0 = CopyDIBImage(m_hBms[m_currInd], newWidth, newHeight);
PushImageForUndo(hbm0);
}
if (nSkewDegX)
{
HBITMAP hbm1 = SkewDIB(hDrawingDC, hBms[currInd], nSkewDegX, FALSE);
Insert(hbm1);
HBITMAP hbm1 = SkewDIB(m_hDrawingDC, m_hBms[m_currInd], nSkewDegX, FALSE);
PushImageForUndo(hbm1);
}
if (nSkewDegY)
{
HBITMAP hbm2 = SkewDIB(hDrawingDC, hBms[currInd], nSkewDegY, TRUE);
Insert(hbm2);
HBITMAP hbm2 = SkewDIB(m_hDrawingDC, m_hBms[m_currInd], nSkewDegY, TRUE);
PushImageForUndo(hbm2);
}
if (GetWidth() != oldWidth || GetHeight() != oldHeight)
NotifyDimensionsChanged();
NotifyImageChanged();
}
int ImageModel::GetWidth() const
{
return GetDIBWidth(hBms[currInd]);
return GetDIBWidth(m_hBms[m_currInd]);
}
int ImageModel::GetHeight() const
{
return GetDIBHeight(hBms[currInd]);
return GetDIBHeight(m_hBms[m_currInd]);
}
void ImageModel::InvertColors()
{
RECT rect = {0, 0, GetWidth(), GetHeight()};
CopyPrevious();
InvertRect(hDrawingDC, &rect);
NotifyImageChanged();
}
void ImageModel::Clear(COLORREF color)
{
Rectangle(hDrawingDC, 0 - 1, 0 - 1, GetWidth() + 1, GetHeight() + 1);
PushImageForUndo();
InvertRect(m_hDrawingDC, &rect);
NotifyImageChanged();
}
HDC ImageModel::GetDC()
{
return hDrawingDC;
return m_hDrawingDC;
}
void ImageModel::FlipHorizontally()
{
CopyPrevious();
StretchBlt(hDrawingDC, GetWidth() - 1, 0, -GetWidth(), GetHeight(), GetDC(), 0, 0,
PushImageForUndo();
StretchBlt(m_hDrawingDC, GetWidth() - 1, 0, -GetWidth(), GetHeight(), GetDC(), 0, 0,
GetWidth(), GetHeight(), SRCCOPY);
NotifyImageChanged();
}
void ImageModel::FlipVertically()
{
CopyPrevious();
StretchBlt(hDrawingDC, 0, GetHeight() - 1, GetWidth(), -GetHeight(), GetDC(), 0, 0,
PushImageForUndo();
StretchBlt(m_hDrawingDC, 0, GetHeight() - 1, GetWidth(), -GetHeight(), GetDC(), 0, 0,
GetWidth(), GetHeight(), SRCCOPY);
NotifyImageChanged();
}
@@ -261,41 +234,36 @@ void ImageModel::RotateNTimes90Degrees(int iN)
{
switch (iN)
{
case 1:
case 3:
DeleteObject(hBms[(currInd + 1) % HISTORYSIZE]);
hBms[(currInd + 1) % HISTORYSIZE] = Rotate90DegreeBlt(hDrawingDC, GetWidth(), GetHeight(), iN == 1, FALSE);
currInd = (currInd + 1) % HISTORYSIZE;
if (undoSteps < HISTORYSIZE - 1)
undoSteps++;
redoSteps = 0;
SelectObject(hDrawingDC, hBms[currInd]);
imageSaved = FALSE;
NotifyDimensionsChanged();
break;
case 2:
CopyPrevious();
StretchBlt(hDrawingDC, GetWidth() - 1, GetHeight() - 1, -GetWidth(), -GetHeight(), GetDC(),
0, 0, GetWidth(), GetHeight(), SRCCOPY);
break;
case 1:
case 3:
{
HBITMAP hbm = Rotate90DegreeBlt(m_hDrawingDC, GetWidth(), GetHeight(), iN == 1, FALSE);
if (hbm)
PushImageForUndo(hbm);
break;
}
case 2:
{
PushImageForUndo();
StretchBlt(m_hDrawingDC, GetWidth() - 1, GetHeight() - 1, -GetWidth(), -GetHeight(),
m_hDrawingDC, 0, 0, GetWidth(), GetHeight(), SRCCOPY);
break;
}
}
NotifyImageChanged();
}
void ImageModel::DeleteSelection()
{
if (!selectionModel.m_bShow)
return;
selectionModel.TakeOff();
selectionModel.m_bShow = FALSE;
selectionModel.ClearColor();
selectionModel.ClearMask();
NotifyImageChanged();
}
void ImageModel::Bound(POINT& pt)
void ImageModel::Clamp(POINT& pt) const
{
pt.x = max(0, min(pt.x, GetWidth()));
pt.y = max(0, min(pt.y, GetHeight()));
}
HBITMAP ImageModel::CopyBitmap()
{
// NOTE: An app cannot select a bitmap into more than one device context at a time.
::SelectObject(m_hDrawingDC, m_hbmOld); // De-select
HBITMAP ret = CopyDIBImage(m_hBms[m_currInd]);
m_hbmOld = ::SelectObject(m_hDrawingDC, m_hBms[m_currInd]); // Re-select
return ret;
}

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/history.h
* PURPOSE: Undo and redo functionality
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Undo and redo functionality
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
@@ -13,38 +12,37 @@
class ImageModel
{
private:
void NotifyDimensionsChanged();
void NotifyImageChanged();
HDC hDrawingDC;
public:
HBITMAP hBms[HISTORYSIZE];
private:
int currInd;
int undoSteps;
int redoSteps;
public:
ImageModel();
void CopyPrevious(void);
virtual ~ImageModel();
HDC GetDC();
BOOL CanUndo() const { return m_undoSteps > 0; }
BOOL CanRedo() const { return m_redoSteps > 0; }
void PushImageForUndo(HBITMAP hbm = NULL);
void ResetToPrevious(void);
void Undo(BOOL bClearRedo = FALSE);
void Redo(void);
void ResetToPrevious(void);
void ClearHistory(void);
void Insert(HBITMAP hbm);
void Crop(int nWidth, int nHeight, int nOffsetX = 0, int nOffsetY = 0);
void SaveImage(LPTSTR lpFileName);
void SaveImage(LPCTSTR lpFileName);
BOOL IsImageSaved() const;
BOOL HasUndoSteps() const;
BOOL HasRedoSteps() const;
void StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX = 0, int nSkewDegY = 0);
int GetWidth() const;
int GetHeight() const;
HBITMAP CopyBitmap();
void InvertColors();
void Clear(COLORREF color = 0x00ffffff);
HDC GetDC();
void FlipHorizontally();
void FlipVertically();
void RotateNTimes90Degrees(int iN);
void DeleteSelection();
void Bound(POINT& pt);
void Clamp(POINT& pt) const;
void NotifyImageChanged();
protected:
HDC m_hDrawingDC; // The device context for this class
int m_currInd; // The current index in m_hBms
int m_undoSteps; // The undo-able count
int m_redoSteps; // The redo-able count
HBITMAP m_hBms[HISTORYSIZE]; // A rotation buffer of HBITMAPs
HGDIOBJ m_hbmOld;
};

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* Превод на Български/ Bulgarian translation
* https://reactos.org/wiki/Bulgarian_translation
* LOCATION: base/applications/mspaint/lang
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Bulgarian resource file
* TRANSLATORS: Copyright 2009-2012 S. Stanev (CCTAHEB) <sstpr@narod.ru>
* Copyright 2022 Nikolay Dimitrov <delphipro@gmail.com>
*/
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -139,31 +158,31 @@ BEGIN
PUSHBUTTON "Отказ", IDCANCEL, 125, 24, 48, 14
END
IDD_ATTRIBUTES DIALOGEX 100, 100, 225, 120
IDD_ATTRIBUTES DIALOGEX 100, 100, 243, 120
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Принадлежности"
BEGIN
LTEXT "&Ширина:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Височина:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Ширина:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Височина:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Дата на файла:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Файлов размер:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Разделителна:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Неналично", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Неналично", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Неналично", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Дата на файла:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Файлов размер:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Разделителна:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "Неналично", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "Неналично", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Единици", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Инчове", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Сантиметри", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Пиксели", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "&Инчове", IDD_ATTRIBUTESRB1, 12, 69, 40, 10, WS_GROUP
AUTORADIOBUTTON "Санти&метри", IDD_ATTRIBUTESRB2, 55, 69, 54, 10
AUTORADIOBUTTON "&Пиксели", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Цветове", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Черно-бяло", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Цветове", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
DEFPUSHBUTTON "Добре", IDOK, 170, 8, 48, 14
PUSHBUTTON "Отказ", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "По подразбиране", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
AUTORADIOBUTTON "&Черно-бяло", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Цв&етове", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "Добре", IDOK, 170, 8, 66, 14
PUSHBUTTON "Отказ", IDCANCEL, 170, 24, 66, 14
PUSHBUTTON "По по&дразбиране", IDD_ATTRIBUTESSTANDARD, 170, 40, 66, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "Всички файлове"
IDS_ALLPICTUREFILES "Снимки"
IDS_FILESIZE "%d разряда"
IDS_PRINTRES "%d x %d точки на метър"
IDS_INTNUMBERS "Моля въведете само числа!"
IDS_PERCENTAGE "Процента може да бъде между 1 и 500."
IDS_ANGLE "Ъгълът трябва да бъде между -89 и 89."
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "Наклонен"
IDS_UNDERLINE "Подчертан"
IDS_VERTICAL "Вертикален"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/cs-CZ.rc
* PURPOSE: Czech Language resource file
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Czech resource file
* TRANSLATORS: Copyright 2009-2010 Radek Liška aka Black_Fox <radekliska@gmail.com>
* Copyright 2011 Kamil Hornicek <kamil.hornicek@reactos.org>
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atributy"
BEGIN
LTEXT "Šíř&ka:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Výška:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Šířka:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Výška:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Datum změny:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Velikost souboru:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Rozlišení:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Nedostupné", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Nedostupné", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Nedostupné", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Datum změny:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Velikost souboru:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Rozlišení:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "Nedostupné", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "Nedostupné", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Jednotka", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Palce", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Centimetry", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixely", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "P&alce", IDD_ATTRIBUTESRB1, 12, 69, 40, 10, WS_GROUP
AUTORADIOBUTTON "Centi&metry", IDD_ATTRIBUTESRB2, 55, 69, 54, 10
AUTORADIOBUTTON "&Pixely", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Barvy", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Černobílé", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Barvy", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "Č&ernobílé", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Barvy", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Storno", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Výchozí", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Výc&hozí", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "Všechny soubory"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bajtů"
IDS_PRINTRES "%d x %d pixelů na metr"
IDS_INTNUMBERS "Zadávejte pouze celá čísla!"
IDS_PERCENTAGE "Měřítko musí být mezi 1 a 500."
IDS_ANGLE "Úhel musí být -89 a 89."
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/de-DE.rc
* PURPOSE: German Language resource file (reference language file)
* TRANSLATOR: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: German resource file
* TRANSLATOR: Copyright 2009 Benedikt Freisen <b.freisen@gmx.net>
*/
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attribute"
BEGIN
LTEXT "&Breite:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Höhe:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Breite:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Höhe:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Dateidatum:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Dateigröße:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Auflösung:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Nicht verfügbar", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Nicht verfügbar", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Nicht verfügbar", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Maßeinheit", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Zoll", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "&Zoll", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Farben", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Schwarzweiß", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Farben", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Schwarzweiß", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Farben", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Abbrechen", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Standard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Stan&dard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "Alle Dateien"
IDS_ALLPICTUREFILES "Alle Bilddateien"
IDS_FILESIZE "%d Bytes"
IDS_PRINTRES "%d x %d Pixel pro Meter"
IDS_INTNUMBERS "Bitte geben Sie nur ganze Zahlen ein!"
IDS_PERCENTAGE "Der Prozentsatz muss zwischen 1 und 500 liegen."
IDS_ANGLE "Der Winkel muss zwischen -89 und 89 liegen."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/en-GB.rc
* PURPOSE: British English Language resource file
* TRANSLATOR: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: English (United Kingdom) resource file
* TRANSLATOR: Copyright 2009 Benedikt Freisen <b.freisen@gmx.net>
*/
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attributes"
BEGIN
LTEXT "&Width:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Height:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Width:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Height:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "File &date:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "File &size:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "&Resolution:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "File date:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "File size:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolution:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Not available", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Not available", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Not available", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "dpi", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Units", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Inches", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Colours", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Black and white", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Co&lours", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "Co&lours", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Cancel", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Standard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Standard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "All Files"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d dots per inch"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/en-US.rc
* PURPOSE: US-English Language resource file
* TRANSLATORS: first times touched from en-GB.rc file by Mario Kacmar
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: English (United States) resource file
* TRANSLATORS: Copyright 2009 Benedikt Freisen <b.freisen@gmx.net>
* Copyright 2009 Mário Kačmár aka Kario <kario@szm.sk>
*/
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attributes"
BEGIN
LTEXT "&Width:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Height:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Width:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Height:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "File &date:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "File &size:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "&Resolution:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "File date:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "File size:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolution:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Not available", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Not available", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Not available", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "dpi", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Units", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Inches", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Colors", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Black and white", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Co&lors", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "Co&lors", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Cancel", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Default", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Default", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "All Files"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d dots per inch"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,11 +1,11 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/es-ES.rc
* PURPOSE: Spanish Language resource file
* TRANSLATORS: Gabriel Ilardi
* Ismael Ferreras Morezuelas
* Catalin Gabriel Draghita
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Spanish (Spain) resource file
* TRANSLATORS: Copyright 2009 Gabriel Ilardi <gabrielilardi@hotmail.it>
* Copyright 2009 Javier Remacha <remialdo@gmail.com>
* Copyright 2014-2016 Ismael Ferreras Morezuelas <swyterzone+ros@gmail.com>
* Copyright 2020 Catalin Gabriel Draghita <catalingabriel.reactos@outlook.com>
*/
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
@@ -102,6 +102,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -146,26 +165,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atributos"
BEGIN
LTEXT "&Anchura:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "Al&tura:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Anchura:", IDD_ATTRIBUTESTEXT1, 10, 42, 30, 10
LTEXT "Altura:", IDD_ATTRIBUTESTEXT2, 101, 42, 23, 10
LTEXT "Fecha modificación:", IDD_ATTRIBUTESTEXT3, 3, 5, 67, 10, SS_RIGHT
LTEXT "Espacio en disco:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10, SS_RIGHT
LTEXT "Resolución:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10, SS_RIGHT
LTEXT "No disponible", IDD_ATTRIBUTESTEXT6, 73, 5, 80, 10
LTEXT "No disponible", IDD_ATTRIBUTESTEXT7, 73, 15, 80, 10
LTEXT "No disponible", IDD_ATTRIBUTESTEXT8, 73, 25, 80, 10
GROUPBOX "Unidades ", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Pulgadas", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Centímetros", IDD_ATTRIBUTESRB2, 60, 69, 51, 10
AUTORADIOBUTTON "Píxeles", IDD_ATTRIBUTESRB3, 120, 69, 42, 10
GROUPBOX "Colores ", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Blanco y negro", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "En color", IDD_ATTRIBUTESRB5, 92, 100, 40, 10
LTEXT "Fecha modificación:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Espacio en disco:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Resolución:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "No disponible", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "No disponible", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unidades", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "P&ulgadas", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Centí&metros", IDD_ATTRIBUTESRB2, 60, 69, 51, 10
AUTORADIOBUTTON "&Píxeles", IDD_ATTRIBUTESRB3, 120, 69, 42, 10
GROUPBOX "Colores", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Blanco y negro", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "En &color", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "Aceptar", IDOK, 170, 8, 48, 14
PUSHBUTTON "Cancelar", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Predefinido", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Pre&definido", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -234,7 +253,6 @@ BEGIN
IDS_ALLFILES "Todos los archivos"
IDS_ALLPICTUREFILES "Todos los archivos de imagen"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d píxeles/m"
IDS_INTNUMBERS "Sólo se admiten números sin decimales."
IDS_PERCENTAGE "El porcentaje debe de estar entre 1 y 500."
IDS_ANGLE "El ángulo debe de estar entre -89 y 89."
@@ -244,4 +262,7 @@ BEGIN
IDS_ITALIC "Cursiva"
IDS_UNDERLINE "Subrayado"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* FILE: base/applications/mspaint/lang/et-EE.rc
* PURPOSE: Estonian Language resource file
* TRANSLATOR: Joann Mõndresku (joannmondresku at gmail dot com)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Estonian resource file
* TRANSLATOR: Copyright 2018 Joann Mõndresku <joannmondresku@gmail.com>
*/
LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atribuudid"
BEGIN
LTEXT "&Laius:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Pikkus:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Laius:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Pikkus:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Faili &kuupäev:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Faili &suurus:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "&Resolutsioon:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Faili kuupäev:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Faili suurus:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolutsioon:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Pole saadaval", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Pole saadaval", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Pole saadaval", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Ühikud", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Tollid", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Piksl&id", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Värvid", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Mustvalge", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Värvid", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Värvid", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Tühista", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Vaikimisi", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "V&aikimisi", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "Kõik failid"
IDS_ALLPICTUREFILES "Kõik Pildifailid"
IDS_FILESIZE "%d baiti"
IDS_PRINTRES "%d x %d pikslit meetri kohta"
IDS_INTNUMBERS "Palun sisesta ainult terviklike numbreid!"
IDS_PERCENTAGE "Protsent peab 1 ja 500 vahemikus olema."
IDS_ANGLE "Nurk peab -89 ja 89 vahemikus olema."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,3 +1,11 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Spanish (Basque) resource file
* TRANSLATORS: Copyright 2009 Javier Remacha <remialdo@gmail.com>
* Copyright 2020 Julen Urizar Compains <julenuri@hotmail.com>
*/
LANGUAGE LANG_BASQUE, SUBLANG_DEFAULT
//IDB_FONTSTOOLBAR BITMAP "icons/fontstoolbar-eu-ES.bmp"
@@ -92,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -136,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atributuak"
BEGIN
LTEXT "&Zabalera:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Altuera:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Zabalera:", IDD_ATTRIBUTESTEXT1, 10, 42, 30, 10
LTEXT "Altuera:", IDD_ATTRIBUTESTEXT2, 82, 42, 23, 10
LTEXT "Azken gordetze-data:", IDD_ATTRIBUTESTEXT3, 10, 5, 80, 10
LTEXT "Diskoko tamaina:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Bereizmena:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Ez dago erabilgarri", IDD_ATTRIBUTESTEXT6, 80, 5, 70, 10
LTEXT "Ez dago erabilgarri", IDD_ATTRIBUTESTEXT7, 80, 15, 70, 10
LTEXT "Ez dago erabilgarri", IDD_ATTRIBUTESTEXT8, 80, 25, 70, 10
GROUPBOX "Unitateak ", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Hazbetea", IDD_ATTRIBUTESRB1, 12, 69, 42, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 60, 69, 30, 10
AUTORADIOBUTTON "Pixela", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Koloreak ", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Zuri-beltzean", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Koloretean", IDD_ATTRIBUTESRB5, 92, 100, 50, 10
LTEXT "Azken gordetze-data:", IDD_ATTRIBUTESTEXT3, 10, 5, 70, 10
LTEXT "Diskoko tamaina:", IDD_ATTRIBUTESTEXT4, 10, 15, 70, 10
LTEXT "Bereizmena:", IDD_ATTRIBUTESTEXT5, 10, 25, 70, 10
LTEXT "Ez dago erabilgarri", IDD_ATTRIBUTESTEXT6, 82, 5, 86, 10
LTEXT "Ez dago erabilgarri", IDD_ATTRIBUTESTEXT7, 82, 15, 86, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 82, 25, 86, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unitateak", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Hazbetea", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 60, 69, 45, 10
AUTORADIOBUTTON "&Pixela", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Koloreak", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Zuri-beltzean", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Koloretean", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "Ados", IDOK, 170, 8, 48, 14
PUSHBUTTON "Utzi", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Lehenetsia", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Lehenetsia", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -224,7 +251,6 @@ BEGIN
IDS_ALLFILES "Fitxategi gustiak"
IDS_ALLPICTUREFILES "Argazki fitxategi guztiak"
IDS_FILESIZE "%d byte-k"
IDS_PRINTRES "%d x %d pixel-ak metro"
IDS_INTNUMBERS "Mezedez sartu zembaki oso bakarrik!"
IDS_PERCENTAGE "Ehuneko 1 eta 500 tartean izan behar da."
IDS_ANGLE "Angelu -89 eta 89 tartean izan behar da."
@@ -234,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,3 +1,11 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: French resource file
* TRANSLATORS: Copyright 2010-2014 Pierre Schweitzer <pierre@reactos.org>
* Copyright 2020 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
//IDB_FONTSTOOLBAR BITMAP "icons/fontstoolbar-fr-FR.bmp"
@@ -92,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -136,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attributs"
BEGIN
LTEXT "&Largeur :", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Hauteur :", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Largeur :", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Hauteur :", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Dernier enregistrement du fichier :", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Taille sur le disque :", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Résolution :", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Non disponible", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Non disponible", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Non disponible", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Date de modification :", IDD_ATTRIBUTESTEXT3, 10, 5, 70, 10
LTEXT "Taille sur le disque :", IDD_ATTRIBUTESTEXT4, 10, 15, 70, 10
LTEXT "Résolution :", IDD_ATTRIBUTESTEXT5, 10, 25, 70, 10
LTEXT "Non disponible", IDD_ATTRIBUTESTEXT6, 82, 5, 86, 10
LTEXT "Non disponible", IDD_ATTRIBUTESTEXT7, 82, 15, 86, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 82, 25, 86, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unités", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Pouces", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "P&ouces", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "C&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Couleurs", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Noir et blanc", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Couleurs", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Noir et blanc", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Couleurs", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Annuler", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Par défaut", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Par &défaut", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -224,7 +251,6 @@ BEGIN
IDS_ALLFILES "Tous les fichiers"
IDS_ALLPICTUREFILES "Toutes les images"
IDS_FILESIZE "%d octets"
IDS_PRINTRES "%d x %d pixels par mètre"
IDS_INTNUMBERS "Veuillez entrer des nombres entiers uniquement !"
IDS_PERCENTAGE "Le pourcentage doit être entre 1 et 500."
IDS_ANGLE "L'angle doit être entre -89 et 89."
@@ -234,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,3 +1,10 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Hebrew resource file
* TRANSLATOR: Copyright 2013-2018 Baruch Rutman <peterooch@gmail.com>
*/
LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
//IDB_FONTSTOOLBAR BITMAP "icons/fontstoolbar-he-IL.bmp"
@@ -92,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -138,23 +164,23 @@ EXSTYLE WS_EX_LAYOUTRTL
FONT 8, "MS Shell Dlg"
CAPTION "תכונות"
BEGIN
LTEXT "רוחב:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "גובה:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "רוחב:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "גובה:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "תאריך קובץ:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "גודל קובץ:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "גודל תמונה:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "לא זמין", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "לא זמין", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "לא זמין", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "יחידות מדידה", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "אינצ'ים", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "סנטימטרים", IDD_ATTRIBUTESRB2, 55, 69, 51, 10
AUTORADIOBUTTON "פיקסלים", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "צבעים", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "שחור ולבן", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "צבעוני", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "צבעוני", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "אישור", IDOK, 170, 8, 48, 14
PUSHBUTTON "ביטול", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "ברירת מחדל", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
@@ -227,7 +253,6 @@ BEGIN
IDS_ALLFILES "All Files"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d בתים"
IDS_PRINTRES, "%d x %d פיקסלים למטר"
IDS_INTNUMBERS, "Please enter integral numbers only!"
IDS_PERCENTAGE, "The percentage must be between 1 and 500."
IDS_ANGLE, "The angle must be between -89 and 89."
@@ -237,4 +262,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,3 +1,11 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Hungarian resource file
* TRANSLATORS: Copyright 2009 Gábor Balogh (xxxx00) <xxxx_0000@freemail.hu>
* Copyright 2020 Tibor Lajos Füzi <tibor.fuzi@gmail.com>
*/
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
//IDB_FONTSTOOLBAR BITMAP "icons/fontstoolbar-hu-HU.bmp"
@@ -92,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -131,31 +158,31 @@ BEGIN
PUSHBUTTON "Mégse", IDCANCEL, 125, 24, 48, 14
END
IDD_ATTRIBUTES DIALOGEX 100, 100, 245, 120
IDD_ATTRIBUTES DIALOGEX 100, 100, 243, 120
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attribútumok"
BEGIN
LTEXT "&Szélesség:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Magasság:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Szélesség:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Magasság:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Fájl dátuma:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Fájlméret:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Felbontás:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Nem elérhető", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Nem elérhető", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Nem elérhető", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Egység", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Hüvelyk", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "&Hüvelyk", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Színek", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Fekete-fehér", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Színes", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 68, 14
PUSHBUTTON "Mégse", IDCANCEL, 170, 24, 68, 14
PUSHBUTTON "Alapértelmezett", IDD_ATTRIBUTESSTANDARD, 170, 40, 68, 14
AUTORADIOBUTTON "&Fekete-fehér", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "S&zínes", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 66, 14
PUSHBUTTON "Mégse", IDCANCEL, 170, 24, 66, 14
PUSHBUTTON "&Alapértelmezett", IDD_ATTRIBUTESSTANDARD, 170, 40, 66, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -224,7 +251,6 @@ BEGIN
IDS_ALLFILES "Minden fájl"
IDS_ALLPICTUREFILES "Minden képfájl"
IDS_FILESIZE "%d bájt"
IDS_PRINTRES "%d x %d pixel per méter"
IDS_INTNUMBERS "Kérem csak egész számokat írjon be!"
IDS_PERCENTAGE "A százaléknak 1 és 500 között kell lennie."
IDS_ANGLE "A szögnek -89 és 89 között kell lennie."
@@ -234,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/id-ID.rc
* PURPOSE: Indonesian Language resource file
* TRANSLATORS: Mas Ahmad Muhammad
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Indonesian resource file
* TRANSLATOR: Copyright 2019 Mas Ahmad Muhammad <m.charly81@gmail.com>
*/
LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atribut"
BEGIN
LTEXT "&Lebar:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Tinggi:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Lebar:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Tinggi:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "T&anggal berkas:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "&Ukuran berkas:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "&Resolusi:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Tidak tersedia", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Tidak tersedia", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Tidak tersedia", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Tanggal berkas:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Ukuran berkas:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Resolusi:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "Tidak tersedia", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "Tidak tersedia", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Satuan", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Inci", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Piksel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Warna", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Hitam Putih", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Berwarna", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Berwarna", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Batal", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Asli", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Asli", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "Semua Berkas"
IDS_ALLPICTUREFILES "Semua Berkas Gambar"
IDS_FILESIZE "%d byte"
IDS_PRINTRES "%d x %d piksel per meter"
IDS_INTNUMBERS "Mohon hanya masukkan angka!"
IDS_PERCENTAGE "Persentasi harus antara 1 and 500."
IDS_ANGLE "Sudut hanya tersedia antara -89 and 89."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/it-IT.rc
* PURPOSE: Italian Language resource file
* TRANSLATOR: Gabriel Ilardi
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Italian resource file
* TRANSLATORS: Copyright 2009 Gabriel Ilardi <gabrielilardi@hotmail.it>
* Copyright 2009-2010 Paolo Devoti <devotip@tiscali.it>
*/
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attributi"
BEGIN
LTEXT "&Larghezza:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Altezza:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Larghezza:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Altezza:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Ultimo salvataggio:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Dimensioni su disco:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Risoluzione:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Non disponibile", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Non disponibile", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Non disponibile", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Ultimo salvataggio:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Dimensioni su disco:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Risoluzione:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "Non disponibile", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "Non disponibile", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unità di misura", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Pollici", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "P&ollici", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "C&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Colori", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Bianco e nero", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Colori", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Bianco e nero", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Colori", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Annulla", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Predefiniti", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Pre&definiti", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "All Files"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per metro"
IDS_INTNUMBERS "Si prega di inserire solo numeri interi!"
IDS_PERCENTAGE "La percentuale deve essere compresa tra 1 e 500."
IDS_ANGLE "L'angolo deve essere compreso tra -89 e 89."
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,10 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/ja-JP.rc
* PURPOSE: Japanese Language resource file
* TRANSLATORS: pcds90net, Tomoya Kitagawa, Katayama Hirofumi MZ
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Japanese resource file
* TRANSLATORS: Copyright 2009 pcds90net <ds200xnet-ros@yahoo.co.jp>
* Copyright 2009-2010 Tomoya Kitagawa <jptomoya@yahoo.co.jp>
* Copyright 2020-2022 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
@@ -78,7 +79,7 @@ BEGIN
POPUP "画像(&I)"
BEGIN
MENUITEM "回転と反転(&M)\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "伸縮/傾斜(&S)\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "伸縮傾斜(&S)\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "切り取り(&C)", IDM_IMAGECROP
MENUITEM "色の反転(&I)\tCtrl+I", IDM_IMAGEINVERTCOLORS
MENUITEM "画像の属性(&A)\tCtrl+E", IDM_IMAGEATTRIBUTES
@@ -100,6 +101,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "切り取り(&T)\tCtrl+X", IDM_EDITCUT
MENUITEM "コピー(&C)\tCtrl+C", IDM_EDITCOPY
MENUITEM "貼り付け(&P)\tCtrl+V", IDM_EDITPASTE
MENUITEM "選択範囲の削除(&L)\tDel", IDM_EDITDELETESELECTION
MENUITEM "すべて選択(&A)\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "ファイルへコピー(&O)...", IDM_EDITCOPYTO
MENUITEM "ファイルから貼り付け(&F)...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "回転と反転(&M)\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "伸縮と傾斜(&S)\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "色の反転(&I)\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +164,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 9, "MS UI Gothic"
CAPTION "画像の属性"
BEGIN
LTEXT "幅(&W):", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "高さ(&H):", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "幅(&W):", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "高さ(&H):", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "ファイルの日付(&D):", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "ファイルのサイズ(&S):", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "解像度(&R):", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "ファイルの日付:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "ファイルのサイズ:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "解像度:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "利用不可", IDD_ATTRIBUTESTEXT6, 75, 5, 90, 10
LTEXT "利用不可", IDD_ATTRIBUTESTEXT7, 75, 15, 90, 10
LTEXT "利用不可", IDD_ATTRIBUTESTEXT8, 75, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 75, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "単位", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "インチ(&I)", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "ピクセル(&P)", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "色", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "白黒(&B)", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "カラー(&L)", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "カラー(&L)", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "キャンセル", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "デフォルト", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "デフォルト(&D)", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +252,6 @@ BEGIN
IDS_ALLFILES "すべてのファイル"
IDS_ALLPICTUREFILES "すべての画像ファイル"
IDS_FILESIZE "%d バイト"
IDS_PRINTRES "%d x %d ピクセル/メートル"
IDS_INTNUMBERS "整数だけを入力して下さい!"
IDS_PERCENTAGE "百分率は 1 から 500 の間でなければなりません。"
IDS_ANGLE "角度は -89 から 89 の間でなければなりません。"
@@ -242,4 +261,7 @@ BEGIN
IDS_ITALIC "斜体"
IDS_UNDERLINE "下線"
IDS_VERTICAL "縦書き"
IDS_PRINTRES "%d x %d ピクセル/cm"
IDS_CANTPASTE "クリップボードからの貼り付けに失敗しました。データ形式が間違っているか、未対応です。"
IDS_SAVEERROR "次のファイルとして画像を保存するのに失敗しました:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/nl-NL.rc
* PURPOSE: Dutch Language resource file
* TRANSLATOR: Wouter De Vlieger
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Dutch resource file
* TRANSLATOR: Copyright 2009 Wouter De Vlieger (reFly) <wouterdevlieger@gmail.com>
*/
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Kenmerken"
BEGIN
LTEXT "&Breedte:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Hoogte:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Breedte:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Hoogte:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Datum laatst gewijzigd:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Bestandsgrootte:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolutie:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Niet beschikbaar", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Niet beschikbaar", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Niet beschikbaar", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Datum van wijziging:", IDD_ATTRIBUTESTEXT3, 10, 5, 70, 10
LTEXT "Bestandsgrootte:", IDD_ATTRIBUTESTEXT4, 10, 15, 70, 10
LTEXT "Resolutie:", IDD_ATTRIBUTESTEXT5, 10, 25, 70, 10
LTEXT "Niet beschikbaar", IDD_ATTRIBUTESTEXT6, 82, 5, 86, 10
LTEXT "Niet beschikbaar", IDD_ATTRIBUTESTEXT7, 82, 15, 86, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 82, 25, 86, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Eenheden", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Inch", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "&Inch", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Kleuren", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Zwart-wit", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Kleuren", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Zwart-wit", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Kleuren", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Annuleren", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Standaard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Standaard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "Alle bestanden"
IDS_ALLPICTUREFILES "Alle beeldbestanden"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: unknown (LGPL assumed)
* FILE: base/applications/mspaint/lang/no-NO.rc
* PURPOSE: NO-Norwegian Language resource file
* TRANSLATORS: first times touched from no-NO.rc file by Lars Martin Hambro
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Norwegian resource file
* TRANSLATOR: Copyright 2009 Lars Martin Hambro (LMH1) <lars_martin4@hotmail.com>
*/
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attributter"
BEGIN
LTEXT "&Bredde:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Høyde:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Bredde:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Høyde:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Fildato:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Filstørrelse:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Oppløsning:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Ikke tilgjengelig", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Ikke tilgjengelig", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Ikke tilgjengelig", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Enheter", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "Tommer", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Centimeter", IDD_ATTRIBUTESRB2, 52, 69, 55, 10
AUTORADIOBUTTON "Piksler", IDD_ATTRIBUTESRB3, 106, 69, 35, 10
AUTORADIOBUTTON "&Tommer", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "Centi&meter", IDD_ATTRIBUTESRB2, 52, 69, 55, 10
AUTORADIOBUTTON "&Piksler", IDD_ATTRIBUTESRB3, 106, 69, 35, 10
GROUPBOX "Farger", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Svart og hvit", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Farger", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "S&vart og hvit", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Farger", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Avbryt", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Standard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Standard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "Alle filer"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,10 +1,11 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/pl-PL.rc
* PURPOSE: Polish Language resource file
* TRANSLATOR: Caemyr - Olaf Siejka (May, 2009), Use ReactOS forum PM or IRC to contact me
* UTF-8 conversion by Caemyr (May, 2011)
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Polish resource file
* TRANSLATORS: Copyright 2009 Olaf Siejka <caemyr@gmail.com>
* Copyright 2015 Adam Stachowicz <saibamenppl@gmail.com>
* Copyright 2017 Adam Słaboń <asaillen456esx@gmail.com>
* Copyright 2023 Piotr Hetnarowicz <piotrhwz@gmail.com>
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
@@ -101,6 +102,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "&Wytnij\tCtrl+X", IDM_EDITCUT
MENUITEM "Kopiuj\tCtrl+C", IDM_EDITCOPY
MENUITEM "Wkl&ej\tCtrl+V", IDM_EDITPASTE
MENUITEM "Wyczyść z&aznaczenie\tDel", IDM_EDITDELETESELECTION
MENUITEM "&Zaznacz wszystko\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "Kopiuj &do...", IDM_EDITCOPYTO
MENUITEM "Wk&lej z...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "&Przerzuć/Obróć...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "Roz&ciągnij/Pochyl...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Odwróć kolory\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -145,23 +165,23 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atrybuty"
BEGIN
LTEXT "&Szerokość:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Wysokość:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Szerokość:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Wysokość:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Data:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Rozmiar:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Rozdzielczość:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Brak danych", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Brak danych", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Brak danych", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Jednostki", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Cale", IDD_ATTRIBUTESRB1, 12, 69, 35, 10, WS_GROUP
AUTORADIOBUTTON "Centy&metry", IDD_ATTRIBUTESRB2, 52, 69, 55, 10
AUTORADIOBUTTON "&Piksele", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Kolory", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Czarno-&biały", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "K&olory", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "K&olory", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Anuluj", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "&Domyślne", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
@@ -195,7 +215,7 @@ BEGIN
END
IDD_FONTS DIALOG 0, 0, 225, 25
CAPTION "Fonts"
CAPTION "Czcionki"
STYLE DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
EXSTYLE WS_EX_TOOLWINDOW
FONT 8, "MS Shell Dlg"
@@ -211,7 +231,7 @@ BEGIN
IDS_WINDOWTITLE "%s - Paint"
IDS_INFOTITLE "Paint dla ReactOS"
IDS_INFOTEXT "Dostępny na licencji GNU Lesser General Public License (LGPL, www.gnu.org)"
IDS_SAVEPROMPTTEXT "Czy chcesz zapisać zmiany do %s?"
IDS_SAVEPROMPTTEXT "Czy chcesz zapisać zmiany do pliku %s?"
IDS_DEFAULTFILENAME "bez tytułu"
IDS_MINIATURETITLE "Miniatura"
IDS_TOOLTIP1 "Zaznaczenie dowolne"
@@ -231,16 +251,18 @@ BEGIN
IDS_TOOLTIP15 "Elipsa"
IDS_TOOLTIP16 "Zaokrąglony prostokąt"
IDS_ALLFILES "Wszystkie pliki"
IDS_ALLPICTUREFILES "Wszystkie pliki graficzne"
IDS_ALLPICTUREFILES "Wszystkie pliki obrazów"
IDS_FILESIZE "%d bajtów"
IDS_PRINTRES "%d x %d pikseli na metr"
IDS_INTNUMBERS "Wprowadź liczbę całkowitą."
IDS_PERCENTAGE "Wprowadź liczbę całkowitą z zakresu od 1 do 500."
IDS_ANGLE "Wprowadź liczbę całkowitą z zakresu od -89 do 89."
IDS_LOADERRORTEXT "Plik %s nie może być załadowany."
IDS_ENLARGEPROMPTTEXT "Obraz w schowku jest większy niż bitmapa.\nChciałbyś powiększyć bitmapę?"
IDS_BOLD "Bold"
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_ENLARGEPROMPTTEXT "Obraz w schowku jest większy niż bitmapa.\nCzy chcesz powiększyć bitmapę?"
IDS_BOLD "Pogrubienie"
IDS_ITALIC "Kursywa"
IDS_UNDERLINE "Podkreślenie"
IDS_VERTICAL "Pionowe"
IDS_PRINTRES "%d x %d piksel/cm"
IDS_CANTPASTE "Nie można wkleić ze schowka. Format danych jest nieprawidłowy lub nieobsługiwany."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/pt-BR.rc
* PURPOSE: Portuguese Brazilian Language resource file
* TRANSLATOR: Wagner Leandro Bueno Angelo
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Portuguese (Brazilian) resource file
* TRANSLATORS: Copyright 2009 Wagner Leandro Bueno Angelo <wagner.snake@gmail.com>
* Copyright 2011 Matheus Macabu <mkbu95@gmail.com>
*/
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,23 +163,23 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atributos"
BEGIN
LTEXT "&Largura:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Altura:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Largura:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Altura:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Data do arquivo:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Tamanho do arquivo:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolução:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Data do arquivo:", IDD_ATTRIBUTESTEXT3, 10, 5, 70, 10
LTEXT "Tamanho do arquivo:", IDD_ATTRIBUTESTEXT4, 10, 15, 70, 10
LTEXT "Resolução:", IDD_ATTRIBUTESTEXT5, 10, 25, 70, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT6, 82, 5, 86, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT7, 82, 15, 86, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 82, 25, 86, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unidades", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "P&olegadas", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pi&xels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Cores", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Preto e &branco", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Co&res", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "Co&res", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Cancelar", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "&Padrão", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "Todos os arquivos"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/pt-PT.rc
* PURPOSE: Portuguese Language resource file
* TRANSLATOR: Manuel D V Silva
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Portuguese (Portugal) resource file
* TRANSLATORS: Copyright 2009 Manuel D V Silva (mds) <manueldulcidio@gmail.com>
* Copyright 2023 Jose Carlos Jesus <zecarlos1957@hotmail.com>
*/
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
@@ -19,19 +19,19 @@ BEGIN
MENUITEM "&Guardar\tCtrl+G", IDM_FILESAVE
MENUITEM "Guardar &como...", IDM_FILESAVEAS
MENUITEM SEPARATOR
MENUITEM "From Scanner or Camera...", IDM_FILEFROMSCANNERORCAMERA
MENUITEM "Scaner ou Câmera...", IDM_FILEFROMSCANNERORCAMERA
MENUITEM SEPARATOR
MENUITEM "Page View", IDM_FILEPAGEVIEW
MENUITEM "Page Setup...", IDM_FILEPAGESETUP
MENUITEM "Print...\tCtrl+P", IDM_FILEPRINT
MENUITEM "Pré-visualizar", IDM_FILEPAGEVIEW
MENUITEM "Configurar página...", IDM_FILEPAGESETUP
MENUITEM "Imprimir...\tCtrl+P", IDM_FILEPRINT
MENUITEM SEPARATOR
MENUITEM "Send...", IDM_FILESEND
MENUITEM "Enviar para...", IDM_FILESEND
MENUITEM SEPARATOR
MENUITEM "Definir como fundo (Mosaico)", IDM_FILEASWALLPAPERPLANE
MENUITEM "Definir como fundo (Centrado)", IDM_FILEASWALLPAPERCENTERED
MENUITEM "Definir como fundo (Esticado)", IDM_FILEASWALLPAPERSTRETCHED
MENUITEM SEPARATOR
MENUITEM "Most recently used file", IDM_FILEMOSTRECENTLYUSEDFILE, GRAYED
MENUITEM "Recente", IDM_FILEMOSTRECENTLYUSEDFILE, GRAYED
MENUITEM SEPARATOR
MENUITEM "Sai&r\tAlt+F4", IDM_FILEEXIT
END
@@ -43,9 +43,9 @@ BEGIN
MENUITEM "Cor&tar\tCtrl+X", IDM_EDITCUT
MENUITEM "&Copiar\tCtrl+C", IDM_EDITCOPY
MENUITEM "Co&lar\tCtrl+V", IDM_EDITPASTE
MENUITEM "Limpar &seleção\tDel", IDM_EDITDELETESELECTION
MENUITEM "&Inverter seleção", IDM_EDITINVERTSELECTION
MENUITEM "Selecionar &tudo\tCtrl+A", IDM_EDITSELECTALL
MENUITEM "Limpar &selecção\tDel", IDM_EDITDELETESELECTION
MENUITEM "&Inverter selecção", IDM_EDITINVERTSELECTION
MENUITEM "Seleccionar &tudo\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opiar para...", IDM_EDITCOPYTO
MENUITEM "Colar &de...", IDM_EDITPASTEFROM
@@ -59,7 +59,7 @@ BEGIN
MENUITEM SEPARATOR
POPUP "&Zoom"
BEGIN
POPUP "User defined"
POPUP "Personalizado"
BEGIN
MENUITEM "12,5%", IDM_VIEWZOOM125
MENUITEM "25%", IDM_VIEWZOOM25
@@ -70,8 +70,8 @@ BEGIN
MENUITEM "800%", IDM_VIEWZOOM800
END
MENUITEM SEPARATOR
MENUITEM "Show grid\tCtrl+M", IDM_VIEWSHOWGRID
MENUITEM "Show miniature", IDM_VIEWSHOWMINIATURE
MENUITEM "Mostrar grelha\tCtrl+M", IDM_VIEWSHOWGRID
MENUITEM "Mostrar miniatura", IDM_VIEWSHOWMINIATURE
END
MENUITEM "&Ver mapa de bits\tCtrl+B", IDM_VIEWFULLSCREEN
END
@@ -89,8 +89,8 @@ BEGIN
BEGIN
MENUITEM "&Editar cores...", IDM_COLORSEDITPALETTE
MENUITEM SEPARATOR
MENUITEM "Modern palette", IDM_COLORSMODERNPALETTE
MENUITEM "Old palette", IDM_COLORSOLDPALETTE
MENUITEM "Palete moderna", IDM_COLORSMODERNPALETTE
MENUITEM "Palete antiga", IDM_COLORSOLDPALETTE
END
POPUP "&Ajuda"
BEGIN
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^O", IDM_FILENEW
@@ -144,23 +163,23 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atributos"
BEGIN
LTEXT "&Largura:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Altura:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Largura:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Altura:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Data do arquivo:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Tamanho do arquivo:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Data do ficheiro:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Tamanho no disco:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolução:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT6, 80, 5, 90, 10
LTEXT "não disponível", IDD_ATTRIBUTESTEXT7, 80, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 80, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unidades", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "P&olegadas", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pi&xels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Cores", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Preto e &branco", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Co&res", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "Co&res", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Cancelar", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "&Predefinição", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
@@ -169,9 +188,9 @@ END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Stretch and skew image"
CAPTION "Esticar e inclinar imagem"
BEGIN
GROUPBOX "Stretch", IDD_STRETCHSKEWGROUPSTRETCH, 6, 6, 158, 66
GROUPBOX "Esticar", IDD_STRETCHSKEWGROUPSTRETCH, 6, 6, 158, 66
ICON IDI_HORZSTRETCH, IDD_STRETCHSKEWICONHSTRETCH, 12, 18, 32, 32
LTEXT "Horizontal:", IDD_STRETCHSKEWTEXTHSTRETCH, 45, 24, 40, 10
EDITTEXT IDD_STRETCHSKEWEDITHSTRETCH, 90, 23, 32, 12
@@ -180,21 +199,21 @@ BEGIN
LTEXT "Vertical:", IDD_STRETCHSKEWTEXTVSTRETCH, 45, 49, 40, 10
EDITTEXT IDD_STRETCHSKEWEDITVSTRETCH, 90, 48, 32, 12
LTEXT "%", IDD_STRETCHSKEWTEXTVPERCENT, 125, 49, 15, 10
GROUPBOX "Skew", IDD_STRETCHSKEWGROUPSKEW, 6, 76, 158, 66
GROUPBOX "Inclinar", IDD_STRETCHSKEWGROUPSKEW, 6, 76, 158, 66
ICON IDI_HORZSKEW, IDD_STRETCHSKEWICONHSKEW, 12, 88, 32, 32
LTEXT "Horizontal:", IDD_STRETCHSKEWTEXTHSKEW, 45, 94, 40, 10
EDITTEXT IDD_STRETCHSKEWEDITHSKEW, 90, 93, 32, 12
LTEXT "degrees", IDD_STRETCHSKEWTEXTHDEG, 125, 94, 30, 10
LTEXT "graus", IDD_STRETCHSKEWTEXTHDEG, 125, 94, 30, 10
ICON IDI_VERTSKEW, IDD_STRETCHSKEWICONVSKEW, 12, 113, 32, 32
LTEXT "Vertical:", IDD_STRETCHSKEWTEXTVSKEW, 45, 119, 40, 10
EDITTEXT IDD_STRETCHSKEWEDITVSKEW, 90, 118, 32, 12
LTEXT "degrees", IDD_STRETCHSKEWTEXTVDEG, 125, 119, 30, 10
LTEXT "graus", IDD_STRETCHSKEWTEXTVDEG, 125, 119, 30, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Cancelar", IDCANCEL, 170, 24, 48, 14
END
IDD_FONTS DIALOG 0, 0, 225, 25
CAPTION "Fonts"
CAPTION "Tipos de letra"
STYLE DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
EXSTYLE WS_EX_TOOLWINDOW
FONT 8, "MS Shell Dlg"
@@ -212,9 +231,9 @@ BEGIN
IDS_INFOTEXT "Disponível sob a licença GNU Lesser General Public License (LGPL, visite www.gnu.org)"
IDS_SAVEPROMPTTEXT "Pretende guardar as alterações a %s?"
IDS_DEFAULTFILENAME "Imagem"
IDS_MINIATURETITLE "Miniature"
IDS_TOOLTIP1 "Selecionar forma livre"
IDS_TOOLTIP2 "Selecionar"
IDS_MINIATURETITLE "Miniatura"
IDS_TOOLTIP1 "Seleccionar forma livre"
IDS_TOOLTIP2 "Seleccionar"
IDS_TOOLTIP3 "Borracha/Apagar cor"
IDS_TOOLTIP4 "Preencher com cor"
IDS_TOOLTIP5 "Escolher cor"
@@ -223,23 +242,25 @@ BEGIN
IDS_TOOLTIP8 "Pincel"
IDS_TOOLTIP9 "Aerógrafo"
IDS_TOOLTIP10 "Texto"
IDS_TOOLTIP11 "Linnha"
IDS_TOOLTIP11 "Linha"
IDS_TOOLTIP12 "Curva"
IDS_TOOLTIP13 "Retângulo"
IDS_TOOLTIP14 "Polígono"
IDS_TOOLTIP15 "Elipse"
IDS_TOOLTIP16 "Retângulo arredondado"
IDS_ALLFILES "Todos os arquivos"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_ALLFILES "Todos os ficheiros"
IDS_ALLPICTUREFILES "Todos os ficheiros de imagem"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
IDS_LOADERRORTEXT "The file %s could not be loaded."
IDS_ENLARGEPROMPTTEXT "The image in the clipboard is larger than the bitmap.\nWould you like the bitmap enlarged?"
IDS_BOLD "Bold"
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_INTNUMBERS "Por favor, introduza apenas números inteiros!"
IDS_PERCENTAGE "A percentagem deve estar entre 1 e 500."
IDS_ANGLE "O ângulo deve estar entre -89 e 89."
IDS_LOADERRORTEXT "O ficheiro %s não pôde ser carregado."
IDS_ENLARGEPROMPTTEXT "A imagem na área de transferência é maior que o bitmap.\nDeseja ampliar o bitmap?"
IDS_BOLD "Negrito"
IDS_ITALIC "Itálico"
IDS_UNDERLINE "Sublinhado"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Romanian resource file
* TRANSLATORS: Copyright 2009 Petru Dimitriu <petrimetri@gmail.com>
* Copyright 2011-2018 Ștefan Fulea <stefan.fulea@mail.com>
@@ -101,6 +101,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -145,25 +164,25 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atribute"
BEGIN
LTEXT "&Lățime:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "Î&nălțime:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Lățime:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Înălțime:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Dată fișier:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Dimensiune:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Rezoluție:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Indisponibil", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Indisponibil", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Indisponibil", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Unități", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "țoli", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "pixeli", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "ț&oli", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&pixeli", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Culori", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Alb-negru", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Culoare", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
DEFPUSHBUTTON "Con&firmă", IDOK, 170, 8, 48, 14
PUSHBUTTON "A&nulează", IDCANCEL, 170, 24, 48, 14
AUTORADIOBUTTON "&Alb-negru", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "C&uloare", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "Confirmă", IDOK, 170, 8, 48, 14
PUSHBUTTON "Anulează", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Impli&cite", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
@@ -233,14 +252,16 @@ BEGIN
IDS_ALLFILES "Orice fișier"
IDS_ALLPICTUREFILES "Toate fișierele imagine"
IDS_FILESIZE "%d octeți"
IDS_PRINTRES "%d x %d pixeli pe metru"
IDS_INTNUMBERS "Introduceți doar numere întregi!"
IDS_PERCENTAGE "Procentajul trebuie să fie între 1 și 500."
IDS_ANGLE "Unghiul trebuie să fie între -89 și 89."
IDS_LOADERRORTEXT "Fișierul %s nu poate fi încărcat."
IDS_ENLARGEPROMPTTEXT "Imaginea din memorie este mai mare decât suprafața curent disponibilă în aplicație.\nDoriți să redimensionați suprafața de desen disponibilă?"
IDS_BOLD "Bold"
IDS_ITALIC "Italic"
IDS_BOLD "Îngroșat"
IDS_ITALIC "Cursiv"
IDS_UNDERLINE "Subliniat"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixeli/cm"
IDS_CANTPASTE "Nu a putut fi lipit din clipboard. Formatul de date este fie incorect, fie nesuportat."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,3 +1,14 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Russian resource file
* TRANSLATORS: Copyright 2009 Dmitry Chapyshev <dmitry@reactos.org>
* Copyright 2013 Yaroslav Denisov (jperm) <jaroslaff111@mail.ru>
* Copyright 2013 Alexey Gorgurov <leha-bot@ya.ru>
* Copyright 2016 Alexey Shaltsin (BinaryTree) <lexa2011_98@mail.ru>
* Copyright 2016 Sergey Stopkin <stopkin.sergey@gmail.com>
*/
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
//IDB_FONTSTOOLBAR BITMAP "icons/fontstoolbar-ru-RU.bmp"
@@ -70,7 +81,7 @@ BEGIN
POPUP "&Рисунок"
BEGIN
MENUITEM "&Отразить/повернуть...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "Растянуть/Наклонить...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Растянуть/наклонить...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "Обре&зать", IDM_IMAGECROP
MENUITEM "О&братить цвета\tCtrl+I", IDM_IMAGEINVERTCOLORS
MENUITEM "&Атрибуты...\tCtrl+E", IDM_IMAGEATTRIBUTES
@@ -81,8 +92,8 @@ BEGIN
BEGIN
MENUITEM "&Изменить палитру...", IDM_COLORSEDITPALETTE
MENUITEM SEPARATOR
MENUITEM "Модернизированный вид", IDM_COLORSMODERNPALETTE
MENUITEM "Старый вид", IDM_COLORSOLDPALETTE
MENUITEM "Современная", IDM_COLORSMODERNPALETTE
MENUITEM "Старая", IDM_COLORSOLDPALETTE
END
POPUP "&Справка"
BEGIN
@@ -92,6 +103,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "&Вырезать\tCtrl+X", IDM_EDITCUT
MENUITEM "&Копировать\tCtrl+C", IDM_EDITCOPY
MENUITEM "Вст&авить\tCtrl+V", IDM_EDITPASTE
MENUITEM "О&чистить выделение\tDel", IDM_EDITDELETESELECTION
MENUITEM "Выделить в&се\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "Копироват&ь в файл...", IDM_EDITCOPYTO
MENUITEM "Вставить из &файла...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "&Отразить/повернуть...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Растянуть/наклонить...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "О&братить цвета\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -131,31 +161,31 @@ BEGIN
PUSHBUTTON "Отмена", IDCANCEL, 125, 24, 48, 14
END
IDD_ATTRIBUTES DIALOGEX 100, 100, 225, 120
IDD_ATTRIBUTES DIALOGEX 100, 100, 234, 120
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Атрибуты"
BEGIN
LTEXT "&Ширина:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Высота:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Ширина:", IDD_ATTRIBUTESTEXT1, 10, 42, 30, 10
LTEXT "Высота:", IDD_ATTRIBUTESTEXT2, 80, 42, 30, 10
LTEXT "Дата сохранения:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Размер на диске:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Разрешение:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "недоступно", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "недоступно", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "недоступно", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Дата сохранения:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Размер на диске:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Разрешение:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "недоступно", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "недоступно", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "точек/см", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Единицы измерения", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "д&юймы", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "с&м", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "т&очки", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Палитра", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&чёрно-белая", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "цв&етная", IDD_ATTRIBUTESRB5, 92, 100, 45, 10
DEFPUSHBUTTON "OK", IDOK, 150, 8, 57, 14
PUSHBUTTON "Отмена", IDCANCEL, 150, 24, 57, 14
PUSHBUTTON "По умо&лчанию", IDD_ATTRIBUTESSTANDARD, 150, 40, 57, 14
AUTORADIOBUTTON "цв&етная", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 57, 14
PUSHBUTTON "Отмена", IDCANCEL, 170, 24, 57, 14
PUSHBUTTON "По умо&лчанию", IDD_ATTRIBUTESSTANDARD, 170, 40, 57, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -186,7 +216,7 @@ BEGIN
END
IDD_FONTS DIALOG 0, 0, 225, 25
CAPTION "Fonts"
CAPTION "Шрифты"
STYLE DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
EXSTYLE WS_EX_TOOLWINDOW
FONT 8, "MS Shell Dlg"
@@ -224,14 +254,16 @@ BEGIN
IDS_ALLFILES "Все файлы"
IDS_ALLPICTUREFILES "Все файлы изображений"
IDS_FILESIZE "%d байт"
IDS_PRINTRES "%d x %d пикселей на метр"
IDS_INTNUMBERS, "Необходимо вводить только целые числа!"
IDS_PERCENTAGE, "Процент должен быть в интервале от 1 до 500."
IDS_ANGLE, "Угол должен быть в интервале от -89 до 89."
IDS_LOADERRORTEXT, "Невозможно загрузить файл %s."
IDS_ENLARGEPROMPTTEXT "Изображения в буфере обмена больше растрового изображения.\nХотите увеличить точечный рисунок?"
IDS_BOLD "Bold"
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_ENLARGEPROMPTTEXT "Изображение в буфере обмена больше точечного рисунка.\nХотите увеличить точечный рисунок?"
IDS_BOLD "Жирный"
IDS_ITALIC "Курсив"
IDS_UNDERLINE "Подчёркнутый"
IDS_VERTICAL "Вертикальный"
IDS_PRINTRES "%d x %d точек/см"
IDS_CANTPASTE "Не удалось вставить из буфера обмена. Формат данных либо некорректный, либо не поддерживается."
IDS_SAVEERROR "Не удалось сохранить точечный рисунок в файл:\n\n%s"
END

View File

@@ -1,10 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/sk-SK.rc
* PURPOSE: Slovak Language resource file
* TRANSLATORS: Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* LastChanged: 21-10-2009
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Slovak resource file
* TRANSLATOR: Copyright 2009 Mário Kačmár aka Kario <kario@szm.sk>
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -101,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -145,23 +162,23 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atribúty"
BEGIN
LTEXT "Ší&rka:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Výška:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Šírka:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Výška:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Dátum zmeny:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10 //File date
LTEXT "Veľkosť súboru:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10 //File size
LTEXT "Rozlíšenie:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Nie je k dispozícii", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Nie je k dispozícii", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Nie je k dispozícii", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Dátum zmeny:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Veľkosť súboru:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Rozlíšenie:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "Nie je k dispozícii", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "Nie je k dispozícii", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Jednotky", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "palce", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "pixely", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "p&alce", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&pixely", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Farby", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Čierno&bielo", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Farebne", IDD_ATTRIBUTESRB5, 92, 100, 45, 10
AUTORADIOBUTTON "&Farebne", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Zrušiť", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "&Predvolené", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
@@ -233,7 +250,6 @@ BEGIN
IDS_ALLFILES "Všetky súbory"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bajtov"
IDS_PRINTRES "%d x %d pixelov na meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -243,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/sq-AL.rc
* PURPOSE: AL-Albanian Language resource file
* TRANSLATORS: Ardit Dani
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Albanian resource file
* TRANSLATOR: Copyright 2013 Ardit Dani (ard1t) <ardit.dani@gmail.com>
*/
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Atributet"
BEGIN
LTEXT "&Gjerësi:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Lartësi:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Gjerësi:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Lartësi:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "File &data:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "File &mase:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "&Resolucioni:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "File data:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "File mase:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Resolucioni:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Jo në dispozicion", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Jo në dispozicion", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Jo në dispozicion", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Njësitë", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Inq", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixels", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Ngjyrat", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Bardh e Zi", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Ngjyrat", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Ngjyrat", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Anulo", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Parazgjedhur", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Parazgjedhur", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "All Files"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixels per meter"
IDS_INTNUMBERS "Ju lutem shkruani numra integrale vetëm!"
IDS_PERCENTAGE "Përqindja duhet të jetë në mes 1 dhe 500."
IDS_ANGLE "Këndi duhet të jetë në mes -89 dhe 89."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,3 +1,11 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Swedish resource file
* TRANSLATORS: Copyright 2011 Michael Wu (Witch) <im.allergic.2.mailing.lists@gmail.com>
* Copyright 2017 Markus Gothe <nietzsche@lysator.liu.se>
*/
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
//IDB_FONTSTOOLBAR BITMAP "icons/fontstoolbar-sv-SE.bmp"
@@ -92,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -136,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Attribut"
BEGIN
LTEXT "&Bredd:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Höjd:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Bredd:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Höjd:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Fildatum:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Filstorlek:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Upplösning:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Ej tillgänglig", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Ej tillgänglig", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Ej tillgänglig", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Enheter", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "tum", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "Pixlar", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "&tum", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Pixlar", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Färger", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "Svart och vitt", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Färger", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Svart och vitt", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Färger", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Avbryt", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Standard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Stan&dard", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 80
@@ -224,7 +251,6 @@ BEGIN
IDS_ALLFILES "All Files"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d bytes"
IDS_PRINTRES "%d x %d pixlar per meter"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -234,4 +260,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,9 @@
/*
* PROJECT: ReactOS Paint
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/tr-TR.rc
* PURPOSE: Turkish Resource file for ReactOS Paint
* TRANSLATOR: 2013-2014, 2016, 2019 Erdem Ersoy (eersoy93) (erdemersoy [at] erdemersoy [dot] net)
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Turkish resource file
* TRANSLATORS: Copyright 2013-2016, 2019 Erdem Ersoy (eersoy93) <erdemersoy@erdemersoy.net>
* Copyright 2021-2022 Süleyman Poyraz <zaryob.dev@gmail.com>
*/
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Öznitelikler"
BEGIN
LTEXT "&En:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Boy:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&En:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Boy:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Dosya Tarihi:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Dosya Boyutu:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Çözünürlük:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Yok", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Yok", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Yok", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Birim", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&İnç", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "&cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Piksel", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Renk", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Siyah ve Beyaz", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&Renkli", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "&Renkli", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "Tamam", IDOK, 170, 8, 48, 14
PUSHBUTTON "İptal", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Varsayılan", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Varsayılan", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "Tüm Dosyalar"
IDS_ALLPICTUREFILES "Tüm Resim Dosyaları"
IDS_FILESIZE "%d bayt"
IDS_PRINTRES "Metre başına %d x %d piksel"
IDS_INTNUMBERS "Lütfen yalnızca tamsayı giriniz!"
IDS_PERCENTAGE "Yüzde 1 ile 500 arasında olmalıdır."
IDS_ANGLE "Açı -89 ile 89 arasında olmalıdır."
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "İtalik"
IDS_UNDERLINE "Altı Çizgili"
IDS_VERTICAL "Düşey"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,10 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/uk-UA.rc
* PURPOSE: Ukraianian Language File for Paint
* TRANSLATORS: Artem Reznikov, Sakara Yevhen, igor Paliychuk
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Ukrainian resource file
* TRANSLATORS: Copyright 2009 Artem Reznikov <temarez@yandex.ru>
* Copyright 2009 Sakara Yevhen <eresid@gmail.com>
* Copyright 2010-2011 Igor Paliychuk <mansonigor@gmail.com>
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
@@ -100,6 +101,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +164,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Атрибути"
BEGIN
LTEXT "&Ширина:", IDD_ATTRIBUTESTEXT1, 10, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Висота:", IDD_ATTRIBUTESTEXT2, 90, 42, 35, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "Ширина:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "Висота:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Дата файлу:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Розмір файлу:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "Розширення:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Недоступно", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Недоступно", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Недоступно", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Одиниці вимірювання", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "дюйми", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "см", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "пікселі", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
AUTORADIOBUTTON "д&юйми", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "с&м", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&пікселі", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Кольори", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "чорно-білий", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "кольори", IDD_ATTRIBUTESRB5, 92, 100, 39, 10
AUTORADIOBUTTON "&чорно-білий", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "&кольори", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "OK", IDOK, 170, 8, 48, 14
PUSHBUTTON "Скасувати", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Стандартно", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "&Стандартно", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 80
@@ -232,7 +252,6 @@ BEGIN
IDS_ALLFILES "Усі файли"
IDS_ALLPICTUREFILES "All Picture Files"
IDS_FILESIZE "%d байт"
IDS_PRINTRES "%d x %d пікс. на метр"
IDS_INTNUMBERS "Please enter integral numbers only!"
IDS_PERCENTAGE "The percentage must be between 1 and 500."
IDS_ANGLE "The angle must be between -89 and 89."
@@ -242,4 +261,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,9 +1,8 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/lang/vi-VN.rc
* PURPOSE: VN-Vietnamese Language resource file
* TRANSLATORS: first times touched from en-US.rc file by Dummynosrev (Nguyễn Thanh Sơn)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Vietnamese (Vietnam) resource file
* TRANSLATOR: Copyright 2018 Nguyễn Thanh Sơn <dummynosrev@gmail.com>
*/
LANGUAGE LANG_VIETNAMESE, SUBLANG_VIETNAMESE_VIETNAM
@@ -100,6 +99,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +162,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Thuộc tính"
BEGIN
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "&Chiều rộng:", IDD_ATTRIBUTESTEXT1, 10, 42, 38, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 50, 40, 35, 12
LTEXT "C&hiều cao:", IDD_ATTRIBUTESTEXT2, 90, 42, 38, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "&Chiều rộng:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "&Chiều cao:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "Ngày tạo &tập tin:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "Kích thước &tập tin :", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "&Độ phân giải:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "Không có sẵn", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "Không có sẵn", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "Không có sẵn", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "Ngày tạo tập tin:", IDD_ATTRIBUTESTEXT3, 10, 5, 64, 10
LTEXT "Kích thước tập tin:", IDD_ATTRIBUTESTEXT4, 10, 15, 64, 10
LTEXT "Độ phân giải:", IDD_ATTRIBUTESTEXT5, 10, 25, 64, 10
LTEXT "Không có sẵn", IDD_ATTRIBUTESTEXT6, 77, 5, 90, 10
LTEXT "Không có sẵn", IDD_ATTRIBUTESTEXT7, 77, 15, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 77, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "Đơn vị", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "&Inch (1 inch = 2,54 cm)", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "&Inch (= 2,54 cm)", IDD_ATTRIBUTESRB1, 12, 69, 66, 10, WS_GROUP
AUTORADIOBUTTON "c&m", IDD_ATTRIBUTESRB2, 82, 69, 25, 10
AUTORADIOBUTTON "&Điểm ảnh", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "Màu sắc", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "&Đen trắng", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "Màu &sắc", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "Màu &sắc", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "Đồng ý", IDOK, 170, 8, 48, 14
PUSHBUTTON "Hủy", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "Mặc định", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "Mặc đị&nh", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 150
@@ -232,7 +250,6 @@ BEGIN
IDS_ALLFILES "Tất cả tập tin"
IDS_ALLPICTUREFILES "Tất cả tập tin hình ảnh"
IDS_FILESIZE "%d byte"
IDS_PRINTRES "%d x %d điểm ảnh trong một mét"
IDS_INTNUMBERS "Xin vui lòng chỉ nhập số tự nhiên khác không (0)!"
IDS_PERCENTAGE "Giá trị phần trăm phải ở giữa 1 và 500."
IDS_ANGLE "Giá trị của góc phải ở giữa -89 và 89."
@@ -242,4 +259,7 @@ BEGIN
IDS_ITALIC "Italic"
IDS_UNDERLINE "Underline"
IDS_VERTICAL "Vertical"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Chinese (Simplified) resource file
* TRANSLATORS: Copyright 2011 Song Fuchang (0xfc) <sfc_0@yahoo.com.cn>
* Copyright 2014-2015 Henry Tang Ih <henrytang2@hotmail.com>
@@ -102,6 +102,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -146,26 +165,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 9, "宋体"
CAPTION "属性"
BEGIN
LTEXT "宽度(&W)", IDD_ATTRIBUTESTEXT1, 10, 42, 37, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "高度(&H)", IDD_ATTRIBUTESTEXT2, 90, 42, 37, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "宽度(&W)", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
LTEXT "高度(&H)", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
LTEXT "文件日期(&D)", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "文件大小(&S)", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "分辨率(&R)", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "文件日期", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "文件大小", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "分辨率", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "单位", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "英寸(&I)", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "厘米(&M)", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "像素(&P)", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "颜色", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "黑白(&B)", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "彩色(&L)", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "彩色(&L)", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "确定", IDOK, 170, 8, 48, 14
PUSHBUTTON "取消", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "默认值", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "默认值(&D)", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 80
@@ -234,7 +253,6 @@ BEGIN
IDS_ALLFILES "所有文件"
IDS_ALLPICTUREFILES "所有图片文件"
IDS_FILESIZE "%d 字节"
IDS_PRINTRES "%d x %d 像素每米"
IDS_INTNUMBERS "请只输入整数!"
IDS_PERCENTAGE "百分比必须在 1 至 500 之间。"
IDS_ANGLE "角度必须在 -89 与 89 之间。"
@@ -244,4 +262,7 @@ BEGIN
IDS_ITALIC "斜体"
IDS_UNDERLINE "下划线"
IDS_VERTICAL "垂直"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Chinese (Hong Kong) resource file
* TRANSLATORS: Copyright 2021 Chan Chilung <eason066@gmail.com>
* REFERENCES: Chinese (Traditional) resource file
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 9, "新細明體"
CAPTION "內容"
BEGIN
LTEXT "寬度(&W)", IDD_ATTRIBUTESTEXT1, 10, 42, 37, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "高度(&H)", IDD_ATTRIBUTESTEXT2, 90, 42, 37, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "寬度(&W)", IDD_ATTRIBUTESTEXT1, 10, 40, 30, 10
LTEXT "高度(&H)", IDD_ATTRIBUTESTEXT2, 90, 40, 30, 10
LTEXT "檔案日期(&D)", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "檔案大小(&S)", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "解析度(&R)", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "檔案日期", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "檔案大小", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "解析度", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "單位", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "英寸(&I)", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "厘米(&M)", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "像素(&P)", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "顏色", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "黑白(&B)", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "彩色(&L)", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "彩色(&L)", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "確定", IDOK, 170, 8, 48, 14
PUSHBUTTON "取消", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "預設值", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "預設值(&D)", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 80
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "所有檔案"
IDS_ALLPICTUREFILES "所有圖像檔案"
IDS_FILESIZE "%d 位元組"
IDS_PRINTRES "%d x %d 像素每米"
IDS_INTNUMBERS "請輸入整數!"
IDS_PERCENTAGE "所佔百分比必須介乎 1 至 500 之間。"
IDS_ANGLE "角度必須介乎 -89 至 89 之間。"
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "斜體"
IDS_UNDERLINE "底線"
IDS_VERTICAL "垂直"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Chinese (Traditional) resource file
* TRANSLATORS: Copyright 2011 Elton Chung <elton328@gmail.com>
* Copyright 2021 Chan Chilung <eason066@gmail.com>
@@ -100,6 +100,25 @@ BEGIN
END
END
ID_POPUPMENU MENU
BEGIN
POPUP "Popup #0"
BEGIN
MENUITEM "C&ut\tCtrl+X", IDM_EDITCUT
MENUITEM "Copy\tCtrl+C", IDM_EDITCOPY
MENUITEM "&Paste\tCtrl+V", IDM_EDITPASTE
MENUITEM "De&lete selection\tDel", IDM_EDITDELETESELECTION
MENUITEM "Select &All\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "C&opy to...", IDM_EDITCOPYTO
MENUITEM "Paste &from...", IDM_EDITPASTEFROM
MENUITEM SEPARATOR
MENUITEM "Rotate/&Mirror...\tCtrl+R", IDM_IMAGEROTATEMIRROR
MENUITEM "&Stretch/Skew...\tCtrl+W", IDM_IMAGESTRETCHSKEW
MENUITEM "&Invert colors\tCtrl+I", IDM_IMAGEINVERTCOLORS
END
END
ID_ACCELERATORS ACCELERATORS
BEGIN
"^N", IDM_FILENEW
@@ -144,26 +163,26 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 9, "新細明體"
CAPTION "內容"
BEGIN
LTEXT "寬度(&W)", IDD_ATTRIBUTESTEXT1, 10, 42, 37, 10
EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
LTEXT "高度(&H)", IDD_ATTRIBUTESTEXT2, 90, 42, 37, 10
EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
LTEXT "寬度(&W)", IDD_ATTRIBUTESTEXT1, 10, 40, 30, 10
LTEXT "高度(&H)", IDD_ATTRIBUTESTEXT2, 90, 40, 30, 10
LTEXT "檔案日期(&D)", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "檔案大小(&S)", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "解析度(&R)", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "檔案日期", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
LTEXT "檔案大小", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
LTEXT "解析度", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
LTEXT "不可用", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
LTEXT "ppcm", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 /* This unit must match IDS_PRINTRES */
GROUPBOX "單位", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
AUTORADIOBUTTON "英寸(&I)", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
AUTORADIOBUTTON "厘米(&M)", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
AUTORADIOBUTTON "畫素(&P)", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
GROUPBOX "顏色", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
AUTORADIOBUTTON "黑白(&B)", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
AUTORADIOBUTTON "彩色(&L)", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
AUTORADIOBUTTON "彩色(&L)", IDD_ATTRIBUTESRB5, 92, 100, 42, 10
DEFPUSHBUTTON "確定", IDOK, 170, 8, 48, 14
PUSHBUTTON "取消", IDCANCEL, 170, 24, 48, 14
PUSHBUTTON "預設值", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
PUSHBUTTON "預設值(&D)", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
END
IDD_STRETCHSKEW DIALOGEX 100, 100, 225, 80
@@ -232,7 +251,6 @@ BEGIN
IDS_ALLFILES "所有檔案"
IDS_ALLPICTUREFILES "所有圖像檔案"
IDS_FILESIZE "%d 位元組"
IDS_PRINTRES "%d x %d 畫素每米"
IDS_INTNUMBERS "請輸入整數!"
IDS_PERCENTAGE "所佔百分比必須介於 1 和 500 之間。"
IDS_ANGLE "角度必須介於 -89 和 89 之間。"
@@ -242,4 +260,7 @@ BEGIN
IDS_ITALIC "斜體"
IDS_UNDERLINE "底線"
IDS_VERTICAL "垂直"
IDS_PRINTRES "%d x %d pixel/cm"
IDS_CANTPASTE "Failed to paste from the clipboard. The data format is either incorrect or not supported."
IDS_SAVEERROR "Failed to save the bitmap to file:\n\n%s"
END

View File

@@ -1,22 +1,19 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/main.cpp
* PURPOSE: Initializing everything
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Initializing everything
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#include "precomp.h"
POINT start;
POINT last;
BOOL askBeforeEnlarging = FALSE; // TODO: initialize from registry
HINSTANCE hProgInstance = NULL;
TCHAR filepathname[MAX_LONG_PATH] = { 0 };
BOOL isAFile = FALSE;
BOOL imageSaved = FALSE;
BOOL showGrid = FALSE;
POINT g_ptStart, g_ptEnd;
BOOL g_askBeforeEnlarging = FALSE; // TODO: initialize from registry
HINSTANCE g_hinstExe = NULL;
TCHAR g_szFileName[MAX_LONG_PATH] = { 0 };
BOOL g_isAFile = FALSE;
BOOL g_imageSaved = FALSE;
BOOL g_showGrid = FALSE;
CMainWindow mainWindow;
@@ -81,7 +78,7 @@ BOOL CMainWindow::GetOpenFileName(IN OUT LPTSTR pszFile, INT cchMaxFile)
{
// The "All Files" item text
CString strAllPictureFiles;
strAllPictureFiles.LoadString(hProgInstance, IDS_ALLPICTUREFILES);
strAllPictureFiles.LoadString(g_hinstExe, IDS_ALLPICTUREFILES);
// Get the import filter
CSimpleArray<GUID> aguidFileTypesI;
@@ -92,7 +89,7 @@ BOOL CMainWindow::GetOpenFileName(IN OUT LPTSTR pszFile, INT cchMaxFile)
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.hInstance = hProgInstance;
ofn.hInstance = g_hinstExe;
ofn.lpstrFilter = strFilter;
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;
ofn.lpstrDefExt = L"png";
@@ -119,19 +116,24 @@ BOOL CMainWindow::GetSaveFileName(IN OUT LPTSTR pszFile, INT cchMaxFile)
ZeroMemory(&sfn, sizeof(sfn));
sfn.lStructSize = sizeof(sfn);
sfn.hwndOwner = m_hWnd;
sfn.hInstance = hProgInstance;
sfn.hInstance = g_hinstExe;
sfn.lpstrFilter = strFilter;
sfn.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK;
sfn.lpfnHook = OFNHookProc;
sfn.lpstrDefExt = L"png";
// Choose PNG
for (INT i = 0; i < aguidFileTypesE.GetSize(); ++i)
LPWSTR pchDotExt = PathFindExtensionW(pszFile);
if (*pchDotExt == UNICODE_NULL)
{
if (aguidFileTypesE[i] == Gdiplus::ImageFormatPNG)
// Choose PNG
wcscat(pszFile, L".png");
for (INT i = 0; i < aguidFileTypesE.GetSize(); ++i)
{
sfn.nFilterIndex = i + 1;
break;
if (aguidFileTypesE[i] == Gdiplus::ImageFormatPNG)
{
sfn.nFilterIndex = i + 1;
break;
}
}
}
}
@@ -159,6 +161,7 @@ BOOL CMainWindow::ChooseColor(IN OUT COLORREF *prgbColor)
choosecolor.lpCustColors = custColors;
}
choosecolor.Flags = CC_RGBINIT;
choosecolor.rgbResult = *prgbColor;
if (!::ChooseColor(&choosecolor))
return FALSE;
@@ -169,10 +172,10 @@ BOOL CMainWindow::ChooseColor(IN OUT COLORREF *prgbColor)
HWND CMainWindow::DoCreate()
{
::LoadString(hProgInstance, IDS_DEFAULTFILENAME, filepathname, _countof(filepathname));
::LoadString(g_hinstExe, IDS_DEFAULTFILENAME, g_szFileName, _countof(g_szFileName));
CString strTitle;
strTitle.Format(IDS_WINDOWTITLE, PathFindFileName(filepathname));
strTitle.Format(IDS_WINDOWTITLE, PathFindFileName(g_szFileName));
RECT& rc = registrySettings.WindowPlacement.rcNormalPosition;
return Create(HWND_DESKTOP, rc, strTitle, WS_OVERLAPPEDWINDOW, WS_EX_ACCEPTFILES);
@@ -187,7 +190,7 @@ _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nC
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
hProgInstance = hInstance;
g_hinstExe = hInstance;
// Initialize common controls library
INITCOMMONCONTROLSEX iccx;
@@ -206,10 +209,8 @@ _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nC
}
// Initialize imageModel
imageModel.Crop(registrySettings.BMPWidth, registrySettings.BMPHeight);
if (__argc >= 2)
DoLoadImageFile(mainWindow, __targv[1], TRUE);
imageModel.ClearHistory();
if (__argc < 2 || !DoLoadImageFile(mainWindow, __targv[1], TRUE))
InitializeImage(NULL, NULL, FALSE);
// Make the window visible on the screen
mainWindow.ShowWindow(registrySettings.WindowPlacement.showCmd);

View File

@@ -1,10 +1,10 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/miniature.cpp
* PURPOSE: Window procedure of the main window and all children apart from
* hPalWin, hToolSettings and hSelection
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Window procedure of the main window and all children apart from
* hPalWin, hToolSettings and hSelection
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
* Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#include "precomp.h"
@@ -13,6 +13,17 @@ CMiniatureWindow miniature;
/* FUNCTIONS ********************************************************/
CMiniatureWindow::CMiniatureWindow()
: m_hbmCached(NULL)
{
}
CMiniatureWindow::~CMiniatureWindow()
{
if (m_hbmCached)
::DeleteObject(m_hbmCached);
}
HWND CMiniatureWindow::DoCreate(HWND hwndParent)
{
if (m_hWnd)
@@ -26,12 +37,36 @@ HWND CMiniatureWindow::DoCreate(HWND hwndParent)
};
TCHAR strTitle[100];
::LoadString(hProgInstance, IDS_MINIATURETITLE, strTitle, _countof(strTitle));
::LoadString(g_hinstExe, IDS_MINIATURETITLE, strTitle, _countof(strTitle));
DWORD style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME;
return Create(hwndParent, rc, strTitle, style, WS_EX_PALETTEWINDOW);
}
LRESULT CMiniatureWindow::OnMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (IsWindowVisible() && !IsIconic() && !IsZoomed())
{
CRect rc;
GetWindowRect(&rc);
registrySettings.ThumbXPos = rc.left;
registrySettings.ThumbYPos = rc.top;
}
return 0;
}
LRESULT CMiniatureWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (IsWindowVisible() && !IsIconic() && !IsZoomed())
{
CRect rc;
GetWindowRect(&rc);
registrySettings.ThumbWidth = rc.Width();
registrySettings.ThumbHeight = rc.Height();
}
return 0;
}
LRESULT CMiniatureWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
ShowWindow(SW_HIDE);
@@ -39,16 +74,55 @@ LRESULT CMiniatureWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL&
return 0;
}
LRESULT CMiniatureWindow::OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return TRUE; /* Avoid flickering */
}
LRESULT CMiniatureWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
RECT rc;
GetClientRect(&rc);
// Start painting
PAINTSTRUCT ps;
HDC hDC = BeginPaint(&ps);
StretchBlt(hDC, 0, 0, rc.right, rc.bottom,
imageModel.GetDC(), 0, 0, imageModel.GetWidth(), imageModel.GetHeight(),
SRCCOPY);
if (!hDC)
return 0;
// Use a memory bitmap to reduce flickering
HDC hdcMem = ::CreateCompatibleDC(hDC);
m_hbmCached = CachedBufferDIB(m_hbmCached, rc.right, rc.bottom);
HGDIOBJ hbmOld = ::SelectObject(hdcMem, m_hbmCached);
// FIXME: Consider aspect ratio
// Fill the background
::FillRect(hdcMem, &rc, (HBRUSH)(COLOR_BTNFACE + 1));
// Draw the image (hdcMem <-- imageModel)
int cxImage = imageModel.GetWidth();
int cyImage = imageModel.GetHeight();
::StretchBlt(hdcMem, 0, 0, rc.right, rc.bottom,
imageModel.GetDC(), 0, 0, cxImage, cyImage,
SRCCOPY);
// Move the image (hDC <-- hdcMem)
::BitBlt(hDC, 0, 0, rc.right, rc.bottom, hdcMem, 0, 0, SRCCOPY);
// Clean up
::SelectObject(hdcMem, hbmOld);
::DeleteDC(hdcMem);
EndPaint(&ps);
return 0;
}
LRESULT CMiniatureWindow::OnGetMinMaxInfo(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// Avoid too small
LPMINMAXINFO pInfo = (LPMINMAXINFO)lParam;
pInfo->ptMinTrackSize.x = 100;
pInfo->ptMinTrackSize.y = 75;
return 0;
}

View File

@@ -1,10 +1,9 @@
/*
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL
* FILE: base/applications/mspaint/miniature.h
* PURPOSE: Window procedure of the main window and all children apart from
* hPalWin, hToolSettings and hSelection
* PROGRAMMERS: Benedikt Freisen
* PROJECT: PAINT for ReactOS
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Window procedure of the main window and all children apart from
* hPalWin, hToolSettings and hSelection
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
*/
#pragma once
@@ -12,17 +11,31 @@
class CMiniatureWindow : public CWindowImpl<CMiniatureWindow>
{
public:
DECLARE_WND_CLASS_EX(_T("MiniatureWindow"), CS_DBLCLKS, COLOR_BTNFACE)
DECLARE_WND_CLASS_EX(_T("MiniatureWindow"), CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW,
COLOR_BTNFACE)
BEGIN_MSG_MAP(CMiniatureWindow)
MESSAGE_HANDLER(WM_MOVE, OnMove)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo)
END_MSG_MAP()
CMiniatureWindow();
virtual ~CMiniatureWindow();
HWND DoCreate(HWND hwndParent);
private:
protected:
HBITMAP m_hbmCached; // Cached buffer bitmap
LRESULT OnMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnGetMinMaxInfo(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
};

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More