
Update v1.02.0
Code: Select all
;-TOP by mk-soft, v1.02.0, 02.11.2024
ImportC ""
gdk_display_get_default()
gdk_display_get_monitor(*display, monitor_num.i)
gdk_display_get_monitor_at_point(*display, x.i, y.i)
gdk_display_get_monitor_at_window(*display, *gdkwindow)
gdk_display_get_n_monitors(*display)
gdk_display_get_primary_monitor(*display)
gdk_monitor_get_display(*monitor)
gdk_monitor_get_geometry(*monitor, *geometry.GdkRectangle)
gdk_monitor_get_workarea(*monitor, *workarea.GdkRectangle)
gdk_monitor_get_width_mm(*monitor)
gdk_monitor_get_height_mm(*monitor)
gdk_monitor_get_manufacturer(*monitor)
gdk_monitor_get_model(*monitor)
gdk_monitor_get_scale_factor(*monitor)
gdk_monitor_get_refresh_rate(*monitor)
gdk_monitor_get_subpixel_layout(*monitor)
gdk_monitor_is_primary(*monitor)
EndImport
; ********
CompilerIf #PB_Compiler_IsMainFile
;-TOP
Procedure InfoMonitor(*monitor)
Protected temp.s, rate.i, dblRate.d, scale.i, width.i, height.i, primary, *char
*char = gdk_monitor_get_manufacturer(*monitor)
If *char
temp = "Manufactor: " + PeekS(*char, -1, #PB_UTF8)
AddGadgetItem(0, -1, temp)
EndIf
*char = gdk_monitor_get_model(*monitor)
If *char
temp = "Model: " + PeekS(*char, -1, #PB_UTF8)
AddGadgetItem(0, -1, temp)
EndIf
gdk_monitor_get_geometry(*monitor, geometry.GdkRectangle)
With geometry
temp = "Geometry: " + \x + ", " + \y + " - " + \width + ", " + \height
EndWith
AddGadgetItem(0, -1, temp)
gdk_monitor_get_workarea(*monitor, workarea.GdkRectangle)
With workarea
temp = "Workarea: " + \x + ", " + \y + " - " + \width + ", " + \height
EndWith
AddGadgetItem(0, -1, temp)
scale = gdk_monitor_get_scale_factor(*monitor)
temp = "Scalefactor: " + scale
AddGadgetItem(0, -1, temp)
rate.i = gdk_monitor_get_refresh_rate(*monitor)
dblRate.d = rate / 1000.0
temp = "Rate: " + StrD(dblRate, 3) + "Hz"
AddGadgetItem(0, -1, temp)
width = gdk_monitor_get_width_mm(*monitor)
height = gdk_monitor_get_height_mm(*monitor)
temp = "Monitor width: " + width + "mm, height: " + height + "mm"
AddGadgetItem(0, -1, temp)
If gdk_monitor_is_primary(*monitor)
AddGadgetItem(0, -1, "Monitor is primary")
Else
AddGadgetItem(0, -1, "Monitor is not primary")
EndIf
EndProcedure
Procedure UpdateWindow()
Protected dx, dy
dx = WindowWidth(0)
dy = WindowHeight(0) - StatusBarHeight(0) - MenuHeight()
; Resize Gadgets
ResizeGadget(0, 0, 0, dx, dy)
EndProcedure
Procedure Main()
Protected dx, dy
Protected *monitor, monitors, i
#WinStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 600, 400, "Test Window - GDK.Monitor", #WinStyle)
; MenuBar
CreateMenu(0, WindowID(0))
MenuTitle("File")
MenuItem(99, "E&xit")
; StatusBar
CreateStatusBar(0, WindowID(0))
AddStatusBarField(#PB_Ignore)
; Gadgets
dx = WindowWidth(0)
dy = WindowHeight(0) - StatusBarHeight(0) - MenuHeight()
ListViewGadget(0, 0, 0, dx, dy)
; Bind Events
BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), 0)
; Data
*display = gdk_display_get_default();
;*gdkwindow = gdk_get_default_root_window_();
;*monitor = gdk_display_get_monitor_at_window(*display, *gdkwindow);
monitors = gdk_display_get_n_monitors(*display)
If monitors
For i = 1 To monitors
*monitor = gdk_display_get_monitor(*display, i - 1)
If *monitor
AddGadgetItem(0, -1, "MONITOR " + i + "/" + monitors)
InfoMonitor(*monitor)
EndIf
Next
Else
*monitor = gdk_display_get_primary_monitor(*display)
If *monitor
AddGadgetItem(0, -1, "PRIMARY MONITOR")
InfoMonitor(*monitor)
EndIf
EndIf
; Main Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case 0
Break
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 99
Break
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ForEver
EndIf
EndProcedure : Main()
CompilerEndIf