仅处理平铺事件而不处理最大化事件
Process only tiled event and not maximize event
我正在使用 GTKMM 构建一个非常基本的计算器程序
Basic Calculator screenshot
布局采用横向模式(按钮和显示标签处于水平方向)
当用户 snaps/tiles window 向右或向左时,我想将这两个设置为纵向模式(即 垂直 )
下面是我使用的示例代码:
bool
BasicCalculator::on_calculator_window_state_changed(
GdkEventWindowState *window_state_event,
Gtk::Box *box)
{
if (
window_state_event->new_window_state &
(Gdk::WINDOW_STATE_RIGHT_TILED | Gdk::WINDOW_STATE_LEFT_TILED)
)
box->set_orientation(Gtk::ORIENTATION_VERTICAL);
else
box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
return true;
}
- Window tiled left and right
- Window maximized
代码有效,但我的 window 在最大化时垂直定向,这不是我的本意。我希望它处于水平方向
如何只处理平铺事件而不处理最大化事件?
PS:My project repo 如果您想构建和测试
在对 GdkEventWindowState
枚举进行了一些修改之后,我认为我可以将平铺状态与 window 最大化状态一起进行比较
即,确保仅当 window 平铺且未最大化时才将方向切换为垂直
因为代码
...
if (
window_state_event->new_window_state &
(Gdk::WINDOW_STATE_RIGHT_TILED | Gdk::WINDOW_STATE_LEFT_TILED)
)
...
returns TRUE 不仅适用于平铺状态,也适用于最大化状态
下面是有效的改进代码:
bool
BasicCalculator::on_calculator_window_state_changed(
GdkEventWindowState *window_state_event,
Gtk::Box *box)
{
bool is_window_tiled = window_state_event->new_window_state &
(Gdk::WINDOW_STATE_RIGHT_TILED | Gdk::WINDOW_STATE_LEFT_TILED);
bool is_window_maximized = window_state_event->new_window_state &
Gdk::WINDOW_STATE_MAXIMIZED;
if (is_window_tiled && !is_window_maximized)
box->set_orientation(Gtk::ORIENTATION_VERTICAL);
else
box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
return true;
}
现在 window 即使最大化也保持其默认水平方向:)
我正在使用 GTKMM 构建一个非常基本的计算器程序
Basic Calculator screenshot
布局采用横向模式(按钮和显示标签处于水平方向)
当用户 snaps/tiles window 向右或向左时,我想将这两个设置为纵向模式(即 垂直 )
下面是我使用的示例代码:
bool
BasicCalculator::on_calculator_window_state_changed(
GdkEventWindowState *window_state_event,
Gtk::Box *box)
{
if (
window_state_event->new_window_state &
(Gdk::WINDOW_STATE_RIGHT_TILED | Gdk::WINDOW_STATE_LEFT_TILED)
)
box->set_orientation(Gtk::ORIENTATION_VERTICAL);
else
box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
return true;
}
- Window tiled left and right
- Window maximized
代码有效,但我的 window 在最大化时垂直定向,这不是我的本意。我希望它处于水平方向
如何只处理平铺事件而不处理最大化事件?
PS:My project repo 如果您想构建和测试
在对 GdkEventWindowState
枚举进行了一些修改之后,我认为我可以将平铺状态与 window 最大化状态一起进行比较
即,确保仅当 window 平铺且未最大化时才将方向切换为垂直
因为代码
...
if (
window_state_event->new_window_state &
(Gdk::WINDOW_STATE_RIGHT_TILED | Gdk::WINDOW_STATE_LEFT_TILED)
)
...
returns TRUE 不仅适用于平铺状态,也适用于最大化状态
下面是有效的改进代码:
bool
BasicCalculator::on_calculator_window_state_changed(
GdkEventWindowState *window_state_event,
Gtk::Box *box)
{
bool is_window_tiled = window_state_event->new_window_state &
(Gdk::WINDOW_STATE_RIGHT_TILED | Gdk::WINDOW_STATE_LEFT_TILED);
bool is_window_maximized = window_state_event->new_window_state &
Gdk::WINDOW_STATE_MAXIMIZED;
if (is_window_tiled && !is_window_maximized)
box->set_orientation(Gtk::ORIENTATION_VERTICAL);
else
box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
return true;
}
现在 window 即使最大化也保持其默认水平方向:)