m_bCamXYUpdate(true),
m_bChaseMouse(true),
- m_bSizePaint(false)
+ m_bSizePaint(true)
{
}
return FALSE;
}
+gboolean xywnd_focus_in(GtkWidget* widget, GdkEventFocus* event, XYWnd* xywnd)
+{
+ if(event->type == GDK_FOCUS_CHANGE)
+ {
+ if(event->in)
+ g_pParentWnd->SetActiveXY(xywnd);
+ }
+ return FALSE;
+}
+
void xywnd_motion(gdouble x, gdouble y, guint state, void* data)
{
if(reinterpret_cast<XYWnd*>(data)->chaseMouseMotion(static_cast<int>(x), static_cast<int>(y)))
g_signal_connect(G_OBJECT(m_gl_widget), "button_press_event", G_CALLBACK(xywnd_button_press), this);
g_signal_connect(G_OBJECT(m_gl_widget), "button_release_event", G_CALLBACK(xywnd_button_release), this);
+ g_signal_connect(G_OBJECT(m_gl_widget), "focus_in_event", G_CALLBACK(xywnd_focus_in), this);
g_signal_connect(G_OBJECT(m_gl_widget), "motion_notify_event", G_CALLBACK(DeferredMotion::gtk_motion), &m_deferred_motion);
g_signal_connect(G_OBJECT(m_gl_widget), "scroll_event", G_CALLBACK(xywnd_wheel_scroll), this);
g_clip_viewtype = static_cast<VIEWTYPE>(GetViewType());
const int nDim = (g_clip_viewtype == YZ ) ? 0 : ( (g_clip_viewtype == XZ) ? 1 : 2 );
point[nDim] = mid[nDim];
- vector3_snap(point, GetGridSize());
+ vector3_snap(point, GetSnapGridSize());
NewClipPoint(point);
}
int nDim = (m_viewType == XY) ? 2 : (m_viewType == YZ) ? 0 : 1;
- mins[nDim] = float_snapped(Select_getWorkZone().d_work_min[nDim], GetGridSize());
- maxs[nDim] = float_snapped(Select_getWorkZone().d_work_max[nDim], GetGridSize());
+ mins[nDim] = float_snapped(Select_getWorkZone().d_work_min[nDim], GetSnapGridSize());
+ maxs[nDim] = float_snapped(Select_getWorkZone().d_work_max[nDim], GetSnapGridSize());
if (maxs[nDim] <= mins[nDim])
maxs[nDim] = mins[nDim] + GetGridSize();
{
if (m_viewType == XY)
{
- point[0] = float_snapped(point[0], GetGridSize());
- point[1] = float_snapped(point[1], GetGridSize());
+ point[0] = float_snapped(point[0], GetSnapGridSize());
+ point[1] = float_snapped(point[1], GetSnapGridSize());
}
else if (m_viewType == YZ)
{
- point[1] = float_snapped(point[1], GetGridSize());
- point[2] = float_snapped(point[2], GetGridSize());
+ point[1] = float_snapped(point[1], GetSnapGridSize());
+ point[2] = float_snapped(point[2], GetSnapGridSize());
}
else
{
- point[0] = float_snapped(point[0], GetGridSize());
- point[2] = float_snapped(point[2], GetGridSize());
+ point[0] = float_snapped(point[0], GetSnapGridSize());
+ point[2] = float_snapped(point[2], GetSnapGridSize());
}
}
void XYWnd::XY_DrawGrid(void) {
float x, y, xb, xe, yb, ye;
- float w, h;
+ float w, h, a;
char text[32];
float step, minor_step, stepx, stepy;
step = minor_step = stepx = stepy = GetGridSize();
while ((stepy * m_fScale) <= 32.0f) // text step y must be at least 32
stepy *= 2;
+ a = ((GetSnapGridSize() > 0.0f) ? 1.0f : 0.3f);
glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_1D);
// djbob
// draw minor blocks
- if (g_xywindow_globals_private.d_showgrid) {
+ if (g_xywindow_globals_private.d_showgrid || a < 1.0f) {
+ if(a < 1.0f)
+ glEnable(GL_BLEND);
+
if (COLORS_DIFFER(g_xywindow_globals.color_gridminor, g_xywindow_globals.color_gridback)) {
- glColor3fv(vector3_to_array(g_xywindow_globals.color_gridminor));
+ glColor4fv(vector4_to_array(Vector4(g_xywindow_globals.color_gridminor, a)));
glBegin (GL_LINES);
int i = 0;
}
// draw major blocks
- if (COLORS_DIFFER(g_xywindow_globals.color_gridmajor, g_xywindow_globals.color_gridback)) {
- glColor3fv(vector3_to_array(g_xywindow_globals.color_gridmajor));
+ if (COLORS_DIFFER(g_xywindow_globals.color_gridmajor, g_xywindow_globals.color_gridminor)) {
+ glColor4fv(vector4_to_array(Vector4(g_xywindow_globals.color_gridmajor, a)));
glBegin (GL_LINES);
for (x = xb ; x <= xe ; x += step) {
}
glEnd();
}
+
+ if(a < 1.0f)
+ glDisable(GL_BLEND);
}
// draw coordinate text if needed
if ( g_xywindow_globals_private.show_coordinates) {
- glColor3fv(vector3_to_array(g_xywindow_globals.color_gridtext));
- float offx = m_vOrigin[nDim2] + h - 6 / m_fScale, offy = m_vOrigin[nDim1] - w + 1 / m_fScale;
+ glColor4fv(vector4_to_array(Vector4(g_xywindow_globals.color_gridtext, 1.0f)));
+ float offx = m_vOrigin[nDim2] + h - (4 + GlobalOpenGL().m_font->getPixelAscent()) / m_fScale;
+ float offy = m_vOrigin[nDim1] - w + 4 / m_fScale;
for (x = xb - fmod(xb, stepx); x <= xe ; x += stepx) {
glRasterPos2f (x, offx);
sprintf (text, "%g", x);
// show current work zone?
// the work zone is used to place dropped points and brushes
if (g_xywindow_globals_private.d_show_work) {
- glColor3f( 1.0f, 0.0f, 0.0f );
+ glColor4f( 1.0f, 0.0f, 0.0f, 1.0f );
glBegin( GL_LINES );
glVertex2f( xb, Select_getWorkZone().d_work_min[nDim2] );
glVertex2f( xe, Select_getWorkZone().d_work_min[nDim2] );
}
}
glBegin (GL_LINE_LOOP);
- glVertex2i (0, 0);
- glVertex2i (m_nWidth-1, 0);
- glVertex2i (m_nWidth-1, m_nHeight-1);
- glVertex2i (0, m_nHeight-1);
+ glVertex2f (0.5, 0.5);
+ glVertex2f (m_nWidth-0.5, 1);
+ glVertex2f (m_nWidth-0.5, m_nHeight-0.5);
+ glVertex2f (0.5, m_nHeight-0.5);
glEnd();
}
}
{
Vector3 position;
GetFocusPosition(position);
- g_pParentWnd->GetXYWnd()->PositionView(position);
- g_pParentWnd->GetXZWnd()->PositionView(position);
- g_pParentWnd->GetYZWnd()->PositionView(position);
+ if(g_pParentWnd->GetXYWnd())
+ g_pParentWnd->GetXYWnd()->PositionView(position);
+ if(g_pParentWnd->GetXZWnd())
+ g_pParentWnd->GetXZWnd()->PositionView(position);
+ if(g_pParentWnd->GetYZWnd())
+ g_pParentWnd->GetYZWnd()->PositionView(position);
}
void XY_Focus()
{
+ if (g_pParentWnd->CurrentStyle() == MainFrame::eSplit)
+ {
+ // cannot do this in a split window
+ // do something else that the user may want here
+ XY_Split_Focus();
+ return;
+ }
+
XYWnd* xywnd = g_pParentWnd->GetXYWnd();
XYWnd_Focus(xywnd);
}
void XY_Top()
{
+ if (g_pParentWnd->CurrentStyle() == MainFrame::eSplit || g_pParentWnd->CurrentStyle() == MainFrame::eFloating)
+ {
+ // cannot do this in a split window
+ // do something else that the user may want here
+ XY_Split_Focus();
+ return;
+ }
+
XYWnd* xywnd = g_pParentWnd->GetXYWnd();
xywnd->SetViewType(XY);
XYWnd_Focus(xywnd);
void XY_Side()
{
+ if (g_pParentWnd->CurrentStyle() == MainFrame::eSplit || g_pParentWnd->CurrentStyle() == MainFrame::eFloating)
+ {
+ // cannot do this in a split window
+ // do something else that the user may want here
+ XY_Split_Focus();
+ return;
+ }
+
XYWnd* xywnd = g_pParentWnd->GetXYWnd();
xywnd->SetViewType(XZ);
XYWnd_Focus(xywnd);
void XY_Front()
{
- g_pParentWnd->GetXYWnd()->SetViewType(YZ);
- XYWnd_Focus(g_pParentWnd->GetXYWnd());
+ if (g_pParentWnd->CurrentStyle() == MainFrame::eSplit || g_pParentWnd->CurrentStyle() == MainFrame::eFloating)
+ {
+ // cannot do this in a split window
+ // do something else that the user may want here
+ XY_Split_Focus();
+ return;
+ }
+
+ XYWnd* xywnd = g_pParentWnd->GetXYWnd();
+ xywnd->SetViewType(YZ);
+ XYWnd_Focus(xywnd);
}
void XY_Next()
{
+ if (g_pParentWnd->CurrentStyle() == MainFrame::eSplit || g_pParentWnd->CurrentStyle() == MainFrame::eFloating)
+ {
+ // cannot do this in a split window
+ // do something else that the user may want here
+ XY_Split_Focus();
+ return;
+ }
+
XYWnd* xywnd = g_pParentWnd->GetXYWnd();
if (xywnd->GetViewType() == XY)
xywnd->SetViewType(XZ);
GlobalCommands_insert("NextView", FreeCaller<XY_Next>(), Accelerator(GDK_Tab, (GdkModifierType)GDK_CONTROL_MASK));
GlobalCommands_insert("ZoomIn", FreeCaller<XY_ZoomIn>(), Accelerator(GDK_Delete));
GlobalCommands_insert("ZoomOut", FreeCaller<XY_ZoomOut>(), Accelerator(GDK_Insert));
- GlobalCommands_insert("ViewTop", FreeCaller<XY_Top>());
- GlobalCommands_insert("ViewSide", FreeCaller<XY_Side>());
- GlobalCommands_insert("ViewFront", FreeCaller<XY_Front>());
+ GlobalCommands_insert("ViewTop", FreeCaller<XY_Top>(), Accelerator(GDK_KP_Home));
+ GlobalCommands_insert("ViewSide", FreeCaller<XY_Side>(), Accelerator(GDK_KP_Page_Down));
+ GlobalCommands_insert("ViewFront", FreeCaller<XY_Front>(), Accelerator(GDK_KP_End));
GlobalCommands_insert("Zoom100", FreeCaller<XY_Zoom100>());
- GlobalCommands_insert("CenterXYViews", FreeCaller<XY_Split_Focus>(), Accelerator(GDK_Tab, (GdkModifierType)(GDK_SHIFT_MASK|GDK_CONTROL_MASK)));
GlobalCommands_insert("CenterXYView", FreeCaller<XY_Focus>(), Accelerator(GDK_Tab, (GdkModifierType)(GDK_SHIFT_MASK|GDK_CONTROL_MASK)));
GlobalPreferenceSystem().registerPreference("ClipCaulk", BoolImportStringCaller(g_clip_useCaulk), BoolExportStringCaller(g_clip_useCaulk));
GlobalPreferenceSystem().registerPreference("SI_Colors6", Vector3ImportStringCaller(g_xywindow_globals.color_gridblock), Vector3ExportStringCaller(g_xywindow_globals.color_gridblock));
GlobalPreferenceSystem().registerPreference("SI_Colors7", Vector3ImportStringCaller(g_xywindow_globals.color_gridtext), Vector3ExportStringCaller(g_xywindow_globals.color_gridtext));
GlobalPreferenceSystem().registerPreference("SI_Colors8", Vector3ImportStringCaller(g_xywindow_globals.color_brushes), Vector3ExportStringCaller(g_xywindow_globals.color_brushes));
- GlobalPreferenceSystem().registerPreference("SI_Colors9", Vector3ImportStringCaller(g_xywindow_globals.color_selbrushes), Vector3ExportStringCaller(g_xywindow_globals.color_selbrushes));
- GlobalPreferenceSystem().registerPreference("SI_Colors10", Vector3ImportStringCaller(g_xywindow_globals.color_clipper), Vector3ExportStringCaller(g_xywindow_globals.color_clipper));
- GlobalPreferenceSystem().registerPreference("SI_Colors11", Vector3ImportStringCaller(g_xywindow_globals.color_viewname), Vector3ExportStringCaller(g_xywindow_globals.color_viewname));
- GlobalPreferenceSystem().registerPreference("SI_Colors13", Vector3ImportStringCaller(g_xywindow_globals.color_gridminor_alt), Vector3ExportStringCaller(g_xywindow_globals.color_gridminor_alt));
GlobalPreferenceSystem().registerPreference("SI_Colors14", Vector3ImportStringCaller(g_xywindow_globals.color_gridmajor_alt), Vector3ExportStringCaller(g_xywindow_globals.color_gridmajor_alt));