; Module/File: Screenshot_ActiveWindowGdk3.pb ; Function: Screenshot of active window after delay (w. or w/o border) - Linux gtk3 ; Author: Omi ; Date: May 16, 2016 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.4x ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit ImportC "" gdk_pixbuf_get_from_window(*window, src_x, src_y, width, height) gdk_window_get_width(*window) gdk_window_get_height(*window) gdk_pixbuf_save(*pixbuf, filename.p-utf8, type.p-utf8, *err.GError, null= 0) gdk_screen_get_active_window(*screen.GdkScreen) EndImport ; Object constants #Win_Main = 0 Global.i gEvent, gQuit Global.i gDelay= 5000 Procedure Pixbuf_Save(*pixbuf) Protected *err.GError Protected.s File= SaveFileRequester("Please choose file to save", GetCurrentDirectory(), "Image (*.png)|*.png", 0) If File <> "" gdk_pixbuf_save(*pixbuf, File, "png", @*err) Else MessageRequester("", "Screenshot isn't stored!") EndIf EndProcedure Procedure Window_GetScreenshot(InnerSize) Protected *pixbuf Protected rect.GdkRectangle Protected *GdkWindow= gdk_screen_get_active_window(gdk_screen_get_default_()) Protected.i wX, wY, wWidth, wHeight If *GdkWindow If InnerSize = #PB_Window_InnerCoordinate ;Gdk inner size ... wWidth = gdk_window_get_width(*GdkWindow) wHeight= gdk_window_get_height(*GdkWindow) gdk_window_get_origin_(*GdkWindow, @wX, @wY) *pixbuf= gdk_pixbuf_get_from_window(gdk_get_default_root_window_(), wX, wY, wWidth, wHeight) ElseIf InnerSize = #PB_Window_FrameCoordinate ;Gdk outer size ... gdk_window_get_frame_extents_(*GdkWindow, @rect) *pixbuf= gdk_pixbuf_get_from_window(gdk_get_default_root_window_(), rect\x, rect\y, rect\width, rect\height) EndIf If *pixbuf Pixbuf_Save(*pixbuf) g_object_unref_(*pixbuf) EndIf Else MessageRequester("", "No active GdkWindow found!") EndIf EndProcedure Procedure Create_WinMain() If OpenWindow(#Win_Main, 300, 200, 500, 200, "Active window screenshot", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) SetWindowColor(#Win_Main, $CCAA99) ButtonGadget(0, 5, 5, 400, 26, "Screenshot from active window w/o border") ButtonGadget(1, 5, 40, 400, 26, "Screenshot from active window with border") TextGadget (2, 5, 80, 400, 22, "") EndIf EndProcedure Create_WinMain() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget Select EventGadget() Case 0 SetGadgetText(2, "Select window. Screenshot taken in 5 sec.") AddWindowTimer(#Win_Main, 999, gDelay) Case 1 SetGadgetText(2, "Select window. Screenshot taken in 5 sec.") AddWindowTimer(#Win_Main, 998, gDelay) EndSelect Case #PB_Event_Timer Select EventTimer() Case 999 Window_GetScreenshot(#PB_Window_InnerCoordinate) SetGadgetText(2, "") RemoveWindowTimer(#Win_Main, 999) Case 998 Window_GetScreenshot(#PB_Window_FrameCoordinate) SetGadgetText(2, "") RemoveWindowTimer(#Win_Main, 998) EndSelect EndSelect Until gQuit ; IDE Options = PureBasic 5.42 LTS (Linux - x86) ; CursorPosition = 94 ; FirstLine = 77 ; Folding = - ; EnableUnicode ; EnableXP