{"id":20315785,"url":"https://github.com/flipeador/water-ripple-effect","last_synced_at":"2026-05-11T17:32:45.408Z","repository":{"id":157621890,"uuid":"284504440","full_name":"flipeador/water-ripple-effect","owner":"flipeador","description":"Win32 device-independent bitmap (DIB) Water Effect DLL.","archived":false,"fork":false,"pushed_at":"2024-11-12T23:13:28.000Z","size":5590,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T09:12:58.826Z","etag":null,"topics":["autohotkey","bitmap-image","cpp20","dll","dynamic-link-library","inno-setup","multithreading","performant","ripple-effect","water-effect","win32","windows-11","windows-gdi","windows-xp"],"latest_commit_sha":null,"homepage":"","language":"AutoHotkey","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flipeador.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-02T17:00:31.000Z","updated_at":"2024-12-18T12:20:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"87c75c66-4805-4382-8872-5e109e205bca","html_url":"https://github.com/flipeador/water-ripple-effect","commit_stats":{"total_commits":12,"total_committers":1,"mean_commits":12.0,"dds":0.0,"last_synced_commit":"3bebd3d6976f67d3a658f415d8e9f1b25ac2ed5c"},"previous_names":["flipeador/win32-bitmap-water-effect-dll"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flipeador/water-ripple-effect","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipeador%2Fwater-ripple-effect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipeador%2Fwater-ripple-effect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipeador%2Fwater-ripple-effect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipeador%2Fwater-ripple-effect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flipeador","download_url":"https://codeload.github.com/flipeador/water-ripple-effect/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipeador%2Fwater-ripple-effect/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32905846,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-11T17:09:15.040Z","status":"ssl_error","status_checked_at":"2026-05-11T17:08:45.420Z","response_time":120,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autohotkey","bitmap-image","cpp20","dll","dynamic-link-library","inno-setup","multithreading","performant","ripple-effect","water-effect","win32","windows-11","windows-gdi","windows-xp"],"created_at":"2024-11-14T18:21:47.401Z","updated_at":"2026-05-11T17:32:45.385Z","avatar_url":"https://github.com/flipeador.png","language":"AutoHotkey","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Win32 Water Effect\n\nHigh-performance simulation of water ripples on a window surface in Windows.\n\nThe DLL paints an image directly on the background of a window using [Windows GDI][gdi].\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"demo.webp\"/\u003e\n\u003c/p\u003e\n\n#### Simulation of water ripples on a \\\u003ccanvas\u003e element in the browser:\n\n\u003chttps://gist.github.com/flipeador/517befaed8c35749d38b5cc63bbd715e\u003e\n\n## Examples\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ch4\u003eAutoHotkey\u003c/h4\u003e\u003c/summary\u003e\n\n\u003chttps://www.autohotkey.com\u003e\n\n[`32-Bit/waterfx.ahk`](32-Bit/waterfx.ahk)\n\n[`64-Bit/waterfx.ahk`](64-Bit/waterfx.ahk)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ch4\u003eInno Setup\u003c/h4\u003e\u003c/summary\u003e\n\nFunction definitions:\n\n```pascal\nfunction create(): THandle;\nexternal 'create@files:waterfx.dll stdcall delayload';\nprocedure destroy(id: THandle);\nexternal 'destroy@files:waterfx.dll stdcall delayload';\nprocedure load(id: THandle; bmp: HBITMAP);\nexternal 'load@files:waterfx.dll stdcall delayload';\nprocedure set_hwnd(id: THandle; wnd: HWND);\nexternal 'set_hwnd@files:waterfx.dll stdcall delayload';\nprocedure set_pos(id: THandle; x,y: Integer);\nexternal 'set_pos@files:waterfx.dll stdcall delayload';\nprocedure set_alpha_format(id: THandle; afmt: Integer);\nexternal 'set_alpha_format@files:waterfx.dll stdcall delayload';\nprocedure resize(id: THandle; width,height: Integer);\nexternal 'resize@files:waterfx.dll stdcall delayload';\nprocedure autosize(id: THandle; enabled: Boolean);\nexternal 'autosize@files:waterfx.dll stdcall delayload';\nprocedure blob(id: THandle; x,y,radius,height: Integer);\nexternal 'blob@files:waterfx.dll stdcall delayload';\nprocedure start(id: THandle);\nexternal 'start@files:waterfx.dll stdcall delayload';\nprocedure stop(id: THandle);\nexternal 'stop@files:waterfx.dll stdcall delayload';\nprocedure set_density(id: THandle; density: Integer);\nexternal 'set_density@files:waterfx.dll stdcall delayload';\nprocedure wm_mousemove(id: THandle; radius,height: Integer);\nexternal 'wm_mousemove@files:waterfx.dll stdcall delayload';\nprocedure wm_lbuttondown(id: THandle; radius,height: Integer);\nexternal 'wm_lbuttondown@files:waterfx.dll stdcall delayload';\nprocedure wm_lbuttonup(id: THandle; radius,height: Integer);\nexternal 'wm_lbuttonup@files:waterfx.dll stdcall delayload';\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eNon Resizable\u003c/summary\u003e\n\n```pascal\n[Setup]\nAppName=My App\nAppVersion=1\nWizardResizable=no\nWizardSizePercent=100\nWizardStyle=modern\nOutputDir=.\nDefaultDirName=\\My App\nDisableWelcomePage=no\n\n[Files]\nSource: \"waterfx.dll\"; Flags: dontcopy\n;Source: \"logo.bmp\"; Flags: dontcopy\n\n[Code]\n// \u003cFUNCTION DEFINITIONS\u003e\n\nvar\n  wfx: THandle;\n  logo: TBitmapImage;\n\nconst\n  TOP = 50;\n  LEFT = 50;\n\nprocedure InitializeWizard();\nbegin\n  logo := TBitmapImage.Create(WizardForm);\n  logo.Bitmap.LoadFromFile(ExpandConstant('{src}\\logo.bmp'));\n\n  WizardForm.OuterNotebook.Hide;\n  WizardForm.ClientWidth := logo.Bitmap.Width + 2 * LEFT;\n\n  wfx := create();\n  load(wfx, logo.Bitmap.Handle);\n  //set_alpha_format(wfx, $01);\n  set_hwnd(wfx, WizardForm.Handle);\n  set_pos(wfx, LEFT, TOP);\n  start(wfx);\n\n  // Blob on mouse events.\n  // Set to 0 to disable.\n  wm_mousemove(wfx, 2, 30);\n  wm_lbuttondown(wfx, 3, 300);\n  wm_lbuttonup(wfx, 4, 500);\nend;\n\nprocedure DeinitializeSetup();\nbegin\n  destroy(wfx);\n  WizardForm.Free;\nend;\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eResizable\u003c/summary\u003e\n\n```pascal\n[Setup]\nAppName=My App\nAppVersion=1\nWizardResizable=yes\nWizardSizePercent=100\nWizardStyle=modern\nOutputDir=.\nDefaultDirName=\\My App\nDisableWelcomePage=no\n\n[Files]\nSource: \"waterfx.dll\"; Flags: dontcopy\n;Source: \"logo.bmp\"; Flags: dontcopy\n\n[Code]\n// \u003cFUNCTION DEFINITIONS\u003e\n\nvar\n  wfx: THandle;\n  logo: TBitmapImage;\n\nconst\n  TOP = 50;\n  LEFT = 50;\n\nprocedure InitializeWizard();\nbegin\n  logo := TBitmapImage.Create(WizardForm);\n  logo.Bitmap.LoadFromFile(ExpandConstant('{src}\\logo.bmp'));\n\n  WizardForm.OuterNotebook.Hide;\n  WizardForm.ClientWidth := logo.Bitmap.Width + 2 * LEFT;\n\n  wfx := create();\n  load(wfx, logo.Bitmap.Handle);\n  resize(wfx, WizardForm.ClientWidth - 2 * LEFT, 0);\n  set_hwnd(wfx, WizardForm.Handle);\n  set_pos(wfx, LEFT, TOP);\n  autosize(wfx, True);\n  start(wfx);\n\n  wm_mousemove(wfx, 2, 30);\n  wm_lbuttondown(wfx, 3, 300);\nend;\n\nprocedure DeinitializeSetup();\nbegin\n  destroy(wfx);\n  WizardForm.Free;\nend;\n```\n\n\u003c/details\u003e\n\n\u003c/details\u003e\n\n\u003c!-- Reference Links --\u003e\n[gdi]: https://learn.microsoft.com/en-us/windows/win32/gdi/windows-gdi\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflipeador%2Fwater-ripple-effect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflipeador%2Fwater-ripple-effect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflipeador%2Fwater-ripple-effect/lists"}