稍微优化一下性能, 别鼠标动一下就得重新计算位置
This commit is contained in:
parent
ad31c394db
commit
9e923e6e14
@ -18,7 +18,6 @@ from pyglet.graphics.shader import ShaderProgram
|
||||
from pyglet.text import Label
|
||||
from pyglet.gui import widgets
|
||||
from pyglet.window import mouse
|
||||
from pyglet.font import load as load_font
|
||||
|
||||
from pyglet.shapes import Rectangle, BorderedRectangle, ShapeBase, _rotate_point
|
||||
from pyglet.gui.widgets import WidgetBase
|
||||
@ -826,14 +825,23 @@ class OreuiButton(WidgetBase):
|
||||
)
|
||||
self._label.height = value
|
||||
|
||||
def _update_position(self) -> None:
|
||||
self._shape.position = (self._x, self._y)
|
||||
def _update_label_position(self) -> None:
|
||||
self._label.position = (
|
||||
round(self._x + self._width / 2),
|
||||
self._y + self.current_status.pad2x + self.current_status.real_down_pad(),
|
||||
0,
|
||||
)
|
||||
|
||||
def _update_position(self) -> None:
|
||||
self._shape.position = (self._x, self._y)
|
||||
self._update_label_position()
|
||||
|
||||
def _update_shape_status(self, status: OreuiButtonStatus) -> None:
|
||||
current_pop_out = self._shape._pop_out
|
||||
self._shape.update_with_status(status)
|
||||
if current_pop_out != self._shape._pop_out:
|
||||
self._update_label_position()
|
||||
|
||||
def __contains__(self, pos: tuple[float, float]) -> bool:
|
||||
return self._check_hit(pos[0], pos[1])
|
||||
|
||||
@ -843,13 +851,12 @@ class OreuiButton(WidgetBase):
|
||||
if (x, y) in self:
|
||||
if not self._selected: # 没抬手/没选中
|
||||
self._selected = True
|
||||
self._shape.update_with_status(self._select_status)
|
||||
self._update_shape_status(self._select_status)
|
||||
self.dispatch_event("on_select", x, y)
|
||||
elif self._selected:
|
||||
self._selected = False
|
||||
self._shape.update_with_status(self._normal_status)
|
||||
self._update_shape_status(self._normal_status)
|
||||
self.dispatch_event("on_deselect", x, y)
|
||||
self._update_position()
|
||||
|
||||
def on_mouse_leave(self, x: int, y: int) -> None:
|
||||
if not self._enabled or self._pressed:
|
||||
@ -858,7 +865,7 @@ class OreuiButton(WidgetBase):
|
||||
# 没抬手, 但是鼠标跑了
|
||||
self._selected = False
|
||||
if not self.toggle_mode and self._auto_release:
|
||||
self._shape.update_with_status(self._normal_status)
|
||||
self._update_shape_status(self._normal_status)
|
||||
self.dispatch_event("on_release", x, y)
|
||||
|
||||
def on_mouse_press(self, x: int, y: int, buttons: int, modifiers: int) -> None:
|
||||
@ -869,18 +876,17 @@ class OreuiButton(WidgetBase):
|
||||
self._pressed = not self._pressed
|
||||
self._selected = True # 顺便用来标记有没有抬手
|
||||
if self._pressed:
|
||||
self._shape.update_with_status(self._press_status)
|
||||
self._update_shape_status(self._press_status)
|
||||
self.dispatch_event("on_press", x, y, buttons, modifiers)
|
||||
else:
|
||||
self._shape.update_with_status(self._select_status)
|
||||
self._update_shape_status(self._select_status)
|
||||
self.dispatch_event("on_release", x, y)
|
||||
self.dispatch_event("on_toggle", x, y, buttons, modifiers)
|
||||
else:
|
||||
self._pressed = True
|
||||
self._selected = True # 顺便用来标记有没有抬手
|
||||
self._shape.update_with_status(self._press_status)
|
||||
self._update_shape_status(self._press_status)
|
||||
self.dispatch_event("on_press", x, y, buttons, modifiers)
|
||||
self._update_position()
|
||||
|
||||
def on_mouse_release(self, x: int, y: int, buttons: int, modifiers: int) -> None:
|
||||
if not self._enabled:
|
||||
@ -891,11 +897,10 @@ class OreuiButton(WidgetBase):
|
||||
# 非切换模式, 自动释放
|
||||
self._pressed = False
|
||||
if (x, y) in self:
|
||||
self._shape.update_with_status(self._select_status)
|
||||
self._update_shape_status(self._select_status)
|
||||
else:
|
||||
self._shape.update_with_status(self._normal_status)
|
||||
self._update_shape_status(self._normal_status)
|
||||
self.dispatch_event("on_release", x, y)
|
||||
self._update_position()
|
||||
|
||||
|
||||
OreuiButton.register_event_type("on_press")
|
||||
|
@ -41,72 +41,7 @@ class Menu(BaseScreen):
|
||||
# 欸呀, 正好是 911 纪念日哦
|
||||
# 好, 高二 第一学期 期末都考完了, 我过来做测试了 (20240119)
|
||||
# 高二, 马上要研学了, 似乎做了点啥, 但似乎又没做点啥 (20240526)
|
||||
|
||||
# self.wiki_button1 = PressTextButton(
|
||||
# x=200,
|
||||
# y=300,
|
||||
# width=150,
|
||||
# height=30,
|
||||
# text="wiki button1",
|
||||
# batch=self.main_batch,
|
||||
# group=self.main_group,
|
||||
# draw_theme=MinecraftWikiButtonTheme,
|
||||
# dict_theme={"pop_out": True},
|
||||
# )
|
||||
# self.wiki_button2 = PressTextButton(
|
||||
# x=400,
|
||||
# y=300,
|
||||
# width=150,
|
||||
# height=30,
|
||||
# text="wiki button2",
|
||||
# batch=self.main_batch,
|
||||
# group=self.main_group,
|
||||
# draw_theme=MinecraftWikiButtonTheme,
|
||||
# dict_theme={"pop_out": False},
|
||||
# )
|
||||
# self.wiki_button3 = PressTextButton(
|
||||
# x=200,
|
||||
# y=250,
|
||||
# width=150,
|
||||
# height=30,
|
||||
# text="wiki button3",
|
||||
# batch=self.main_batch,
|
||||
# group=self.main_group,
|
||||
# draw_theme=MinecraftWikiButtonTheme,
|
||||
# dict_theme={"pop_out": True, "drag_list": True},
|
||||
# )
|
||||
# self.wiki_button4 = PressTextButton(
|
||||
# x=400,
|
||||
# y=250,
|
||||
# width=150,
|
||||
# height=30,
|
||||
# text="wiki button4",
|
||||
# batch=self.main_batch,
|
||||
# group=self.main_group,
|
||||
# draw_theme=MinecraftWikiButtonTheme,
|
||||
# dict_theme={"pop_out": False, "drag_list": True},
|
||||
# )
|
||||
# self.button3 = PressTextButton(
|
||||
# x=200,
|
||||
# y=200,
|
||||
# width=150,
|
||||
# height=30,
|
||||
# text="imgui button",
|
||||
# batch=self.main_batch,
|
||||
# group=self.main_group,
|
||||
# )
|
||||
|
||||
# 16、20、24、32、40、48 64
|
||||
# self.test_label = Label(
|
||||
# x=20, y=200,
|
||||
# font_name="Segoe Fluent Icons",
|
||||
# font_size=32,
|
||||
# text="\uE003 \uE005 \uE0A2
|
||||
# \uE88B \uE88C \uE88D \uE985 \uE97E \uF7B5
|
||||
# \uE971 \uE972 \uE973 \uE974",
|
||||
# batch=self.main_batch,
|
||||
# group=self.main_group,
|
||||
# )
|
||||
# 高二最后一个暑假都过了一半了, 可算把按钮好歹写完了 (20240804)
|
||||
|
||||
self.enter_ship_editor_button = OreuiButton(
|
||||
x=100,
|
||||
|
Loading…
Reference in New Issue
Block a user