diff --git a/data/css/style.css b/data/css/style.css index d62b9bfd..056fea37 100644 --- a/data/css/style.css +++ b/data/css/style.css @@ -9,3 +9,17 @@ .compact-title { font-size: 18pt; } + +dropoverlay, +dropoverlay>overlay> :not(revealer) { + box-shadow: none; +} + +dropoverlay .status { + background-color: color-mix(in srgb, var(--accent-bg-color) 80%, transparent); + color: var(--accent-fg-color); +} + +.no-drop:drop(active) { + box-shadow: none; +} \ No newline at end of file diff --git a/data/ui/application.ui b/data/ui/application.ui index ee91c721..b04b3045 100644 --- a/data/ui/application.ui +++ b/data/ui/application.ui @@ -33,326 +33,355 @@ - - - - resultsStack - False - - - - - - - False - - - document-open-symbolic - _Open - Open… - True + + dropoverlay + + + + + 0 + crossfade + 600 + + + + Drop to hash + paper-symbolic + - - + - - - wide - resultsStack - 0 - - - - - open-menu-symbolic - Main Menu - primary-menu - True - - - - - - - - - copy - GdkFileList - - - - - welcomer - - - 1 - dev.geopjr.Collision - Collision - Check hashes for your files - - - center - _Open a File - 1 + + + + + resultsStack + False + + + + + + + False + + + document-open-symbolic + _Open + Open… + True + + + + + wide + resultsStack + 0 + + + + + open-menu-symbolic + Main Menu + primary-menu + True + + + + + + - - - - - - - spinner - - - Calculating Hashes - This might take a while - - 100 - 400 - - - - Pending - 1 - center - 1 + + copy + GdkFileList + + + + + welcomer + + 1 + dev.geopjr.Collision + Collision + Check hashes for your files + + + center + _Open a File + 1 + + + + - + - - - - - - - results - - - 1 - - 100 - - - False - False + + spinner + + + Calculating Hashes + This might take a while - - hashes - Hash - octothorp-symbolic - - - center + + 100 + 400 + + + + Pending + 1 center - + 1 + 1 - + + + + + + + + results + + + 1 - - verify - Verify - test-pass-symbolic - - - horizontal - 1 - 45 + + 100 + + + False + False - - vertical - 20 - - - Checksum - 1 - word-char - center + + hashes + Hash + octothorp-symbolic + + + center center - 1 - - - - hidden - - - 16 - test-pass-symbolic - end - end - 5 - 5 - 0 - 0 - - - - - MD5,SHA-1,SHA-256,SHA-512,Blake3,CRC32 or Adler32 Hash - start - start - fill - 22 - 14 - 11 - char - 1 - 0 - - - - - - 125 - - - 11 - 11 - 5 - 5 - 125 - char - 0 - entry - free-form - no-spellcheck | no-emoji - Insert a MD5/SHA-1/SHA-256/SHA-512/Blake3/CRC32/Adler32 Hash - - - - - - - - - + - - vertical - 20 - - - File - 1 - word-char - center - center - 1 - - - - - - Select Another File to Check Against - 125 - 1 + + verify + Verify + test-pass-symbolic + + + horizontal + 1 + 45 - - copy - GdkFileList + + vertical + 20 + + + Checksum + 1 + word-char + center + center + 1 + + + + + + hidden + + + 16 + test-pass-symbolic + end + end + 5 + 5 + 0 + 0 + + + + + MD5,SHA-1,SHA-256,SHA-512,Blake3,CRC32 or Adler32 Hash + start + start + fill + 22 + 14 + 11 + char + 1 + 0 + + + + + + 125 + + + 11 + 11 + 5 + 5 + 125 + char + 0 + entry + free-form + no-spellcheck | no-emoji + Insert a MD5/SHA-1/SHA-256/SHA-512/Blake3/CRC32/Adler32 Hash + + + + + + + + + vertical - center - 12 - center + 20 + + + File + 1 + word-char + center + center + 1 + + + - + + Select Another File to Check Against + 125 + 1 - - image - - - 36 - paper-symbolic - - + + copy + GdkFileList - - spinner - - - center - center - 1 - 1 - 32 - 32 + + vertical + center + 12 + center + + + + + image + + + 36 + paper-symbolic + + + + + + + spinner + + + center + center + 1 + 1 + 32 + 32 + + + + - + + + + Choose File… + 15 + end + + - - - - - Choose File… - 15 - end + - - + - + - + - + - + diff --git a/src/collision/window.cr b/src/collision/window.cr index 0f9f79f8..916f43ce 100644 --- a/src/collision/window.cr +++ b/src/collision/window.cr @@ -22,6 +22,7 @@ module Collision "progressbar", "mainDnd", "compareDnd", + "dropOverlayRevealer", } )] class Window < Adw::ApplicationWindow @@ -43,6 +44,7 @@ module Collision @progressbar : Gtk::ProgressBar @mainDnd : Gtk::DropTarget @compareDnd : Gtk::DropTarget + @dropOverlayRevealer : Gtk::Revealer @verifyOverlayLabel : Gtk::Label @verifyTextView : Gtk::TextView @@ -274,6 +276,7 @@ module Collision @switcher_bar = Adw::ViewSwitcherBar.cast(template_child("switcher_bar")) @mainDnd = Gtk::DropTarget.cast(template_child("mainDnd")) @compareDnd = Gtk::DropTarget.cast(template_child("compareDnd")) + @dropOverlayRevealer = Gtk::Revealer.cast(template_child("dropOverlayRevealer")) @welcomeBtn = Gtk::Button.cast(template_child("welcomeBtn")) @fileInfo = Adw::StatusPage.cast(template_child("fileInfo")) @@ -298,6 +301,15 @@ module Collision on_open_btn_clicked() end + @mainDnd.enter_signal.connect do + @dropOverlayRevealer.reveal_child = true + Gdk::DragAction::Copy + end + + @mainDnd.leave_signal.connect do + @dropOverlayRevealer.reveal_child = false + end + @mainDnd.drop_signal.connect do |value| if LibGObject.g_type_check_value_holds(value, Gdk::FileList.g_type) files = Gdk::FileList.new(LibGObject.g_value_get_boxed(value), GICrystal::Transfer::None).files @@ -319,6 +331,15 @@ module Collision false end + @compareDnd.enter_signal.connect do + @dropOverlayRevealer.reveal_child = false + Gdk::DragAction::Copy + end + + @compareDnd.leave_signal.connect do + @dropOverlayRevealer.reveal_child = true + end + @compareDnd.drop_signal.connect do |value| if LibGObject.g_type_check_value_holds(value, Gdk::FileList.g_type) files = Gdk::FileList.new(LibGObject.g_value_get_boxed(value), GICrystal::Transfer::None).files