Skip to content

Commit f3bb224

Browse files
authored
Merge pull request #3 from wflixu/dev
feat: 选区和标注
2 parents 1cfb826 + 17c4619 commit f3bb224

23 files changed

Lines changed: 1454 additions & 710 deletions

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ A modern macOS screenshot application built with Swift 5.10, SwiftUI and ScreenC
1616
- [x] Screen area selection
1717
- [ ] Window selection
1818
- [x] Image editing
19-
- [ ] Basic annotations
20-
- [ ] Crop and resize
19+
- [x] Basic annotations
20+
- [x] Crop and resize
2121
- [x] Saving options
2222
- [x] Save to local
23-
- [s] Copy to clipboard
23+
- [x] Copy to clipboard
2424
- [x] Custom save locations
2525
- [x] UI Enhancements
26-
- [ ] Border shadow effects
26+
- [x] Border shadow effects
2727
- [ ] Customizable UI themes
2828

2929
## Requirements
@@ -35,9 +35,10 @@ A modern macOS screenshot application built with Swift 5.10, SwiftUI and ScreenC
3535
## Installation
3636

3737
1. Download the latest release from [Releases](https://github.com/wflixu/iCap/releases)
38-
2. Clone this repository
39-
3. Open in Xcode
40-
4. Build and run
38+
39+
## preview
40+
![](public/images/preview.png)
41+
4142

4243
## Contributing
4344
Contributions are welcome! Please submit a pull request or open an issue for any bugs or feature requests.
@@ -49,4 +50,3 @@ If you encounter any issues or have suggestions, please open an [issue](https://
4950
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
5051

5152

52-

iCap.xcodeproj/project.pbxproj

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
5C18BE302DBCD7B0000AE934 /* CanvasView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C18BE2F2DBCD7B0000AE934 /* CanvasView.swift */; };
11+
5C18BE322DBD208D000AE934 /* AnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C18BE312DBD208D000AE934 /* AnnotationView.swift */; };
12+
5C18BE342DBD308F000AE934 /* EventBus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C18BE332DBD308F000AE934 /* EventBus.swift */; };
1013
5C32566A2D9809EF000BAE39 /* ActionBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3256692D9809EF000BAE39 /* ActionBarView.swift */; };
1114
5C32566C2D9822FD000BAE39 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5C32566B2D9822FD000BAE39 /* Localizable.xcstrings */; };
1215
5C32566E2D982527000BAE39 /* GeneralTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C32566D2D982527000BAE39 /* GeneralTabView.swift */; };
@@ -15,12 +18,11 @@
1518
5C3456612B69EDDB00278BF2 /* StatusMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3456602B69EDDB00278BF2 /* StatusMenu.swift */; };
1619
5C6D55F72D3B5FB000DD2979 /* OverlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6D55F62D3B5FA200DD2979 /* OverlayerView.swift */; };
1720
5C74BA862D97B07B005673DB /* AppLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C74BA852D97B07B005673DB /* AppLogger.swift */; };
21+
5C760DBC2DB52F2D00359832 /* ActiveAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C760DBB2DB52F2D00359832 /* ActiveAnnotationView.swift */; };
1822
5C80293F2D98F0E3007C659C /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C80293E2D98F0E3007C659C /* Extensions.swift */; };
19-
5C9BE1BE2BDE707800FE56BD /* ImageDrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9BE1BD2BDE707800FE56BD /* ImageDrawView.swift */; };
2023
5C9BE1C12BDEA62800FE56BD /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9BE1C02BDEA62800FE56BD /* Model.swift */; };
21-
5CA3C1A22BCCFE0800ED3A48 /* CrosshairView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA3C1A12BCCFE0800ED3A48 /* CrosshairView.swift */; };
24+
5CA3C1A22BCCFE0800ED3A48 /* SelectionAreaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA3C1A12BCCFE0800ED3A48 /* SelectionAreaView.swift */; };
2225
5CC56DD22BDBA1F300CFEEAB /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC56DD12BDBA1F300CFEEAB /* Constants.swift */; };
23-
5CC56DD42BDBA9D000CFEEAB /* SCContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC56DD32BDBA9D000CFEEAB /* SCContext.swift */; };
2426
5CC92F7B2D3A015300214098 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = 5CC92F7A2D3A015300214098 /* KeyboardShortcuts */; };
2527
5CC92F7D2D3A06B900214098 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC92F7C2D3A06B000214098 /* AppState.swift */; };
2628
5CF3D9852B63B25C00753013 /* iCapApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF3D9842B63B25C00753013 /* iCapApp.swift */; };
@@ -53,6 +55,9 @@
5355

5456
/* Begin PBXFileReference section */
5557
5C159EA82BCD367900EF2F06 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
58+
5C18BE2F2DBCD7B0000AE934 /* CanvasView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CanvasView.swift; sourceTree = "<group>"; };
59+
5C18BE312DBD208D000AE934 /* AnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnotationView.swift; sourceTree = "<group>"; };
60+
5C18BE332DBD308F000AE934 /* EventBus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventBus.swift; sourceTree = "<group>"; };
5661
5C3256692D9809EF000BAE39 /* ActionBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionBarView.swift; sourceTree = "<group>"; };
5762
5C32566B2D9822FD000BAE39 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
5863
5C32566D2D982527000BAE39 /* GeneralTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralTabView.swift; sourceTree = "<group>"; };
@@ -63,12 +68,11 @@
6368
5C6D55F62D3B5FA200DD2979 /* OverlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayerView.swift; sourceTree = "<group>"; };
6469
5C72E4FA2C78820F00EAA205 /* ScreenCaptureKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenCaptureKit.framework; path = System/Library/Frameworks/ScreenCaptureKit.framework; sourceTree = SDKROOT; };
6570
5C74BA852D97B07B005673DB /* AppLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLogger.swift; sourceTree = "<group>"; };
71+
5C760DBB2DB52F2D00359832 /* ActiveAnnotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveAnnotationView.swift; sourceTree = "<group>"; };
6672
5C80293E2D98F0E3007C659C /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
67-
5C9BE1BD2BDE707800FE56BD /* ImageDrawView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageDrawView.swift; sourceTree = "<group>"; };
6873
5C9BE1C02BDEA62800FE56BD /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = "<group>"; };
69-
5CA3C1A12BCCFE0800ED3A48 /* CrosshairView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrosshairView.swift; sourceTree = "<group>"; };
74+
5CA3C1A12BCCFE0800ED3A48 /* SelectionAreaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectionAreaView.swift; sourceTree = "<group>"; };
7075
5CC56DD12BDBA1F300CFEEAB /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
71-
5CC56DD32BDBA9D000CFEEAB /* SCContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCContext.swift; sourceTree = "<group>"; };
7276
5CC92F7C2D3A06B000214098 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = "<group>"; };
7377
5CF3D9812B63B25B00753013 /* iCap.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iCap.app; sourceTree = BUILT_PRODUCTS_DIR; };
7478
5CF3D9842B63B25C00753013 /* iCapApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iCapApp.swift; sourceTree = "<group>"; };
@@ -121,6 +125,7 @@
121125
5C74BA852D97B07B005673DB /* AppLogger.swift */,
122126
5C3256712D98354F000BAE39 /* Utils.swift */,
123127
5C80293E2D98F0E3007C659C /* Extensions.swift */,
128+
5C18BE332DBD308F000AE934 /* EventBus.swift */,
124129
);
125130
path = Shared;
126131
sourceTree = "<group>";
@@ -130,10 +135,11 @@
130135
children = (
131136
5C9BE1C02BDEA62800FE56BD /* Model.swift */,
132137
5C3256692D9809EF000BAE39 /* ActionBarView.swift */,
133-
5CA3C1A12BCCFE0800ED3A48 /* CrosshairView.swift */,
134-
5CC56DD32BDBA9D000CFEEAB /* SCContext.swift */,
135-
5C9BE1BD2BDE707800FE56BD /* ImageDrawView.swift */,
138+
5CA3C1A12BCCFE0800ED3A48 /* SelectionAreaView.swift */,
136139
5C6D55F62D3B5FA200DD2979 /* OverlayerView.swift */,
140+
5C760DBB2DB52F2D00359832 /* ActiveAnnotationView.swift */,
141+
5C18BE2F2DBCD7B0000AE934 /* CanvasView.swift */,
142+
5C18BE312DBD208D000AE934 /* AnnotationView.swift */,
137143
);
138144
path = Editor;
139145
sourceTree = "<group>";
@@ -254,21 +260,23 @@
254260
buildActionMask = 2147483647;
255261
files = (
256262
5C32566E2D982527000BAE39 /* GeneralTabView.swift in Sources */,
263+
5C18BE322DBD208D000AE934 /* AnnotationView.swift in Sources */,
257264
5C6D55F72D3B5FB000DD2979 /* OverlayerView.swift in Sources */,
258-
5CC56DD42BDBA9D000CFEEAB /* SCContext.swift in Sources */,
259265
5CF3D9872B63B25C00753013 /* ContentView.swift in Sources */,
260266
5CF3D9852B63B25C00753013 /* iCapApp.swift in Sources */,
261267
5C3456612B69EDDB00278BF2 /* StatusMenu.swift in Sources */,
268+
5C760DBC2DB52F2D00359832 /* ActiveAnnotationView.swift in Sources */,
262269
5C9BE1C12BDEA62800FE56BD /* Model.swift in Sources */,
263270
5CC92F7D2D3A06B900214098 /* AppState.swift in Sources */,
264271
5C74BA862D97B07B005673DB /* AppLogger.swift in Sources */,
272+
5C18BE342DBD308F000AE934 /* EventBus.swift in Sources */,
265273
5C3256702D98262A000BAE39 /* AboutTabView.swift in Sources */,
266-
5C9BE1BE2BDE707800FE56BD /* ImageDrawView.swift in Sources */,
267274
5C80293F2D98F0E3007C659C /* Extensions.swift in Sources */,
268-
5CA3C1A22BCCFE0800ED3A48 /* CrosshairView.swift in Sources */,
275+
5CA3C1A22BCCFE0800ED3A48 /* SelectionAreaView.swift in Sources */,
269276
5CC56DD22BDBA1F300CFEEAB /* Constants.swift in Sources */,
270277
5C3256722D98354F000BAE39 /* Utils.swift in Sources */,
271278
5C32566A2D9809EF000BAE39 /* ActionBarView.swift in Sources */,
279+
5C18BE302DBCD7B0000AE934 /* CanvasView.swift in Sources */,
272280
);
273281
runOnlyForDeploymentPostprocessing = 0;
274282
};
@@ -407,9 +415,10 @@
407415
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
408416
CODE_SIGN_ENTITLEMENTS = iCap/iCap.entitlements;
409417
CODE_SIGN_IDENTITY = "Apple Development";
418+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
410419
CODE_SIGN_STYLE = Automatic;
411420
COMBINE_HIDPI_IMAGES = YES;
412-
CURRENT_PROJECT_VERSION = 20250405002;
421+
CURRENT_PROJECT_VERSION = 20250501002;
413422
DEAD_CODE_STRIPPING = YES;
414423
DEVELOPMENT_ASSET_PATHS = "";
415424
DEVELOPMENT_TEAM = 4L3563XCBN;
@@ -426,7 +435,7 @@
426435
"@executable_path/../Frameworks",
427436
);
428437
MACOSX_DEPLOYMENT_TARGET = 15.0;
429-
MARKETING_VERSION = 1.0.6;
438+
MARKETING_VERSION = 1.1.0;
430439
PRODUCT_BUNDLE_IDENTIFIER = cn.wflixu.icap;
431440
PRODUCT_NAME = "$(TARGET_NAME)";
432441
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -446,7 +455,7 @@
446455
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
447456
CODE_SIGN_STYLE = Manual;
448457
COMBINE_HIDPI_IMAGES = YES;
449-
CURRENT_PROJECT_VERSION = 20250405002;
458+
CURRENT_PROJECT_VERSION = 20250501002;
450459
DEAD_CODE_STRIPPING = YES;
451460
DEVELOPMENT_ASSET_PATHS = "";
452461
DEVELOPMENT_TEAM = "";
@@ -464,7 +473,7 @@
464473
"@executable_path/../Frameworks",
465474
);
466475
MACOSX_DEPLOYMENT_TARGET = 15.0;
467-
MARKETING_VERSION = 1.0.6;
476+
MARKETING_VERSION = 1.1.0;
468477
PRODUCT_BUNDLE_IDENTIFIER = cn.wflixu.icap;
469478
PRODUCT_NAME = "$(TARGET_NAME)";
470479
PROVISIONING_PROFILE_SPECIFIER = "";

0 commit comments

Comments
 (0)