Add Menu for gtk119
This commit is contained in:
parent
26a856eb58
commit
e351ae0d5c
|
@ -1,6 +1,6 @@
|
|||
set(CMAKE_CXX_STANDARD 17)
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
project(gtk117 VERSION 1.0.0)
|
||||
project(gtk119 VERSION 1.0.0)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../GCR_CMake/macros)
|
||||
include(GlibCompileResourcesSupport)
|
||||
|
@ -22,23 +22,19 @@ link_directories (${GTKMM3_LIBRARY_DIRS})
|
|||
|
||||
#Compile Resource
|
||||
|
||||
# set(RESOURCE_LIST
|
||||
# gnome-fs-directory.png
|
||||
# gnome-fs-regular.png
|
||||
# icons/24x24/actions/view-grid-symbolic.png
|
||||
# icons/24x24/actions/view-list-symbolic.png
|
||||
# icons/48x48/actions/dialog-error.png)
|
||||
set(RESOURCE_LIST
|
||||
appmenu.xml)
|
||||
|
||||
# compile_gresources(RESOURCE_FILE
|
||||
# XML_OUT
|
||||
# TYPE EMBED_C
|
||||
# RESOURCES ${RESOURCE_LIST}
|
||||
# PREFIX "/org/gtk/daleclack"
|
||||
# SOURCE_DIR ${PROJECT_SOURCE_DIR}/../default_res)
|
||||
compile_gresources(RESOURCE_FILE
|
||||
XML_OUT
|
||||
TYPE EMBED_C
|
||||
RESOURCES ${RESOURCE_LIST}
|
||||
PREFIX "/org/gtk/daleclack"
|
||||
SOURCE_DIR ${PROJECT_SOURCE_DIR}/res)
|
||||
|
||||
# Add a custom target to the makefile. Now make builds our resource file.
|
||||
# It depends on the output RESOURCE_FILE.
|
||||
# add_custom_target(resource ALL DEPENDS ${RESOURCE_FILE})
|
||||
add_custom_target(resource ALL DEPENDS ${RESOURCE_FILE})
|
||||
|
||||
#For win32 platform,use rc resource and .ico icon
|
||||
if(WIN32)
|
||||
|
@ -47,9 +43,9 @@ if(WIN32)
|
|||
set_property(SOURCE ../icon.rc APPEND PROPERTY
|
||||
OBJECT_DEPENDS ${PROJECT_SOURCE_DIR}/../icon.ico
|
||||
)
|
||||
add_executable(${PROJECT_NAME} WIN32 ${app_WINRC} src/main.cc src/MyWin.cc src/MyImage.cc)
|
||||
add_executable(${PROJECT_NAME} WIN32 ${app_WINRC} src/main.cc src/MyWin.cc src/MyImage.cc ${RESOURCE_FILE})
|
||||
else()
|
||||
add_executable(${PROJECT_NAME} src/main.cc src/MyWin.cc src/MyImage.cc)
|
||||
add_executable(${PROJECT_NAME} src/main.cc src/MyWin.cc src/MyImage.cc ${RESOURCE_FILE})
|
||||
|
||||
endif(WIN32)
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<menu id="model">
|
||||
<item>
|
||||
<attribute name="label">Zoom Out</attribute>
|
||||
<attribute name="action">win.zoom_out</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label">Zoom In</attribute>
|
||||
<attribute name="action">win.zoom_in</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label">1∶1</attribute>
|
||||
<attribute name="action">win.zoom_reset</attribute>
|
||||
</item>
|
||||
</menu>
|
||||
</interface>
|
|
@ -31,6 +31,14 @@ bool MyImage::on_draw(const Cairo::RefPtr<Cairo::Context> &cr)
|
|||
void MyImage::scale_draw(double scale)
|
||||
{
|
||||
// Set the scale radio and scale
|
||||
if(scale <= 0){
|
||||
scale_radio = 0.1;
|
||||
return;
|
||||
}
|
||||
if(scale > 10.0){
|
||||
scale_radio = 10.0;
|
||||
return;
|
||||
}
|
||||
scale_radio = scale;
|
||||
queue_draw();
|
||||
}
|
||||
|
|
|
@ -26,13 +26,28 @@ MyWin::MyWin()
|
|||
main_box.pack_start(btnbox, Gtk::PACK_SHRINK);
|
||||
btnopen.signal_clicked().connect(sigc::mem_fun(*this, &MyWin::btnopen_clicked));
|
||||
|
||||
// Add Gesture
|
||||
// Add Drag Gesture
|
||||
gesture_drag = Gtk::GestureDrag::create(image_area);
|
||||
gesture_drag->set_button(GDK_BUTTON_PRIMARY);
|
||||
// gesture_drag->signal_drag_begin().connect(sigc::mem_fun(*this,&MyWin::drag_begin));
|
||||
gesture_drag->signal_drag_update().connect(sigc::mem_fun(*this, &MyWin::drag_update));
|
||||
gesture_drag->signal_drag_end().connect(sigc::mem_fun(*this, &MyWin::drag_end));
|
||||
|
||||
gesture_click = Gtk::GestureMultiPress::create(image_area);
|
||||
gesture_click->set_button(GDK_BUTTON_SECONDARY);
|
||||
gesture_click->signal_pressed().connect(sigc::mem_fun(*this,&MyWin::press));
|
||||
|
||||
// Add Menu
|
||||
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/appmenu.xml");
|
||||
auto object = builder->get_object("model");
|
||||
auto gmenu = Glib::RefPtr<Gio::MenuModel>::cast_dynamic(object);
|
||||
popover.bind_model(gmenu);
|
||||
popover.set_relative_to(image_area);
|
||||
|
||||
// Add actions for menu
|
||||
add_action("zoom_in", sigc::mem_fun(*this, &MyWin::image_zoom_in));
|
||||
add_action("zoom_out", sigc::mem_fun(*this, &MyWin::image_zoom_out));
|
||||
add_action("zoom_reset", sigc::mem_fun(*this, &MyWin::image_zoom_reset));
|
||||
|
||||
overlay.add(main_box);
|
||||
add(overlay);
|
||||
show_all_children();
|
||||
|
@ -73,15 +88,16 @@ void MyWin::dialog_response(int response_id)
|
|||
|
||||
void MyWin::scale_changed()
|
||||
{
|
||||
// Get Value of scale widget and scale image
|
||||
double value = scale.get_value();
|
||||
g_print("%f\n", value);
|
||||
// g_print("%f\n", value);
|
||||
image_area.scale_draw(value);
|
||||
}
|
||||
|
||||
void MyWin::drag_begin(double x, double y)
|
||||
{
|
||||
// g_print("drag begins\n");
|
||||
// move_to(x,y);
|
||||
void MyWin::press(int n_press,double x,double y){
|
||||
// Set Popover to the position of mouse and show
|
||||
popover.set_pointing_to(Gdk::Rectangle(x,y,1,1));
|
||||
popover.popup();
|
||||
}
|
||||
|
||||
void MyWin::drag_update(double x, double y)
|
||||
|
@ -129,3 +145,25 @@ void MyWin::move_to(double x, double y)
|
|||
hadjustment->set_value(h_value);
|
||||
vadjustment->set_value(v_value);
|
||||
}
|
||||
|
||||
void MyWin::image_zoom_in(){
|
||||
// Scale 0.1 More
|
||||
double value = scale.get_value();
|
||||
value+=0.1;
|
||||
scale.set_value(value);
|
||||
image_area.scale_draw(value);
|
||||
}
|
||||
|
||||
void MyWin::image_zoom_out(){
|
||||
// Scale 0.1 Less
|
||||
double value = scale.get_value();
|
||||
value-=0.1;
|
||||
scale.set_value(value);
|
||||
image_area.scale_draw(value);
|
||||
}
|
||||
|
||||
void MyWin::image_zoom_reset(){
|
||||
// Scale as 1:1
|
||||
scale.set_value(1.0);
|
||||
image_area.scale_draw(1.0);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <gtkmm.h>
|
||||
#include "MyImage.hh"
|
||||
|
||||
class MyWin : public Gtk::Window{
|
||||
class MyWin : public Gtk::ApplicationWindow{
|
||||
public:
|
||||
MyWin();
|
||||
private:
|
||||
|
@ -24,9 +24,16 @@ class MyWin : public Gtk::Window{
|
|||
void drag_update(double x,double y);
|
||||
void drag_end(double x,double y);
|
||||
void move_to(double x,double y);
|
||||
|
||||
//Menu for image control
|
||||
Gtk::PopoverMenu popover;
|
||||
void press(int n_press,double x,double y);
|
||||
|
||||
//Signal Handlers
|
||||
void btnopen_clicked();
|
||||
void dialog_response(int response_id);
|
||||
void scale_changed();
|
||||
void image_zoom_in();
|
||||
void image_zoom_out();
|
||||
void image_zoom_reset();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue