diff --git a/bitmap/goBitmap.h b/bitmap/goBitmap.h index 6871e9e..7bf4893 100644 --- a/bitmap/goBitmap.h +++ b/bitmap/goBitmap.h @@ -155,7 +155,9 @@ MMBitmapRef bitmap_from_string(const char *str){ MMBitmapRef bitmap; MMBMPStringError err; - if ((bitmap = createMMBitmapFromString((unsigned char*)str, len, &err)) == NULL) { + if ((bitmap = createMMBitmapFromString( + (unsigned char*)str, len, &err)) + == NULL) { return NULL; } diff --git a/robotgo.go b/robotgo.go index 41a2cff..ccfbfd0 100644 --- a/robotgo.go +++ b/robotgo.go @@ -50,6 +50,7 @@ import "C" import ( // "fmt" + "image" "os" "reflect" "runtime" @@ -60,10 +61,11 @@ import ( "github.com/go-vgo/robotgo/clipboard" "github.com/shirou/gopsutil/process" + "github.com/vcaesar/imgo" ) const ( - version string = "v0.48.0.522, Ben Nevis!" + version string = "v0.48.0.525, Ben Nevis!" ) type ( @@ -914,6 +916,16 @@ func OpenBitmap(args ...interface{}) C.MMBitmapRef { // defer C.free(unsafe.Pointer(path)) } +// DecodeImg decode the image to image.Image and return +func DecodeImg(path string) (image.Image, string, error) { + return imgo.DecodeFile(path) +} + +// OpenImg open the image return []byte +func OpenImg(path string) []byte { + return imgo.ImgToBytes(path) +} + // BitmapStr bitmap from string func BitmapStr(str string) C.MMBitmapRef { cs := C.CString(str) diff --git a/vendor/github.com/shirou/gopsutil/process/process_windows.go b/vendor/github.com/shirou/gopsutil/process/process_windows.go index f4c8fe2..9304e2d 100644 --- a/vendor/github.com/shirou/gopsutil/process/process_windows.go +++ b/vendor/github.com/shirou/gopsutil/process/process_windows.go @@ -400,7 +400,7 @@ func (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) } // User and kernel times are represented as a FILETIME structure - // wich contains a 64-bit value representing the number of + // which contains a 64-bit value representing the number of // 100-nanosecond intervals since January 1, 1601 (UTC): // http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx // To convert it into a float representing the seconds that the diff --git a/vendor/github.com/vcaesar/imgo/LICENSE b/vendor/github.com/vcaesar/imgo/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/vendor/github.com/vcaesar/imgo/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/vcaesar/imgo/README.md b/vendor/github.com/vcaesar/imgo/README.md new file mode 100644 index 0000000..7d866f2 --- /dev/null +++ b/vendor/github.com/vcaesar/imgo/README.md @@ -0,0 +1,9 @@ +# img + +[![CircleCI Status](https://circleci.com/gh/vcaesar/img.svg?style=shield)](https://circleci.com/gh/vcaesar/img) +[![codecov](https://codecov.io/gh/vcaesar/img/branch/master/graph/badge.svg)](https://codecov.io/gh/vcaesar/img) +[![Build Status](https://travis-ci.org/vcaesar/img.svg)](https://travis-ci.org/vcaesar/img) +[![Go Report Card](https://goreportcard.com/badge/github.com/vcaesar/img)](https://goreportcard.com/report/github.com/vcaesar/img) +[![GoDoc](https://godoc.org/github.com/vcaesar/img?status.svg)](https://godoc.org/github.com/vcaesar/img) +[![Release](https://github-release-version.herokuapp.com/github/vcaesar/img/release.svg?style=flat)](https://github.com/vcaesar/img/releases/latest) +[![Join the chat at https://gitter.im/go-vgo/robotgo](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-vgo/robotgo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) \ No newline at end of file diff --git a/vendor/github.com/vcaesar/imgo/README_zh.md b/vendor/github.com/vcaesar/imgo/README_zh.md new file mode 100644 index 0000000..7d866f2 --- /dev/null +++ b/vendor/github.com/vcaesar/imgo/README_zh.md @@ -0,0 +1,9 @@ +# img + +[![CircleCI Status](https://circleci.com/gh/vcaesar/img.svg?style=shield)](https://circleci.com/gh/vcaesar/img) +[![codecov](https://codecov.io/gh/vcaesar/img/branch/master/graph/badge.svg)](https://codecov.io/gh/vcaesar/img) +[![Build Status](https://travis-ci.org/vcaesar/img.svg)](https://travis-ci.org/vcaesar/img) +[![Go Report Card](https://goreportcard.com/badge/github.com/vcaesar/img)](https://goreportcard.com/report/github.com/vcaesar/img) +[![GoDoc](https://godoc.org/github.com/vcaesar/img?status.svg)](https://godoc.org/github.com/vcaesar/img) +[![Release](https://github-release-version.herokuapp.com/github/vcaesar/img/release.svg?style=flat)](https://github.com/vcaesar/img/releases/latest) +[![Join the chat at https://gitter.im/go-vgo/robotgo](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-vgo/robotgo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) \ No newline at end of file diff --git a/vendor/github.com/vcaesar/imgo/circle.yml b/vendor/github.com/vcaesar/imgo/circle.yml new file mode 100644 index 0000000..b596eda --- /dev/null +++ b/vendor/github.com/vcaesar/imgo/circle.yml @@ -0,0 +1,23 @@ +# circle.yml # +# machine: +# go: +# version: 1.9.1 + +version: 2 + +jobs: + build: + docker: + - image: golang:1.9.4 + working_directory: /go/src/github.com/vcaesar/imgo + steps: + - checkout + # specify any bash command here prefixed with `run: ` + # - run: go get -u github.com/go-ego/gse + - run: go get -v -t -d ./... + - run: go test -v ./... + # codecov.io + - run: go test -v -covermode=count -coverprofile=coverage.out + - run: bash <(curl -s https://codecov.io/bash) + + \ No newline at end of file diff --git a/vendor/github.com/vcaesar/imgo/img.go b/vendor/github.com/vcaesar/imgo/img.go new file mode 100644 index 0000000..df06053 --- /dev/null +++ b/vendor/github.com/vcaesar/imgo/img.go @@ -0,0 +1,201 @@ +// Copyright 2018 go-vgo authors +// +// Licensed under the Apache License, Version 2.0 (the "License"): you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +/* + +Package imgo get the image info +*/ +package imgo + +import ( + "bytes" + "errors" + "fmt" + "image" + "image/color" + "image/gif" + "image/jpeg" + "image/png" + "io" + "io/ioutil" + "log" + "os" + + "golang.org/x/image/bmp" +) + +var ( + br, bg, bb, ba = color.Black.RGBA() +) + +func IsBlack(c color.Color) bool { + r, g, b, a := c.RGBA() + + return r == br && g == bg && b == bb && a == ba +} + +// DecodeFile decodes image file +func DecodeFile(fileName string) (image.Image, string, error) { + file, err := os.Open(fileName) + if err != nil { + return nil, "", fmt.Errorf("%s: %s", fileName, err) + } + + img, fm, err := image.Decode(file) + if err != nil { + return nil, fm, fmt.Errorf("%s: %s", fileName, err) + } + + return img, fm, nil +} + +func GetSize(imagePath string) (int, int) { + file, err := os.Open(imagePath) + defer file.Close() + if err != nil { + log.Println(err) + } + + img, _, err := image.DecodeConfig(file) + if err != nil { + log.Println(imagePath, err) + } + + w := img.Width / 2 + h := img.Height / 2 + + return w, h +} + +// SaveToPNG create a png file with the image.Image +func SaveToPNG(path string, img image.Image) { + f, err := os.Create(path) + if err != nil { + log.Println(err) + } + defer f.Close() + + png.Encode(f, img) +} + +func ReadPNG(path string) image.Image { + f, err := os.Open(path) + if err != nil { + log.Println(err) + } + + defer f.Close() + + img, derr := png.Decode(f) + if derr != nil { + log.Println(derr) + } + + return img +} + +func ModifiedTime(filePath string) (int64, error) { + f, e := os.Stat(filePath) + if e != nil { + return 0, e + } + + return f.ModTime().Unix(), nil +} + +func Rename(filePath, to string) error { + return os.Rename(filePath, to) +} + +func Destroy(filePath string) error { + return os.Remove(filePath) +} + +// Encode encode image to buf +func Encode(out io.Writer, subImg image.Image, fm string) error { + switch fm { + case "jpeg": + return jpeg.Encode(out, subImg, nil) + case "png": + return png.Encode(out, subImg) + case "gif": + return gif.Encode(out, subImg, &gif.Options{}) + case "bmp": + return bmp.Encode(out, subImg) + default: + return errors.New("ERROR FORMAT") + } +} + +func ToString(img image.Image) (result string) { + for row := img.Bounds().Min.Y; row < img.Bounds().Max.Y; row++ { + for col := img.Bounds().Min.X; col < img.Bounds().Max.X; col++ { + if IsBlack(img.At(col, row)) { + result += "." + } else { + result += "O" + } + } + + result += "\n" + } + + return +} + +func ToBytes(img image.Image, fm string) []byte { + + buf := new(bytes.Buffer) + + err := Encode(buf, img, fm) + + if err != nil { + log.Println(err) + } + + return buf.Bytes() +} + +func ToBytesPng(img image.Image) []byte { + + buf := new(bytes.Buffer) + err := png.Encode(buf, img) + + if err != nil { + log.Println(err) + } + + return buf.Bytes() +} + +func ImgToBytes(path string) []byte { + img, fm, err := DecodeFile(path) + if err != nil { + log.Println("to image...", err) + return nil + } + + return ToBytes(img, fm) +} + +func PngToBytes(path string) []byte { + img := ReadPNG(path) + + return ToBytesPng(img) +} + +// Save []byte to image +func Save(path string, dist []byte) { + ioutil.WriteFile(path, dist, 0666) +} diff --git a/vendor/vendor.json b/vendor/vendor.json index 5caa381..2ebadf0 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -47,38 +47,38 @@ { "checksumSHA1": "PHwqGzRGjJ81TtD7aBgcppCjeRg=", "path": "github.com/shirou/gopsutil/cpu", - "revision": "12ab94e8042b4639d3cbd6bdafd0be9be8a33e88", - "revisionTime": "2018-02-21T07:26:18Z" + "revision": "5776ff9c7c5d063d574ef53d740f75c68b448e53", + "revisionTime": "2018-02-27T22:58:47Z" }, { "checksumSHA1": "sy4twPdTy18BS0k2PxntChG2FcE=", "path": "github.com/shirou/gopsutil/host", - "revision": "12ab94e8042b4639d3cbd6bdafd0be9be8a33e88", - "revisionTime": "2018-02-21T07:26:18Z" + "revision": "5776ff9c7c5d063d574ef53d740f75c68b448e53", + "revisionTime": "2018-02-27T22:58:47Z" }, { "checksumSHA1": "xPMr7RbEnFd1XxOFpLOSdX4cEO0=", "path": "github.com/shirou/gopsutil/internal/common", - "revision": "12ab94e8042b4639d3cbd6bdafd0be9be8a33e88", - "revisionTime": "2018-02-21T07:26:18Z" + "revision": "5776ff9c7c5d063d574ef53d740f75c68b448e53", + "revisionTime": "2018-02-27T22:58:47Z" }, { "checksumSHA1": "Cgm7wMq9rJpnUeZFV3OD8qkTKOM=", "path": "github.com/shirou/gopsutil/mem", - "revision": "12ab94e8042b4639d3cbd6bdafd0be9be8a33e88", - "revisionTime": "2018-02-21T07:26:18Z" + "revision": "5776ff9c7c5d063d574ef53d740f75c68b448e53", + "revisionTime": "2018-02-27T22:58:47Z" }, { "checksumSHA1": "Z7FjZvR5J5xh6Ne572gD7tRUsc8=", "path": "github.com/shirou/gopsutil/net", - "revision": "12ab94e8042b4639d3cbd6bdafd0be9be8a33e88", - "revisionTime": "2018-02-21T07:26:18Z" + "revision": "5776ff9c7c5d063d574ef53d740f75c68b448e53", + "revisionTime": "2018-02-27T22:58:47Z" }, { - "checksumSHA1": "Ylp6t7kozHBFREv3tBcK4B1SMI4=", + "checksumSHA1": "l372fZbcjJ2OlVmg0JihEjbtUcE=", "path": "github.com/shirou/gopsutil/process", - "revision": "12ab94e8042b4639d3cbd6bdafd0be9be8a33e88", - "revisionTime": "2018-02-21T07:26:18Z" + "revision": "5776ff9c7c5d063d574ef53d740f75c68b448e53", + "revisionTime": "2018-02-27T22:58:47Z" }, { "checksumSHA1": "Nve7SpDmjsv6+rhkXAkfg/UQx94=", @@ -102,6 +102,16 @@ "revision": "f6abca593680b2315d2075e0f5e2a9751e3f431a", "revisionTime": "2017-06-01T20:57:54Z" }, + { + "checksumSHA1": "uZ3mletGtExUozsdwpZ+B4KmFXk=", + "path": "github.com/vcaesar/imgo", + "revision": "67f0b2002c0030cda52e4cf2bd8b9e5826adf6e5", + "revisionTime": "2018-03-04T12:31:00Z" + }, + { + "path": "golang.org/x/image/bmp", + "revision": "" + }, { "checksumSHA1": "EL5tiYbzPcSM0nhJpvMSDnDNvxI=", "path": "golang.org/x/sys/unix", diff --git a/window/alert.h b/window/alert.h index 9ef5551..9eb5e9c 100644 --- a/window/alert.h +++ b/window/alert.h @@ -11,7 +11,7 @@ /* Displays alert with given attributes, and blocks execution until the user * responds. Returns 0 if defaultButton was pressed, 1 if cancelButton was * pressed, or -1 if an error occurred. */ -int showAlert(const char *title, const char *msg, const char *defaultButton, - const char *cancelButton); +int showAlert(const char *title, const char *msg, + const char *defaultButton, const char *cancelButton); #endif /* ALERT_H */ diff --git a/window/goWindow.h b/window/goWindow.h index 638e6d1..af2cc89 100644 --- a/window/goWindow.h +++ b/window/goWindow.h @@ -11,8 +11,8 @@ #include "alert_c.h" #include "window.h" -int show_alert(const char *title, const char *msg, const char *defaultButton, - const char *cancelButton){ +int show_alert(const char *title, const char *msg, + const char *defaultButton, const char *cancelButton){ int alert = showAlert(title, msg, defaultButton, cancelButton); return alert;