viewer in progress

This commit is contained in:
Christophe Alexandre 2008-01-17 18:14:02 +00:00
parent c465282355
commit ea0d867b93
3 changed files with 39 additions and 8 deletions

View File

@ -2,8 +2,9 @@ include(${QT_USE_FILE})
include_directories(${HURRICANE_SOURCE_DIR}/src/hurricane) include_directories(${HURRICANE_SOURCE_DIR}/src/hurricane)
set(includes CellWidget.h) set(includes CellWidget.h LayersWidget.h CellViewer.h)
set(cpps CellWidget.cpp) set(exports CellViewer.h)
set(cpps CellWidget.cpp LayersWidget.cpp CellViewer.cpp)
QT4_WRAP_CPP(MOC_SRCS ${includes}) QT4_WRAP_CPP(MOC_SRCS ${includes})
@ -11,5 +12,5 @@ QT4_WRAP_CPP(MOC_SRCS ${includes})
add_library(hurricaneviewer SHARED ${cpps} ${MOC_SRCS}) add_library(hurricaneviewer SHARED ${cpps} ${MOC_SRCS})
target_link_libraries(hurricaneviewer ${QT_LIBRARIES} hurricane) target_link_libraries(hurricaneviewer ${QT_LIBRARIES} hurricane)
install(FILES ${includes} DESTINATION /include/coriolis/hurricane) install(FILES ${exports} DESTINATION /include/coriolis/hurricane)
install(TARGETS hurricaneviewer DESTINATION /lib) install(TARGETS hurricaneviewer DESTINATION /lib)

View File

@ -120,6 +120,23 @@ void CellWidget::paintEvent(QPaintEvent* event) {
redraw(); redraw();
} }
void CellWidget::reframe(double sc) {
reframe(center, sc);
}
void CellWidget::reframe(const Point& c, double sc) {
if (0 < sc) {
center = c;
scale = sc;
screenDx = -(int)rint((GetValue(center.getX()) - (width() / (scale*2))) * scale);
screenDy = -(int)rint((GetValue(center.getY()) - (height() / (scale*2))) * scale);
brushDx = 0;
brushDy = 0;
invalidate();
}
}
void CellWidget::invalidate() { void CellWidget::invalidate() {
invalidRegion = QRegion(rect()); invalidRegion = QRegion(rect());
} }
@ -161,7 +178,7 @@ void CellWidget::redraw() {
for_each_basic_layer(basiclayer, getTechnology()->GetBasicLayers()) { for_each_basic_layer(basiclayer, getTechnology()->GetBasicLayers()) {
if (isDrawable(basiclayer)) { if (isDrawable(basiclayer)) {
painter->save(); //painter->save();
map<BasicLayer*, QBrush>::const_iterator bmit = basicLayersBrush.find(basiclayer); map<BasicLayer*, QBrush>::const_iterator bmit = basicLayersBrush.find(basiclayer);
if (bmit != basicLayersBrush.end()) { if (bmit != basicLayersBrush.end()) {
setBrush(bmit->second, brightness); setBrush(bmit->second, brightness);
@ -171,11 +188,13 @@ void CellWidget::redraw() {
setPen(pmit->second, brightness); setPen(pmit->second, brightness);
} }
drawContent(cell, basiclayer, area, Transformation()); drawContent(cell, basiclayer, area, Transformation());
painter->restore(); //painter->restore();
end_for; end_for;
} }
} }
painter = oldPainter;
invalidRegion = QRegion(); invalidRegion = QRegion();
} }
} }
@ -305,14 +324,14 @@ void CellWidget::drawLine(const Unit& xo,
int iyo = getScreenY(GetUnit(dyo)); int iyo = getScreenY(GetUnit(dyo));
int ixe = getScreenX(GetUnit(dxe)); int ixe = getScreenX(GetUnit(dxe));
int iye = getScreenY(GetUnit(dye)); int iye = getScreenY(GetUnit(dye));
painter->save(); //painter->save();
if (painter->pen() == Qt::NoPen) { if (painter->pen() == Qt::NoPen) {
painter->setPen(painter->brush().color()); painter->setPen(painter->brush().color());
} }
//painter->moveTo(ixo, iyo); //painter->moveTo(ixo, iyo);
//painter->lineTo(ixe, iye); //painter->lineTo(ixe, iye);
painter->drawLine(ixo, iyo, ixe, iye); painter->drawLine(ixo, iyo, ixe, iye);
painter->restore(); //painter->restore();
} }
} }
} }
@ -548,3 +567,7 @@ bool CellWidget::isDrawable(BasicLayer* layer) const {
return (layer->GetDisplayThreshold() <= scale); return (layer->GetDisplayThreshold() <= scale);
} }
double CellWidget::getScale() const {
return scale;
}

View File

@ -10,11 +10,14 @@ using namespace H;
class CellWidget : public QWidget { class CellWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
CellWidget(Cell* cell, QWidget* parent=0); CellWidget(Cell* cell, QWidget* parent=0);
double getScale() const;
void redraw(); void redraw();
void reframe(double scale);
void reframe(const Point& c, double sc);
protected: protected:
void paintEvent(QPaintEvent* event); void paintEvent(QPaintEvent* event);
private: private:
@ -26,6 +29,7 @@ class CellWidget : public QWidget {
QPainter* painter; QPainter* painter;
QColor backgroundColor; QColor backgroundColor;
QColor foregroundColor; QColor foregroundColor;
Point center;
double scale; double scale;
int screenDx; int screenDx;
int screenDy; int screenDy;
@ -34,6 +38,9 @@ class CellWidget : public QWidget {
map<BasicLayer*, QBrush> basicLayersBrush; map<BasicLayer*, QBrush> basicLayersBrush;
map<BasicLayer*, QPen> basicLayersPen; map<BasicLayer*, QPen> basicLayersPen;
void fitToContent(unsigned screenMargin = 5);
void scroll(const Unit& dx, const Unit& dy);
void drawContent(const Cell* cell, const BasicLayer* basicLayer, const H::Box& updateArea, const Transformation& transformation) const; void drawContent(const Cell* cell, const BasicLayer* basicLayer, const H::Box& updateArea, const Transformation& transformation) const;
void drawContent(const Instance* instance, const BasicLayer* basicLayer, const H::Box& updateArea, const Transformation& transformation) const; void drawContent(const Instance* instance, const BasicLayer* basicLayer, const H::Box& updateArea, const Transformation& transformation) const;
void drawSlice(const Slice* slice, const BasicLayer* basicLayer, const H::Box& updateArea, const Transformation& transformation) const; void drawSlice(const Slice* slice, const BasicLayer* basicLayer, const H::Box& updateArea, const Transformation& transformation) const;