GTK 4.10 は GtkStyleContext も廃止予定になっていた。
get_style_context から背景の透過にしかつかっていなかったとはいえ。
Tips ページを書き換えなきゃ、背景透過は今後どうすりゃいいんだ?
「API は GtkWidget に移した」とあるけど何をどう移したのかは説明無し。
Linux はそんなものだ、自力で色々プロパティを弄くってみる。
#!/usr/bin/env python3 import gi, sys gi.require_version('Gtk', '4.0') from gi.repository import Gtk, GdkPixbuf, Gdk # Picture File PNGFILE = 'test.png' class Win(Gtk.ApplicationWindow): ''' GTK4: No Decorated Window ''' def __init__(self, a): Gtk.ApplicationWindow.__init__(self, application=a, decorated=False) ''' Deprecated APP_CSS = 'window { background-color: rgba(255, 255, 255, 0); }' #.encode('utf-8') provider = Gtk.CssProvider() provider.load_from_data(APP_CSS, -1) context = self.get_style_context() context.add_provider_for_display( self.get_display(), provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) ''' # # Transparent # print(self.get_css_classes()) #=> [background] self.set_css_classes(['no_name']) # # Mouse Signal click = Gtk.GestureClick() #click.connect('pressed', self.on_gesture_click_pressed) click.connect('stopped', self.on_gesture_click_stopped) click.connect('released', self.on_gesture_cllick_released) self.add_controller(click) # Draw self.pixbuf = GdkPixbuf.Pixbuf.new_from_file(PNGFILE) da = Gtk.DrawingArea() da.set_draw_func(self.da_draw_func) self.set_child(da) # Resize self.set_default_size(self.pixbuf.get_width(), self.pixbuf.get_height()) def da_draw_func(self, da, cr, width, height): Gdk.cairo_set_source_pixbuf(cr, self.pixbuf, 0, 0) cr.paint() def on_gesture_click_stopped(self, click): ''' Mouse Move ''' button = click.get_button() toplevel = self.get_surface() # GdkToplevel display = self.get_display() seat = display.get_default_seat() device = seat.get_pointer() s, win_x, win_y = device.get_surface_at_position() time = device.get_timestamp() toplevel.begin_move(device, button, win_x, win_y, time) def on_gesture_cllick_released(self, widget, n_press, x, y): ''' Double Click ''' if n_press == 2: self.close() app = Gtk.Application() app.connect('activate', lambda a: Win(a).present()) app.run()
結果 GtkWidget の css_classes を変更したいが定義がワカラン。
存在しない CSS にしたらどうなる?って適当にやったらイケてしまった。
多分正しい手段ではないので今後は解らないですけど。
他に CSS 文字列は UTF-8 にする必要がいつのまにかなくなっていたり。
いやそれは廃止されるのだからどうでもいいんですけど。
ついでに、GtkGestureClick で今頃発見。
pressed シグナルを処理すると released シグナルが発行されなくなるのですけど。
stopped シグナルなら releace も発行される、よし今度からこの方法にしよう。